[pulseaudio-commits] [SCM] PulseAudio Sound Server branch, master-tx, updated. v0.9.19-474-gebf2116
Lennart Poettering
gitmailer-noreply at 0pointer.de
Sun Feb 21 12:30:48 PST 2010
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
discards 7dbb2ad9b0ac8a551ebaa00dbc38753705b63ec2 (commit)
discards f36690fc3fc7d91bd8c80c9d4dcef77b9fbac324 (commit)
discards dde46025935f9efca518fe3adb6b821e7f677a3b (commit)
discards 32751063dc099b62bb6017843527ece2cf94290b (commit)
discards 49d4d21125ca5efa04a5262741f38537387fec2b (commit)
discards 8f5c6609406a86ef3c0806cabc9380c628908916 (commit)
discards 44c15206b450635d1643f74afb6755b7479da3ea (commit)
discards 5c128243b33ad27f0416e3e4567c01809daa45e3 (commit)
discards 3fe38e82ac84e5dbd58bcce2342a9d1fabb71bfb (commit)
discards 6fbc4d9f22becdbd86b63cfd592670908cca4d19 (commit)
discards f4787871da2d1452b217e900caa34a3718f4aa1f (commit)
discards 18a3b23c50066ce12137e62a476e698d81a6eae2 (commit)
discards e09a5ed2eb023446e323e136ee9ffe1cba422573 (commit)
discards 7277359e869bea5b4d574c204005764c225af779 (commit)
discards 0f964cd232512dbb099e94615733bc10552936fe (commit)
discards cdf91f7988c62b7ae157e6d29b28d6d4ab5f2676 (commit)
discards f3a24fdb8e5989f1446877cf8cd08a3a92b24881 (commit)
discards d512bb2e49582fa5a3eb9a953bd9f33b30e6c8c4 (commit)
discards 499ecb906cc2bf73f72ccf7ac31e195b7b055b30 (commit)
discards 0913c1379d7619137dbd53c271f7f3b90a9c5c54 (commit)
discards b62dd5bd3a393ba6278dc9c7c79b73f78380ee7a (commit)
discards 75aac3221e2c5da3a6b999e599a1d82f30ac9447 (commit)
discards 523af82edf9c43d45e85dbc0eb573432736bd1e1 (commit)
discards 2e8eaa9ee93a4cfb0362b6acaeab697e5d876b40 (commit)
discards 234ebc9e45554d0954d691d3cabfa33e52ab2345 (commit)
discards 65e4453b1e057cf9e2b4be17300ae4a670491a21 (commit)
discards daba81e9de8db1684fb0d1e443c85e43a9fd9fb5 (commit)
discards 800d9a570bcc4b6e41ea14a7f715ed700cb0dc33 (commit)
discards d2bf701a2086bbe44084512cd505c9341061dccd (commit)
discards 71ec6a82030f42ca1818a4347e134941c1dbd0e0 (commit)
discards 19d805ce23f6b592ee17a1112466330db332ea3f (commit)
discards ce986440984c74e5804b972655fd649d287b4eec (commit)
discards 04bb7cb8f794e25f69ccddfd3140dd242972aaec (commit)
discards 231108643c6a7d33639a9ade4f7fe2d577950784 (commit)
discards 20eaa91f34b9495614dfb79cb89b6b317ad18611 (commit)
discards c2147160cbf84956a6a6c78d66f995d7a00051c0 (commit)
discards 2fb60debc4c5942926adb318746d1acc6d2120c9 (commit)
discards e0535e5fcec6e48081ce3a603e6fa8bd5234bdff (commit)
discards f24b78e3dbbc9deb1a9f98b139deb73b0313a850 (commit)
discards 3d355cd60cd79bbf860be0397d07abf0a7072650 (commit)
discards c1342ce8d2e6cfe5a38be999ab4e4955dd166034 (commit)
discards 93c241503d0e9209f34b49dcab37428df3f904f4 (commit)
discards ecaf9718c450a0e0e71ecf3cab42cb3bbc447f6f (commit)
discards 05ccf10d967853c944268c7e5fa408edd3958124 (commit)
discards 7d5d76eaed050cb03d99869b51b5a3a709f28f06 (commit)
discards 151c746286ba8c1bfa20cf472b58b949d729be75 (commit)
discards 4392888939197ae7008ebcefdf34b713e190de4d (commit)
discards e4259e77a140695819a9ec7fa8d6b7ee49ac2309 (commit)
discards 99dcbc7766ea655eb8c9ce4397eb8deccdd6032e (commit)
discards 6d8d0ff878f948452a720b1050bf49774a8d0eaa (commit)
discards 037df850775ac1eb2930aa4c48d59576a50b3927 (commit)
discards 80e43f69fa71170fbdd54d0bba53cafb1fb952fd (commit)
discards 45409d557d85fe5458b1409b2f475a07a47e4901 (commit)
discards 662986febfdd53d00341b636d1826db20c73dc29 (commit)
discards 6e8c64f9528475f477d1c696030b67be46cfe0e2 (commit)
discards 6614be93b4b618562dcd6eb754a7fca7fd7fc424 (commit)
discards 497b98110266ed2c5d28851f6624c293916b91c3 (commit)
discards 55ccda658f11f239f6cdec860e6c52ac056a90d2 (commit)
discards a620a39eeb2d5da43c76ab01136bdfc6bb02ee35 (commit)
discards 72ac187e12bd0f0b4891f043098825cd58b355a1 (commit)
discards 5331e60b059310caade9b98bad3d79c64952085c (commit)
discards 3aec58049e04b582e435170b7589a9f06991bb43 (commit)
discards e8bab13c819c34692bd4e3288866ba54f2256dfc (commit)
discards 8cfd01e41ec6309c848fb71a9b85d9a87842aaab (commit)
discards 7e0bccfe6fc99a129678a846dcbb2d69016488df (commit)
discards fc74fc1cd89e35d1307575f29ef4803ef7f2fe9c (commit)
discards f2f37b50f6af4bb89b0e740c8403bc7f8dd0ab0a (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (7dbb2ad9b0ac8a551ebaa00dbc38753705b63ec2)
\
N -- N -- N (ebf2116810fa8f18baf1fa693eaf35a8a83109ee)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
- Log -----------------------------------------------------------------
ebf2116 i18n: run make update-po
cde8044 i18n: update LINGUAS
f7415e3 l10n: Updates to Chinese (Taiwan) (zh_TW) translation
4df917c l10n: Updates to Chinese (Taiwan) (zh_TW) translation
3e463e0 l10n: Updates to Chinese (Taiwan) (zh_TW) translation
c7b284b l10n: Updates to Chinese (Taiwan) (zh_TW) translation
f9af65b l10n: Updates to Chinese (Taiwan) (zh_TW) translation
8b27e2c l10n: Updates to Russian (ru) translation
acb1773 l10n: Updates to Russian (ru) translation
a8a5c39 l10n: Updates to Russian (ru) translation
c72c90b l10n: Updates to Russian (ru) translation
fd5b87e l10n: Updates to Russian (ru) translation
4abfa17 l10n: Updates to Russian (ru) translation
dd8f33d l10n: Updates to Russian (ru) translation
dc1872a l10n: Updates to Russian (ru) translation
d2ec7e8 l10n: Updates to Russian (ru) translation
43167fa l10n: Updates to Russian (ru) translation
85194fc l10n: Updates to Russian (ru) translation
e626857 l10n: Updates to Russian (ru) translation
f8d1e26 l10n: Updates to Russian (ru) translation
4e2e32b l10n: Updates to French (fr) translation
c47773a l10n: Updates to French (fr) translation
a3a9c17 l10n: Updates to Greek (el) translation
8ace563 Sending translation for po/he.po
c3a14cb Sending translation for Finnish
2a322d4 Sending translation for French
2d5f61b Sending translation for Assamese
aae0ede Sending translation for Russian
9fe8850 Sending translation for Kannada
b33c571 Sending translation for po/zh_TW.po
2499566 Sending translation for Japanese
c118a3d Sending translation for Marathi
ef05cf7 Sending translation for Japanese
da2da7a Sending translation for Malayalam
257eabf Sending translation for Chinese (Simplified)
e6ffac7 Sending translation for Punjabi
8c2c80a Sending translation for Bengali (India)
381be64 Sending translation for Japanese
4f77643 Sending translation for German
f4e18f7 Sending translation for Gujarati
7275959 Sending translation for Oriya
46c5919 Sending translation for Tamil
5c9c4e1 Sending translation for Hindi
3cc8d51 Sending translation for Telugu
3bfaa87 Sending translation for Finnish
68841d0 Sending translation for Finnish
5778b16 Sending translation for Finnish
b18e123 Sending translation for Serbian (Latin)
b54ea17 Sending translation for Serbian
f0382d1 Sending translation for Greek
667126b Sending translation for Brazilian Portuguese
ba19d9b Sending translation for Brazilian Portuguese
f771b8a Sending translation for Hungarian
eccff7b Sending translation for Hungarian
abdd7b4 Sending translation for Italian
df85322 Sending translation for Czech
f1436b8 Sending translation for Hungarian
02a69d8 Sending translation for Hungarian
3f1feff Sending translation for Hungarian
1151e15 Sending translation for Hungarian
63c52c7 Sending translation for Dutch
e7ec9d5 Sending translation for Hungarian
16e9ff2 Sending translation for Ukrainian
e53a24d Sending translation for Spanish
0f68e0f Sending translation for Dutch
9bda558 Sending translation for po/hu.po
4c2adfc Sending translation for Czech
0a7086d Sending translation for Polish
5c13d86 Sending translation for Dutch
0a7fccd pacat: pass buffer_attr to recording streams too
342e064 bluetooth: add HFP Gateway support
edf5f5b bluetooth: improve dbus logging
323f0ad build-sys: fix check for pthread_setaffinity_np()
2b2149d build-sys: Add missing profile and alsa-mixer/paths to src/Makefile.am
609a005 pacmd: don't enter busy loop when reading from stdin very early
83eb8af daemon: first take name on the bus, then return in starter process
ea29b11 scache: when playing a sample from the cache make sure not queue them up when the sink is suspended
3f1c90b sample-cache: use the sample name as unmodified fallback in the properties when playing a sample from the cache
857ff2c stream-restore: be a little bit more verbose why we don't reastore a sink
7098d60 proplist: explicitly mention a role 'test'
534def2 vala: fix wrapping of port setting calls
27427c1 channelmap: Use "Subwoofer" as pretty name for LFE
c25665e vala: fix definition of the GLib mainloop adapter
57e0e2c vala: fix definition of INVALID_INDEX
c2079d7 shm: don't complain about missing SHM segments
f9f2d6f pacmd: store away fd type
d57ba82 pacat: always fully fulfill write requests
b9bcc7c fdsem: be more verbose when reading from eventfd fails.
ac76dbd dbus: first restart timer, then dispatch it
69ddfaf padsp: emulate /dev/audio, too
80093c9 build-sys: add gobject to build dependencies
abfd2aa alsa: use default output port names
dfa00bf alsa: cover "Internal Mic" elements
67e3925 alsa: cover 'Shared Mic/Line in', 'Analog Source'
14e4369 alsa: cover "Desktop Speaker" mixer elements
f6f957b Revert "pacat: Don't use any buffer attr if we don't set any latency/process time params"
2c631df pactl: implement pactl subscribe
3e6293f virtual-sink,source: enable virtual-source and virtual-sink
bffd21f virtual-source: boilerplate virtual source for PCM processing on inputs
9ffb4f3 virutal-sink: boilerplate virtual sink to add PCM processing
ff2091b pacat: Don't use any buffer attr if we don't set any latency/process time params
66cfa72 native: rework handling of seeks that depend on variables the client does not know anything about
d090995 client: implement $PULSE_LATENCY_MSEC
fb55798 pacat: allow configuration of latency in msec
544fa0b udev: use ID_MODEL_ENC instead of ID_MODEL if it is set
4315f27 alsa: cover bass boost mixer element
63ebd05 udev: rework modem detection a bit
c2ab61c udev: handle sound cards with both modem and audio properly
7b89c85 alsa: Cover the 'Int Mic Boost' element.
7f6531d alsa: cover Input Source:Int Mic
54025c9 cpu: check for CMOV flag before using this intsruction in assembly
c88e468 alsa: ignore volume changes from the hw if we are not on the active console
ce7bd05 udev: make sure we get events only for sound devices
f732c23 log: add an easy way to disable log rate limiting
41ce7cb bluetooth: fix invalid memory access
7f7455b once: make once related variables volatile
66ddeed udev: don't forget to unref devices we are not interested in
9ac12b7 client: verify connection state in pa_stream_connect_upload()
7ab9bea client: detect forking in sample cache API, too
e8a2d12 bluetooth: don't hit an assert if latency is queried for a stooped recording stream
21250ff bluetooth: destruct stream only if it is not already destructed
3455478 core: make sure we always return a valid memblock in sink_input_pop() callbacks
699233f native: fix request counter miscalculations
66dbca1 dbus: remove filter functions only if they were actually set before
5e2a80c bump soname
63abcc8 build-sys: bump soname
cd55955 core: Fix macro typo - PA_SINK_IS_LINKED -> PA_SINK_INPUT_IS_LINKED
6fd2d08 stream-restore: Clear the save_sink/save_source flags on apply_entry.
2f86ba4 osx: don't build the once-test binary on OS X
57b0397 client.conf.in: Typo. s/a/are/
0ac13f1 man pages: correct formatting/markup of options
f250179 shm: explicitly mark shm seg for MAP_NORESERVE to request overcommiting no matter what
ea8927f Typo. s/a/are/
62bfb51 client: include dolby channel names in comments
1bfa1c3 start: we don't need to check for $PULSE_SERVER anymore
2465cfa native: when run in system mode, do not look for fallback port
76089b1 native: fallback to another port if the default port is taken
21cbcc1 client: introduce auto-connect-display= following the scheme of auto-connect-localhost=
3d6cc02 client: introduce auto-connect-localhost= option in client.conf
4b1679e Merge remote branch 'tanuk/fixes'
ba255bf tests: add pa_once_xxx() test
f1d1447 daemon: Don't autospawn if a server address is explicitly configured.
25435bf sink-input: Replace a tab indentation with spaces.
cc82553 idxset: Fix _get_by_data() comment.
aa93484 core: volume ramping fix
6dfb1ee Merge remote branch 'zonque/topic/osx'
937c587 fix a number of warnings
6faf383 headers: Some trivial fixes for some documentation typos
0e47065 Subject: rtpoll: better support for DEBUG_TIMING logs
a282ead Fix typo in log message: s/may no be/may not be/
cb38d4e alsa: add profile set for M-Audio FastTrack Pro USB
d3c71c9 udev: Use SOUND_CLASS instead of SOUND_FORM_FACTOR when checking for modem
c5fdbea threaded-mainloop: Properly initialise m->n_waiting_for_accept to prevent deadlock
a63cf05 More src/pulsecore/cpu-arm.c FTBFS fixes
e5e432f Fix the following warnings (which now cause buildd failures in Ubuntu 10.04):
f452c6c fix a number of warnings
0ccc7af osx: add native zeroconf implementation via Bonjour
7732421 CoreAudio: add audio device module
a23f5cf CoreAudio: add device detection module
28a73ad hack around another OS X bug: recv() with MSG_PEEK does not work
17d3446 poll() is totally broken on Mac OS X
962164a src/Makefile.am: add specific OS_IS_DARWIN files
a46ddfe core-rtclock.c: tweak OS_IS_DARWIN constraints
76acaa9 configure.ac: add DARWIN_OS variable
f9b03d3 Merge branch 'master' of git://0pointer.de/pulseaudio
e8a5746 Add a configure option to change 'udevrulesdir'
978d33b Mark shared variables as volatile
f42022a stream-restore: At startup, create dbus entries only for valid database entries.
00debf4 stream-restore: Add a missing pa_xnew0() call in handle_add_entry().
a6b7ac6 stream-restore: Fix a few assertion misuses with the D-Bus code.
e785f72 dbus: Add a missing break statement in handle_message_cb().
7b1b68c dbus: Handle the cases when a non-existing interface is detected in an incoming message.
4c793cf libpulse: Store pa_stream pointers to hashmaps instead of dynarrays.
1b2cbe9 Merge branch 'master' of git://0pointer.de/pulseaudio
1184666 Merge remote branch 'tanuk/master'
d5d488e Merge branch 'master' of git://0pointer.de/pulseaudio
0fcdc3d Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
c815441 Merge remote branch 'phish3/master'
675957b Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
5aa5c6c freebsd: implement pa_get_binary_name
4eb65a0 src/utils/qpaeq: added more friendly error messages to common errors
f69e81f Makefile.am: added qpaeq to installed scripts
fe0b393 Simplify Makefile.am handling of ALSA-related files.
62278b4 Avoid using devname as a variable name.
d963998 Rename all the signal parameters and variables to something more explicit.
2caf59d Since now we have FreeBSD atomic operations, don't require libatomic_ops.
ca637e5 Simplify handling of NetBSD atomic ops discovery.
40aee60 Merge branch 'master' of git://git.0pointer.de/pulseaudio
77c6b69 remove .py extension from qpaeq
fc4cf27 Merge remote branch 'phish3/master'
f5d8aef freebsd: fix atomic ops implementations
41853cc added qpaeq script for GUI equalizer control to src/util
5150a10 Check for stow using AC_CHECK_PROG rather than type -p.
4923f3c Include sys/filio.h if present; this makes use of FIONREAD on Solaris.
09a58b6 Don't declare the variable l if FIONREAD is not defined.
71ebbfb Fix build on Solaris: pass the third parameter to pa_cloexec_open.
70ba21e Move the platform-specific defines after the compiler has been found.
6daf112 alsa: fix minor sampling rate deviations before adjusting the buffer size
bd3467f alsa: fix log output when the audio device refuses to give us again the same period settings we had before
ba95b19 pulse: ask for timing updates both *before* and *after* triggering a stream state change so that in the STARTED/UNDERFLOW callbacks we accurate transport latency information
f05ae35 pulse: delay smoother update only when unpausing, not when pausing, since we don't want the timer to advance when we are supposedly already paused
a3b5a94 pulse: try to fix inaccuracy with uncork timing for streams that are created in corked state
b8acf55 daemon: complain if user passes too many arguments
493d8b2 module-equalizer-sink: add latency of output_q and input_q to get latency calculation
1178f61 module-equalizer-sink: switch back to reference dsp implementation - cpu usage doesn't really change and there may be a bug in the vectorized version
c6c933b module-equalizer-sink: (re)added output memblockq commented out timing debug statements
9708ecd Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
9033140 rygel: fix itemCount property for sources
eb55626 build-sys: Fix missing trailing slash in 14eaf2
14eaf24 build-sys: Make sure all alsa path config files are installed
dad36ac device-manager: Update docs version -> 0.9.20
ed7642e Merge branch 'master' of git://0pointer.de/pulseaudio
2294642 core: make cpuid code compile cleanly with 32bit PIC
d9b5bbc core: adjust volume only when there is actually a memory block
f3866f2 protocol: use the right sample rate for sources
9e45f19 device-manager: Update docs version -> 0.9.20
f202af1 ramping: minor cleanups
4d62f15 Merge remote branch 'origin/merge-queue'
721e32b jack: never try to autoconnect to MIDI ports
38a03c1 man: fix build with --disable-manpages
7793da3 lirc,mmkvd: added module parameters volume_limit, volume_step
d2c5935 volume: add pa_cvolume_inc_clamp function
53b046d alsa: disable timer-based scheduling inside a VM
c079cee daemon: during startup say whether we run in a VM
642c69b core-util: add call to detect if we are called from within a VM
19516d4 alsa: introduce more standard path names
83b181f alsa: cover 'Analog Output' control
21ffcd5 Merge branch 'master' of git://0pointer.de/pulseaudio
7938442 Merge remote branch 'phish3/master'
6839ef6 alsa: create a seperate mixer path for Speaker elements
73a4f4f alsa: leave other headphone control enabled if possible
591ade1 alsa: lower priority for Headphone2 path
73d9d31 alsa: cover Input Source:AUX IN
220ac0a alsa: cover Headphone2 mixer element
430e8e2 alsa: cover 'Digital Input Source' element
3e115a9 alsa: cover Mic Jack Mode element
8e94f65 daemon: make sure pa has its own session and process group, but is not its leader so that we cannot acquire a tty ever
c4e276e Merge branch 'master' of git://0pointer.de/pulseaudio
2dc37e1 bluetooth: do not hand out access to devices that are not fully configured yet
b83d7a2 configure.ac: enable check for CoreAudio
5c57650 daemon: realpath segfault fix
542fa46 Mac OS X: add semaphore implementation
b04fe9b Wrap clock_gettime and friends
65e8078 X11: attach X11 properties to Screen, not Display
366ab96 git: ignore kde related files
056930c svolume: fix MMX error
8a49514 sink: simplify silence checks
aa8ce5b daemon: don't crash if pa_realpath() fails
a82c6b0 socket-util: drop redundant casts
75f7a97 socket-util: allocate at least sizeof(sockaddr_storage) space
168be38 use pa_fopen_cloexec() where applicable
88b7295 tdb: use O_CLOEXEC if available
752727a core-util: introduce pa_fopen_cloexec()
a698ee3 core-util: make sure to enable FD_CLOEXEC unconditionally to cope with kernels that silently accept but ignore O_CLOEXEC
65e7bc1 use cloexec wrappers wherever applicable
9c1a989 core-util: introduce FD_CLOEXEC wrappers for open/socket/pipe/accept
d83dd5b module-equalizer-sink: add premultipliar to sse2 dsp_logic implementation
ebaca56 module-equalizer-sink: try to limit buffering to mempool's max_block_size and disable debug output
5c82dd6 drop redundant alloc call
754644f Merge remote branch 'origin/master'
e7e4e44 simd: update test cases
2edb4df smoother: add comments about optimization recommendations from Jason Newton
f27a506 libpulse: introduce PA_STREAM_RELATIVE_VOLUME
546bcf3 protocol-native: if a client set volume/mute/device store it since it is user input
2501687 libpulse: explain semantics of pa_stream_connect_playback() in more detail
27c6a80 protocol-native: declare that user configured volumes are always absolute
78984e4 pactl: format cookie a little bit nicer
8678f56 pactl: include information about client context in pactl stat output
7c55d6e clients: drop definition of BUFSIZE which is unused
4538523 libpulse: introduce pa_context_get_tile_size() call
744490a memblock: decrease tile size to 64k again
9c61465 Merge branch 'master' of git://0pointer.de/pulseaudio
e9ccc61 module-equalizer-sink: drop source executable permissions configure.ac: add enable/disable + summary line for fftw
16e77f3 module-equalizer-sink: *fixed SSE2 optimized dsp logic (default if available) *cleaned up whitespace formatting (again)
ff903ef module-equalizer-sink: fixed equalizer state save/restore
d25b9ea module-equalizer-sink: drop source executable permissions configure.ac: add enable/disable + summary line for fftw
bec67cd device-manager: Fix compiler warning.
8f2289c module-equalizer-sink: *fixed SSE2 optimized dsp logic (default if available) *cleaned up whitespace formatting (again)
781eb59 module-equalizer-sink: fixed equalizer state save/restore
e064d27 Merge branch 'master' of git://0pointer.de/pulseaudio
e11cd13 Merge branch 'master' of git://0pointer.de/pulseaudio
c9375aa libpulse: add missing includes
e5ac4b5 buil-sys: fix build w/o DBus
0ff2a6b device-manager: Rather than flagging the device as available, just include the sink/source index with PA_INVALID_INDEX meaning unavailable
ce033e7 dbusiface-client: Fix the destructor (stop leaking stuff).
0b388bf Merge branch 'master' of git://0pointer.de/pulseaudio
8ec304d Fix build when using -fweb, accept both register and memory constraints.
f55357c Add check for FFTW, and add option to disable it at build-time.
b64b6bb Fix out-of-tree builds when dbus module is enabled.
d0b478e Merge remote branch 'coling/history'
9f226d2 Merge remote branch 'phish3/master'
692ce73 Merge remote branch 'tanuk/dbus-work'
b3592a1 position-event-sounds: never position test sounds in space
c96d2d1 alsa: disable period event only with tsched=1
7b682c9 loopback: Setting latency of module-loopback
40c1ca7 bluetooth: don't set auto_connect flag when discovering bt devices
9d7a27e device-manager: Play nice with module-stream-restore.
cc31d7c device-manager: Make use of PA_IDXSET_FOREACH when applying entries.
fdbb550 device-manager: Keep track as to whether or not the user specifically renamed the device.
6468dcf device-manager: No need to check the version after calling read_entry()
019331d Merge branch 'master' into dbus-work
e895200 module-equalizer-sink: disable active profile name restoration as something in pack/unpack is funky and I don't have time for a proper fix
97056d2 module-equalizer-sink: *added client initiated sync support for filter state *added note of possible unstable behavior with next-power-of-2 sample rate calculation
a434f4c module-equalizer-sink: resyncing with head and fix invalid writes * pa_log->debug for default equalizer notification * partially fixed infinite rewind bug * set max_request to window_size first iteration * swap order inside ROUND_UP calls * resync pa_sink_input_new changes * change pa_sample_clamp parameters to be correct to fix invalid writes * reenable proper reset logic + proper request size
50db81c device-manager: Fix typo in module loading script.
42e28ce device-manager: Add some scripts that are only run under KDE to load/initialise module-device-manager with routing turned on.
20eedb2 device-manager: Misc fixes to co-exist with other stream management/routing modules.
3a20cf0 device-manager: Misc fixes.
b8a6436 device-manager: Fix the writing of the database when priority doesn't change.
7633bb8 device-manager: Add extra debug messages
f9b2d65 device-manager: Change the prefer/defer options to a single 'reorder' command.
8977abd device-manager: Don't notify clients on every subscription (it happens all the time).
bbf6701 device-manager: Save icon and report current availability over protocol.
8b2cc4d device-manager: Expose the priority lists in the protocol extension.
4dedba7 device-manager: Add a function to dump the database which we do whenever we save it (and on startup)
1d43230 device-manager: Reroute streams when they change allowing the media.role to be updated mid-stream.
d3460e3 device-manager: Refactor the routing method to allow the routing of a single stream
8d0787c device-manager: More sensible names for internal functions
25f7534 device-manager: Reroute the streams on startup and update our cache on enable.
0016b5e device-manager: Keep a cache of the highest priority devices for each role.
ce0b2bd device-manager: Fix the database write mode
1e2d236 device-manager: Update exports
9e44797 device-manager: Some efficiency and safety tweaks
e47f385 device-manager: Allow the routing component to be turned on via a module argument as well as via protocol extn.
4fb9daf device-manager: Remove unused variables
1d04c35 device-manager: Set the most appropriate sink/source when new streams are created
74c1c27 device-manager: Add routing functions that are triggered when sinks/soruces are added/removed.
678d8e9 device-manager: Add a function to get a list of the highest priority device indexes for each role.
ca68105 device-manager: Remove unneeded logic for checking for and (un)loading module-stream-restore. We can co-exist
ed8af7c device-manager: Rough framework (slots etc.) for handling routing.
faae33d device-manager: debug and comments
e589f38 device-manager: Fix the freeing of the datum on prefer/defer.
1802500 device-manager: When a new device is encountered, initialise the priority list to an appropriate value
a64f0f7 device-manager: Let subscribed clients know when something changes.
f8ec8f3 device-manager: Change the write function to a rename function.
aebe478 device-manager: Provide a method for prefering/defering a device.
95f2839 device-manager: Fix copy+paste code that looped over the tagstruct when not necessary
103897a device-manager: Provide a way for clients to enable/disable role-based device-priority routing.
9357bdf device-manager: Update docs version -> 0.9.19 (predicted)
464e1a8 device-manager: Fix copy+paste leftover
aa5d56b device-manager: Only store and save details for non-monitor sources
42b30e1 stream-restore: Preventative initialistion to NULL
6497938 device-restore: Fix the application of an entry to allow changing the name of devices.
40e97eb device-manager: Fix tagstruct description extraction (copy+paste blunder)
70accbb device-manager: Link native protocol library.
0b3b037 device-manager: Export device-manager extension functions
93c3c65 device-manager: Fix indentation
37e82ce device-manager: Add an untested protocol extension.
bc869b5 device-manager: Add a new module to keep track of the names and descriptions of various sinks.
3053bad module-equalizer-sink: resync with ladspa parent sink
263b683 module-equalizer-sink: fix improper usage of pa_modargs_get_value_boolean for u->set_default
f5ceed8 module-equalizer-sink: added server side persistance of profile names
b028e4e module-equalizer-sink: per-channel filtering support + profiles, easier default configuration
2f6fd32 module-equalizer-sink: fixed a bug w/ new zero-latency input scheme (that was an interesting/cool bug!)
735c8ab module-equalizer-sink: added support for preamp
cd54ecd module-equalizer-sink: drop old macros for new library based ones
ab0e20a module-equalizer-sink: fixed timeval initialization
7bd7ce6 module-equalizer-sink.c: swapped order of attach_within_thread and set_max_request within sink_input_attach_cb
07cd6a4 module-equalizer-sink.c i->sink -> i in pa_get_sink_max_request*
1c1a812 module-equalizer-sink exchanged improper usage of memblockq_peek'd memchunk for silence block dropped unneeded function prototypes changed mround to be slightly more elegant __restrict__ -> restrict for c99 removed unneeded pa_aupdate_swap calls first_iteration -> pa_bool_t cleaned up some usage of pa_malloc0 where pa_new0 was more appropriate cruft removal, whitespace fixes and reordering of variables
0e6711d module-equalizer-sink: merging in upstream changes whitespace fix and fix for first iteration un-windowing
38d608a module-equalizer-sink: reworked processing so we don't have input->output delay of R samples
8c2f976 module-equalizer-sink: fix for peek returning a null memblock pa_log -> pa_log_debug for fft size updated module description fixed a comment in dbus error for incorrect x positions
684ad6d module-equalizer-sink: proper fix for pa_xmalloc(0) given that 0 is illegal fix coefficients in case there's no resume state loadprofile now signals filterchanged
1e3c7d3 module-equalizer-sink: dbus: eliminated some redundant code in dbus handlers/getall switched filter back to being a property signals for changed profiles, added/removed sinks, filter updates and sink reconfigurations fixed timing routines
4231ac4 module-equalizer-sink: reverted buffering logic back to how the ladspa sink did it
857eea0 module-equalizer-sink: add lennard's fix for piggy-back sinks in pop_cb fixed some tsched issues
144f1c4 module-equalizer-sink: dbus properties and manager so that multiple sinks can be loaded and mixers can be equalizer-sink aware functionality to seed new filters quickly (rteq guis) profile support extra checking in client->server dbus messages
66a6cc6 module-equalizer-sink: added support for suspend/resume of filter coefficients unregister the correct dbus interface. made equalizer state file sink index dependent expanded dbus properties whitespace
8934c31 module-equalizer-sink: added dbus support removed cruft from inherited from ladspa module and improved clarity switched dsp processing to reference implementation until project is more mature tsched=0 seems to help with the micro-dropouts/crackling! oh my! reformatting/spaces
c7fcc9c module-equalizer-sink: removed liboil added sse2 optimized dsp logic implementation cleaned up a bit
702480a module-equalizer-sink: first commit of a working state (cpu speed dependant) added noop processing for filter debugability
09d9096 module-equalizer-sink: simplified sink_input pop callback and introduced new variables that simplify different strategies.
cf8331a module-equalizer-sink: trying new buffering strategies
d4fe5bf module-equalizer-sink: attempt different buffering strategy
182c9c7 module-equalizer-sink: added more assertions to aid in debugging
2e11906 module-equalizer-sink: added temporary debugging output to track filter output removed dead code only a small amount of crackling remains
4315550 module-equalizer-sink added src/Makefile.am: added module-equalizer-sink
94aa909 Merge branch 'master' of git://0pointer.de/pulseaudio
c1e59f7 Merge branch 'master' of git://0pointer.de/pulseaudio
bebaa49 Merge branch 'master' of git://0pointer.de/pulseaudio
5871319 dbus-protocol: Implement argument type checking for normal methods.
8a28e5d dbus: Change IsMuted property names to Mute.
411feae dbusiface-core: Add signals FallbackSinkUnset and FallbackSourceUnset.
0ad2d55 Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
0e09663 dbus: Do message argument type checking early, centrally.
7bc8a79 Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
219f750 dbus: Finish the Client D-Bus interface.
11fcc8c dbusiface-stream: Only send stream event signals from the right D-Bus objects.
edf8010 dbus: Make sure that subscription callbacks don't try to access removed objects.
3e0e685 dbus: Save one level of identation by returning early.
2f3fc2f Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
3025645 dbusiface-module: Implement the Module D-Bus interface.
57886ff dbus-protocol: Print a debug line whenever interfaces are unregistered.
7049b3c modargs: New function: pa_modargs_iterate().
187c4f3 proplist: A couple of documentation fixes.
1e4e26c proplist: Return early from pa_proplist_equal() if the pointers are equal.
179f849 dbusifaca-device: Adapt to the changed pa_sink_get/set_volume() interface.
292d6dc Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
b4e0d5d dbusiface-sample: Implement the Sample D-Bus interface.
3de210b dbusiface-core: Assert that _add/remove_interface calls succeed.
636dbc3 dbusiface-core: Use the PA_IDXSET_FOREACH macro.
8e6664f dbusiface-core: Split some overly long lines.
36dc61a dbusiface-stream: Finish the Stream D-Bus interface.
70ff96b dbusiface-device: Save one level of identation by returning early.
b528715 dbusiface-device: Fix argument reading in handle_suspend().
bce6af1 dbusiface-device: Use a single if-else section instead of ternary operator overuse.
150cd16 dbusiface-device: Split some overly long lines.
efec274 dbusiface-core: Two new functions: pa_dbusiface_core_get_sink/source().
a10e836 dbusiface-core: New function: pa_dbusiface_core_get_client_path().
f48684e namereg: Revert default device handling back to the upstream version.
bcaba0b Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
2bb3eef dbusiface-stream: Implement about a half of the Stream D-Bus interface.
f0db081 dbusiface-device: Free the copied proplist.
a72bba1 dbusiface-client: Fix indentation.
c7f4ed3 dbusiface-client: Fix the interface name.
9ed25d7 dbusiface-client: Implement the properties of the Client D-Bus interface.
f663d13 dbusiface-core: Two new functions: pa_dbusiface_core_get_playback/record_stream_path().
91f626f dbusiface-device: Implement the Device and DevicePort D-Bus interfaces.
22ab141 dbus-protocol: Use pa_hashmap_remove() instead of _get().
1e65d8d dbusiface-core: New function: pa_dbusiface_core_get_card_path().
90c73db dbusiface-card: Fix the OwnerModule property type in handle_get_all().
31c544d dbusiface-card: Assert that the profiles list is empty if there's no active profile.
18f9f1b dbusiface-card: Use the ++ operator like it's meant to be used.
afb79ee dbusiface-card-profile: Assert the core argument isn't NULL.
8b5550d dbusiface-card: Split some overly long lines.
31117fe dbus-protocol: Fix signal sending for the case when the client doesn't listen for all signals.
7cfda56 dbus-protocol: Add a note for _send_signal that by default the signal isn't actually sent.
8c8df77 dbusiface-card-profile: Implement the CardProfile D-Bus interface.
acad506 dbusiface-card: Implement the Card D-Bus interface.
16dce8d dbus-protocol: Take advantage of the helpers in dbus-util.
7699cfd dbus-protocol: Split some overly long lines.
76bd03b dbus-util: Trivial comment punctuation fix.
3e9de1a dbus-util: Add helpers for proplist handling.
5ece8e8 dbusiface-core: Add functions for getting various object paths.
0b66620 dbusiface-core: Generate more informative error messages.
06232e2 dbus: Take advantage of the PA_HASHMAP_FOREACH macro.
fcf6875 dbus: Three entangled changes:
1457df4 proplist: New function: pa_proplist_equal()
897ef86 Add volume ramping feature - sink modification
5318eb3 Add volume ramping feature - sink-input modification
8eaa40b Add volume ramping feature - envelop fix
44770c5 dbusiface-memstats: Implement the Memstats D-Bus interface.
0fc0552 dbus-protocol: Remove erroneous protocol object unref.
9eeb8eb dbus-protocol: Make debug logging saner.
b1578e2 dbus-protocol, dbusiface-core: Take a reference when storing the core pointer.
8966c61 dbusiface-core: Make the interface string a public constant.
d9d166a stream-restore: Expose module to D-Bus.
805af5e dbus-util: Fix broken proplist reading logic.
8c84057 dbus-protocol: Add debugging output (temporary change).
a1ba80b dbusiface-core: Don't die if we get a default sink/source change event before the new default device is actually created.
68cb63c dbusiface-core: Send signals whenever extensions are registered and unregistered.
c354a08 dbus-protocol: Implement extension registration.
b061957 dbus/iface-core.c: Make sure D-Bus objects are created only once.
018810e Bug fixing and minor cleanups.
9a77d2f Add the forgotten src/modules/dbus directory to git.
9347e90 Finish the Core dbus interface.
c6d330e Merge branch 'osx' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
63f2ed6 Merge branch 'osx' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
30fcda6 Revert "make bootstrap.sh aware of Darwin environment"
3fc7b87 Merge branch 'osx' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
909dc09 Merge branch 'master' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
5f5867e make bootstrap.sh aware of Darwin environment
5c7952e dbus: Implement the Name property of the core object.
6e2fec0 server-lookup: Update the D-Bus identifiers to be versioned.
3bff2ee module-cli: Fix compilation by adding libpulsecommon to module_cli_la_LIBADD.
c266595 Merge branch 'master' into dbus-work
0bc538b Merge branch 'master' into dbus-work
b152f3a module-dbus-protocol: Allow anyone to connect the daemon in system mode.
3c6a0ac dbus-protocol: Implement TCP server startup.
123c6a3 dbus-common: Implement infrastructure for registering D-Bus objects on all client connections and for receiving method calls from clients.
c8d819a dbus-protocol: Connection handling for local connections.
5babbaa daemon: Implement the DBus server lookup service.
c94e742 Create module-dbus-protocol with "Hello, world!" functionality.
-----------------------------------------------------------------------
Summary of changes:
PROTOCOL | 6 +
configure.ac | 153 +-
man/Makefile.am | 46 +-
man/pacat.1.xml.in | 96 +-
man/pulse-client.conf.5.xml.in | 19 +-
man/pulse-daemon.conf.5.xml.in | 10 +-
po/LINGUAS | 10 +-
po/as.po | 706 ++++---
po/bn_IN.po | 721 ++++---
po/ca.po | 706 ++++---
po/cs.po | 701 ++++---
po/de.po | 812 +++++---
po/de_CH.po | 704 ++++---
po/el.po | 882 +++++---
po/es.po | 708 ++++---
po/fi.po | 708 ++++---
po/fr.po | 1375 ++++++++-----
po/gu.po | 718 ++++---
po/he.po | 928 +++++----
po/hi.po | 718 ++++---
po/hu.po | 1165 +++++++----
po/it.po | 701 ++++---
po/ja.po | 941 +++++----
po/kn.po | 714 ++++---
po/ml.po | 721 ++++---
po/mr.po | 715 ++++---
po/nl.po | 743 ++++---
po/or.po | 715 ++++---
po/pa.po | 708 ++++---
po/pl.po | 701 ++++---
po/pt.po | 699 ++++---
po/pt_BR.po | 1260 +++++++-----
po/ru.po | 701 ++++---
po/sr.po | 701 ++++---
po/sr at latin.po | 701 ++++---
po/sv.po | 695 ++++---
po/ta.po | 724 ++++---
po/te.po | 715 ++++---
po/uk.po | 739 ++++---
po/zh_CN.po | 720 ++++---
po/zh_TW.po | 936 +++++----
src/.gitignore | 2 +
src/Makefile.am | 199 ++-
src/daemon/.gitignore | 1 +
src/daemon/cpulimit.c | 4 +-
src/daemon/daemon-conf.c | 57 +-
src/daemon/daemon-conf.h | 3 +
src/daemon/daemon.conf.in | 3 +-
src/daemon/default.pa.in | 3 +
src/daemon/main.c | 255 ++-
src/daemon/pulseaudio-kde.desktop.in | 11 +
src/daemon/server-lookup.c | 522 +++++
.../auth-cookie.h => daemon/server-lookup.h} | 23 +-
.../daemon/start-pulseaudio-kde.in | 16 +-
src/daemon/start-pulseaudio-x11.in | 2 -
src/daemon/system.pa.in | 4 +
src/map-file | 11 +
src/modules/alsa/alsa-mixer.c | 25 +-
src/modules/alsa/alsa-sink.c | 12 +-
src/modules/alsa/alsa-source.c | 12 +-
src/modules/alsa/alsa-util.c | 44 +-
src/modules/alsa/alsa-util.h | 5 +-
src/modules/alsa/mixer/paths/analog-input-aux.conf | 4 +
src/modules/alsa/mixer/paths/analog-input-fm.conf | 4 +
...put-mic.conf => analog-input-internal-mic.conf} | 8 +-
.../alsa/mixer/paths/analog-input-linein.conf | 4 +
.../alsa/mixer/paths/analog-input-mic-line.conf | 4 +
src/modules/alsa/mixer/paths/analog-input-mic.conf | 4 +
.../alsa/mixer/paths/analog-input-mic.conf.common | 9 +
.../alsa/mixer/paths/analog-input-tvtuner.conf | 4 +
.../alsa/mixer/paths/analog-input-video.conf | 4 +
src/modules/alsa/mixer/paths/analog-input.conf | 3 +
.../alsa/mixer/paths/analog-input.conf.common | 60 +-
...put.conf => analog-output-desktop-speaker.conf} | 20 +-
...t-mono.conf => analog-output-headphones-2.conf} | 31 +-
.../alsa/mixer/paths/analog-output-headphones.conf | 12 +
.../mixer/paths/analog-output-lfe-on-mono.conf | 8 +
.../alsa/mixer/paths/analog-output-mono.conf | 8 +
...alog-output.conf => analog-output-speaker.conf} | 12 +-
src/modules/alsa/mixer/paths/analog-output.conf | 19 +-
.../alsa/mixer/paths/analog-output.conf.common | 28 +
.../alsa/mixer/profile-sets/90-pulseaudio.rules | 1 +
src/modules/alsa/mixer/profile-sets/default.conf | 14 +-
...nts-audio4dj.conf => maudio-fasttrack-pro.conf} | 52 +-
src/modules/bluetooth/bluetooth-util.c | 58 +-
src/modules/bluetooth/bluetooth-util.h | 3 +
src/modules/bluetooth/module-bluetooth-device.c | 108 +-
src/modules/bluetooth/module-bluetooth-discover.c | 11 +-
src/modules/bluetooth/module-bluetooth-proximity.c | 11 +-
src/modules/coreaudio/module-coreaudio-detect.c | 229 ++
src/modules/coreaudio/module-coreaudio-device.c | 820 ++++++++
src/modules/dbus/iface-card-profile.c | 228 ++
src/modules/dbus/iface-card-profile.h | 50 +
src/modules/dbus/iface-card.c | 561 +++++
.../dllmain.c => modules/dbus/iface-card.h} | 46 +-
src/modules/dbus/iface-client.c | 461 ++++
.../dbus-shared.h => modules/dbus/iface-client.h} | 31 +-
src/modules/dbus/iface-core.c | 2197 +++++++++++++++++++
src/modules/dbus/iface-core.h | 52 +
src/modules/dbus/iface-device-port.c | 190 ++
src/modules/dbus/iface-device-port.h | 50 +
src/modules/dbus/iface-device.c | 1316 ++++++++++++
src/modules/dbus/iface-device.h | 53 +
src/modules/dbus/iface-memstats.c | 231 ++
.../dbus/iface-memstats.h} | 29 +-
src/modules/dbus/iface-module.c | 336 +++
.../cli.h => modules/dbus/iface-module.h} | 29 +-
src/modules/dbus/iface-sample.c | 519 +++++
.../dbus-shared.h => modules/dbus/iface-sample.h} | 31 +-
src/modules/dbus/iface-stream.c | 894 ++++++++
src/modules/dbus/iface-stream.h | 47 +
src/modules/dbus/module-dbus-protocol.c | 607 ++++++
src/modules/jack/module-jack-sink.c | 2 +-
src/modules/jack/module-jack-source.c | 2 +-
src/modules/module-bonjour-publish.c | 516 +++++
src/modules/module-cli.c | 2 +-
src/modules/module-combine.c | 6 +-
src/modules/module-console-kit.c | 9 +-
src/modules/module-default-device-restore.c | 8 +-
src/modules/module-detect.c | 8 +-
src/modules/module-device-manager.c | 1540 ++++++++++++++
src/modules/module-equalizer-sink.c | 2204 ++++++++++++++++++++
src/modules/module-hal-detect.c | 10 +-
src/modules/module-ladspa-sink.c | 6 +-
src/modules/module-lirc.c | 26 +-
src/modules/module-loopback.c | 6 +-
src/modules/module-match.c | 2 +-
src/modules/module-mmkbd-evdev.c | 28 +-
src/modules/module-pipe-sink.c | 10 +-
src/modules/module-pipe-source.c | 10 +-
src/modules/module-position-event-sounds.c | 18 +-
src/modules/module-protocol-stub.c | 13 +-
src/modules/module-rygel-media-server.c | 45 +-
src/modules/module-sine-source.c | 2 +-
src/modules/module-solaris.c | 2 +-
src/modules/module-stream-restore.c | 1066 ++++++++++-
src/modules/module-udev-detect.c | 73 +-
.../{module-remap-sink.c => module-virtual-sink.c} | 291 ++-
src/modules/module-virtual-source.c | 771 +++++++
src/modules/oss/oss-util.c | 18 +-
src/modules/raop/module-raop-sink.c | 2 +-
src/modules/raop/raop_client.c | 5 -
src/modules/rtp/module-rtp-recv.c | 2 +-
src/modules/rtp/module-rtp-send.c | 6 +-
src/modules/rtp/rtsp_client.c | 5 -
src/modules/udev-util.c | 110 +
src/modules/x11/module-x11-xsmp.c | 2 +-
src/pulse/channelmap.c | 2 +-
src/pulse/channelmap.h | 20 +-
src/pulse/client-conf.c | 11 +-
src/pulse/client-conf.h | 5 +-
src/pulse/client.conf.in | 6 +-
src/pulse/context.c | 77 +-
src/pulse/context.h | 22 +-
src/pulse/def.h | 13 +-
.../{ext-stream-restore.c => ext-device-manager.c} | 216 ++-
src/pulse/ext-device-manager.h | 128 ++
src/pulse/ext-stream-restore.h | 2 +
src/pulse/internal.h | 10 +-
src/pulse/introspect.h | 2 +-
src/pulse/mainloop-signal.c | 4 +-
src/pulse/mainloop.c | 13 +-
src/pulse/proplist.c | 29 +
src/pulse/proplist.h | 10 +-
src/pulse/scache.c | 10 +-
src/pulse/simple.h | 4 +-
src/pulse/stream.c | 136 +-
src/pulse/stream.h | 23 +-
src/pulse/thread-mainloop.c | 6 +-
src/pulse/util.c | 11 +
src/pulse/volume.c | 10 +-
src/pulse/volume.h | 10 +-
src/pulsecore/asyncq.h | 5 +-
src/pulsecore/atomic.h | 104 +
src/pulsecore/aupdate.h | 2 +-
src/pulsecore/authkey.c | 10 +-
src/pulsecore/cli-command.c | 2 +-
src/pulsecore/conf-parser.c | 2 +-
src/pulsecore/core-rtclock.c | 51 +-
src/pulsecore/core-scache.c | 10 +-
src/pulsecore/core-util.c | 261 +++-
src/pulsecore/core-util.h | 19 +
src/pulsecore/core.h | 9 +
src/pulsecore/cpu-arm.c | 8 +-
src/pulsecore/cpu-arm.h | 2 +-
src/pulsecore/cpu-x86.c | 6 +-
src/pulsecore/cpu-x86.h | 6 +-
src/pulsecore/database-simple.c | 4 +-
src/pulsecore/database-tdb.c | 43 +-
src/pulsecore/dbus-util.c | 381 ++++-
src/pulsecore/dbus-util.h | 43 +
src/pulsecore/envelope.c | 333 +++-
src/pulsecore/envelope.h | 3 +
src/pulsecore/fdsem.c | 54 +-
src/pulsecore/flist.h | 2 +-
src/pulsecore/idxset.h | 2 +-
src/pulsecore/lock-autospawn.c | 8 +-
src/pulsecore/log.c | 88 +-
src/pulsecore/memblockq.c | 105 +-
src/pulsecore/memblockq.h | 4 +-
src/pulsecore/modargs.c | 10 +
src/pulsecore/modargs.h | 9 +
src/pulsecore/once.c | 3 +-
src/pulsecore/pid.c | 7 +-
src/pulsecore/play-memblockq.c | 7 +-
src/pulsecore/play-memblockq.h | 18 +-
src/pulsecore/play-memchunk.c | 9 +-
src/pulsecore/play-memchunk.h | 15 +-
src/pulsecore/poll.c | 33 +-
src/pulsecore/poll.h | 18 +-
src/pulsecore/protocol-dbus.c | 1143 ++++++++++
src/pulsecore/protocol-dbus.h | 218 ++
src/pulsecore/protocol-esound.c | 5 +-
src/pulsecore/protocol-native.c | 44 +-
src/pulsecore/protocol-simple.c | 6 +-
src/pulsecore/random.c | 6 +-
src/pulsecore/rtpoll.c | 32 +-
src/pulsecore/sample-util.c | 2 +-
.../{semaphore-win32.c => semaphore-osx.c} | 20 +-
src/pulsecore/shm.c | 8 +-
src/pulsecore/sink-input.c | 400 +++-
src/pulsecore/sink-input.h | 21 +
src/pulsecore/sink.c | 32 +-
src/pulsecore/socket-client.c | 4 +-
src/pulsecore/socket-server.c | 81 +-
src/pulsecore/socket-server.h | 16 +-
src/pulsecore/socket-util.c | 30 +-
src/pulsecore/sound-file-stream.c | 11 +-
src/pulsecore/sound-file.c | 6 +-
src/pulsecore/svolume_mmx.c | 17 +-
src/pulsecore/svolume_sse.c | 14 +-
src/pulsecore/thread-posix.c | 8 +-
src/pulsecore/thread.h | 2 +-
src/pulsecore/time-smoother.c | 7 +
src/pulsecore/x11prop.c | 20 +-
src/tests/lock-autospawn-test.c | 4 +-
src/tests/once-test.c | 103 +
src/tests/rtpoll-test.c | 2 +-
src/utils/pacat.c | 97 +-
src/utils/pacmd.c | 191 +-
src/utils/pactl.c | 115 +-
src/utils/padsp.c | 55 +-
src/utils/pasuspender.c | 2 -
src/utils/qpaeq | 560 +++++
vala/libpulse.vapi | 10 +-
245 files changed, 38100 insertions(+), 12361 deletions(-)
create mode 100644 src/daemon/pulseaudio-kde.desktop.in
create mode 100644 src/daemon/server-lookup.c
copy src/{pulsecore/auth-cookie.h => daemon/server-lookup.h} (58%)
copy doxygen/Makefile.am => src/daemon/start-pulseaudio-kde.in (80%)
mode change 100644 => 100755
copy src/modules/alsa/mixer/paths/{analog-input-mic.conf => analog-input-internal-mic.conf} (92%)
copy src/modules/alsa/mixer/paths/{analog-output.conf => analog-output-desktop-speaker.conf} (83%)
copy src/modules/alsa/mixer/paths/{analog-output-mono.conf => analog-output-headphones-2.conf} (80%)
copy src/modules/alsa/mixer/paths/{analog-output.conf => analog-output-speaker.conf} (91%)
copy src/modules/alsa/mixer/profile-sets/{native-instruments-audio4dj.conf => maudio-fasttrack-pro.conf} (64%)
create mode 100644 src/modules/coreaudio/module-coreaudio-detect.c
create mode 100644 src/modules/coreaudio/module-coreaudio-device.c
create mode 100644 src/modules/dbus/iface-card-profile.c
create mode 100644 src/modules/dbus/iface-card-profile.h
create mode 100644 src/modules/dbus/iface-card.c
copy src/{pulsecore/dllmain.c => modules/dbus/iface-card.h} (53%)
create mode 100644 src/modules/dbus/iface-client.c
copy src/{pulsecore/dbus-shared.h => modules/dbus/iface-client.h} (52%)
create mode 100644 src/modules/dbus/iface-core.c
create mode 100644 src/modules/dbus/iface-core.h
create mode 100644 src/modules/dbus/iface-device-port.c
create mode 100644 src/modules/dbus/iface-device-port.h
create mode 100644 src/modules/dbus/iface-device.c
create mode 100644 src/modules/dbus/iface-device.h
create mode 100644 src/modules/dbus/iface-memstats.c
copy src/{pulsecore/dbus-shared.h => modules/dbus/iface-memstats.h} (53%)
create mode 100644 src/modules/dbus/iface-module.c
copy src/{pulsecore/cli.h => modules/dbus/iface-module.h} (55%)
create mode 100644 src/modules/dbus/iface-sample.c
copy src/{pulsecore/dbus-shared.h => modules/dbus/iface-sample.h} (52%)
create mode 100644 src/modules/dbus/iface-stream.c
create mode 100644 src/modules/dbus/iface-stream.h
create mode 100644 src/modules/dbus/module-dbus-protocol.c
create mode 100644 src/modules/module-bonjour-publish.c
create mode 100644 src/modules/module-device-manager.c
create mode 100644 src/modules/module-equalizer-sink.c
copy src/modules/{module-remap-sink.c => module-virtual-sink.c} (60%)
create mode 100644 src/modules/module-virtual-source.c
copy src/pulse/{ext-stream-restore.c => ext-device-manager.c} (58%)
create mode 100644 src/pulse/ext-device-manager.h
create mode 100644 src/pulsecore/protocol-dbus.c
create mode 100644 src/pulsecore/protocol-dbus.h
copy src/pulsecore/{semaphore-win32.c => semaphore-osx.c} (67%)
create mode 100644 src/tests/once-test.c
create mode 100755 src/utils/qpaeq
-----------------------------------------------------------------------
commit c94e7421aad58c7714f6e26f20642c51af17cc4d
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Jun 3 15:21:50 2009 +0300
Create module-dbus-protocol with "Hello, world!" functionality.
diff --git a/src/Makefile.am b/src/Makefile.am
index a7ec691..70b16be 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1072,7 +1072,8 @@ endif
if HAVE_DBUS
modlibexec_LTLIBRARIES += \
- module-rygel-media-server.la
+ module-rygel-media-server.la \
+ module-dbus-protocol.la
endif
if HAVE_BLUEZ
@@ -1164,7 +1165,8 @@ SYMDEF_FILES = \
modules/module-position-event-sounds-symdef.h \
modules/module-augment-properties-symdef.h \
modules/module-cork-music-on-phone-symdef.h \
- modules/module-console-kit-symdef.h
+ modules/module-console-kit-symdef.h \
+ modules/module-dbus-protocol-symdef.h
EXTRA_DIST += $(SYMDEF_FILES)
BUILT_SOURCES += $(SYMDEF_FILES)
@@ -1213,6 +1215,13 @@ module_http_protocol_unix_la_CFLAGS = -DUSE_UNIX_SOCKETS -DUSE_PROTOCOL_HTTP $(A
module_http_protocol_unix_la_LDFLAGS = $(MODULE_LDFLAGS)
module_http_protocol_unix_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libprotocol-http.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+# D-Bus protocol
+
+module_dbus_protocol_la_SOURCES = modules/module-dbus-protocol.c
+module_dbus_protocol_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
+module_dbus_protocol_la_LDFLAGS = $(MODULE_LDFLAGS)
+module_dbus_protocol_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
# Native protocol
module_native_protocol_tcp_la_SOURCES = modules/module-protocol-stub.c
diff --git a/src/daemon/default.pa.in b/src/daemon/default.pa.in
index fa0683e..ba8e3c8 100755
--- a/src/daemon/default.pa.in
+++ b/src/daemon/default.pa.in
@@ -66,6 +66,9 @@ load-module module-bluetooth-discover
.ifexists module-esound-protocol-unix at PA_SOEXT@
load-module module-esound-protocol-unix
.endif
+.ifexists module-dbus-protocol at PA_SOEXT@
+load-module module-dbus-protocol
+.endif
load-module module-native-protocol-unix
### Network access (may be configured with paprefs, so leave this commented
diff --git a/src/daemon/system.pa.in b/src/daemon/system.pa.in
index 27e4281..5541bbe 100755
--- a/src/daemon/system.pa.in
+++ b/src/daemon/system.pa.in
@@ -32,6 +32,9 @@ load-module module-detect
.ifexists module-esound-protocol-unix at PA_SOEXT@
load-module module-esound-protocol-unix
.endif
+.ifexists module-dbus-protocol at PA_SOEXT@
+load-module module-dbus-protocol
+.endif
load-module module-native-protocol-unix
### Automatically restore the volume of streams and devices
diff --git a/src/modules/module-dbus-protocol.c b/src/modules/module-dbus-protocol.c
new file mode 100644
index 0000000..077f417
--- /dev/null
+++ b/src/modules/module-dbus-protocol.c
@@ -0,0 +1,66 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/macro.h>
+#include <pulsecore/module.h>
+
+#include "module-dbus-protocol-symdef.h"
+
+PA_MODULE_DESCRIPTION("D-Bus interface");
+PA_MODULE_USAGE("<no module arguments>");
+PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_AUTHOR("Tanu Kaskinen");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+
+struct userdata {
+ pa_module *module;
+};
+
+int pa__init(pa_module *m) {
+ struct userdata *u = NULL;
+
+ pa_assert(m);
+
+ m->userdata = u = pa_xnew0(struct userdata, 1);
+ u->module = m;
+
+ pa_log_notice("Hello, world!");
+
+ return 0;
+}
+
+void pa__done(pa_module*m) {
+ struct userdata *u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ pa_xfree(u);
+ m->userdata = NULL;
+}
commit 5babbaafb26ac4f83db0d8bca53006a843472b8f
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Jun 12 07:16:05 2009 +0300
daemon: Implement the DBus server lookup service.
diff --git a/src/Makefile.am b/src/Makefile.am
index 70b16be..c56f760 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -135,13 +135,14 @@ BUILT_SOURCES = \
bin_PROGRAMS = pulseaudio
pulseaudio_SOURCES = \
- daemon/caps.h daemon/caps.c \
+ daemon/caps.c daemon/caps.h \
daemon/cmdline.c daemon/cmdline.h \
daemon/cpulimit.c daemon/cpulimit.h \
daemon/daemon-conf.c daemon/daemon-conf.h \
daemon/dumpmodules.c daemon/dumpmodules.h \
daemon/ltdl-bind-now.c daemon/ltdl-bind-now.h \
- daemon/main.c
+ daemon/main.c \
+ daemon/server-lookup.c daemon/server-lookup.h
pulseaudio_CFLAGS = $(AM_CFLAGS) $(LIBOIL_CFLAGS) $(LIBSAMPLERATE_CFLAGS) $(LIBSPEEX_CFLAGS) $(LIBSNDFILE_CFLAGS) $(CAP_CFLAGS) $(LIBOIL_CFLAGS) $(DBUS_CFLAGS)
pulseaudio_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSPEEX_LIBS) $(LIBSNDFILE_LIBS) $(CAP_LIBS) $(LIBOIL_LIBS) $(DBUS_LIBS)
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index ac6cc8a..e6fa8c6 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -83,6 +83,9 @@ static const pa_daemon_conf default_conf = {
.config_file = NULL,
.use_pid_file = TRUE,
.system_instance = FALSE,
+#ifdef HAVE_DBUS
+ .local_server_type = PA_SERVER_TYPE_UNSET, /* The actual default is _USER, but we have to detect when the user doesn't specify this option. */
+#endif
.no_cpu_limit = FALSE,
.disable_shm = FALSE,
.default_n_fragments = 4,
@@ -203,6 +206,22 @@ int pa_daemon_conf_set_resample_method(pa_daemon_conf *c, const char *string) {
return 0;
}
+int pa_daemon_conf_set_local_server_type(pa_daemon_conf *c, const char *string) {
+ pa_assert(c);
+ pa_assert(string);
+
+ if (!strcmp(string, "user"))
+ c->local_server_type = PA_SERVER_TYPE_USER;
+ else if (!strcmp(string, "system")) {
+ c->local_server_type = PA_SERVER_TYPE_SYSTEM;
+ } else if (!strcmp(string, "none")) {
+ c->local_server_type = PA_SERVER_TYPE_NONE;
+ } else
+ return -1;
+
+ return 0;
+}
+
static int parse_log_target(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) {
pa_daemon_conf *c = data;
@@ -430,6 +449,22 @@ static int parse_rtprio(const char *filename, unsigned line, const char *section
return 0;
}
+static int parse_server_type(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) {
+ pa_daemon_conf *c = data;
+
+ pa_assert(filename);
+ pa_assert(lvalue);
+ pa_assert(rvalue);
+ pa_assert(data);
+
+ if (pa_daemon_conf_set_local_server_type(c, rvalue) < 0) {
+ pa_log(_("[%s:%u] Invalid server type '%s'."), filename, line, rvalue);
+ return -1;
+ }
+
+ return 0;
+}
+
int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
int r = -1;
FILE *f = NULL;
@@ -443,6 +478,9 @@ int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
{ "disallow-exit", pa_config_parse_bool, &c->disallow_exit, NULL },
{ "use-pid-file", pa_config_parse_bool, &c->use_pid_file, NULL },
{ "system-instance", pa_config_parse_bool, &c->system_instance, NULL },
+#ifdef HAVE_DBUS
+ { "local-server-type", parse_server_type, c, NULL },
+#endif
{ "no-cpu-limit", pa_config_parse_bool, &c->no_cpu_limit, NULL },
{ "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
{ "flat-volumes", pa_config_parse_bool, &c->flat_volumes, NULL },
@@ -604,6 +642,13 @@ static const char* const log_level_to_string[] = {
[PA_LOG_ERROR] = "error"
};
+static const char* const server_type_to_string[] = {
+ [PA_SERVER_TYPE_UNSET] = "!!UNSET!!",
+ [PA_SERVER_TYPE_USER] = "user",
+ [PA_SERVER_TYPE_SYSTEM] = "system",
+ [PA_SERVER_TYPE_NONE] = "none"
+};
+
char *pa_daemon_conf_dump(pa_daemon_conf *c) {
pa_strbuf *s;
char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
@@ -627,6 +672,9 @@ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
pa_strbuf_printf(s, "disallow-exit = %s\n", pa_yes_no(c->disallow_exit));
pa_strbuf_printf(s, "use-pid-file = %s\n", pa_yes_no(c->use_pid_file));
pa_strbuf_printf(s, "system-instance = %s\n", pa_yes_no(c->system_instance));
+#ifdef HAVE_DBUS
+ pa_strbuf_printf(s, "local-server-type = %s\n", server_type_to_string[c->local_server_type]);
+#endif
pa_strbuf_printf(s, "no-cpu-limit = %s\n", pa_yes_no(c->no_cpu_limit));
pa_strbuf_printf(s, "disable-shm = %s\n", pa_yes_no(c->disable_shm));
pa_strbuf_printf(s, "flat-volumes = %s\n", pa_yes_no(c->flat_volumes));
diff --git a/src/daemon/daemon-conf.h b/src/daemon/daemon-conf.h
index 9cec189..98db864 100644
--- a/src/daemon/daemon-conf.h
+++ b/src/daemon/daemon-conf.h
@@ -48,6 +48,13 @@ typedef enum pa_daemon_conf_cmd {
PA_CMD_CLEANUP_SHM
} pa_daemon_conf_cmd_t;
+typedef enum pa_daemon_conf_server_type {
+ PA_SERVER_TYPE_UNSET,
+ PA_SERVER_TYPE_USER,
+ PA_SERVER_TYPE_SYSTEM,
+ PA_SERVER_TYPE_NONE
+} pa_daemon_conf_server_type_t;
+
#ifdef HAVE_SYS_RESOURCE_H
typedef struct pa_rlimit {
rlim_t value;
@@ -74,6 +81,7 @@ typedef struct pa_daemon_conf {
log_meta,
log_time,
flat_volumes;
+ pa_daemon_conf_server_type_t local_server_type;
int exit_idle_time,
scache_idle_time,
auto_log_target,
@@ -151,6 +159,7 @@ int pa_daemon_conf_env(pa_daemon_conf *c);
int pa_daemon_conf_set_log_target(pa_daemon_conf *c, const char *string);
int pa_daemon_conf_set_log_level(pa_daemon_conf *c, const char *string);
int pa_daemon_conf_set_resample_method(pa_daemon_conf *c, const char *string);
+int pa_daemon_conf_set_local_server_type(pa_daemon_conf *c, const char *string);
const char *pa_daemon_conf_get_default_script_file(pa_daemon_conf *c);
FILE *pa_daemon_conf_open_default_script_file(pa_daemon_conf *c);
diff --git a/src/daemon/daemon.conf.in b/src/daemon/daemon.conf.in
index fcd2513..ecdb3a6 100644
--- a/src/daemon/daemon.conf.in
+++ b/src/daemon/daemon.conf.in
@@ -25,6 +25,7 @@
; disallow-exit = no
; use-pid-file = yes
; system-instance = no
+; local-server-type = user
; disable-shm = no
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 3e50baa..1b6ed79 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -99,6 +99,7 @@
#include "caps.h"
#include "ltdl-bind-now.h"
#include "polkit.h"
+#include "server-lookup.h"
#ifdef HAVE_LIBWRAP
/* Only one instance of these variables */
@@ -335,33 +336,31 @@ static void set_all_rlimits(const pa_daemon_conf *conf) {
#endif
#ifdef HAVE_DBUS
-static pa_dbus_connection *register_dbus(pa_core *c) {
+static pa_dbus_connection *register_dbus_name(pa_core *c, DBusBusType bus, const char* name) {
DBusError error;
pa_dbus_connection *conn;
dbus_error_init(&error);
- if (!(conn = pa_dbus_bus_get(c, pa_in_system_mode() ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, &error)) || dbus_error_is_set(&error)) {
+ if (!(conn = pa_dbus_bus_get(c, bus, &error)) || dbus_error_is_set(&error)) {
pa_log_warn("Unable to contact D-Bus: %s: %s", error.name, error.message);
goto fail;
}
- if (dbus_bus_request_name(pa_dbus_connection_get(conn), "org.pulseaudio.Server", DBUS_NAME_FLAG_DO_NOT_QUEUE, &error) == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
- pa_log_debug("Got org.pulseaudio.Server!");
+ if (dbus_bus_request_name(pa_dbus_connection_get(conn), name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &error) == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+ pa_log_debug("Got %s!", name);
return conn;
}
if (dbus_error_is_set(&error))
- pa_log_warn("Failed to acquire org.pulseaudio.Server: %s: %s", error.name, error.message);
+ pa_log_error("Failed to acquire %s: %s: %s", name, error.name, error.message);
else
- pa_log_warn("D-Bus name org.pulseaudio.Server already taken. Weird shit!");
+ pa_log_error("D-Bus name %s already taken. Weird shit!", name);
/* PA cannot be started twice by the same user and hence we can
- * ignore mostly the case that org.pulseaudio.Server is already
- * taken. */
+ * ignore mostly the case that a name is already taken. */
fail:
-
if (conn)
pa_dbus_connection_unref(conn);
@@ -393,7 +392,10 @@ int main(int argc, char *argv[]) {
int autospawn_fd = -1;
pa_bool_t autospawn_locked = FALSE;
#ifdef HAVE_DBUS
- pa_dbus_connection *dbus = NULL;
+ pa_dbusobj_server_lookup *server_lookup = NULL; /* /org/pulseaudio/server_lookup */
+ pa_dbus_connection *lookup_service_bus = NULL; /* Always the user bus. */
+ pa_dbus_connection *server_bus = NULL; /* The bus where we reserve org.pulseaudio.Server, either the user or the system bus. */
+ pa_bool_t start_server;
#endif
pa_log_set_ident("pulseaudio");
@@ -486,8 +488,45 @@ int main(int argc, char *argv[]) {
pa_log_set_flags(PA_LOG_PRINT_TIME, PA_LOG_SET);
pa_log_set_show_backtrace(conf->log_backtrace);
+#ifdef HAVE_DBUS
+ /* conf->system_instance and conf->local_server_type control almost the
+ * same thing; make them agree about what is requested. */
+ switch (conf->local_server_type) {
+ case PA_SERVER_TYPE_UNSET:
+ conf->local_server_type = conf->system_instance ? PA_SERVER_TYPE_SYSTEM : PA_SERVER_TYPE_USER;
+ break;
+ case PA_SERVER_TYPE_USER:
+ case PA_SERVER_TYPE_NONE:
+ conf->system_instance = FALSE;
+ break;
+ case PA_SERVER_TYPE_SYSTEM:
+ conf->system_instance = TRUE;
+ break;
+ default:
+ pa_assert_not_reached();
+ }
+
+ start_server = conf->local_server_type == PA_SERVER_TYPE_USER || (real_root && conf->local_server_type == PA_SERVER_TYPE_SYSTEM);
+
+ if (!start_server && conf->local_server_type == PA_SERVER_TYPE_SYSTEM) {
+ pa_log_notice(_("System mode refused for non-root user. Only starting the D-Bus server lookup service."));
+ conf->system_instance = FALSE;
+ }
+#endif
+
pa_log_debug("Started as real root: %s, suid root: %s", pa_yes_no(real_root), pa_yes_no(suid_root));
+#ifdef HAVE_DBUS
+ /* XXX: Uhh, goto programming... as if this wasn't hard enough to follow
+ * already. But if we won't start the full server, we want to just skip all
+ * the capability stuff. */
+ if (!start_server) {
+ if (!real_root && pa_have_caps())
+ pa_drop_caps();
+ goto after_caps_setup;
+ }
+#endif
+
if (!real_root && pa_have_caps()) {
#ifdef HAVE_SYS_RESOURCE_H
struct rlimit rl;
@@ -628,6 +667,10 @@ int main(int argc, char *argv[]) {
conf->realtime_scheduling = FALSE;
}
+#ifdef HAVE_DBUS
+after_caps_setup:
+#endif
+
pa_log_debug("Can realtime: %s, can high-priority: %s", pa_yes_no(pa_can_realtime()), pa_yes_no(pa_can_high_priority()));
LTDL_SET_PRELOADED_SYMBOLS();
@@ -716,10 +759,12 @@ int main(int argc, char *argv[]) {
if (real_root && !conf->system_instance)
pa_log_warn(_("This program is not intended to be run as root (unless --system is specified)."));
+#ifndef HAVE_DBUS /* A similar, only a notice worthy check was done earlier, if D-Bus is enabled. */
else if (!real_root && conf->system_instance) {
pa_log(_("Root privileges required."));
goto finish;
}
+#endif
if (conf->cmd == PA_CMD_START && conf->system_instance) {
pa_log(_("--start not supported for system instances."));
@@ -1007,34 +1052,47 @@ int main(int argc, char *argv[]) {
pa_assert_se(pa_cpu_limit_init(pa_mainloop_get_api(mainloop)) == 0);
buf = pa_strbuf_new();
- if (conf->load_default_script_file) {
- FILE *f;
- if ((f = pa_daemon_conf_open_default_script_file(conf))) {
- r = pa_cli_command_execute_file_stream(c, f, buf, &conf->fail);
- fclose(f);
+#ifdef HAVE_DBUS
+ if (start_server) {
+#endif
+ if (conf->load_default_script_file) {
+ FILE *f;
+
+ if ((f = pa_daemon_conf_open_default_script_file(conf))) {
+ r = pa_cli_command_execute_file_stream(c, f, buf, &conf->fail);
+ fclose(f);
+ }
}
- }
- if (r >= 0)
- r = pa_cli_command_execute(c, conf->script_commands, buf, &conf->fail);
+ if (r >= 0)
+ r = pa_cli_command_execute(c, conf->script_commands, buf, &conf->fail);
- pa_log_error("%s", s = pa_strbuf_tostring_free(buf));
- pa_xfree(s);
+ pa_log_error("%s", s = pa_strbuf_tostring_free(buf));
+ pa_xfree(s);
- /* We completed the initial module loading, so let's disable it
- * from now on, if requested */
- c->disallow_module_loading = !!conf->disallow_module_loading;
+ if (r < 0 && conf->fail) {
+ pa_log(_("Failed to initialize daemon."));
+ goto finish;
+ }
- if (r < 0 && conf->fail) {
- pa_log(_("Failed to initialize daemon."));
- goto finish;
+ if (!c->modules || pa_idxset_size(c->modules) == 0) {
+ pa_log(_("Daemon startup without any loaded modules, refusing to work."));
+ goto finish;
+ }
+#ifdef HAVE_DBUS
+ } else {
+ /* When we just provide the D-Bus server lookup service, we don't want
+ * any modules to be loaded. We haven't loaded any so far, so one might
+ * think there's no way to contact the server, but receiving certain
+ * signals could still cause modules to load. */
+ conf->disallow_module_loading = TRUE;
}
+#endif
- if (!c->modules || pa_idxset_size(c->modules) == 0) {
- pa_log(_("Daemon startup without any loaded modules, refusing to work."));
- goto finish;
- }
+ /* We completed the initial module loading, so let's disable it
+ * from now on, if requested */
+ c->disallow_module_loading = !!conf->disallow_module_loading;
#ifdef HAVE_FORK
if (daemon_pipe[1] >= 0) {
@@ -1046,7 +1104,15 @@ int main(int argc, char *argv[]) {
#endif
#ifdef HAVE_DBUS
- dbus = register_dbus(c);
+ if (!conf->system_instance) {
+ if (!(server_lookup = pa_dbusobj_server_lookup_new(c, conf->local_server_type)))
+ goto finish;
+ if (!(lookup_service_bus = register_dbus_name(c, DBUS_BUS_SESSION, "org.pulseaudio.PulseAudio")))
+ goto finish;
+ }
+
+ if (start_server && !(server_bus = register_dbus_name(c, conf->system_instance ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, "org.pulseaudio.Server")))
+ goto finish;
#endif
pa_log_info(_("Daemon startup complete."));
@@ -1059,8 +1125,12 @@ int main(int argc, char *argv[]) {
finish:
#ifdef HAVE_DBUS
- if (dbus)
- pa_dbus_connection_unref(dbus);
+ if (server_bus)
+ pa_dbus_connection_unref(server_bus);
+ if (lookup_service_bus)
+ pa_dbus_connection_unref(lookup_service_bus);
+ if (server_lookup)
+ pa_dbusobj_server_lookup_free(server_lookup);
#endif
if (autospawn_fd >= 0) {
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
new file mode 100644
index 0000000..867c3a1
--- /dev/null
+++ b/src/daemon/server-lookup.c
@@ -0,0 +1,277 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulse/client-conf.h>
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-shared.h>
+#include <pulsecore/macro.h>
+
+#include "server-lookup.h"
+
+struct pa_dbusobj_server_lookup {
+ pa_dbus_connection *conn;
+ pa_bool_t path_registered;
+ pa_daemon_conf_server_type_t server_type;
+};
+
+static const char introspection[] =
+ DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE
+ "<node>"
+ " <!-- If you are looking for documentation make sure to check out\n"
+ " http://pulseaudio.org/wiki/DBusInterface -->\n"
+ " <interface name=\"org.pulseaudio.ServerLookup\">"
+ " <method name=\"GetDBusServers\">"
+ " <arg name=\"result\" type=\"s\" direction=\"out\"/>"
+ " </method>"
+ " </interface>"
+ " <interface name=\"org.freedesktop.DBus.Introspectable\">"
+ " <method name=\"Introspect\">"
+ " <arg name=\"data\" type=\"s\" direction=\"out\"/>"
+ " </method>"
+ " </interface>"
+ "</node>";
+
+static void unregister_cb(DBusConnection *conn, void *user_data) {
+ pa_dbusobj_server_lookup *sl = user_data;
+
+ pa_assert(sl);
+ pa_assert(sl->path_registered);
+
+ sl->path_registered = FALSE;
+}
+
+static DBusHandlerResult handle_introspect(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ const char *i = introspection;
+ DBusMessage *reply = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ if (!(reply = dbus_message_new_method_return(msg)))
+ goto fail;
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &i, DBUS_TYPE_INVALID))
+ goto fail;
+
+ if (!dbus_connection_send(conn, reply, NULL))
+ goto oom;
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+fail:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+oom:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+/* Caller frees the string. */
+static char *get_dbus_server_from_type(pa_daemon_conf_server_type_t server_type) {
+ char *server_string = NULL;
+ char *runtime_dir = NULL;
+
+ switch (server_type) {
+ case PA_SERVER_TYPE_USER:
+ runtime_dir = pa_get_runtime_dir();
+
+ if (!runtime_dir)
+ return NULL;
+
+ server_string = pa_sprintf_malloc("unix:path=%s/dbus_socket", runtime_dir);
+ break;
+
+ case PA_SERVER_TYPE_SYSTEM:
+ server_string = pa_xstrdup("unix:path=/var/run/pulse/dbus_socket");
+ break;
+
+ case PA_SERVER_TYPE_NONE:
+ server_string = pa_xnew0(char, 1);
+ break;
+
+ default:
+ pa_assert_not_reached();
+ }
+
+ return server_string;
+}
+
+static DBusHandlerResult handle_get_dbus_servers(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ DBusMessage *reply = NULL;
+ pa_client_conf *conf = NULL;
+ char *server_string = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(sl);
+
+ conf = pa_client_conf_new();
+
+ if (pa_client_conf_load(conf, NULL) < 0) {
+ if (!(reply = dbus_message_new_error(msg, "org.pulseaudio.ClientConfLoadError", "Failed to load client.conf.")))
+ goto fail;
+ if (!dbus_connection_send(conn, reply, NULL))
+ goto oom;
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ server_string = pa_xstrdup(conf->default_dbus_server);
+
+ pa_client_conf_free(conf);
+
+ if (!server_string) {
+ if (!(server_string = get_dbus_server_from_type(sl->server_type))) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "get_dbus_server_from_type() failed.")))
+ goto fail;
+ if (!dbus_connection_send(conn, reply, NULL))
+ goto oom;
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ }
+
+ if (!(reply = dbus_message_new_method_return(msg)))
+ goto oom;
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &server_string, DBUS_TYPE_INVALID))
+ goto fail;
+
+ if (!dbus_connection_send(conn, reply, NULL))
+ goto oom;
+
+ pa_log("Sent reply with server_string '%s'.", server_string);
+
+ pa_xfree(server_string);
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+fail:
+ if (conf)
+ pa_client_conf_free(conf);
+
+ pa_xfree(server_string);
+
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+oom:
+ if (conf)
+ pa_client_conf_free(conf);
+
+ pa_xfree(server_string);
+
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+static DBusHandlerResult message_cb(DBusConnection *conn, DBusMessage *msg, void *user_data) {
+ pa_dbusobj_server_lookup *sl = user_data;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(sl);
+
+ /* pa_log("Got message! type = %s path = %s iface = %s member = %s dest = %s", dbus_message_type_to_string(dbus_message_get_type(msg)), dbus_message_get_path(msg), dbus_message_get_interface(msg), dbus_message_get_member(msg), dbus_message_get_destination(msg)); */
+
+ if (dbus_message_is_method_call(msg, "org.freedesktop.DBus.Introspectable", "Introspect"))
+ return handle_introspect(conn, msg, sl);
+
+ if (dbus_message_is_method_call(msg, "org.pulseaudio.ServerLookup", "GetDBusServers"))
+ return handle_get_dbus_servers(conn, msg, sl);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static DBusObjectPathVTable vtable = {
+ .unregister_function = unregister_cb,
+ .message_function = message_cb,
+ .dbus_internal_pad1 = NULL,
+ .dbus_internal_pad2 = NULL,
+ .dbus_internal_pad3 = NULL,
+ .dbus_internal_pad4 = NULL
+};
+
+pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c, pa_daemon_conf_server_type_t server_type) {
+ pa_dbusobj_server_lookup *sl;
+ DBusError error;
+
+ dbus_error_init(&error);
+
+ sl = pa_xnew(pa_dbusobj_server_lookup, 1);
+ sl->path_registered = FALSE;
+ sl->server_type = server_type;
+
+ if (!(sl->conn = pa_dbus_bus_get(c, DBUS_BUS_SESSION, &error)) || dbus_error_is_set(&error)) {
+ pa_log("Unable to contact D-Bus: %s: %s", error.name, error.message);
+ goto fail;
+ }
+
+ if (!dbus_connection_register_object_path(pa_dbus_connection_get(sl->conn), "/org/pulseaudio/server_lookup", &vtable, sl)) {
+ pa_log("dbus_connection_register_object_path() failed for /org/pulseaudio/server_lookup.");
+ goto fail;
+ }
+
+ sl->path_registered = TRUE;
+
+ return sl;
+
+fail:
+ dbus_error_free(&error);
+
+ pa_dbusobj_server_lookup_free(sl);
+
+ return NULL;
+}
+
+void pa_dbusobj_server_lookup_free(pa_dbusobj_server_lookup *sl) {
+ pa_assert(sl);
+
+ if (sl->path_registered) {
+ pa_assert(sl->conn);
+ if (!dbus_connection_unregister_object_path(pa_dbus_connection_get(sl->conn), "/org/pulseaudio/server_lookup"))
+ pa_log_debug("dbus_connection_unregister_object_path() failed for /org/pulseaudio/server_lookup.");
+ }
+
+ if (sl->conn)
+ pa_dbus_connection_unref(sl->conn);
+
+ pa_xfree(sl);
+}
\ No newline at end of file
diff --git a/src/daemon/server-lookup.h b/src/daemon/server-lookup.h
new file mode 100644
index 0000000..69fdacd
--- /dev/null
+++ b/src/daemon/server-lookup.h
@@ -0,0 +1,42 @@
+#ifndef fooserverlookuphfoo
+#define fooserverlookuphfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus object at path
+ * /org/pulseaudio/server_lookup. Implemented interfaces
+ * are org.pulseaudio.ServerLookup and org.freedesktop.DBus.Introspectable.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the ServerLookup interface
+ * documentation.
+ */
+
+#include <pulsecore/core.h>
+
+#include "daemon-conf.h"
+
+typedef struct pa_dbusobj_server_lookup pa_dbusobj_server_lookup;
+
+pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c, pa_daemon_conf_server_type_t server_type);
+void pa_dbusobj_server_lookup_free(pa_dbusobj_server_lookup *sl);
+
+#endif
\ No newline at end of file
diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c
index 940d0b6..8eab109 100644
--- a/src/pulse/client-conf.c
+++ b/src/pulse/client-conf.c
@@ -57,6 +57,7 @@ static const pa_client_conf default_conf = {
.default_sink = NULL,
.default_source = NULL,
.default_server = NULL,
+ .default_dbus_server = NULL,
.autospawn = TRUE,
.disable_shm = FALSE,
.cookie_file = NULL,
@@ -81,6 +82,7 @@ void pa_client_conf_free(pa_client_conf *c) {
pa_xfree(c->default_sink);
pa_xfree(c->default_source);
pa_xfree(c->default_server);
+ pa_xfree(c->default_dbus_server);
pa_xfree(c->cookie_file);
pa_xfree(c);
}
@@ -97,6 +99,7 @@ int pa_client_conf_load(pa_client_conf *c, const char *filename) {
{ "default-sink", pa_config_parse_string, &c->default_sink, NULL },
{ "default-source", pa_config_parse_string, &c->default_source, NULL },
{ "default-server", pa_config_parse_string, &c->default_server, NULL },
+ { "default-dbus-server", pa_config_parse_string, &c->default_dbus_server, NULL },
{ "autospawn", pa_config_parse_bool, &c->autospawn, NULL },
{ "cookie-file", pa_config_parse_string, &c->cookie_file, NULL },
{ "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
diff --git a/src/pulse/client-conf.h b/src/pulse/client-conf.h
index ab97dc6..618216f 100644
--- a/src/pulse/client-conf.h
+++ b/src/pulse/client-conf.h
@@ -22,12 +22,13 @@
USA.
***/
+#include <pulsecore/macro.h>
#include <pulsecore/native-common.h>
/* A structure containing configuration data for PulseAudio clients. */
typedef struct pa_client_conf {
- char *daemon_binary, *extra_arguments, *default_sink, *default_source, *default_server, *cookie_file;
+ char *daemon_binary, *extra_arguments, *default_sink, *default_source, *default_server, *default_dbus_server, *cookie_file;
pa_bool_t autospawn, disable_shm;
uint8_t cookie[PA_NATIVE_COOKIE_LENGTH];
pa_bool_t cookie_valid; /* non-zero, when cookie is valid */
diff --git a/src/pulse/client.conf.in b/src/pulse/client.conf.in
index 579bcc2..3340b0b 100644
--- a/src/pulse/client.conf.in
+++ b/src/pulse/client.conf.in
@@ -22,6 +22,7 @@
; default-sink =
; default-source =
; default-server =
+; default-dbus-server =
; autospawn = yes
; daemon-binary = @PA_BINARY@
commit c8d819a5adbe32e14d7f03a252bca6f7df01d795
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Jun 16 19:03:22 2009 +0300
dbus-protocol: Connection handling for local connections.
diff --git a/src/Makefile.am b/src/Makefile.am
index c56f760..5302bc2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -783,6 +783,7 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES = \
pulsecore/core-scache.c pulsecore/core-scache.h \
pulsecore/core-subscribe.c pulsecore/core-subscribe.h \
pulsecore/core.c pulsecore/core.h \
+ pulsecore/dbus-common.c pulsecore/dbus-common.h \
pulsecore/envelope.c pulsecore/envelope.h \
pulsecore/fdsem.c pulsecore/fdsem.h \
pulsecore/g711.c pulsecore/g711.h \
@@ -796,6 +797,7 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES = \
pulsecore/object.c pulsecore/object.h \
pulsecore/play-memblockq.c pulsecore/play-memblockq.h \
pulsecore/play-memchunk.c pulsecore/play-memchunk.h \
+ pulsecore/protocol-dbus.h \
pulsecore/resampler.c pulsecore/resampler.h \
pulsecore/rtpoll.c pulsecore/rtpoll.h \
pulsecore/rtsig.c pulsecore/rtsig.h \
diff --git a/src/daemon/daemon-conf.h b/src/daemon/daemon-conf.h
index 98db864..c4f78cb 100644
--- a/src/daemon/daemon-conf.h
+++ b/src/daemon/daemon-conf.h
@@ -28,6 +28,7 @@
#include <pulsecore/log.h>
#include <pulsecore/macro.h>
+#include <pulsecore/core.h>
#include <pulsecore/core-util.h>
#ifdef HAVE_SYS_RESOURCE_H
@@ -48,13 +49,6 @@ typedef enum pa_daemon_conf_cmd {
PA_CMD_CLEANUP_SHM
} pa_daemon_conf_cmd_t;
-typedef enum pa_daemon_conf_server_type {
- PA_SERVER_TYPE_UNSET,
- PA_SERVER_TYPE_USER,
- PA_SERVER_TYPE_SYSTEM,
- PA_SERVER_TYPE_NONE
-} pa_daemon_conf_server_type_t;
-
#ifdef HAVE_SYS_RESOURCE_H
typedef struct pa_rlimit {
rlim_t value;
@@ -81,7 +75,7 @@ typedef struct pa_daemon_conf {
log_meta,
log_time,
flat_volumes;
- pa_daemon_conf_server_type_t local_server_type;
+ pa_server_type_t local_server_type;
int exit_idle_time,
scache_idle_time,
auto_log_target,
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 1b6ed79..62214a5 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -1028,6 +1028,7 @@ after_caps_setup:
c->running_as_daemon = !!conf->daemonize;
c->disallow_exit = conf->disallow_exit;
c->flat_volumes = conf->flat_volumes;
+ c->server_type = conf->local_server_type;
pa_assert_se(pa_signal_init(pa_mainloop_get_api(mainloop)) == 0);
pa_signal_new(SIGINT, signal_callback, c);
@@ -1105,7 +1106,7 @@ after_caps_setup:
#ifdef HAVE_DBUS
if (!conf->system_instance) {
- if (!(server_lookup = pa_dbusobj_server_lookup_new(c, conf->local_server_type)))
+ if (!(server_lookup = pa_dbusobj_server_lookup_new(c)))
goto finish;
if (!(lookup_service_bus = register_dbus_name(c, DBUS_BUS_SESSION, "org.pulseaudio.PulseAudio")))
goto finish;
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
index 867c3a1..b53fda7 100644
--- a/src/daemon/server-lookup.c
+++ b/src/daemon/server-lookup.c
@@ -28,16 +28,18 @@
#include <pulse/client-conf.h>
#include <pulse/xmalloc.h>
+#include <pulsecore/core.h>
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-common.h>
#include <pulsecore/dbus-shared.h>
#include <pulsecore/macro.h>
#include "server-lookup.h"
struct pa_dbusobj_server_lookup {
+ pa_core *core;
pa_dbus_connection *conn;
pa_bool_t path_registered;
- pa_daemon_conf_server_type_t server_type;
};
static const char introspection[] =
@@ -46,7 +48,7 @@ static const char introspection[] =
" <!-- If you are looking for documentation make sure to check out\n"
" http://pulseaudio.org/wiki/DBusInterface -->\n"
" <interface name=\"org.pulseaudio.ServerLookup\">"
- " <method name=\"GetDBusServers\">"
+ " <method name=\"GetDBusAddress\">"
" <arg name=\"result\" type=\"s\" direction=\"out\"/>"
" </method>"
" </interface>"
@@ -99,40 +101,10 @@ oom:
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
-/* Caller frees the string. */
-static char *get_dbus_server_from_type(pa_daemon_conf_server_type_t server_type) {
- char *server_string = NULL;
- char *runtime_dir = NULL;
-
- switch (server_type) {
- case PA_SERVER_TYPE_USER:
- runtime_dir = pa_get_runtime_dir();
-
- if (!runtime_dir)
- return NULL;
-
- server_string = pa_sprintf_malloc("unix:path=%s/dbus_socket", runtime_dir);
- break;
-
- case PA_SERVER_TYPE_SYSTEM:
- server_string = pa_xstrdup("unix:path=/var/run/pulse/dbus_socket");
- break;
-
- case PA_SERVER_TYPE_NONE:
- server_string = pa_xnew0(char, 1);
- break;
-
- default:
- pa_assert_not_reached();
- }
-
- return server_string;
-}
-
-static DBusHandlerResult handle_get_dbus_servers(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+static DBusHandlerResult handle_get_dbus_address(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
DBusMessage *reply = NULL;
pa_client_conf *conf = NULL;
- char *server_string = NULL;
+ char *address = NULL;
pa_assert(conn);
pa_assert(msg);
@@ -148,12 +120,13 @@ static DBusHandlerResult handle_get_dbus_servers(DBusConnection *conn, DBusMessa
return DBUS_HANDLER_RESULT_HANDLED;
}
- server_string = pa_xstrdup(conf->default_dbus_server);
-
pa_client_conf_free(conf);
- if (!server_string) {
- if (!(server_string = get_dbus_server_from_type(sl->server_type))) {
+ if (conf->default_dbus_server) {
+ if (!(address = dbus_address_escape_value(conf->default_dbus_server)))
+ goto oom;
+ } else {
+ if (!(address = pa_get_dbus_address_from_server_type(sl->core->server_type))) {
if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "get_dbus_server_from_type() failed.")))
goto fail;
if (!dbus_connection_send(conn, reply, NULL))
@@ -165,15 +138,15 @@ static DBusHandlerResult handle_get_dbus_servers(DBusConnection *conn, DBusMessa
if (!(reply = dbus_message_new_method_return(msg)))
goto oom;
- if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &server_string, DBUS_TYPE_INVALID))
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID))
goto fail;
if (!dbus_connection_send(conn, reply, NULL))
goto oom;
- pa_log("Sent reply with server_string '%s'.", server_string);
+ pa_log_debug("handle_get_dbus_address(): Sent reply with address '%s'.", address);
- pa_xfree(server_string);
+ pa_xfree(address);
dbus_message_unref(reply);
@@ -183,7 +156,7 @@ fail:
if (conf)
pa_client_conf_free(conf);
- pa_xfree(server_string);
+ pa_xfree(address);
if (reply)
dbus_message_unref(reply);
@@ -194,7 +167,7 @@ oom:
if (conf)
pa_client_conf_free(conf);
- pa_xfree(server_string);
+ pa_xfree(address);
if (reply)
dbus_message_unref(reply);
@@ -214,8 +187,8 @@ static DBusHandlerResult message_cb(DBusConnection *conn, DBusMessage *msg, void
if (dbus_message_is_method_call(msg, "org.freedesktop.DBus.Introspectable", "Introspect"))
return handle_introspect(conn, msg, sl);
- if (dbus_message_is_method_call(msg, "org.pulseaudio.ServerLookup", "GetDBusServers"))
- return handle_get_dbus_servers(conn, msg, sl);
+ if (dbus_message_is_method_call(msg, "org.pulseaudio.ServerLookup", "GetDBusAddress"))
+ return handle_get_dbus_address(conn, msg, sl);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
@@ -229,15 +202,15 @@ static DBusObjectPathVTable vtable = {
.dbus_internal_pad4 = NULL
};
-pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c, pa_daemon_conf_server_type_t server_type) {
+pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c) {
pa_dbusobj_server_lookup *sl;
DBusError error;
dbus_error_init(&error);
sl = pa_xnew(pa_dbusobj_server_lookup, 1);
+ sl->core = c;
sl->path_registered = FALSE;
- sl->server_type = server_type;
if (!(sl->conn = pa_dbus_bus_get(c, DBUS_BUS_SESSION, &error)) || dbus_error_is_set(&error)) {
pa_log("Unable to contact D-Bus: %s: %s", error.name, error.message);
@@ -274,4 +247,4 @@ void pa_dbusobj_server_lookup_free(pa_dbusobj_server_lookup *sl) {
pa_dbus_connection_unref(sl->conn);
pa_xfree(sl);
-}
\ No newline at end of file
+}
diff --git a/src/daemon/server-lookup.h b/src/daemon/server-lookup.h
index 69fdacd..c930d5b 100644
--- a/src/daemon/server-lookup.h
+++ b/src/daemon/server-lookup.h
@@ -32,11 +32,9 @@
#include <pulsecore/core.h>
-#include "daemon-conf.h"
-
typedef struct pa_dbusobj_server_lookup pa_dbusobj_server_lookup;
-pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c, pa_daemon_conf_server_type_t server_type);
+pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c);
void pa_dbusobj_server_lookup_free(pa_dbusobj_server_lookup *sl);
-#endif
\ No newline at end of file
+#endif
diff --git a/src/modules/module-dbus-protocol.c b/src/modules/module-dbus-protocol.c
index 077f417..1455148 100644
--- a/src/modules/module-dbus-protocol.c
+++ b/src/modules/module-dbus-protocol.c
@@ -2,6 +2,8 @@
This file is part of PulseAudio.
Copyright 2009 Tanu Kaskinen
+ Copyright 2006 Lennart Poettering
+ Copyright 2006 Shams E. King
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
@@ -23,37 +25,487 @@
#include <config.h>
#endif
+#include <dbus/dbus.h>
+
+#include <pulse/mainloop-api.h>
+#include <pulse/timeval.h>
#include <pulse/xmalloc.h>
+#include <pulsecore/client.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-common.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/idxset.h>
#include <pulsecore/macro.h>
+#include <pulsecore/modargs.h>
#include <pulsecore/module.h>
#include "module-dbus-protocol-symdef.h"
PA_MODULE_DESCRIPTION("D-Bus interface");
-PA_MODULE_USAGE("<no module arguments>");
+PA_MODULE_USAGE(
+ "access=local|remote|local,remote "
+ "tcp_port=<port number>");
PA_MODULE_LOAD_ONCE(TRUE);
PA_MODULE_AUTHOR("Tanu Kaskinen");
PA_MODULE_VERSION(PACKAGE_VERSION);
+#define CLEANUP_INTERVAL 10 /* seconds */
+
+struct server;
+struct connection;
+
struct userdata {
pa_module *module;
+ pa_bool_t local_access;
+ pa_bool_t remote_access;
+ uint32_t tcp_port;
+
+ struct server *local_server;
+ struct server *tcp_server;
+
+ pa_idxset *connections;
+
+ pa_time_event *cleanup_event;
+};
+
+struct server {
+ struct userdata *userdata;
+ DBusServer *dbus_server;
+};
+
+struct connection {
+ struct server *server;
+ pa_dbus_wrap_connection *wrap_conn;
+ pa_client *client;
+};
+
+static const char* const valid_modargs[] = {
+ "access",
+ "tcp_port",
+ NULL
};
+static void connection_free(struct connection *c) {
+ pa_assert(c);
+
+ pa_client_free(c->client);
+ pa_assert_se(pa_idxset_remove_by_data(c->server->userdata->connections, c, NULL));
+ pa_dbus_wrap_connection_free(c->wrap_conn);
+ pa_xfree(c);
+}
+
+static void client_kill_cb(pa_client *c) {
+ struct connection *conn;
+
+ pa_assert(c);
+ pa_assert(c->userdata);
+
+ conn = c->userdata;
+ connection_free(conn);
+
+ pa_log_info("Connection killed.");
+}
+
+/* Called by D-Bus when a new client connection is received. */
+static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_connection, void *data) {
+ struct server *s = data;
+ struct connection *c;
+ pa_client_new_data new_data;
+ pa_client *client;
+
+ pa_assert(new_connection);
+ pa_assert(s);
+
+ pa_client_new_data_init(&new_data);
+ new_data.module = s->userdata->module;
+ new_data.driver = __FILE__;
+ pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: Fancier name. */
+ client = pa_client_new(s->userdata->module->core, &new_data);
+ pa_client_new_data_done(&new_data);
+
+ if (!client)
+ return;
+
+ c = pa_xnew(struct connection, 1);
+ c->server = s;
+ c->wrap_conn = pa_dbus_wrap_connection_new_from_existing(s->userdata->module->core->mainloop, new_connection);
+ c->client = client;
+
+ c->client->kill = client_kill_cb;
+ c->client->send_event = NULL;
+ c->client->userdata = c;
+
+ pa_idxset_put(s->userdata->connections, c, NULL);
+}
+
+/* Called by PA mainloop when a D-Bus fd watch event needs handling. */
+static void io_event_cb(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
+ unsigned int flags = 0;
+ DBusWatch *watch = userdata;
+
+#if HAVE_DBUS_WATCH_GET_UNIX_FD
+ pa_assert(fd == dbus_watch_get_unix_fd(watch));
+#else
+ pa_assert(fd == dbus_watch_get_fd(watch));
+#endif
+
+ if (!dbus_watch_get_enabled(watch)) {
+ pa_log_warn("Asked to handle disabled watch: %p %i", (void*) watch, fd);
+ return;
+ }
+
+ if (events & PA_IO_EVENT_INPUT)
+ flags |= DBUS_WATCH_READABLE;
+ if (events & PA_IO_EVENT_OUTPUT)
+ flags |= DBUS_WATCH_WRITABLE;
+ if (events & PA_IO_EVENT_HANGUP)
+ flags |= DBUS_WATCH_HANGUP;
+ if (events & PA_IO_EVENT_ERROR)
+ flags |= DBUS_WATCH_ERROR;
+
+ dbus_watch_handle(watch, flags);
+}
+
+/* Called by PA mainloop when a D-Bus timer event needs handling. */
+static void time_event_cb(pa_mainloop_api *mainloop, pa_time_event* e, const struct timeval *tv, void *userdata) {
+ DBusTimeout *timeout = userdata;
+
+ if (dbus_timeout_get_enabled(timeout)) {
+ struct timeval next = *tv;
+ dbus_timeout_handle(timeout);
+
+ /* restart it for the next scheduled time */
+ pa_timeval_add(&next, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+ mainloop->time_restart(e, &next);
+ }
+}
+
+/* Translates D-Bus fd watch event flags to PA IO event flags. */
+static pa_io_event_flags_t get_watch_flags(DBusWatch *watch) {
+ unsigned int flags;
+ pa_io_event_flags_t events = 0;
+
+ pa_assert(watch);
+
+ flags = dbus_watch_get_flags(watch);
+
+ /* no watch flags for disabled watches */
+ if (!dbus_watch_get_enabled(watch))
+ return PA_IO_EVENT_NULL;
+
+ if (flags & DBUS_WATCH_READABLE)
+ events |= PA_IO_EVENT_INPUT;
+ if (flags & DBUS_WATCH_WRITABLE)
+ events |= PA_IO_EVENT_OUTPUT;
+
+ return events | PA_IO_EVENT_HANGUP | PA_IO_EVENT_ERROR;
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is added. */
+static dbus_bool_t watch_add_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ ev = mainloop->io_new(
+ mainloop,
+#if HAVE_DBUS_WATCH_GET_UNIX_FD
+ dbus_watch_get_unix_fd(watch),
+#else
+ dbus_watch_get_fd(watch),
+#endif
+ get_watch_flags(watch), io_event_cb, watch);
+
+ dbus_watch_set_data(watch, ev, NULL);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is removed. */
+static void watch_remove_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ if ((ev = dbus_watch_get_data(watch)))
+ s->userdata->module->core->mainloop->io_free(ev);
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is toggled. */
+static void watch_toggled_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ pa_assert_se(ev = dbus_watch_get_data(watch));
+
+ /* get_watch_flags() checks if the watch is enabled */
+ s->userdata->module->core->mainloop->io_enable(ev, get_watch_flags(watch));
+}
+
+/* Called by D-Bus when a D-Bus timer event is added. */
+static dbus_bool_t timeout_add_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_time_event *ev;
+ struct timeval tv;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ if (!dbus_timeout_get_enabled(timeout))
+ return FALSE;
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ pa_gettimeofday(&tv);
+ pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+
+ ev = mainloop->time_new(mainloop, &tv, time_event_cb, timeout);
+
+ dbus_timeout_set_data(timeout, ev, NULL);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a D-Bus timer event is removed. */
+static void timeout_remove_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_time_event *ev;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ if ((ev = dbus_timeout_get_data(timeout)))
+ s->userdata->module->core->mainloop->time_free(ev);
+}
+
+/* Called by D-Bus when a D-Bus timer event is toggled. */
+static void timeout_toggled_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_time_event *ev;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ pa_assert_se(ev = dbus_timeout_get_data(timeout));
+
+ if (dbus_timeout_get_enabled(timeout)) {
+ struct timeval tv;
+
+ pa_gettimeofday(&tv);
+ pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+
+ mainloop->time_restart(ev, &tv);
+ } else
+ mainloop->time_restart(ev, NULL);
+}
+
+static void server_free(struct server *s) {
+ pa_assert(s);
+
+ if (s->dbus_server) {
+ dbus_server_disconnect(s->dbus_server);
+ dbus_server_unref(s->dbus_server);
+ }
+
+ pa_xfree(s);
+}
+
+static struct server *start_server(struct userdata *u, const char *address) {
+ /* XXX: We assume that when we unref the DBusServer instance at module
+ * shutdown, nobody else holds any references to it. If we stop assuming
+ * that someday, dbus_server_set_new_connection_function,
+ * dbus_server_set_watch_functions and dbus_server_set_timeout_functions
+ * calls should probably register free callbacks, instead of providing NULL
+ * as they do now. */
+
+ struct server *s = NULL;
+ DBusError error;
+
+ pa_assert(u);
+ pa_assert(address);
+
+ dbus_error_init(&error);
+
+ s = pa_xnew0(struct server, 1);
+ s->userdata = u;
+ s->dbus_server = dbus_server_listen(address, &error);
+
+ if (dbus_error_is_set(&error)) {
+ pa_log("dbus_server_listen() failed: %s: %s", error.name, error.message);
+ goto fail;
+ }
+
+ dbus_server_set_new_connection_function(s->dbus_server, connection_new_cb, s, NULL);
+
+ if (!dbus_server_set_watch_functions(s->dbus_server, watch_add_cb, watch_remove_cb, watch_toggled_cb, s, NULL)) {
+ pa_log("dbus_server_set_watch_functions() ran out of memory.");
+ goto fail;
+ }
+
+ if (!dbus_server_set_timeout_functions(s->dbus_server, timeout_add_cb, timeout_remove_cb, timeout_toggled_cb, s, NULL)) {
+ pa_log("dbus_server_set_timeout_functions() ran out of memory.");
+ goto fail;
+ }
+
+ return s;
+
+fail:
+ if (s)
+ server_free(s);
+
+ dbus_error_free(&error);
+
+ return NULL;
+}
+
+static struct server *start_local_server(struct userdata *u) {
+ struct server *s = NULL;
+ char *address = NULL;
+
+ pa_assert(u);
+
+ address = pa_get_dbus_address_from_server_type(u->module->core->server_type);
+
+ s = start_server(u, address); /* May return NULL */
+
+ pa_xfree(address);
+
+ return s;
+}
+
+static struct server *start_tcp_server(struct userdata *u) {
+ pa_log("start_tcp_server(): Not implemented!");
+ return NULL;
+}
+
+static int get_access_arg(pa_modargs *ma, pa_bool_t *local_access, pa_bool_t *remote_access) {
+ const char *value = NULL;
+
+ pa_assert(ma);
+ pa_assert(local_access);
+ pa_assert(remote_access);
+
+ if (!(value = pa_modargs_get_value(ma, "access", NULL)))
+ return 0;
+
+ if (!strcmp(value, "local")) {
+ *local_access = TRUE;
+ *remote_access = FALSE;
+ } else if (!strcmp(value, "remote")) {
+ *local_access = FALSE;
+ *remote_access = TRUE;
+ } else if (!strcmp(value, "local,remote")) {
+ *local_access = TRUE;
+ *local_access = TRUE;
+ } else
+ return -1;
+
+ return 0;
+}
+
+/* Frees dead client connections. Called every CLEANUP_INTERVAL seconds. */
+static void cleanup_cb(pa_mainloop_api *a, pa_time_event *e, const struct timeval *tv, void *userdata) {
+ struct userdata *u = userdata;
+ struct connection *conn = NULL;
+ uint32_t idx;
+ struct timeval cleanup_timeval;
+ unsigned free_count = 0;
+
+ for (conn = pa_idxset_first(u->connections, &idx); conn; conn = pa_idxset_next(u->connections, &idx)) {
+ if (!dbus_connection_get_is_connected(pa_dbus_wrap_connection_get(conn->wrap_conn))) {
+ connection_free(conn);
+ ++free_count;
+ }
+ }
+
+ if (free_count > 0)
+ pa_log_debug("Freed %u dead D-Bus client connections.", free_count);
+
+ pa_gettimeofday(&cleanup_timeval);
+ cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
+ u->module->core->mainloop->time_restart(e, &cleanup_timeval);
+}
+
int pa__init(pa_module *m) {
struct userdata *u = NULL;
+ pa_modargs *ma = NULL;
+ struct timeval cleanup_timeval;
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;
+ u->local_access = TRUE;
+ u->remote_access = FALSE;
+ u->tcp_port = PA_DBUS_DEFAULT_PORT;
+
+ if (get_access_arg(ma, &u->local_access, &u->remote_access) < 0) {
+ pa_log("Invalid access argument: '%s'", pa_modargs_get_value(ma, "access", NULL));
+ goto fail;
+ }
+
+ if (pa_modargs_get_value_u32(ma, "tcp_port", &u->tcp_port) < 0 || u->tcp_port < 1 || u->tcp_port > 49150) {
+ pa_log("Invalid tcp_port argument: '%s'", pa_modargs_get_value(ma, "tcp_port", NULL));
+ goto fail;
+ }
+
+ if (u->local_access && !(u->local_server = start_local_server(u))) {
+ pa_log("Starting the local D-Bus server failed.");
+ goto fail;
+ }
+
+ if (u->remote_access && !(u->tcp_server = start_tcp_server(u))) {
+ pa_log("Starting the D-Bus server for remote connections failed.");
+ goto fail;
+ }
- pa_log_notice("Hello, world!");
+ u->connections = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+
+ pa_gettimeofday(&cleanup_timeval);
+ cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
+ u->cleanup_event = m->core->mainloop->time_new(m->core->mainloop, &cleanup_timeval, cleanup_cb, u);
return 0;
+
+fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa__done(m);
+
+ return -1;
}
-void pa__done(pa_module*m) {
+/* Called by idxset when the connection set is freed. */
+static void connection_free_cb(void *p, void *userdata) {
+ struct connection *conn = p;
+
+ pa_assert(conn);
+
+ connection_free(conn);
+}
+
+void pa__done(pa_module *m) {
struct userdata *u;
pa_assert(m);
@@ -61,6 +513,18 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
+ if (u->cleanup_event)
+ m->core->mainloop->time_free(u->cleanup_event);
+
+ if (u->connections)
+ pa_idxset_free(u->connections, connection_free_cb, NULL);
+
+ if (u->tcp_server)
+ server_free(u->tcp_server);
+
+ if (u->local_server)
+ server_free(u->local_server);
+
pa_xfree(u);
m->userdata = NULL;
}
diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index c679444..f93652e 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -42,6 +42,13 @@ typedef struct pa_core pa_core;
#include <pulsecore/sink-input.h>
#include <pulsecore/msgobject.h>
+typedef enum pa_server_type {
+ PA_SERVER_TYPE_UNSET,
+ PA_SERVER_TYPE_USER,
+ PA_SERVER_TYPE_SYSTEM,
+ PA_SERVER_TYPE_NONE
+} pa_server_type_t;
+
typedef enum pa_core_state {
PA_CORE_STARTUP,
PA_CORE_RUNNING,
@@ -152,6 +159,8 @@ struct pa_core {
pa_resample_method_t resample_method;
int realtime_priority;
+ pa_server_type_t server_type;
+
/* hooks */
pa_hook hooks[PA_CORE_HOOK_MAX];
};
diff --git a/src/pulsecore/dbus-common.c b/src/pulsecore/dbus-common.c
new file mode 100644
index 0000000..05931e0
--- /dev/null
+++ b/src/pulsecore/dbus-common.c
@@ -0,0 +1,73 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulsecore/core-util.h>
+
+#include "dbus-common.h"
+
+char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type) {
+ char *address = NULL;
+ char *runtime_path = NULL;
+ char *escaped_path = NULL;
+
+ switch (server_type) {
+ case PA_SERVER_TYPE_USER:
+ if (!(runtime_path = pa_runtime_path(PA_DBUS_SOCKET_NAME))) {
+ pa_log("pa_runtime_path() failed.");
+ break;
+ }
+
+ if (!(escaped_path = dbus_address_escape_value(runtime_path))) {
+ pa_log("dbus_address_escape_value() failed.");
+ break;
+ }
+
+ address = pa_sprintf_malloc("unix:path=%s", escaped_path);
+ break;
+
+ case PA_SERVER_TYPE_SYSTEM:
+ if (!(escaped_path = dbus_address_escape_value(PA_DBUS_SYSTEM_SOCKET_PATH))) {
+ pa_log("dbus_address_escape_value() failed.");
+ break;
+ }
+
+ address = pa_sprintf_malloc("unix:path=%s", escaped_path);
+ break;
+
+ case PA_SERVER_TYPE_NONE:
+ address = pa_xnew0(char, 1);
+ break;
+
+ default:
+ pa_assert_not_reached();
+ }
+
+ pa_xfree(runtime_path);
+ pa_xfree(escaped_path);
+
+ return address;
+}
diff --git a/src/daemon/server-lookup.h b/src/pulsecore/dbus-common.h
similarity index 57%
copy from src/daemon/server-lookup.h
copy to src/pulsecore/dbus-common.h
index 69fdacd..26bd05d 100644
--- a/src/daemon/server-lookup.h
+++ b/src/pulsecore/dbus-common.h
@@ -1,5 +1,5 @@
-#ifndef fooserverlookuphfoo
-#define fooserverlookuphfoo
+#ifndef foodbuscommonhfoo
+#define foodbuscommonhfoo
/***
This file is part of PulseAudio.
@@ -22,21 +22,18 @@
USA.
***/
-/* This object implements the D-Bus object at path
- * /org/pulseaudio/server_lookup. Implemented interfaces
- * are org.pulseaudio.ServerLookup and org.freedesktop.DBus.Introspectable.
- *
- * See http://pulseaudio.org/wiki/DBusInterface for the ServerLookup interface
- * documentation.
- */
-
#include <pulsecore/core.h>
+#include <pulsecore/macro.h>
-#include "daemon-conf.h"
+#define PA_DBUS_DEFAULT_PORT 24883
+#define PA_DBUS_SOCKET_NAME "dbus_socket"
-typedef struct pa_dbusobj_server_lookup pa_dbusobj_server_lookup;
+#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
-pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c, pa_daemon_conf_server_type_t server_type);
-void pa_dbusobj_server_lookup_free(pa_dbusobj_server_lookup *sl);
+/* Returns the default address of the server type in the escaped form. For
+ * PA_SERVER_TYPE_NONE an empty string is returned. The caller frees the
+ * string. This function may fail in some rare cases, in which case NULL is
+ * returned. */
+char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type);
-#endif
\ No newline at end of file
+#endif
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index ece36de..d8bd0e0 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -276,6 +276,27 @@ pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBus
return pconn;
}
+pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *m, DBusConnection *conn) {
+ pa_dbus_wrap_connection *pconn;
+
+ pa_assert(m);
+ pa_assert(conn);
+
+ pconn = pa_xnew(pa_dbus_wrap_connection, 1);
+ pconn->mainloop = m;
+ pconn->connection = dbus_connection_ref(conn);
+
+ dbus_connection_set_exit_on_disconnect(conn, FALSE);
+ dbus_connection_set_dispatch_status_function(conn, dispatch_status, pconn, NULL);
+ dbus_connection_set_watch_functions(conn, add_watch, remove_watch, toggle_watch, pconn, NULL);
+ dbus_connection_set_timeout_functions(conn, add_timeout, remove_timeout, toggle_timeout, pconn, NULL);
+ dbus_connection_set_wakeup_main_function(conn, wakeup_main, pconn, NULL);
+
+ pconn->dispatch_event = pconn->mainloop->defer_new(pconn->mainloop, dispatch_cb, conn);
+
+ return pconn;
+}
+
void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* c) {
pa_assert(c);
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 55cda7a..cd08485 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -31,6 +31,7 @@
typedef struct pa_dbus_wrap_connection pa_dbus_wrap_connection;
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *mainloop, DBusBusType type, DBusError *error);
+pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *mainloop, DBusConnection *conn);
void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* conn);
DBusConnection* pa_dbus_wrap_connection_get(pa_dbus_wrap_connection *conn);
commit 123c6a3c6ffc9903c0855e38445fc3b6588311ce
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Jun 19 10:28:08 2009 +0300
dbus-common: Implement infrastructure for registering D-Bus objects on all
client connections and for receiving method calls from clients.
diff --git a/src/Makefile.am b/src/Makefile.am
index 5302bc2..d28ffa1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -783,7 +783,6 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES = \
pulsecore/core-scache.c pulsecore/core-scache.h \
pulsecore/core-subscribe.c pulsecore/core-subscribe.h \
pulsecore/core.c pulsecore/core.h \
- pulsecore/dbus-common.c pulsecore/dbus-common.h \
pulsecore/envelope.c pulsecore/envelope.h \
pulsecore/fdsem.c pulsecore/fdsem.h \
pulsecore/g711.c pulsecore/g711.h \
@@ -830,7 +829,9 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_LDFLAGS += $(X11_LIBS)
endif
if HAVE_DBUS
-libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES += pulsecore/dbus-shared.c pulsecore/dbus-shared.h
+libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES += \
+ pulsecore/dbus-shared.c pulsecore/dbus-shared.h \
+ pulsecore/dbus-common.c pulsecore/dbus-common.h
libpulsecore_ at PA_MAJORMINORMICRO@_la_CFLAGS += $(DBUS_CFLAGS)
libpulsecore_ at PA_MAJORMINORMICRO@_la_LIBADD += $(DBUS_LIBS)
endif
@@ -1220,7 +1221,9 @@ module_http_protocol_unix_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMI
# D-Bus protocol
-module_dbus_protocol_la_SOURCES = modules/module-dbus-protocol.c
+module_dbus_protocol_la_SOURCES = \
+ pulsecore/dbus-objs/core.c pulsecore/dbus-objs/core.h \
+ modules/module-dbus-protocol.c
module_dbus_protocol_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
module_dbus_protocol_la_LDFLAGS = $(MODULE_LDFLAGS)
module_dbus_protocol_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
index b53fda7..2d2d8ce 100644
--- a/src/daemon/server-lookup.c
+++ b/src/daemon/server-lookup.c
@@ -48,7 +48,7 @@ static const char introspection[] =
" <!-- If you are looking for documentation make sure to check out\n"
" http://pulseaudio.org/wiki/DBusInterface -->\n"
" <interface name=\"org.pulseaudio.ServerLookup\">"
- " <method name=\"GetDBusAddress\">"
+ " <method name=\"GetAddress\">"
" <arg name=\"result\" type=\"s\" direction=\"out\"/>"
" </method>"
" </interface>"
@@ -101,7 +101,7 @@ oom:
return DBUS_HANDLER_RESULT_NEED_MEMORY;
}
-static DBusHandlerResult handle_get_dbus_address(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+static DBusHandlerResult handle_get_address(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
DBusMessage *reply = NULL;
pa_client_conf *conf = NULL;
char *address = NULL;
@@ -187,8 +187,8 @@ static DBusHandlerResult message_cb(DBusConnection *conn, DBusMessage *msg, void
if (dbus_message_is_method_call(msg, "org.freedesktop.DBus.Introspectable", "Introspect"))
return handle_introspect(conn, msg, sl);
- if (dbus_message_is_method_call(msg, "org.pulseaudio.ServerLookup", "GetDBusAddress"))
- return handle_get_dbus_address(conn, msg, sl);
+ if (dbus_message_is_method_call(msg, "org.pulseaudio.ServerLookup", "GetAddress"))
+ return handle_get_address(conn, msg, sl);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
diff --git a/src/modules/module-dbus-protocol.c b/src/modules/module-dbus-protocol.c
index 1455148..74dfeef 100644
--- a/src/modules/module-dbus-protocol.c
+++ b/src/modules/module-dbus-protocol.c
@@ -40,6 +40,8 @@
#include <pulsecore/modargs.h>
#include <pulsecore/module.h>
+#include <pulsecore/dbus-objs/core.h>
+
#include "module-dbus-protocol-symdef.h"
PA_MODULE_DESCRIPTION("D-Bus interface");
@@ -67,6 +69,8 @@ struct userdata {
pa_idxset *connections;
pa_time_event *cleanup_event;
+
+ pa_dbusobj_core *core_object;
};
struct server {
@@ -89,12 +93,15 @@ static const char* const valid_modargs[] = {
static void connection_free(struct connection *c) {
pa_assert(c);
+ pa_assert_se(pa_dbus_unregister_connection(c->server->userdata->module->core, pa_dbus_wrap_connection_get(c->wrap_conn)) >= 0);
+
pa_client_free(c->client);
pa_assert_se(pa_idxset_remove_by_data(c->server->userdata->connections, c, NULL));
pa_dbus_wrap_connection_free(c->wrap_conn);
pa_xfree(c);
}
+/* Called from pa_client_kill(). */
static void client_kill_cb(pa_client *c) {
struct connection *conn;
@@ -120,7 +127,7 @@ static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_conne
pa_client_new_data_init(&new_data);
new_data.module = s->userdata->module;
new_data.driver = __FILE__;
- pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: Fancier name. */
+ pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: It's probably possible to generate a fancier name. Other props? */
client = pa_client_new(s->userdata->module->core, &new_data);
pa_client_new_data_done(&new_data);
@@ -133,10 +140,12 @@ static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_conne
c->client = client;
c->client->kill = client_kill_cb;
- c->client->send_event = NULL;
+ c->client->send_event = NULL; /* TODO: Implement this. */
c->client->userdata = c;
pa_idxset_put(s->userdata->connections, c, NULL);
+
+ pa_assert_se(pa_dbus_register_connection(s->userdata->module->core, new_connection) >= 0);
}
/* Called by PA mainloop when a D-Bus fd watch event needs handling. */
@@ -485,6 +494,8 @@ int pa__init(pa_module *m) {
cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
u->cleanup_event = m->core->mainloop->time_new(m->core->mainloop, &cleanup_timeval, cleanup_cb, u);
+ u->core_object = pa_dbusobj_core_new(m->core);
+
return 0;
fail:
@@ -513,6 +524,9 @@ void pa__done(pa_module *m) {
if (!(u = m->userdata))
return;
+ if (u->core_object)
+ pa_dbusobj_core_free(u->core_object);
+
if (u->cleanup_event)
m->core->mainloop->time_free(u->cleanup_event);
diff --git a/src/pulsecore/dbus-common.c b/src/pulsecore/dbus-common.c
index 05931e0..350add8 100644
--- a/src/pulsecore/dbus-common.c
+++ b/src/pulsecore/dbus-common.c
@@ -25,10 +25,35 @@
#include <dbus/dbus.h>
+#include <pulse/xmalloc.h>
+
#include <pulsecore/core-util.h>
+#include <pulsecore/hashmap.h>
+#include <pulsecore/idxset.h>
+#include <pulsecore/strbuf.h>
#include "dbus-common.h"
+struct dbus_state {
+ pa_core *core;
+ pa_hashmap *objects; /* Object path -> struct object_entry */
+ pa_idxset *connections; /* DBusConnections */
+};
+
+struct object_entry {
+ char *path;
+ pa_hashmap *interfaces; /* Interface name -> struct interface_entry */
+ char *introspection;
+};
+
+struct interface_entry {
+ char *name;
+ char **methods;
+ char *introspection_snippet;
+ DBusObjectPathMessageFunction receive;
+ void *userdata;
+};
+
char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type) {
char *address = NULL;
char *runtime_path = NULL;
@@ -71,3 +96,408 @@ char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type) {
return address;
}
+
+static void update_introspection(struct object_entry *oe) {
+ pa_strbuf *buf;
+ void *state = NULL;
+ struct interface_entry *iface_entry = NULL;
+
+ pa_assert(oe);
+
+ buf = pa_strbuf_new();
+ pa_strbuf_puts(buf, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE);
+ pa_strbuf_puts(buf, "<node>");
+
+ while ((iface_entry = pa_hashmap_iterate(oe->interfaces, &state, NULL)))
+ pa_strbuf_puts(buf, iface_entry->introspection_snippet);
+
+ pa_strbuf_puts(buf, " <interface name=\"org.freedesktop.DBus.Introspectable\">"
+ " <method name=\"Introspect\">"
+ " <arg name=\"data\" type=\"s\" direction=\"out\"/>"
+ " </method>"
+ " </interface>");
+
+ pa_strbuf_puts(buf, "</node>");
+
+ pa_xfree(oe->introspection);
+ oe->introspection = pa_strbuf_tostring_free(buf);
+}
+
+static struct interface_entry *find_interface(struct object_entry *obj_entry, DBusMessage *msg) {
+ const char *interface;
+ struct interface_entry *iface_entry;
+ void *state = NULL;
+
+ pa_assert(obj_entry);
+ pa_assert(msg);
+
+ if ((interface = dbus_message_get_interface(msg)))
+ return pa_hashmap_get(obj_entry->interfaces, interface);
+
+ /* NULL interface, we'll have to search for an interface that contains the
+ * method. */
+
+ while ((iface_entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ char *method;
+ char **pos = iface_entry->methods;
+
+ while ((method = *pos++)) {
+ if (!strcmp(dbus_message_get_member(msg), method))
+ return iface_entry;
+ }
+ }
+
+ return NULL;
+}
+
+static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
+ struct dbus_state *dbus_state = user_data;
+ struct object_entry *obj_entry;
+ struct interface_entry *iface_entry;
+ DBusMessage *reply = NULL;
+
+ pa_assert(connection);
+ pa_assert(message);
+ pa_assert(dbus_state);
+ pa_assert(dbus_state->objects);
+
+ if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ pa_assert_se((obj_entry = pa_hashmap_get(dbus_state->objects, dbus_message_get_path(message))));
+
+ if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
+ if (!(reply = dbus_message_new_method_return(message)))
+ goto oom;
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &obj_entry->introspection, DBUS_TYPE_INVALID))
+ goto fail;
+
+ if (!dbus_connection_send(connection, reply, NULL))
+ goto oom;
+
+ pa_log_debug("%s.%s handled.", obj_entry->path, "Introspect");
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ if (!(iface_entry = find_interface(obj_entry, message)))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ return iface_entry->receive(connection, message, iface_entry->userdata);
+
+fail:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+oom:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+static DBusObjectPathVTable vtable = {
+ .unregister_function = NULL,
+ .message_function = handle_message_cb,
+ .dbus_internal_pad1 = NULL,
+ .dbus_internal_pad2 = NULL,
+ .dbus_internal_pad3 = NULL,
+ .dbus_internal_pad4 = NULL
+};
+
+static void register_object(struct dbus_state *dbus_state, struct object_entry *obj_entry) {
+ DBusConnection *conn;
+ void *state = NULL;
+
+ pa_assert(dbus_state);
+ pa_assert(obj_entry);
+
+ if (!dbus_state->connections)
+ return;
+
+ while ((conn = pa_idxset_iterate(dbus_state->connections, &state, NULL))) {
+ if (!dbus_connection_register_object_path(conn, obj_entry->path, &vtable, dbus_state))
+ pa_log_debug("dbus_connection_register_object_path() failed.");
+ }
+}
+
+static char **copy_methods(const char * const *methods) {
+ unsigned n = 0;
+ char **copy;
+ unsigned i;
+
+ while (methods[n++])
+ ;
+
+ copy = pa_xnew0(char *, n);
+
+ for (i = 0; i < n - 1; ++i)
+ copy[i] = pa_xstrdup(methods[i]);
+
+ return copy;
+}
+
+int pa_dbus_add_interface(pa_core *c, const char* path, const char* interface, const char * const *methods, const char* introspection_snippet, DBusObjectPathMessageFunction receive_cb, void *userdata) {
+ struct dbus_state *dbus_state;
+ pa_hashmap *objects;
+ struct object_entry *obj_entry;
+ struct interface_entry *iface_entry;
+ pa_bool_t state_created = FALSE;
+ pa_bool_t object_map_created = FALSE;
+ pa_bool_t obj_entry_created = FALSE;
+
+ pa_assert(c);
+ pa_assert(path);
+ pa_assert(introspection_snippet);
+ pa_assert(receive_cb);
+
+ if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state"))) {
+ dbus_state = pa_xnew0(struct dbus_state, 1);
+ dbus_state->core = c;
+ pa_hashmap_put(c->shared, "dbus-state", dbus_state);
+ state_created = TRUE;
+ }
+
+ if (!(objects = dbus_state->objects)) {
+ objects = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ dbus_state->objects = objects;
+ object_map_created = TRUE;
+ }
+
+ if (!(obj_entry = pa_hashmap_get(objects, path))) {
+ obj_entry = pa_xnew(struct object_entry, 1);
+ obj_entry->path = pa_xstrdup(path);
+ obj_entry->interfaces = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ obj_entry->introspection = NULL;
+ pa_hashmap_put(objects, path, obj_entry);
+ obj_entry_created = TRUE;
+ }
+
+ if (pa_hashmap_get(obj_entry->interfaces, interface) != NULL)
+ goto fail; /* The interface was already registered. */
+
+ iface_entry = pa_xnew(struct interface_entry, 1);
+ iface_entry->name = pa_xstrdup(interface);
+ iface_entry->methods = copy_methods(methods);
+ iface_entry->introspection_snippet = pa_xstrdup(introspection_snippet);
+ iface_entry->receive = receive_cb;
+ iface_entry->userdata = userdata;
+ pa_hashmap_put(obj_entry->interfaces, iface_entry->name, iface_entry);
+
+ update_introspection(obj_entry);
+
+ if (obj_entry_created)
+ register_object(dbus_state, obj_entry);
+
+ return 0;
+
+fail:
+ if (obj_entry_created) {
+ pa_hashmap_remove(objects, path);
+ pa_xfree(obj_entry);
+ }
+
+ if (object_map_created) {
+ dbus_state->objects = NULL;
+ pa_hashmap_free(objects, NULL, NULL);
+ }
+
+ if (state_created) {
+ pa_hashmap_remove(c->shared, "dbus-state");
+ pa_xfree(dbus_state);
+ }
+
+ return -1;
+}
+
+static void unregister_object(struct dbus_state *dbus_state, struct object_entry *obj_entry) {
+ DBusConnection *conn;
+ void *state = NULL;
+
+ pa_assert(dbus_state);
+ pa_assert(obj_entry);
+
+ if (!dbus_state->connections)
+ return;
+
+ while ((conn = pa_idxset_iterate(dbus_state->connections, &state, NULL))) {
+ if (!dbus_connection_unregister_object_path(conn, obj_entry->path))
+ pa_log_debug("dbus_connection_unregister_object_path() failed.");
+ }
+}
+
+static void free_methods(char **methods) {
+ char **pos = methods;
+
+ while (*pos++)
+ pa_xfree(*pos);
+
+ pa_xfree(methods);
+}
+
+int pa_dbus_remove_interface(pa_core *c, const char* path, const char* interface) {
+ struct dbus_state *dbus_state;
+ pa_hashmap *objects;
+ struct object_entry *obj_entry;
+ struct interface_entry *iface_entry;
+
+ pa_assert(c);
+ pa_assert(path);
+ pa_assert(interface);
+
+ if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state")))
+ return -1;
+
+ if (!(objects = dbus_state->objects))
+ return -1;
+
+ if (!(obj_entry = pa_hashmap_get(objects, path)))
+ return -1;
+
+ if (!(iface_entry = pa_hashmap_remove(obj_entry->interfaces, interface)))
+ return -1;
+
+ update_introspection(obj_entry);
+
+ pa_xfree(iface_entry->name);
+ free_methods(iface_entry->methods);
+ pa_xfree(iface_entry->introspection_snippet);
+ pa_xfree(iface_entry);
+
+ if (pa_hashmap_isempty(obj_entry->interfaces)) {
+ unregister_object(dbus_state, obj_entry);
+
+ pa_hashmap_remove(objects, path);
+ pa_xfree(obj_entry->path);
+ pa_hashmap_free(obj_entry->interfaces, NULL, NULL);
+ pa_xfree(obj_entry->introspection);
+ pa_xfree(obj_entry);
+ }
+
+ if (pa_hashmap_isempty(objects)) {
+ dbus_state->objects = NULL;
+ pa_hashmap_free(objects, NULL, NULL);
+ }
+
+ if (!dbus_state->objects && !dbus_state->connections) {
+ pa_hashmap_remove(c->shared, "dbus-state");
+ pa_xfree(dbus_state);
+ }
+
+ return 0;
+}
+
+static void register_all_objects(struct dbus_state *dbus_state, DBusConnection *conn) {
+ struct object_entry *obj_entry;
+ void *state = NULL;
+
+ pa_assert(dbus_state);
+ pa_assert(conn);
+
+ if (!dbus_state->objects)
+ return;
+
+ while ((obj_entry = pa_hashmap_iterate(dbus_state->objects, &state, NULL))) {
+ if (!dbus_connection_register_object_path(conn, obj_entry->path, &vtable, dbus_state))
+ pa_log_debug("dbus_connection_register_object_path() failed.");
+ }
+}
+
+int pa_dbus_register_connection(pa_core *c, DBusConnection *conn) {
+ struct dbus_state *dbus_state;
+ pa_idxset *connections;
+ pa_bool_t state_created = FALSE;
+ pa_bool_t connection_set_created = FALSE;
+
+ pa_assert(c);
+ pa_assert(conn);
+
+ if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state"))) {
+ dbus_state = pa_xnew0(struct dbus_state, 1);
+ dbus_state->core = c;
+ pa_hashmap_put(c->shared, "dbus-state", dbus_state);
+ state_created = TRUE;
+ }
+
+ if (!(connections = dbus_state->connections)) {
+ connections = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ dbus_state->connections = connections;
+ connection_set_created = TRUE;
+ }
+
+ if (pa_idxset_get_by_data(connections, conn, NULL))
+ goto fail; /* The connection was already registered. */
+
+ register_all_objects(dbus_state, conn);
+
+ pa_idxset_put(connections, dbus_connection_ref(conn), NULL);
+
+ return 0;
+
+fail:
+ if (connection_set_created) {
+ dbus_state->connections = NULL;
+ pa_idxset_free(connections, NULL, NULL);
+ }
+
+ if (state_created) {
+ pa_hashmap_remove(c->shared, "dbus-state");
+ pa_xfree(dbus_state);
+ }
+
+ return -1;
+}
+
+static void unregister_all_objects(struct dbus_state *dbus_state, DBusConnection *conn) {
+ struct object_entry *obj_entry;
+ void *state = NULL;
+
+ pa_assert(dbus_state);
+ pa_assert(conn);
+
+ if (!dbus_state->objects)
+ return;
+
+ while ((obj_entry = pa_hashmap_iterate(dbus_state->objects, &state, NULL))) {
+ if (!dbus_connection_unregister_object_path(conn, obj_entry->path))
+ pa_log_debug("dus_connection_unregister_object_path() failed.");
+ }
+}
+
+int pa_dbus_unregister_connection(pa_core *c, DBusConnection *conn) {
+ struct dbus_state *dbus_state;
+ pa_idxset *connections;
+
+ pa_assert(c);
+ pa_assert(conn);
+
+ if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state")))
+ return -1;
+
+ if (!(connections = dbus_state->connections))
+ return -1;
+
+ if (!pa_idxset_remove_by_data(connections, conn, NULL))
+ return -1;
+
+ unregister_all_objects(dbus_state, conn);
+
+ dbus_connection_unref(conn);
+
+ if (pa_idxset_isempty(connections)) {
+ dbus_state->connections = NULL;
+ pa_idxset_free(connections, NULL, NULL);
+ }
+
+ if (!dbus_state->objects && !dbus_state->connections) {
+ pa_hashmap_remove(c->shared, "dbus-state");
+ pa_xfree(dbus_state);
+ }
+
+ return 0;
+}
diff --git a/src/pulsecore/dbus-common.h b/src/pulsecore/dbus-common.h
index 26bd05d..23c7c22 100644
--- a/src/pulsecore/dbus-common.h
+++ b/src/pulsecore/dbus-common.h
@@ -22,6 +22,8 @@
USA.
***/
+#include <dbus/dbus.h>
+
#include <pulsecore/core.h>
#include <pulsecore/macro.h>
@@ -30,10 +32,42 @@
#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
+/* NOTE: These functions may only be called from the main thread. */
+
/* Returns the default address of the server type in the escaped form. For
* PA_SERVER_TYPE_NONE an empty string is returned. The caller frees the
* string. This function may fail in some rare cases, in which case NULL is
* returned. */
char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type);
+/* Registers the given interface to the given object path. This is additive: it
+ * doesn't matter whether or not the object has already been registered; if it
+ * is, then its interface set is just extended.
+ *
+ * Introspection requests are handled automatically. For that to work, the
+ * caller gives an XML snippet containing the interface introspection element.
+ * All interface snippets are automatically combined to provide the final
+ * introspection string.
+ *
+ * The introspection snippet contains the interface name and the methods, but
+ * since this function doesn't do XML parsing, the interface name and the set
+ * of method names have to be supplied separately. If the interface doesn't
+ * contain any methods, NULL may be given as the methods parameter, otherwise
+ * the methods parameter must be a NULL-terminated array of strings.
+ *
+ * Fails and returns a negative number if the object already has the interface
+ * registered. */
+int pa_dbus_add_interface(pa_core *c, const char* path, const char* interface, const char * const *methods, const char* introspection_snippet, DBusObjectPathMessageFunction receive_cb, void *userdata);
+
+/* Returns a negative number if the given object doesn't have the given
+ * interface registered. */
+int pa_dbus_remove_interface(pa_core *c, const char* path, const char* interface);
+
+/* Fails and returns a negative number if the connection is already
+ * registered. */
+int pa_dbus_register_connection(pa_core *c, DBusConnection *conn);
+
+/* Returns a negative number if the connection wasn't registered. */
+int pa_dbus_unregister_connection(pa_core *c, DBusConnection *conn);
+
#endif
diff --git a/src/pulsecore/dbus-objs/core.c b/src/pulsecore/dbus-objs/core.c
new file mode 100644
index 0000000..f59c478
--- /dev/null
+++ b/src/pulsecore/dbus-objs/core.c
@@ -0,0 +1,120 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/dbus-common.h>
+#include <pulsecore/macro.h>
+
+#include "core.h"
+
+#define OBJECT_NAME "/org/pulseaudio/core"
+#define INTERFACE_NAME "org.pulseaudio.Core"
+
+struct pa_dbusobj_core {
+ pa_core *core;
+};
+
+static const char *introspection_snippet =
+ " <interface name=\""INTERFACE_NAME"\">"
+ " <method name=\"Test\">"
+ " <arg name=\"result\" type=\"s\" direction=\"out\"/>"
+ " </method>"
+ " </interface>";
+
+static const char *methods[] = {
+ "Test",
+ NULL
+};
+
+static DBusHandlerResult handle_test(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
+ DBusMessage *reply = NULL;
+ const char *reply_message = "Hello!";
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!(reply = dbus_message_new_method_return(msg)))
+ goto oom;
+
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &reply_message, DBUS_TYPE_INVALID))
+ goto fail;
+
+ if (!dbus_connection_send(conn, reply, NULL))
+ goto oom;
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+fail:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+oom:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+static DBusHandlerResult receive_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
+ pa_dbusobj_core *c = user_data;
+
+ pa_assert(connection);
+ pa_assert(message);
+ pa_assert(c);
+
+ if (dbus_message_is_method_call(message, INTERFACE_NAME, "Test"))
+ return handle_test(connection, message, c);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+pa_dbusobj_core *pa_dbusobj_core_new(pa_core *core) {
+ pa_dbusobj_core *c;
+
+ pa_assert(core);
+
+ c = pa_xnew(pa_dbusobj_core, 1);
+ c->core = core;
+
+ pa_dbus_add_interface(core, OBJECT_NAME, INTERFACE_NAME, methods, introspection_snippet, receive_cb, c);
+
+ return c;
+}
+
+void pa_dbusobj_core_free(pa_dbusobj_core *c) {
+ pa_assert(c);
+
+ pa_dbus_remove_interface(c->core, OBJECT_NAME, INTERFACE_NAME);
+
+ pa_xfree(c);
+}
diff --git a/src/pulsecore/dbus-common.h b/src/pulsecore/dbus-objs/core.h
similarity index 59%
copy from src/pulsecore/dbus-common.h
copy to src/pulsecore/dbus-objs/core.h
index 26bd05d..8e59cc3 100644
--- a/src/pulsecore/dbus-common.h
+++ b/src/pulsecore/dbus-objs/core.h
@@ -1,5 +1,5 @@
-#ifndef foodbuscommonhfoo
-#define foodbuscommonhfoo
+#ifndef foodbusobjscorehfoo
+#define foodbusobjscorehfoo
/***
This file is part of PulseAudio.
@@ -22,18 +22,18 @@
USA.
***/
-#include <pulsecore/core.h>
-#include <pulsecore/macro.h>
+/* This object implements the D-Bus object at path /org/pulseaudio/core.
+ * The implemented interface is org.pulseaudio.Core.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Core interface
+ * documentation.
+ */
-#define PA_DBUS_DEFAULT_PORT 24883
-#define PA_DBUS_SOCKET_NAME "dbus_socket"
+#include <pulsecore/core.h>
-#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
+typedef struct pa_dbusobj_core pa_dbusobj_core;
-/* Returns the default address of the server type in the escaped form. For
- * PA_SERVER_TYPE_NONE an empty string is returned. The caller frees the
- * string. This function may fail in some rare cases, in which case NULL is
- * returned. */
-char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type);
+pa_dbusobj_core *pa_dbusobj_core_new(pa_core *core);
+void pa_dbusobj_core_free(pa_dbusobj_core *c);
#endif
commit 3c6a0acc98a8326ad7a19c29005bba353396a88b
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Jun 19 15:17:57 2009 +0300
dbus-protocol: Implement TCP server startup.
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
index 2d2d8ce..33d6b24 100644
--- a/src/daemon/server-lookup.c
+++ b/src/daemon/server-lookup.c
@@ -120,14 +120,11 @@ static DBusHandlerResult handle_get_address(DBusConnection *conn, DBusMessage *m
return DBUS_HANDLER_RESULT_HANDLED;
}
- pa_client_conf_free(conf);
-
if (conf->default_dbus_server) {
- if (!(address = dbus_address_escape_value(conf->default_dbus_server)))
- goto oom;
+ address = pa_xstrdup(conf->default_dbus_server);
} else {
if (!(address = pa_get_dbus_address_from_server_type(sl->core->server_type))) {
- if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "get_dbus_server_from_type() failed.")))
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "PulseAudio internal error: get_dbus_server_from_type() failed.")))
goto fail;
if (!dbus_connection_send(conn, reply, NULL))
goto oom;
@@ -144,10 +141,8 @@ static DBusHandlerResult handle_get_address(DBusConnection *conn, DBusMessage *m
if (!dbus_connection_send(conn, reply, NULL))
goto oom;
- pa_log_debug("handle_get_dbus_address(): Sent reply with address '%s'.", address);
-
+ pa_client_conf_free(conf);
pa_xfree(address);
-
dbus_message_unref(reply);
return DBUS_HANDLER_RESULT_HANDLED;
diff --git a/src/daemon/system.pa.in b/src/daemon/system.pa.in
index 5541bbe..0ca32bd 100755
--- a/src/daemon/system.pa.in
+++ b/src/daemon/system.pa.in
@@ -33,7 +33,8 @@ load-module module-detect
load-module module-esound-protocol-unix
.endif
.ifexists module-dbus-protocol at PA_SOEXT@
-load-module module-dbus-protocol
+### If you want to allow TCP connections, set access to "remote" or "local,remote".
+load-module module-dbus-protocol access=local
.endif
load-module module-native-protocol-unix
diff --git a/src/modules/module-dbus-protocol.c b/src/modules/module-dbus-protocol.c
index 74dfeef..8be9d1a 100644
--- a/src/modules/module-dbus-protocol.c
+++ b/src/modules/module-dbus-protocol.c
@@ -54,6 +54,11 @@ PA_MODULE_VERSION(PACKAGE_VERSION);
#define CLEANUP_INTERVAL 10 /* seconds */
+enum server_type {
+ SERVER_TYPE_LOCAL,
+ SERVER_TYPE_TCP
+};
+
struct server;
struct connection;
@@ -75,6 +80,7 @@ struct userdata {
struct server {
struct userdata *userdata;
+ enum server_type type;
DBusServer *dbus_server;
};
@@ -114,6 +120,12 @@ static void client_kill_cb(pa_client *c) {
pa_log_info("Connection killed.");
}
+static dbus_bool_t user_check_cb(DBusConnection *connection, unsigned long uid, void *data) {
+ pa_log_debug("Allowing connection by user %lu.", uid);
+
+ return TRUE;
+}
+
/* Called by D-Bus when a new client connection is received. */
static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_connection, void *data) {
struct server *s = data;
@@ -131,8 +143,17 @@ static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_conne
client = pa_client_new(s->userdata->module->core, &new_data);
pa_client_new_data_done(&new_data);
- if (!client)
+ if (!client) {
+ dbus_connection_close(new_connection);
return;
+ }
+
+ if (s->type == SERVER_TYPE_TCP) {
+ /* FIXME: Here we allow anyone from anywhere to access the server,
+ * anonymously. Access control should be configurable. */
+ dbus_connection_set_unix_user_function(new_connection, user_check_cb, NULL, NULL);
+ dbus_connection_set_allow_anonymous(new_connection, TRUE);
+ }
c = pa_xnew(struct connection, 1);
c->server = s;
@@ -334,7 +355,7 @@ static void server_free(struct server *s) {
pa_xfree(s);
}
-static struct server *start_server(struct userdata *u, const char *address) {
+static struct server *start_server(struct userdata *u, const char *address, enum server_type type) {
/* XXX: We assume that when we unref the DBusServer instance at module
* shutdown, nobody else holds any references to it. If we stop assuming
* that someday, dbus_server_set_new_connection_function,
@@ -390,7 +411,7 @@ static struct server *start_local_server(struct userdata *u) {
address = pa_get_dbus_address_from_server_type(u->module->core->server_type);
- s = start_server(u, address); /* May return NULL */
+ s = start_server(u, address, SERVER_TYPE_LOCAL); /* May return NULL */
pa_xfree(address);
@@ -398,8 +419,18 @@ static struct server *start_local_server(struct userdata *u) {
}
static struct server *start_tcp_server(struct userdata *u) {
- pa_log("start_tcp_server(): Not implemented!");
- return NULL;
+ struct server *s = NULL;
+ char *address = NULL;
+
+ pa_assert(u);
+
+ address = pa_sprintf_malloc("tcp:host=127.0.0.1,port=%u", u->tcp_port);
+
+ s = start_server(u, address, SERVER_TYPE_TCP); /* May return NULL */
+
+ pa_xfree(address);
+
+ return s;
}
static int get_access_arg(pa_modargs *ma, pa_bool_t *local_access, pa_bool_t *remote_access) {
@@ -420,7 +451,7 @@ static int get_access_arg(pa_modargs *ma, pa_bool_t *local_access, pa_bool_t *re
*remote_access = TRUE;
} else if (!strcmp(value, "local,remote")) {
*local_access = TRUE;
- *local_access = TRUE;
+ *remote_access = TRUE;
} else
return -1;
commit b152f3a052eca7225870a7dc4d8a719bee107f0f
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Jun 20 10:17:46 2009 +0300
module-dbus-protocol: Allow anyone to connect the daemon in system mode.
diff --git a/src/modules/module-dbus-protocol.c b/src/modules/module-dbus-protocol.c
index 8be9d1a..46f6492 100644
--- a/src/modules/module-dbus-protocol.c
+++ b/src/modules/module-dbus-protocol.c
@@ -148,7 +148,7 @@ static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_conne
return;
}
- if (s->type == SERVER_TYPE_TCP) {
+ if (s->type == SERVER_TYPE_TCP || s->userdata->module->core->server_type == PA_SERVER_TYPE_SYSTEM) {
/* FIXME: Here we allow anyone from anywhere to access the server,
* anonymously. Access control should be configurable. */
dbus_connection_set_unix_user_function(new_connection, user_check_cb, NULL, NULL);
commit 0bc538b08ca5c4efea86700cb6c4685da3f34345
Merge: b152f3a 2654eb7
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Jun 29 18:35:06 2009 +0300
Merge branch 'master' into dbus-work
Conflicts:
src/daemon/daemon-conf.c
src/daemon/daemon-conf.h
src/daemon/main.c
src/pulsecore/dbus-util.h
diff --cc configure.ac
index a3f9f0e,d2d8015..185f13b
--- a/configure.ac
+++ b/configure.ac
@@@ -22,8 -22,8 +22,7 @@@
AC_PREREQ(2.63)
--AC_INIT([pulseaudio], m4_esyscmd([./git-version-gen .tarball-version]),
-- [mzchyfrnhqvb (at) 0pointer (dot) net])
++AC_INIT([pulseaudio],[m4_esyscmd(./git-version-gen .tarball-version)],[mzchyfrnhqvb (at) 0pointer (dot) net])
AC_CONFIG_SRCDIR([src/daemon/main.c])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
diff --cc src/Makefile.am
index d28ffa1,ae90ae8..b1bc497
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@@ -796,10 -816,8 +817,9 @@@ libpulsecore_ at PA_MAJORMINORMICRO@_la_SO
pulsecore/object.c pulsecore/object.h \
pulsecore/play-memblockq.c pulsecore/play-memblockq.h \
pulsecore/play-memchunk.c pulsecore/play-memchunk.h \
+ pulsecore/protocol-dbus.h \
pulsecore/resampler.c pulsecore/resampler.h \
pulsecore/rtpoll.c pulsecore/rtpoll.h \
- pulsecore/rtsig.c pulsecore/rtsig.h \
pulsecore/sample-util.c pulsecore/sample-util.h \
pulsecore/sconv-s16be.c pulsecore/sconv-s16be.h \
pulsecore/sconv-s16le.c pulsecore/sconv-s16le.h \
@@@ -1074,10 -1117,14 +1121,15 @@@ modlibexec_LTLIBRARIES +=
module-hal-detect.la
endif
+ if HAVE_UDEV
+ modlibexec_LTLIBRARIES += \
+ module-udev-detect.la
+ endif
+
if HAVE_DBUS
modlibexec_LTLIBRARIES += \
- module-rygel-media-server.la
+ module-rygel-media-server.la \
+ module-dbus-protocol.la
endif
if HAVE_BLUEZ
diff --cc src/daemon/daemon-conf.c
index e6fa8c6,9010f2f..ace460e
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@@ -83,11 -83,9 +83,12 @@@ static const pa_daemon_conf default_con
.config_file = NULL,
.use_pid_file = TRUE,
.system_instance = FALSE,
+#ifdef HAVE_DBUS
+ .local_server_type = PA_SERVER_TYPE_UNSET, /* The actual default is _USER, but we have to detect when the user doesn't specify this option. */
+#endif
.no_cpu_limit = FALSE,
.disable_shm = FALSE,
+ .lock_memory = FALSE,
.default_n_fragments = 4,
.default_fragment_size_msec = 25,
.default_sample_spec = { .format = PA_SAMPLE_S16NE, .rate = 44100, .channels = 2 },
@@@ -633,23 -597,14 +635,22 @@@ FILE *pa_daemon_conf_open_default_scrip
return f;
}
+ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
+ static const char* const log_level_to_string[] = {
+ [PA_LOG_DEBUG] = "debug",
+ [PA_LOG_INFO] = "info",
+ [PA_LOG_NOTICE] = "notice",
+ [PA_LOG_WARN] = "warning",
+ [PA_LOG_ERROR] = "error"
+ };
+
- static const char* const log_level_to_string[] = {
- [PA_LOG_DEBUG] = "debug",
- [PA_LOG_INFO] = "info",
- [PA_LOG_NOTICE] = "notice",
- [PA_LOG_WARN] = "warning",
- [PA_LOG_ERROR] = "error"
- };
-
- static const char* const server_type_to_string[] = {
- [PA_SERVER_TYPE_UNSET] = "!!UNSET!!",
- [PA_SERVER_TYPE_USER] = "user",
- [PA_SERVER_TYPE_SYSTEM] = "system",
- [PA_SERVER_TYPE_NONE] = "none"
- };
++ static const char* const server_type_to_string[] = {
++ [PA_SERVER_TYPE_UNSET] = "!!UNSET!!",
++ [PA_SERVER_TYPE_USER] = "user",
++ [PA_SERVER_TYPE_SYSTEM] = "system",
++ [PA_SERVER_TYPE_NONE] = "none"
++ };
+
- char *pa_daemon_conf_dump(pa_daemon_conf *c) {
pa_strbuf *s;
char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
diff --cc src/daemon/daemon-conf.h
index c4f78cb,dd69e04..41c3c4b
--- a/src/daemon/daemon-conf.h
+++ b/src/daemon/daemon-conf.h
@@@ -74,8 -73,8 +74,9 @@@ typedef struct pa_daemon_conf
disallow_exit,
log_meta,
log_time,
- flat_volumes;
+ flat_volumes,
+ lock_memory;
+ pa_server_type_t local_server_type;
int exit_idle_time,
scache_idle_time,
auto_log_target,
diff --cc src/daemon/daemon.conf.in
index ecdb3a6,6931359..9bea614
--- a/src/daemon/daemon.conf.in
+++ b/src/daemon/daemon.conf.in
@@@ -25,9 -25,10 +25,11 @@@
; disallow-exit = no
; use-pid-file = yes
; system-instance = no
+; local-server-type = user
; disable-shm = no
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
+ ; lock-memory = no
+ ; no-cpu-limit = no
; high-priority = yes
; nice-level = -11
diff --cc src/daemon/main.c
index 62214a5,b58bb37..c1730b7
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@@ -98,8 -101,6 +101,7 @@@
#include "dumpmodules.h"
#include "caps.h"
#include "ltdl-bind-now.h"
- #include "polkit.h"
+#include "server-lookup.h"
#ifdef HAVE_LIBWRAP
/* Only one instance of these variables */
@@@ -488,191 -461,6 +463,32 @@@ int main(int argc, char *argv[])
pa_log_set_flags(PA_LOG_PRINT_TIME, PA_LOG_SET);
pa_log_set_show_backtrace(conf->log_backtrace);
+#ifdef HAVE_DBUS
+ /* conf->system_instance and conf->local_server_type control almost the
+ * same thing; make them agree about what is requested. */
+ switch (conf->local_server_type) {
+ case PA_SERVER_TYPE_UNSET:
+ conf->local_server_type = conf->system_instance ? PA_SERVER_TYPE_SYSTEM : PA_SERVER_TYPE_USER;
+ break;
+ case PA_SERVER_TYPE_USER:
+ case PA_SERVER_TYPE_NONE:
+ conf->system_instance = FALSE;
+ break;
+ case PA_SERVER_TYPE_SYSTEM:
+ conf->system_instance = TRUE;
+ break;
+ default:
+ pa_assert_not_reached();
+ }
+
- start_server = conf->local_server_type == PA_SERVER_TYPE_USER || (real_root && conf->local_server_type == PA_SERVER_TYPE_SYSTEM);
++ start_server = conf->local_server_type == PA_SERVER_TYPE_USER || (getuid() == 0 && conf->local_server_type == PA_SERVER_TYPE_SYSTEM);
+
+ if (!start_server && conf->local_server_type == PA_SERVER_TYPE_SYSTEM) {
+ pa_log_notice(_("System mode refused for non-root user. Only starting the D-Bus server lookup service."));
+ conf->system_instance = FALSE;
+ }
+#endif
+
- pa_log_debug("Started as real root: %s, suid root: %s", pa_yes_no(real_root), pa_yes_no(suid_root));
-
- #ifdef HAVE_DBUS
- /* XXX: Uhh, goto programming... as if this wasn't hard enough to follow
- * already. But if we won't start the full server, we want to just skip all
- * the capability stuff. */
- if (!start_server) {
- if (!real_root && pa_have_caps())
- pa_drop_caps();
- goto after_caps_setup;
- }
- #endif
-
- if (!real_root && pa_have_caps()) {
- #ifdef HAVE_SYS_RESOURCE_H
- struct rlimit rl;
- #endif
- pa_bool_t allow_high_priority = FALSE, allow_realtime = FALSE;
-
- /* Let's better not enable high prio or RT by default */
-
- if (conf->high_priority && !allow_high_priority) {
- if (pa_own_uid_in_group(PA_REALTIME_GROUP, &gid) > 0) {
- pa_log_info(_("We're in the group '%s', allowing high-priority scheduling."), PA_REALTIME_GROUP);
- allow_high_priority = TRUE;
- }
- }
-
- if (conf->realtime_scheduling && !allow_realtime) {
- if (pa_own_uid_in_group(PA_REALTIME_GROUP, &gid) > 0) {
- pa_log_info(_("We're in the group '%s', allowing real-time scheduling."), PA_REALTIME_GROUP);
- allow_realtime = TRUE;
- }
- }
-
- #ifdef HAVE_POLKIT
- if (conf->high_priority && !allow_high_priority) {
- if (pa_polkit_check("org.pulseaudio.acquire-high-priority") > 0) {
- pa_log_info(_("PolicyKit grants us acquire-high-priority privilege."));
- allow_high_priority = TRUE;
- } else
- pa_log_info(_("PolicyKit refuses acquire-high-priority privilege."));
- }
-
- if (conf->realtime_scheduling && !allow_realtime) {
- if (pa_polkit_check("org.pulseaudio.acquire-real-time") > 0) {
- pa_log_info(_("PolicyKit grants us acquire-real-time privilege."));
- allow_realtime = TRUE;
- } else
- pa_log_info(_("PolicyKit refuses acquire-real-time privilege."));
- }
- #endif
-
- if (!allow_high_priority && !allow_realtime) {
-
- /* OK, there's no further need to keep CAP_NICE. Hence
- * let's give it up early */
-
- pa_drop_caps();
- }
-
- #ifdef RLIMIT_RTPRIO
- if (getrlimit(RLIMIT_RTPRIO, &rl) >= 0)
- if (rl.rlim_cur > 0) {
- pa_log_info("RLIMIT_RTPRIO is set to %u, allowing real-time scheduling.", (unsigned) rl.rlim_cur);
- allow_realtime = TRUE;
- }
- #endif
- #ifdef RLIMIT_NICE
- if (getrlimit(RLIMIT_NICE, &rl) >= 0)
- if (rl.rlim_cur > 20 ) {
- pa_log_info("RLIMIT_NICE is set to %u, allowing high-priority scheduling.", (unsigned) rl.rlim_cur);
- allow_high_priority = TRUE;
- }
- #endif
-
- if ((conf->high_priority && !allow_high_priority) ||
- (conf->realtime_scheduling && !allow_realtime))
- pa_log_info(_("Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
- "We are not in group '%s', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
- "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '%s', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."),
- PA_REALTIME_GROUP, PA_REALTIME_GROUP);
-
-
- if (!allow_realtime)
- conf->realtime_scheduling = FALSE;
-
- if (!allow_high_priority)
- conf->high_priority = FALSE;
- }
-
- #ifdef HAVE_SYS_RESOURCE_H
- /* Reset resource limits. If we are run as root (for system mode)
- * this might end up increasing the limits, which is intended
- * behaviour. For all other cases, i.e. started as normal user, or
- * SUID root at this point we should have no CAP_SYS_RESOURCE and
- * increasing the limits thus should fail. Which is, too, intended
- * behaviour */
-
- set_all_rlimits(conf);
- #endif
-
- if (conf->high_priority && !pa_can_high_priority()) {
- pa_log_info(_("High-priority scheduling enabled in configuration but not allowed by policy."));
- conf->high_priority = FALSE;
- }
-
- if (conf->high_priority && (conf->cmd == PA_CMD_DAEMON || conf->cmd == PA_CMD_START))
- pa_raise_priority(conf->nice_level);
-
- pa_log_debug("Can realtime: %s, can high-priority: %s", pa_yes_no(pa_can_realtime()), pa_yes_no(pa_can_high_priority()));
-
- if (!real_root && pa_have_caps()) {
- pa_bool_t drop;
-
- drop = (conf->cmd != PA_CMD_DAEMON && conf->cmd != PA_CMD_START) || !conf->realtime_scheduling;
-
- #ifdef RLIMIT_RTPRIO
- if (!drop) {
- struct rlimit rl;
- /* At this point we still have CAP_NICE if we were loaded
- * SUID root. If possible let's acquire RLIMIT_RTPRIO
- * instead and give CAP_NICE up. */
-
- if (getrlimit(RLIMIT_RTPRIO, &rl) >= 0) {
-
- if (rl.rlim_cur >= 9)
- drop = TRUE;
- else {
- rl.rlim_max = rl.rlim_cur = 9;
-
- if (setrlimit(RLIMIT_RTPRIO, &rl) >= 0) {
- pa_log_info(_("Successfully increased RLIMIT_RTPRIO"));
- drop = TRUE;
- } else
- pa_log_warn(_("RLIMIT_RTPRIO failed: %s"), pa_cstrerror(errno));
- }
- }
- }
- #endif
-
- if (drop) {
- pa_log_info(_("Giving up CAP_NICE"));
- pa_drop_caps();
- suid_root = FALSE;
- }
- }
-
- if (conf->realtime_scheduling && !pa_can_realtime()) {
- pa_log_info(_("Real-time scheduling enabled in configuration but not allowed by policy."));
- conf->realtime_scheduling = FALSE;
- }
-
- #ifdef HAVE_DBUS
- after_caps_setup:
- #endif
-
- pa_log_debug("Can realtime: %s, can high-priority: %s", pa_yes_no(pa_can_realtime()), pa_yes_no(pa_can_high_priority()));
-
LTDL_SET_PRELOADED_SYMBOLS();
pa_ltdl_init();
ltdl_init = TRUE;
@@@ -757,10 -545,9 +573,10 @@@
pa_assert(conf->cmd == PA_CMD_DAEMON || conf->cmd == PA_CMD_START);
}
- if (real_root && !conf->system_instance)
+ if (getuid() == 0 && !conf->system_instance)
pa_log_warn(_("This program is not intended to be run as root (unless --system is specified)."));
+#ifndef HAVE_DBUS /* A similar, only a notice worthy check was done earlier, if D-Bus is enabled. */
- else if (!real_root && conf->system_instance) {
+ else if (getuid() != 0 && conf->system_instance) {
pa_log(_("Root privileges required."));
goto finish;
}
@@@ -1028,7 -830,6 +860,9 @@@
c->running_as_daemon = !!conf->daemonize;
c->disallow_exit = conf->disallow_exit;
c->flat_volumes = conf->flat_volumes;
++#ifdef HAVE_DBUS
+ c->server_type = conf->local_server_type;
++#endif
pa_assert_se(pa_signal_init(pa_mainloop_get_api(mainloop)) == 0);
pa_signal_new(SIGINT, signal_callback, c);
diff --cc src/modules/module-dbus-protocol.c
index 46f6492,0000000..f7c1f0a
mode 100644,000000..100644
--- a/src/modules/module-dbus-protocol.c
+++ b/src/modules/module-dbus-protocol.c
@@@ -1,575 -1,0 +1,575 @@@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+ Copyright 2006 Lennart Poettering
+ Copyright 2006 Shams E. King
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulse/mainloop-api.h>
+#include <pulse/timeval.h>
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/client.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-common.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/idxset.h>
+#include <pulsecore/macro.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/module.h>
+
+#include <pulsecore/dbus-objs/core.h>
+
+#include "module-dbus-protocol-symdef.h"
+
+PA_MODULE_DESCRIPTION("D-Bus interface");
+PA_MODULE_USAGE(
+ "access=local|remote|local,remote "
+ "tcp_port=<port number>");
+PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_AUTHOR("Tanu Kaskinen");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+
+#define CLEANUP_INTERVAL 10 /* seconds */
+
+enum server_type {
+ SERVER_TYPE_LOCAL,
+ SERVER_TYPE_TCP
+};
+
+struct server;
+struct connection;
+
+struct userdata {
+ pa_module *module;
+ pa_bool_t local_access;
+ pa_bool_t remote_access;
+ uint32_t tcp_port;
+
+ struct server *local_server;
+ struct server *tcp_server;
+
+ pa_idxset *connections;
+
+ pa_time_event *cleanup_event;
+
+ pa_dbusobj_core *core_object;
+};
+
+struct server {
+ struct userdata *userdata;
+ enum server_type type;
+ DBusServer *dbus_server;
+};
+
+struct connection {
+ struct server *server;
+ pa_dbus_wrap_connection *wrap_conn;
+ pa_client *client;
+};
+
+static const char* const valid_modargs[] = {
+ "access",
+ "tcp_port",
+ NULL
+};
+
+static void connection_free(struct connection *c) {
+ pa_assert(c);
+
+ pa_assert_se(pa_dbus_unregister_connection(c->server->userdata->module->core, pa_dbus_wrap_connection_get(c->wrap_conn)) >= 0);
+
+ pa_client_free(c->client);
+ pa_assert_se(pa_idxset_remove_by_data(c->server->userdata->connections, c, NULL));
+ pa_dbus_wrap_connection_free(c->wrap_conn);
+ pa_xfree(c);
+}
+
+/* Called from pa_client_kill(). */
+static void client_kill_cb(pa_client *c) {
+ struct connection *conn;
+
+ pa_assert(c);
+ pa_assert(c->userdata);
+
+ conn = c->userdata;
+ connection_free(conn);
+
+ pa_log_info("Connection killed.");
+}
+
+static dbus_bool_t user_check_cb(DBusConnection *connection, unsigned long uid, void *data) {
+ pa_log_debug("Allowing connection by user %lu.", uid);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a new client connection is received. */
+static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_connection, void *data) {
+ struct server *s = data;
+ struct connection *c;
+ pa_client_new_data new_data;
+ pa_client *client;
+
+ pa_assert(new_connection);
+ pa_assert(s);
+
+ pa_client_new_data_init(&new_data);
+ new_data.module = s->userdata->module;
+ new_data.driver = __FILE__;
+ pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: It's probably possible to generate a fancier name. Other props? */
+ client = pa_client_new(s->userdata->module->core, &new_data);
+ pa_client_new_data_done(&new_data);
+
+ if (!client) {
+ dbus_connection_close(new_connection);
+ return;
+ }
+
+ if (s->type == SERVER_TYPE_TCP || s->userdata->module->core->server_type == PA_SERVER_TYPE_SYSTEM) {
+ /* FIXME: Here we allow anyone from anywhere to access the server,
+ * anonymously. Access control should be configurable. */
+ dbus_connection_set_unix_user_function(new_connection, user_check_cb, NULL, NULL);
+ dbus_connection_set_allow_anonymous(new_connection, TRUE);
+ }
+
+ c = pa_xnew(struct connection, 1);
+ c->server = s;
- c->wrap_conn = pa_dbus_wrap_connection_new_from_existing(s->userdata->module->core->mainloop, new_connection);
++ c->wrap_conn = pa_dbus_wrap_connection_new_from_existing(s->userdata->module->core->mainloop, TRUE, new_connection);
+ c->client = client;
+
+ c->client->kill = client_kill_cb;
+ c->client->send_event = NULL; /* TODO: Implement this. */
+ c->client->userdata = c;
+
+ pa_idxset_put(s->userdata->connections, c, NULL);
+
+ pa_assert_se(pa_dbus_register_connection(s->userdata->module->core, new_connection) >= 0);
+}
+
+/* Called by PA mainloop when a D-Bus fd watch event needs handling. */
+static void io_event_cb(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
+ unsigned int flags = 0;
+ DBusWatch *watch = userdata;
+
+#if HAVE_DBUS_WATCH_GET_UNIX_FD
+ pa_assert(fd == dbus_watch_get_unix_fd(watch));
+#else
+ pa_assert(fd == dbus_watch_get_fd(watch));
+#endif
+
+ if (!dbus_watch_get_enabled(watch)) {
+ pa_log_warn("Asked to handle disabled watch: %p %i", (void*) watch, fd);
+ return;
+ }
+
+ if (events & PA_IO_EVENT_INPUT)
+ flags |= DBUS_WATCH_READABLE;
+ if (events & PA_IO_EVENT_OUTPUT)
+ flags |= DBUS_WATCH_WRITABLE;
+ if (events & PA_IO_EVENT_HANGUP)
+ flags |= DBUS_WATCH_HANGUP;
+ if (events & PA_IO_EVENT_ERROR)
+ flags |= DBUS_WATCH_ERROR;
+
+ dbus_watch_handle(watch, flags);
+}
+
+/* Called by PA mainloop when a D-Bus timer event needs handling. */
+static void time_event_cb(pa_mainloop_api *mainloop, pa_time_event* e, const struct timeval *tv, void *userdata) {
+ DBusTimeout *timeout = userdata;
+
+ if (dbus_timeout_get_enabled(timeout)) {
+ struct timeval next = *tv;
+ dbus_timeout_handle(timeout);
+
+ /* restart it for the next scheduled time */
+ pa_timeval_add(&next, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+ mainloop->time_restart(e, &next);
+ }
+}
+
+/* Translates D-Bus fd watch event flags to PA IO event flags. */
+static pa_io_event_flags_t get_watch_flags(DBusWatch *watch) {
+ unsigned int flags;
+ pa_io_event_flags_t events = 0;
+
+ pa_assert(watch);
+
+ flags = dbus_watch_get_flags(watch);
+
+ /* no watch flags for disabled watches */
+ if (!dbus_watch_get_enabled(watch))
+ return PA_IO_EVENT_NULL;
+
+ if (flags & DBUS_WATCH_READABLE)
+ events |= PA_IO_EVENT_INPUT;
+ if (flags & DBUS_WATCH_WRITABLE)
+ events |= PA_IO_EVENT_OUTPUT;
+
+ return events | PA_IO_EVENT_HANGUP | PA_IO_EVENT_ERROR;
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is added. */
+static dbus_bool_t watch_add_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ ev = mainloop->io_new(
+ mainloop,
+#if HAVE_DBUS_WATCH_GET_UNIX_FD
+ dbus_watch_get_unix_fd(watch),
+#else
+ dbus_watch_get_fd(watch),
+#endif
+ get_watch_flags(watch), io_event_cb, watch);
+
+ dbus_watch_set_data(watch, ev, NULL);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is removed. */
+static void watch_remove_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ if ((ev = dbus_watch_get_data(watch)))
+ s->userdata->module->core->mainloop->io_free(ev);
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is toggled. */
+static void watch_toggled_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ pa_assert_se(ev = dbus_watch_get_data(watch));
+
+ /* get_watch_flags() checks if the watch is enabled */
+ s->userdata->module->core->mainloop->io_enable(ev, get_watch_flags(watch));
+}
+
+/* Called by D-Bus when a D-Bus timer event is added. */
+static dbus_bool_t timeout_add_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_time_event *ev;
+ struct timeval tv;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ if (!dbus_timeout_get_enabled(timeout))
+ return FALSE;
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ pa_gettimeofday(&tv);
+ pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+
+ ev = mainloop->time_new(mainloop, &tv, time_event_cb, timeout);
+
+ dbus_timeout_set_data(timeout, ev, NULL);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a D-Bus timer event is removed. */
+static void timeout_remove_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_time_event *ev;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ if ((ev = dbus_timeout_get_data(timeout)))
+ s->userdata->module->core->mainloop->time_free(ev);
+}
+
+/* Called by D-Bus when a D-Bus timer event is toggled. */
+static void timeout_toggled_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_time_event *ev;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ pa_assert_se(ev = dbus_timeout_get_data(timeout));
+
+ if (dbus_timeout_get_enabled(timeout)) {
+ struct timeval tv;
+
+ pa_gettimeofday(&tv);
+ pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+
+ mainloop->time_restart(ev, &tv);
+ } else
+ mainloop->time_restart(ev, NULL);
+}
+
+static void server_free(struct server *s) {
+ pa_assert(s);
+
+ if (s->dbus_server) {
+ dbus_server_disconnect(s->dbus_server);
+ dbus_server_unref(s->dbus_server);
+ }
+
+ pa_xfree(s);
+}
+
+static struct server *start_server(struct userdata *u, const char *address, enum server_type type) {
+ /* XXX: We assume that when we unref the DBusServer instance at module
+ * shutdown, nobody else holds any references to it. If we stop assuming
+ * that someday, dbus_server_set_new_connection_function,
+ * dbus_server_set_watch_functions and dbus_server_set_timeout_functions
+ * calls should probably register free callbacks, instead of providing NULL
+ * as they do now. */
+
+ struct server *s = NULL;
+ DBusError error;
+
+ pa_assert(u);
+ pa_assert(address);
+
+ dbus_error_init(&error);
+
+ s = pa_xnew0(struct server, 1);
+ s->userdata = u;
+ s->dbus_server = dbus_server_listen(address, &error);
+
+ if (dbus_error_is_set(&error)) {
+ pa_log("dbus_server_listen() failed: %s: %s", error.name, error.message);
+ goto fail;
+ }
+
+ dbus_server_set_new_connection_function(s->dbus_server, connection_new_cb, s, NULL);
+
+ if (!dbus_server_set_watch_functions(s->dbus_server, watch_add_cb, watch_remove_cb, watch_toggled_cb, s, NULL)) {
+ pa_log("dbus_server_set_watch_functions() ran out of memory.");
+ goto fail;
+ }
+
+ if (!dbus_server_set_timeout_functions(s->dbus_server, timeout_add_cb, timeout_remove_cb, timeout_toggled_cb, s, NULL)) {
+ pa_log("dbus_server_set_timeout_functions() ran out of memory.");
+ goto fail;
+ }
+
+ return s;
+
+fail:
+ if (s)
+ server_free(s);
+
+ dbus_error_free(&error);
+
+ return NULL;
+}
+
+static struct server *start_local_server(struct userdata *u) {
+ struct server *s = NULL;
+ char *address = NULL;
+
+ pa_assert(u);
+
+ address = pa_get_dbus_address_from_server_type(u->module->core->server_type);
+
+ s = start_server(u, address, SERVER_TYPE_LOCAL); /* May return NULL */
+
+ pa_xfree(address);
+
+ return s;
+}
+
+static struct server *start_tcp_server(struct userdata *u) {
+ struct server *s = NULL;
+ char *address = NULL;
+
+ pa_assert(u);
+
+ address = pa_sprintf_malloc("tcp:host=127.0.0.1,port=%u", u->tcp_port);
+
+ s = start_server(u, address, SERVER_TYPE_TCP); /* May return NULL */
+
+ pa_xfree(address);
+
+ return s;
+}
+
+static int get_access_arg(pa_modargs *ma, pa_bool_t *local_access, pa_bool_t *remote_access) {
+ const char *value = NULL;
+
+ pa_assert(ma);
+ pa_assert(local_access);
+ pa_assert(remote_access);
+
+ if (!(value = pa_modargs_get_value(ma, "access", NULL)))
+ return 0;
+
+ if (!strcmp(value, "local")) {
+ *local_access = TRUE;
+ *remote_access = FALSE;
+ } else if (!strcmp(value, "remote")) {
+ *local_access = FALSE;
+ *remote_access = TRUE;
+ } else if (!strcmp(value, "local,remote")) {
+ *local_access = TRUE;
+ *remote_access = TRUE;
+ } else
+ return -1;
+
+ return 0;
+}
+
+/* Frees dead client connections. Called every CLEANUP_INTERVAL seconds. */
+static void cleanup_cb(pa_mainloop_api *a, pa_time_event *e, const struct timeval *tv, void *userdata) {
+ struct userdata *u = userdata;
+ struct connection *conn = NULL;
+ uint32_t idx;
+ struct timeval cleanup_timeval;
+ unsigned free_count = 0;
+
+ for (conn = pa_idxset_first(u->connections, &idx); conn; conn = pa_idxset_next(u->connections, &idx)) {
+ if (!dbus_connection_get_is_connected(pa_dbus_wrap_connection_get(conn->wrap_conn))) {
+ connection_free(conn);
+ ++free_count;
+ }
+ }
+
+ if (free_count > 0)
+ pa_log_debug("Freed %u dead D-Bus client connections.", free_count);
+
+ pa_gettimeofday(&cleanup_timeval);
+ cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
+ u->module->core->mainloop->time_restart(e, &cleanup_timeval);
+}
+
+int pa__init(pa_module *m) {
+ struct userdata *u = NULL;
+ pa_modargs *ma = NULL;
+ struct timeval cleanup_timeval;
+
+ 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;
+ u->local_access = TRUE;
+ u->remote_access = FALSE;
+ u->tcp_port = PA_DBUS_DEFAULT_PORT;
+
+ if (get_access_arg(ma, &u->local_access, &u->remote_access) < 0) {
+ pa_log("Invalid access argument: '%s'", pa_modargs_get_value(ma, "access", NULL));
+ goto fail;
+ }
+
+ if (pa_modargs_get_value_u32(ma, "tcp_port", &u->tcp_port) < 0 || u->tcp_port < 1 || u->tcp_port > 49150) {
+ pa_log("Invalid tcp_port argument: '%s'", pa_modargs_get_value(ma, "tcp_port", NULL));
+ goto fail;
+ }
+
+ if (u->local_access && !(u->local_server = start_local_server(u))) {
+ pa_log("Starting the local D-Bus server failed.");
+ goto fail;
+ }
+
+ if (u->remote_access && !(u->tcp_server = start_tcp_server(u))) {
+ pa_log("Starting the D-Bus server for remote connections failed.");
+ goto fail;
+ }
+
+ u->connections = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+
+ pa_gettimeofday(&cleanup_timeval);
+ cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
+ u->cleanup_event = m->core->mainloop->time_new(m->core->mainloop, &cleanup_timeval, cleanup_cb, u);
+
+ u->core_object = pa_dbusobj_core_new(m->core);
+
+ return 0;
+
+fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa__done(m);
+
+ return -1;
+}
+
+/* Called by idxset when the connection set is freed. */
+static void connection_free_cb(void *p, void *userdata) {
+ struct connection *conn = p;
+
+ pa_assert(conn);
+
+ connection_free(conn);
+}
+
+void pa__done(pa_module *m) {
+ struct userdata *u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ if (u->core_object)
+ pa_dbusobj_core_free(u->core_object);
+
+ if (u->cleanup_event)
+ m->core->mainloop->time_free(u->cleanup_event);
+
+ if (u->connections)
+ pa_idxset_free(u->connections, connection_free_cb, NULL);
+
+ if (u->tcp_server)
+ server_free(u->tcp_server);
+
+ if (u->local_server)
+ server_free(u->local_server);
+
+ pa_xfree(u);
+ m->userdata = NULL;
+}
diff --cc src/pulsecore/dbus-util.c
index d8bd0e0,4e6148f..e047dc3
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@@ -276,27 -290,6 +290,28 @@@ pa_dbus_wrap_connection* pa_dbus_wrap_c
return pconn;
}
- pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *m, DBusConnection *conn) {
++pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *m, pa_bool_t use_rtclock, DBusConnection *conn) {
+ pa_dbus_wrap_connection *pconn;
+
+ pa_assert(m);
+ pa_assert(conn);
+
+ pconn = pa_xnew(pa_dbus_wrap_connection, 1);
+ pconn->mainloop = m;
+ pconn->connection = dbus_connection_ref(conn);
++ pconn->use_rtclock = use_rtclock;
+
+ dbus_connection_set_exit_on_disconnect(conn, FALSE);
+ dbus_connection_set_dispatch_status_function(conn, dispatch_status, pconn, NULL);
+ dbus_connection_set_watch_functions(conn, add_watch, remove_watch, toggle_watch, pconn, NULL);
+ dbus_connection_set_timeout_functions(conn, add_timeout, remove_timeout, toggle_timeout, pconn, NULL);
+ dbus_connection_set_wakeup_main_function(conn, wakeup_main, pconn, NULL);
+
+ pconn->dispatch_event = pconn->mainloop->defer_new(pconn->mainloop, dispatch_cb, conn);
+
+ return pconn;
+}
+
void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* c) {
pa_assert(c);
diff --cc src/pulsecore/dbus-util.h
index cd08485,9ff298d..9732873
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@@ -30,8 -30,7 +30,8 @@@
/* A wrap connection is not shared or refcounted, it is available in client side */
typedef struct pa_dbus_wrap_connection pa_dbus_wrap_connection;
- pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *mainloop, DBusBusType type, DBusError *error);
- pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *mainloop, DBusConnection *conn);
+ pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *mainloop, pa_bool_t use_rtclock, DBusBusType type, DBusError *error);
++pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *mainloop, pa_bool_t use_rtclock, DBusConnection *conn);
void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* conn);
DBusConnection* pa_dbus_wrap_connection_get(pa_dbus_wrap_connection *conn);
commit c266595058416b4b776890dadf3ad827787f4e7e
Merge: 0bc538b 1ca7603
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Jun 29 18:55:12 2009 +0300
Merge branch 'master' into dbus-work
commit 3bff2eee4bf02ff3bc2619079c3c5fe8a07040a9
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Jun 30 15:18:11 2009 +0300
module-cli: Fix compilation by adding libpulsecommon to module_cli_la_LIBADD.
diff --git a/src/Makefile.am b/src/Makefile.am
index 6cddb83..5866889 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1250,7 +1250,7 @@ module_simple_protocol_unix_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINOR
module_cli_la_SOURCES = modules/module-cli.c
module_cli_la_LDFLAGS = $(MODULE_LDFLAGS)
-module_cli_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libcli.la
+module_cli_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libcli.la libpulsecommon- at PA_MAJORMINORMICRO@.la
module_cli_protocol_tcp_la_SOURCES = modules/module-protocol-stub.c
module_cli_protocol_tcp_la_CFLAGS = -DUSE_TCP_SOCKETS -DUSE_PROTOCOL_CLI $(AM_CFLAGS)
commit 6e2fec05ddd38fa460276202ca2f4ecf68761ed0
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Jun 30 15:21:20 2009 +0300
server-lookup: Update the D-Bus identifiers to be versioned.
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 61b0c84..d320c9e 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -943,7 +943,7 @@ int main(int argc, char *argv[]) {
if (!conf->system_instance) {
if (!(server_lookup = pa_dbusobj_server_lookup_new(c)))
goto finish;
- if (!(lookup_service_bus = register_dbus_name(c, DBUS_BUS_SESSION, "org.pulseaudio.PulseAudio")))
+ if (!(lookup_service_bus = register_dbus_name(c, DBUS_BUS_SESSION, "org.pulseaudio.PulseAudio1")))
goto finish;
}
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
index 33d6b24..7c80d67 100644
--- a/src/daemon/server-lookup.c
+++ b/src/daemon/server-lookup.c
@@ -36,6 +36,9 @@
#include "server-lookup.h"
+#define OBJECT_PATH "/org/pulseaudio1/server_lookup"
+#define INTERFACE "org.pulseaudio.ServerLookup1"
+
struct pa_dbusobj_server_lookup {
pa_core *core;
pa_dbus_connection *conn;
@@ -47,7 +50,7 @@ static const char introspection[] =
"<node>"
" <!-- If you are looking for documentation make sure to check out\n"
" http://pulseaudio.org/wiki/DBusInterface -->\n"
- " <interface name=\"org.pulseaudio.ServerLookup\">"
+ " <interface name=\"" INTERFACE "\">"
" <method name=\"GetAddress\">"
" <arg name=\"result\" type=\"s\" direction=\"out\"/>"
" </method>"
@@ -182,7 +185,7 @@ static DBusHandlerResult message_cb(DBusConnection *conn, DBusMessage *msg, void
if (dbus_message_is_method_call(msg, "org.freedesktop.DBus.Introspectable", "Introspect"))
return handle_introspect(conn, msg, sl);
- if (dbus_message_is_method_call(msg, "org.pulseaudio.ServerLookup", "GetAddress"))
+ if (dbus_message_is_method_call(msg, INTERFACE, "GetAddress"))
return handle_get_address(conn, msg, sl);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -212,8 +215,8 @@ pa_dbusobj_server_lookup *pa_dbusobj_server_lookup_new(pa_core *c) {
goto fail;
}
- if (!dbus_connection_register_object_path(pa_dbus_connection_get(sl->conn), "/org/pulseaudio/server_lookup", &vtable, sl)) {
- pa_log("dbus_connection_register_object_path() failed for /org/pulseaudio/server_lookup.");
+ if (!dbus_connection_register_object_path(pa_dbus_connection_get(sl->conn), OBJECT_PATH, &vtable, sl)) {
+ pa_log("dbus_connection_register_object_path() failed for " OBJECT_PATH ".");
goto fail;
}
@@ -234,8 +237,8 @@ void pa_dbusobj_server_lookup_free(pa_dbusobj_server_lookup *sl) {
if (sl->path_registered) {
pa_assert(sl->conn);
- if (!dbus_connection_unregister_object_path(pa_dbus_connection_get(sl->conn), "/org/pulseaudio/server_lookup"))
- pa_log_debug("dbus_connection_unregister_object_path() failed for /org/pulseaudio/server_lookup.");
+ if (!dbus_connection_unregister_object_path(pa_dbus_connection_get(sl->conn), OBJECT_PATH))
+ pa_log_debug("dbus_connection_unregister_object_path() failed for " OBJECT_PATH ".");
}
if (sl->conn)
commit 5c7952e4fa5e560f64255ef173c3e6570bee433a
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Jul 3 02:49:07 2009 +0300
dbus: Implement the Name property of the core object.
diff --git a/src/daemon/main.c b/src/daemon/main.c
index d320c9e..f420985 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -943,7 +943,7 @@ int main(int argc, char *argv[]) {
if (!conf->system_instance) {
if (!(server_lookup = pa_dbusobj_server_lookup_new(c)))
goto finish;
- if (!(lookup_service_bus = register_dbus_name(c, DBUS_BUS_SESSION, "org.pulseaudio.PulseAudio1")))
+ if (!(lookup_service_bus = register_dbus_name(c, DBUS_BUS_SESSION, "org.PulseAudio1")))
goto finish;
}
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
index 7c80d67..ebacc09 100644
--- a/src/daemon/server-lookup.c
+++ b/src/daemon/server-lookup.c
@@ -37,7 +37,7 @@
#include "server-lookup.h"
#define OBJECT_PATH "/org/pulseaudio1/server_lookup"
-#define INTERFACE "org.pulseaudio.ServerLookup1"
+#define INTERFACE "org.PulseAudio.ServerLookup1"
struct pa_dbusobj_server_lookup {
pa_core *core;
@@ -50,17 +50,31 @@ static const char introspection[] =
"<node>"
" <!-- If you are looking for documentation make sure to check out\n"
" http://pulseaudio.org/wiki/DBusInterface -->\n"
- " <interface name=\"" INTERFACE "\">"
- " <method name=\"GetAddress\">"
- " <arg name=\"result\" type=\"s\" direction=\"out\"/>"
- " </method>"
- " </interface>"
- " <interface name=\"org.freedesktop.DBus.Introspectable\">"
- " <method name=\"Introspect\">"
- " <arg name=\"data\" type=\"s\" direction=\"out\"/>"
- " </method>"
- " </interface>"
- "</node>";
+ " <interface name=\"" INTERFACE "\">\n"
+ " <property name=\"Address\" type=\"s\" access=\"read\"/>\n"
+ " </interface>\n"
+ " <interface name=\"" DBUS_INTERFACE_INTROSPECTABLE "\">\n"
+ " <method name=\"Introspect\">\n"
+ " <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+ " </method>\n"
+ " </interface>\n"
+ " <interface name=\"" DBUS_INTERFACE_PROPERTIES "\">\n"
+ " <method name=\"Get\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"value\" type=\"v\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"Set\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"value\" type=\"v\" direction=\"in\"/>\n"
+ " </method>\n"
+ " <method name=\"GetAll\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"props\" type=\"a{sv}\" direction=\"out\"/>\n"
+ " </method>\n"
+ " </interface>\n"
+ "</node>\n";
static void unregister_cb(DBusConnection *conn, void *user_data) {
pa_dbusobj_server_lookup *sl = user_data;
@@ -72,105 +86,352 @@ static void unregister_cb(DBusConnection *conn, void *user_data) {
}
static DBusHandlerResult handle_introspect(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
const char *i = introspection;
DBusMessage *reply = NULL;
pa_assert(conn);
pa_assert(msg);
- if (!(reply = dbus_message_new_method_return(msg)))
- goto fail;
+ if (!(reply = dbus_message_new_method_return(msg))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &i, DBUS_TYPE_INVALID)) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
- if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &i, DBUS_TYPE_INVALID))
- goto fail;
+finish:
+ if (reply)
+ dbus_message_unref(reply);
- if (!dbus_connection_send(conn, reply, NULL))
- goto oom;
+ return r;
+}
- dbus_message_unref(reply);
+enum get_address_result_t {
+ SUCCESS,
+ FAILED_TO_LOAD_CLIENT_CONF,
+ SERVER_FROM_TYPE_FAILED
+};
- return DBUS_HANDLER_RESULT_HANDLED;
+/* Caller frees the returned address. */
+static enum get_address_result_t get_address(pa_server_type_t server_type, char **address) {
+ enum get_address_result_t r = SUCCESS;
+ pa_client_conf *conf = pa_client_conf_new();
-fail:
- if (reply)
- dbus_message_unref(reply);
+ *address = NULL;
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ if (pa_client_conf_load(conf, NULL) < 0) {
+ r = FAILED_TO_LOAD_CLIENT_CONF;
+ goto finish;
+ }
-oom:
- if (reply)
- dbus_message_unref(reply);
+ if (conf->default_dbus_server)
+ *address = pa_xstrdup(conf->default_dbus_server);
+ else if (!(*address = pa_get_dbus_address_from_server_type(server_type))) {
+ r = SERVER_FROM_TYPE_FAILED;
+ goto finish;
+ }
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+finish:
+ pa_client_conf_free(conf);
+ return r;
}
static DBusHandlerResult handle_get_address(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
DBusMessage *reply = NULL;
- pa_client_conf *conf = NULL;
char *address = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
pa_assert(conn);
pa_assert(msg);
pa_assert(sl);
- conf = pa_client_conf_new();
+ switch (get_address(sl->core->server_type, &address)) {
+ case SUCCESS:
+ if (!(reply = dbus_message_new_method_return(msg))) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ dbus_message_iter_init_append(reply, &msg_iter);
+ if (!dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_VARIANT, "s", &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_append_basic(&variant_iter, DBUS_TYPE_STRING, &address)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&msg_iter, &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ case FAILED_TO_LOAD_CLIENT_CONF:
+ if (!(reply = dbus_message_new_error(msg, "org.pulseaudio.ClientConfLoadError", "Failed to load client.conf."))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ case SERVER_FROM_TYPE_FAILED:
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "PulseAudio internal error: get_dbus_server_from_type() failed."))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ default:
+ pa_assert_not_reached();
+ }
- if (pa_client_conf_load(conf, NULL) < 0) {
- if (!(reply = dbus_message_new_error(msg, "org.pulseaudio.ClientConfLoadError", "Failed to load client.conf.")))
- goto fail;
- if (!dbus_connection_send(conn, reply, NULL))
- goto oom;
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- if (conf->default_dbus_server) {
- address = pa_xstrdup(conf->default_dbus_server);
- } else {
- if (!(address = pa_get_dbus_address_from_server_type(sl->core->server_type))) {
- if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "PulseAudio internal error: get_dbus_server_from_type() failed.")))
- goto fail;
- if (!dbus_connection_send(conn, reply, NULL))
- goto oom;
- return DBUS_HANDLER_RESULT_HANDLED;
+finish:
+ pa_xfree(address);
+ if (reply)
+ dbus_message_unref(reply);
+
+ return r;
+}
+
+static DBusHandlerResult handle_get(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
+ const char* interface;
+ const char* property;
+ DBusMessage *reply = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(sl);
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
}
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
}
- if (!(reply = dbus_message_new_method_return(msg)))
- goto oom;
+ if (*interface && !pa_streq(interface, INTERFACE)) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
- if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID))
- goto fail;
+ if (!pa_streq(property, "Address")) {
+ if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
- if (!dbus_connection_send(conn, reply, NULL))
- goto oom;
+ r = handle_get_address(conn, msg, sl);
- pa_client_conf_free(conf);
- pa_xfree(address);
- dbus_message_unref(reply);
+finish:
+ if (reply)
+ dbus_message_unref(reply);
- return DBUS_HANDLER_RESULT_HANDLED;
+ return r;
+}
-fail:
- if (conf)
- pa_client_conf_free(conf);
+static DBusHandlerResult handle_set(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
+ const char* interface;
+ const char* property;
+ DBusMessage *reply = NULL;
- pa_xfree(address);
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(sl);
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ if (*interface && !pa_streq(interface, INTERFACE)) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+
+ if (!pa_streq(property, "Address")) {
+ if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ if (!(reply = dbus_message_new_error_printf(msg, DBUS_ERROR_ACCESS_DENIED, "%s: Property not settable", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+finish:
if (reply)
dbus_message_unref(reply);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return r;
+}
-oom:
- if (conf)
- pa_client_conf_free(conf);
+static DBusHandlerResult handle_get_all(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_server_lookup *sl) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
+ DBusMessage *reply = NULL;
+ const char *property = "Address";
+ char *interface = NULL;
+ char *address = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ DBusMessageIter variant_iter;
- pa_xfree(address);
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(sl);
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID)) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ switch (get_address(sl->core->server_type, &address)) {
+ case SUCCESS:
+ if (!(reply = dbus_message_new_method_return(msg))) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ dbus_message_iter_init_append(reply, &msg_iter);
+ if (!dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &property)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_open_container(&dict_entry_iter, DBUS_TYPE_VARIANT, "s", &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_append_basic(&variant_iter, DBUS_TYPE_STRING, &address)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&dict_entry_iter, &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&dict_iter, &dict_entry_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&msg_iter, &dict_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ case FAILED_TO_LOAD_CLIENT_CONF:
+ if (!(reply = dbus_message_new_error(msg, "org.pulseaudio.ClientConfLoadError", "Failed to load client.conf."))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ case SERVER_FROM_TYPE_FAILED:
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_FAILED, "PulseAudio internal error: get_dbus_server_from_type() failed."))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ default:
+ pa_assert_not_reached();
+ }
+
+finish:
+ pa_xfree(address);
if (reply)
dbus_message_unref(reply);
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return r;
}
static DBusHandlerResult message_cb(DBusConnection *conn, DBusMessage *msg, void *user_data) {
@@ -182,11 +443,24 @@ static DBusHandlerResult message_cb(DBusConnection *conn, DBusMessage *msg, void
/* pa_log("Got message! type = %s path = %s iface = %s member = %s dest = %s", dbus_message_type_to_string(dbus_message_get_type(msg)), dbus_message_get_path(msg), dbus_message_get_interface(msg), dbus_message_get_member(msg), dbus_message_get_destination(msg)); */
- if (dbus_message_is_method_call(msg, "org.freedesktop.DBus.Introspectable", "Introspect"))
+ if (dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_METHOD_CALL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ if (dbus_message_is_method_call(msg, DBUS_INTERFACE_INTROSPECTABLE, "Introspect") ||
+ (!dbus_message_get_interface(msg) && dbus_message_has_member(msg, "Introspect")))
return handle_introspect(conn, msg, sl);
- if (dbus_message_is_method_call(msg, INTERFACE, "GetAddress"))
- return handle_get_address(conn, msg, sl);
+ if (dbus_message_is_method_call(msg, DBUS_INTERFACE_PROPERTIES, "Get") ||
+ (!dbus_message_get_interface(msg) && dbus_message_has_member(msg, "Get")))
+ return handle_get(conn, msg, sl);
+
+ if (dbus_message_is_method_call(msg, DBUS_INTERFACE_PROPERTIES, "Set") ||
+ (!dbus_message_get_interface(msg) && dbus_message_has_member(msg, "Set")))
+ return handle_set(conn, msg, sl);
+
+ if (dbus_message_is_method_call(msg, DBUS_INTERFACE_PROPERTIES, "GetAll") ||
+ (!dbus_message_get_interface(msg) && dbus_message_has_member(msg, "GetAll")))
+ return handle_get_all(conn, msg, sl);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
diff --git a/src/pulsecore/dbus-common.c b/src/pulsecore/dbus-common.c
index 350add8..6562cda 100644
--- a/src/pulsecore/dbus-common.c
+++ b/src/pulsecore/dbus-common.c
@@ -48,6 +48,7 @@ struct object_entry {
struct interface_entry {
char *name;
+ char **properties;
char **methods;
char *introspection_snippet;
DBusObjectPathMessageFunction receive;
@@ -106,48 +107,152 @@ static void update_introspection(struct object_entry *oe) {
buf = pa_strbuf_new();
pa_strbuf_puts(buf, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE);
- pa_strbuf_puts(buf, "<node>");
+ pa_strbuf_puts(buf, "<node>\n");
while ((iface_entry = pa_hashmap_iterate(oe->interfaces, &state, NULL)))
pa_strbuf_puts(buf, iface_entry->introspection_snippet);
- pa_strbuf_puts(buf, " <interface name=\"org.freedesktop.DBus.Introspectable\">"
- " <method name=\"Introspect\">"
- " <arg name=\"data\" type=\"s\" direction=\"out\"/>"
- " </method>"
- " </interface>");
-
- pa_strbuf_puts(buf, "</node>");
+ pa_strbuf_puts(buf, " <interface name=\"" DBUS_INTERFACE_INTROSPECTABLE "\">\n"
+ " <method name=\"Introspect\">\n"
+ " <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+ " </method>\n"
+ " </interface>\n"
+ " <interface name=\"" DBUS_INTERFACE_PROPERTIES "\">\n"
+ " <method name=\"Get\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"value\" type=\"v\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"Set\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"value\" type=\"v\" direction=\"in\"/>\n"
+ " </method>\n"
+ " <method name=\"GetAll\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"props\" type=\"a{sv}\" direction=\"out\"/>\n"
+ " </method>\n"
+ " </interface>\n");
+
+ pa_strbuf_puts(buf, "</node>\n");
pa_xfree(oe->introspection);
oe->introspection = pa_strbuf_tostring_free(buf);
}
-static struct interface_entry *find_interface(struct object_entry *obj_entry, DBusMessage *msg) {
- const char *interface;
- struct interface_entry *iface_entry;
+enum find_result_t {
+ SUCCESS,
+ NO_SUCH_PROPERTY,
+ NO_SUCH_METHOD,
+ INVALID_MESSAGE_ARGUMENTS
+};
+
+static enum find_result_t find_interface_by_property(struct object_entry *obj_entry, const char *property, struct interface_entry **entry) {
void *state = NULL;
pa_assert(obj_entry);
- pa_assert(msg);
+ pa_assert(property);
+ pa_assert(entry);
+
+ while ((*entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ char *iface_property;
+ char **pos = (*entry)->properties;
+
+ while ((iface_property = *pos++)) {
+ if (pa_streq(iface_property, property))
+ return SUCCESS;
+ }
+ }
+
+ return NO_SUCH_PROPERTY;
+}
- if ((interface = dbus_message_get_interface(msg)))
- return pa_hashmap_get(obj_entry->interfaces, interface);
+static enum find_result_t find_interface_by_method(struct object_entry *obj_entry, const char *method, struct interface_entry **entry) {
+ void *state = NULL;
- /* NULL interface, we'll have to search for an interface that contains the
- * method. */
+ pa_assert(obj_entry);
+ pa_assert(method);
+ pa_assert(entry);
- while ((iface_entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
- char *method;
- char **pos = iface_entry->methods;
+ while ((*entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ char *iface_method;
+ char **pos = (*entry)->methods;
- while ((method = *pos++)) {
- if (!strcmp(dbus_message_get_member(msg), method))
- return iface_entry;
+ while ((iface_method = *pos++)) {
+ if (pa_streq(iface_method, method))
+ return SUCCESS;
}
}
- return NULL;
+ return NO_SUCH_METHOD;
+}
+
+static enum find_result_t find_interface_from_properties_call(struct object_entry *obj_entry, DBusMessage *msg, struct interface_entry **entry) {
+ const char *interface;
+ const char *property;
+
+ pa_assert(obj_entry);
+ pa_assert(msg);
+ pa_assert(entry);
+
+ if (dbus_message_has_member(msg, "GetAll")) {
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID))
+ return INVALID_MESSAGE_ARGUMENTS;
+
+ if (*interface) {
+ if ((*entry = pa_hashmap_get(obj_entry->interfaces, interface)))
+ return SUCCESS;
+ else
+ return NO_SUCH_METHOD;
+ } else {
+ pa_assert_se((*entry = pa_hashmap_first(obj_entry->interfaces)));
+ return SUCCESS;
+ }
+ } else {
+ pa_assert(dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set"));
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID))
+ return INVALID_MESSAGE_ARGUMENTS;
+
+ if (*interface) {
+ if ((*entry = pa_hashmap_get(obj_entry->interfaces, interface)))
+ return SUCCESS;
+ else
+ return NO_SUCH_METHOD;
+ } else
+ return find_interface_by_property(obj_entry, property, entry);
+ }
+}
+
+static enum find_result_t find_interface(struct object_entry *obj_entry, DBusMessage *msg, struct interface_entry **entry) {
+ const char *interface;
+
+ pa_assert(obj_entry);
+ pa_assert(msg);
+ pa_assert(entry);
+
+ *entry = NULL;
+
+ if (dbus_message_has_interface(msg, DBUS_INTERFACE_PROPERTIES))
+ return find_interface_from_properties_call(obj_entry, msg, entry);
+
+ else if ((interface = dbus_message_get_interface(msg))) {
+ if ((*entry = pa_hashmap_get(obj_entry->interfaces, interface)))
+ return SUCCESS;
+ else
+ return NO_SUCH_METHOD;
+
+ } else { /* The method call doesn't contain an interface. */
+ if (dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set") || dbus_message_has_member(msg, "GetAll")) {
+ if (find_interface_by_method(obj_entry, dbus_message_get_member(msg), entry) == SUCCESS)
+ return SUCCESS; /* The object has a method named Get, Set or GetAll in some other interface than .Properties. */
+ else
+ /* Assume this is a .Properties call. */
+ return find_interface_from_properties_call(obj_entry, msg, entry);
+
+ } else /* This is not a .Properties call. */
+ return find_interface_by_method(obj_entry, dbus_message_get_member(msg), entry);
+ }
}
static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
@@ -166,7 +271,8 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
pa_assert_se((obj_entry = pa_hashmap_get(dbus_state->objects, dbus_message_get_path(message))));
- if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
+ if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect") ||
+ (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Introspect"))) {
if (!(reply = dbus_message_new_method_return(message)))
goto oom;
@@ -183,10 +289,38 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
return DBUS_HANDLER_RESULT_HANDLED;
}
- if (!(iface_entry = find_interface(obj_entry, message)))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ switch (find_interface(obj_entry, message, &iface_entry)) {
+ case SUCCESS:
+ return iface_entry->receive(connection, message, iface_entry->userdata);
+
+ case NO_SUCH_PROPERTY:
+ if (!(reply = dbus_message_new_error(message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "No such property")))
+ goto fail;
- return iface_entry->receive(connection, message, iface_entry->userdata);
+ if (!dbus_connection_send(connection, reply, NULL))
+ goto oom;
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+ case NO_SUCH_METHOD:
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ case INVALID_MESSAGE_ARGUMENTS:
+ if (!(reply = dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS, "Invalid arguments")))
+ goto fail;
+
+ if (!dbus_connection_send(connection, reply, NULL))
+ goto oom;
+
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+
+ default:
+ pa_assert_not_reached();
+ }
fail:
if (reply)
@@ -226,23 +360,30 @@ static void register_object(struct dbus_state *dbus_state, struct object_entry *
}
}
-static char **copy_methods(const char * const *methods) {
+static char **copy_strarray(const char * const *array) {
unsigned n = 0;
char **copy;
unsigned i;
- while (methods[n++])
+ while (array[n++])
;
copy = pa_xnew0(char *, n);
for (i = 0; i < n - 1; ++i)
- copy[i] = pa_xstrdup(methods[i]);
+ copy[i] = pa_xstrdup(array[i]);
return copy;
}
-int pa_dbus_add_interface(pa_core *c, const char* path, const char* interface, const char * const *methods, const char* introspection_snippet, DBusObjectPathMessageFunction receive_cb, void *userdata) {
+int pa_dbus_add_interface(pa_core *c,
+ const char* path,
+ const char* interface,
+ const char * const *properties,
+ const char * const *methods,
+ const char* introspection_snippet,
+ DBusObjectPathMessageFunction receive_cb,
+ void *userdata) {
struct dbus_state *dbus_state;
pa_hashmap *objects;
struct object_entry *obj_entry;
@@ -283,7 +424,8 @@ int pa_dbus_add_interface(pa_core *c, const char* path, const char* interface, c
iface_entry = pa_xnew(struct interface_entry, 1);
iface_entry->name = pa_xstrdup(interface);
- iface_entry->methods = copy_methods(methods);
+ iface_entry->properties = copy_strarray(properties);
+ iface_entry->methods = copy_strarray(methods);
iface_entry->introspection_snippet = pa_xstrdup(introspection_snippet);
iface_entry->receive = receive_cb;
iface_entry->userdata = userdata;
@@ -331,13 +473,13 @@ static void unregister_object(struct dbus_state *dbus_state, struct object_entry
}
}
-static void free_methods(char **methods) {
- char **pos = methods;
+static void free_strarray(char **array) {
+ char **pos = array;
while (*pos++)
pa_xfree(*pos);
- pa_xfree(methods);
+ pa_xfree(array);
}
int pa_dbus_remove_interface(pa_core *c, const char* path, const char* interface) {
@@ -365,7 +507,8 @@ int pa_dbus_remove_interface(pa_core *c, const char* path, const char* interface
update_introspection(obj_entry);
pa_xfree(iface_entry->name);
- free_methods(iface_entry->methods);
+ free_strarray(iface_entry->properties);
+ free_strarray(iface_entry->methods);
pa_xfree(iface_entry->introspection_snippet);
pa_xfree(iface_entry);
diff --git a/src/pulsecore/dbus-common.h b/src/pulsecore/dbus-common.h
index 23c7c22..4354c4e 100644
--- a/src/pulsecore/dbus-common.h
+++ b/src/pulsecore/dbus-common.h
@@ -28,10 +28,12 @@
#include <pulsecore/macro.h>
#define PA_DBUS_DEFAULT_PORT 24883
-#define PA_DBUS_SOCKET_NAME "dbus_socket"
+#define PA_DBUS_SOCKET_NAME "dbus-socket"
#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
+#define PA_DBUS_ERROR_NO_SUCH_PROPERTY "org.PulseAudio.Core1.NoSuchPropertyError"
+
/* NOTE: These functions may only be called from the main thread. */
/* Returns the default address of the server type in the escaped form. For
@@ -47,17 +49,27 @@ char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type);
* Introspection requests are handled automatically. For that to work, the
* caller gives an XML snippet containing the interface introspection element.
* All interface snippets are automatically combined to provide the final
- * introspection string.
+ * introspection string for the object.
*
- * The introspection snippet contains the interface name and the methods, but
- * since this function doesn't do XML parsing, the interface name and the set
- * of method names have to be supplied separately. If the interface doesn't
- * contain any methods, NULL may be given as the methods parameter, otherwise
- * the methods parameter must be a NULL-terminated array of strings.
+ * The introspection snippet contains the interface name, the property names
+ * and the method namess, but since this function doesn't do XML parsing, the
+ * information needs to be given separately. Property and method names are
+ * given as a NULL-terminated array of strings. The interface name is used for
+ * message routing, and so are the property and method names too in case the
+ * client doesn't tell which interface he's trying to access; in absence of
+ * interface information from the client, the correct interface is searched
+ * based on the property or method name.
*
* Fails and returns a negative number if the object already has the interface
* registered. */
-int pa_dbus_add_interface(pa_core *c, const char* path, const char* interface, const char * const *methods, const char* introspection_snippet, DBusObjectPathMessageFunction receive_cb, void *userdata);
+int pa_dbus_add_interface(pa_core *c,
+ const char* path,
+ const char* interface,
+ const char * const *properties,
+ const char * const *methods,
+ const char* introspection_snippet,
+ DBusObjectPathMessageFunction receive_cb,
+ void *userdata);
/* Returns a negative number if the given object doesn't have the given
* interface registered. */
diff --git a/src/pulsecore/dbus-objs/core.c b/src/pulsecore/dbus-objs/core.c
index f59c478..18bbf78 100644
--- a/src/pulsecore/dbus-objs/core.c
+++ b/src/pulsecore/dbus-objs/core.c
@@ -27,62 +27,414 @@
#include <pulse/xmalloc.h>
+#include <pulsecore/core-util.h>
#include <pulsecore/dbus-common.h>
#include <pulsecore/macro.h>
#include "core.h"
-#define OBJECT_NAME "/org/pulseaudio/core"
-#define INTERFACE_NAME "org.pulseaudio.Core"
+#define OBJECT_PATH "/org/pulseaudio1"
+#define INTERFACE_CORE "org.PulseAudio.Core1"
struct pa_dbusobj_core {
pa_core *core;
};
static const char *introspection_snippet =
- " <interface name=\""INTERFACE_NAME"\">"
- " <method name=\"Test\">"
- " <arg name=\"result\" type=\"s\" direction=\"out\"/>"
- " </method>"
- " </interface>";
+ " <interface name=\"" INTERFACE_CORE "\">\n"
+ " <method name=\"GetCardByName\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Card\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"GetSinkByName\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Sink\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"GetSourceByName\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Source\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"GetSampleByName\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"UploadSample\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"SampleFormat\" type=\"y\" direction=\"in\"/>\n"
+ " <arg name=\"SampleRate\" type=\"u\" direction=\"in\"/>\n"
+ " <arg name=\"Channels\" type=\"ay\" direction=\"in\"/>\n"
+ " <arg name=\"DefaultVolume\" type=\"au\" direction=\"in\"/>\n"
+ " <arg name=\"Proplist\" type=\"a{say}\" direction=\"in\"/>\n"
+ " <arg name=\"Data\" type=\"ay\" direction=\"in\"/>\n"
+ " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"LoadSampleFromFile\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Filepath\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"AddLazySample\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Filepath\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"AddLazySamplesFromDirectory\">\n"
+ " <arg name=\"Dirpath\" type=\"s\" direction=\"in\"/>\n"
+ " </method>\n"
+ " <method name=\"LoadModule\">\n"
+ " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"Arguments\" type=\"a{ss}\" direction=\"in\"/>\n"
+ " <arg name=\"Module\" type=\"o\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"Exit\"/>\n"
+ " <signal name=\"NewCard\">\n"
+ " <arg name=\"Card\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"CardRemoved\">\n"
+ " <arg name=\"Card\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewSink\">\n"
+ " <arg name=\"Sink\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"SinkRemoved\">\n"
+ " <arg name=\"Sink\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"FallbackSinkUpdated\">\n"
+ " <arg name=\"Sink\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewSource\">\n"
+ " <arg name=\"Source\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"SourceRemoved\">\n"
+ " <arg name=\"Source\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"FallbackSourceUpdated\">\n"
+ " <arg name=\"Source\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewPlaybackStream\">\n"
+ " <arg name=\"PlaybackStream\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"PlaybackStreamRemoved\">\n"
+ " <arg name=\"PlaybackStream\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewRecordStream\">\n"
+ " <arg name=\"RecordStream\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"RecordStreamRemoved\">\n"
+ " <arg name=\"RecordStream\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewSample\">\n"
+ " <arg name=\"Sample\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"SampleRemoved\">\n"
+ " <arg name=\"Sample\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewModule\">\n"
+ " <arg name=\"Module\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"ModuleRemoved\">\n"
+ " <arg name=\"Module\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"NewClient\">\n"
+ " <arg name=\"Client\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <signal name=\"ClientRemoved\">\n"
+ " <arg name=\"Client\" type=\"o\"/>\n"
+ " </signal>\n"
+ " <property name=\"InterfaceRevision\" type=\"u\" access=\"read\"/>\n"
+ " <property name=\"Name\" type=\"s\" access=\"read\"/>\n"
+ " <property name=\"Version\" type=\"s\" access=\"read\"/>\n"
+ " <property name=\"Username\" type=\"s\" access=\"read\"/>\n"
+ " <property name=\"Hostname\" type=\"s\" access=\"read\"/>\n"
+ " <property name=\"DefaultChannels\" type=\"ay\" access=\"readwrite\"/>\n"
+ " <property name=\"DefaultSampleFormat\" type=\"y\" access=\"readwrite\"/>\n"
+ " <property name=\"DefaultSampleRate\" type=\"u\" access=\"readwrite\"/>\n"
+ " <property name=\"Sinks\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"FallbackSink\" type=\"s\" access=\"readwrite\"/>\n"
+ " <property name=\"Sources\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"FallbackSource\" type=\"o\" access=\"readwrite\"/>\n"
+ " <property name=\"PlaybackStreams\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"RecordStreams\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"Samples\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"Modules\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"Clients\" type=\"ao\" access=\"read\"/>\n"
+ " <property name=\"Extensions\" type=\"as\" access=\"read\"/>\n"
+ " </interface>\n";
+
+/* If you need to modify this list, note that handle_get_all() uses hard-coded
+ * indexes to point to these strings, so make sure the indexes don't go wrong
+ * there. */
+static const char *properties[] = {
+ "InterfaceRevision",
+ "Name",
+ "Version",
+ "Username",
+ "Hostname",
+ "DefaultChannels",
+ "DefaultSampleFormat",
+ "DefaultSampleRate",
+ "Sinks",
+ "FallbackSink",
+ "Sources",
+ "FallbackSource",
+ "PlaybackStreams",
+ "RecordStreams",
+ "Samples",
+ "Modules",
+ "Clients",
+ "Extensions",
+ NULL
+};
static const char *methods[] = {
- "Test",
+ "GetCardByName",
+ "GetSinkByName",
+ "GetSourceByName",
+ "GetSampleByName",
+ "UploadSample",
+ "LoadSampleFromFile",
+ "AddLazySample",
+ "AddLazySamplesFromDirectory",
+ "LoadModule",
+ "Exit",
NULL
};
-static DBusHandlerResult handle_test(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
+static DBusHandlerResult handle_get_name(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
DBusMessage *reply = NULL;
- const char *reply_message = "Hello!";
+ const char *server_name = PACKAGE_NAME;
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- if (!(reply = dbus_message_new_method_return(msg)))
- goto oom;
+ if (!(reply = dbus_message_new_method_return(msg))) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ dbus_message_iter_init_append(reply, &msg_iter);
+ if (!dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_VARIANT, "s", &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_append_basic(&variant_iter, DBUS_TYPE_STRING, &server_name)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&msg_iter, &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+
+finish:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return r;
+}
- if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &reply_message, DBUS_TYPE_INVALID))
- goto fail;
+static DBusHandlerResult handle_get(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
+ const char* interface;
+ const char* property;
+ DBusMessage *reply = NULL;
- if (!dbus_connection_send(conn, reply, NULL))
- goto oom;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ if (*interface && !pa_streq(interface, INTERFACE_CORE)) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+
+ if (pa_streq(property, "Name")) {
+ r = handle_get_name(conn, msg, c);
+ goto finish;
+ }
+
+ if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+
+finish:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return r;
+}
- dbus_message_unref(reply);
+static DBusHandlerResult handle_set(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
+ const char* interface;
+ const char* property;
+ DBusMessage *reply = NULL;
- return DBUS_HANDLER_RESULT_HANDLED;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
-fail:
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ if (*interface && !pa_streq(interface, INTERFACE_CORE)) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+
+ if (pa_streq(property, "Name")) {
+ if (!(reply = dbus_message_new_error_printf(msg, DBUS_ERROR_ACCESS_DENIED, "%s: Property not settable", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+
+ if (!(reply = dbus_message_new_error_printf(msg, DBUS_ERROR_ACCESS_DENIED, "%s: Property not settable", property))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+
+finish:
if (reply)
dbus_message_unref(reply);
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ return r;
+}
+
+static DBusHandlerResult handle_get_all(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
+ DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
+ DBusMessage *reply = NULL;
+ char *interface = NULL;
+ char const *server_name = PACKAGE_NAME;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ DBusMessageIter variant_iter;
-oom:
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID)) {
+ if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
+ r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+ goto finish;
+ }
+
+ if (!(reply = dbus_message_new_method_return(msg))) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ dbus_message_iter_init_append(reply, &msg_iter);
+ if (!dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &properties[1])) { /* Name */
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_open_container(&dict_entry_iter, DBUS_TYPE_VARIANT, "s", &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_append_basic(&variant_iter, DBUS_TYPE_STRING, &server_name)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&dict_entry_iter, &variant_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&dict_iter, &dict_entry_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_message_iter_close_container(&msg_iter, &dict_iter)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ if (!dbus_connection_send(conn, reply, NULL)) {
+ r = DBUS_HANDLER_RESULT_NEED_MEMORY;
+ goto finish;
+ }
+ r = DBUS_HANDLER_RESULT_HANDLED;
+
+finish:
if (reply)
dbus_message_unref(reply);
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ return r;
}
static DBusHandlerResult receive_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
@@ -92,8 +444,17 @@ static DBusHandlerResult receive_cb(DBusConnection *connection, DBusMessage *mes
pa_assert(message);
pa_assert(c);
- if (dbus_message_is_method_call(message, INTERFACE_NAME, "Test"))
- return handle_test(connection, message, c);
+ if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Get") ||
+ (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Get")))
+ return handle_get(connection, message, c);
+
+ if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Set") ||
+ (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Set")))
+ return handle_set(connection, message, c);
+
+ if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "GetAll") ||
+ (!dbus_message_get_interface(message) && dbus_message_has_member(message, "GetAll")))
+ return handle_get_all(connection, message, c);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
@@ -106,7 +467,8 @@ pa_dbusobj_core *pa_dbusobj_core_new(pa_core *core) {
c = pa_xnew(pa_dbusobj_core, 1);
c->core = core;
- pa_dbus_add_interface(core, OBJECT_NAME, INTERFACE_NAME, methods, introspection_snippet, receive_cb, c);
+ pa_dbus_add_interface(core, OBJECT_PATH, INTERFACE_CORE, properties, methods, introspection_snippet, receive_cb, c);
+
return c;
}
@@ -114,7 +476,7 @@ pa_dbusobj_core *pa_dbusobj_core_new(pa_core *core) {
void pa_dbusobj_core_free(pa_dbusobj_core *c) {
pa_assert(c);
- pa_dbus_remove_interface(c->core, OBJECT_NAME, INTERFACE_NAME);
+ pa_dbus_remove_interface(c->core, OBJECT_PATH, INTERFACE_CORE);
pa_xfree(c);
}
commit 5f5867e08ab8821447faacece92dab1e0b993fe4
Author: Daniel Mack <daniel at caiaq.de>
Date: Fri Jul 17 13:45:37 2009 +0200
make bootstrap.sh aware of Darwin environment
Signed-off-by: Daniel Mack <daniel at caiaq.de>
diff --git a/bootstrap.sh b/bootstrap.sh
index aa9755f..a5bd9a7 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -40,10 +40,22 @@ run_versioned() {
set -ex
+case $(uname) in
+ *Darwin*)
+ CP_OPTS="-R"
+ CHMOD_OPTS=""
+ LIBTOOLIZE="glibtoolize"
+ ;;
+ *)
+ CP_OPTS="-av"
+ CHMOD_OPTS="-c"
+ ;;
+esac
+
if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then
echo "Activating pre-commit hook."
- cp -av .git/hooks/pre-commit.sample .git/hooks/pre-commit
- chmod -c +x .git/hooks/pre-commit
+ cp ${CP_OPTS} .git/hooks/pre-commit.sample .git/hooks/pre-commit
+ chmod ${CHMOD_OPTS} +x .git/hooks/pre-commit
fi
if [ -f .tarball-version ]; then
commit 909dc093a5d33b5eed2c718187c7acce1c6d9bd0
Merge: 5f5867e 673112b
Author: Daniel Mack <daniel at caiaq.de>
Date: Fri Jul 17 14:20:57 2009 +0200
Merge branch 'master' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
commit 3fc7b870fcd8b3cc7a6b73fd3d4449994860f4fc
Merge: 909dc09 a6d6718
Author: Daniel Mack <daniel at caiaq.de>
Date: Fri Jul 17 14:34:52 2009 +0200
Merge branch 'osx' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
commit 30fcda6cb5959af2a1911bb40bf769be6b554450
Author: Daniel Mack <daniel at caiaq.de>
Date: Fri Jul 17 20:52:23 2009 +0200
Revert "make bootstrap.sh aware of Darwin environment"
This reverts commit 5f5867e08ab8821447faacece92dab1e0b993fe4.
diff --git a/bootstrap.sh b/bootstrap.sh
index a5bd9a7..aa9755f 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -40,22 +40,10 @@ run_versioned() {
set -ex
-case $(uname) in
- *Darwin*)
- CP_OPTS="-R"
- CHMOD_OPTS=""
- LIBTOOLIZE="glibtoolize"
- ;;
- *)
- CP_OPTS="-av"
- CHMOD_OPTS="-c"
- ;;
-esac
-
if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then
echo "Activating pre-commit hook."
- cp ${CP_OPTS} .git/hooks/pre-commit.sample .git/hooks/pre-commit
- chmod ${CHMOD_OPTS} +x .git/hooks/pre-commit
+ cp -av .git/hooks/pre-commit.sample .git/hooks/pre-commit
+ chmod -c +x .git/hooks/pre-commit
fi
if [ -f .tarball-version ]; then
commit 63f2ed6dd7b4b87dbe175f8dda35204dee8737e0
Merge: 30fcda6 8c85c99
Author: Daniel Mack <daniel at caiaq.de>
Date: Fri Jul 17 20:52:34 2009 +0200
Merge branch 'osx' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
commit c6d330ef91ce401660f907536b1bfd0591c14c2a
Merge: 63f2ed6 d18eb61
Author: Daniel Mack <daniel at caiaq.de>
Date: Fri Jul 17 21:06:58 2009 +0200
Merge branch 'osx' of git://gitorious.org/~flameeyes/pulseaudio/flameeyes-pulseaudio
commit 9347e90fed732dac619bb88f6518c344e7436447
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Jul 21 00:02:27 2009 +0300
Finish the Core dbus interface.
diff --git a/src/Makefile.am b/src/Makefile.am
index 5866889..47eb647 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -852,7 +852,7 @@ endif
if HAVE_DBUS
libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES += \
pulsecore/dbus-shared.c pulsecore/dbus-shared.h \
- pulsecore/dbus-common.c pulsecore/dbus-common.h
+ pulsecore/protocol-dbus.c pulsecore/protocol-dbus.h
libpulsecore_ at PA_MAJORMINORMICRO@_la_CFLAGS += $(DBUS_CFLAGS)
libpulsecore_ at PA_MAJORMINORMICRO@_la_LIBADD += $(DBUS_LIBS)
endif
@@ -1225,7 +1225,7 @@ SYMDEF_FILES = \
modules/module-augment-properties-symdef.h \
modules/module-cork-music-on-phone-symdef.h \
modules/module-console-kit-symdef.h \
- modules/module-dbus-protocol-symdef.h
+ modules/dbus/module-dbus-protocol-symdef.h
EXTRA_DIST += $(SYMDEF_FILES)
BUILT_SOURCES += $(SYMDEF_FILES)
@@ -1277,8 +1277,14 @@ module_http_protocol_unix_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMI
# D-Bus protocol
module_dbus_protocol_la_SOURCES = \
- pulsecore/dbus-objs/core.c pulsecore/dbus-objs/core.h \
- modules/module-dbus-protocol.c
+ modules/dbus/iface-card.c modules/dbus/iface-card.h \
+ modules/dbus/iface-client.c modules/dbus/iface-client.h \
+ modules/dbus/iface-core.c modules/dbus/iface-core.h \
+ modules/dbus/iface-device.c modules/dbus/iface-device.h \
+ modules/dbus/iface-module.c modules/dbus/iface-module.h \
+ modules/dbus/iface-sample.c modules/dbus/iface-sample.h \
+ modules/dbus/iface-stream.c modules/dbus/iface-stream.h \
+ modules/dbus/module-dbus-protocol.c
module_dbus_protocol_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
module_dbus_protocol_la_LDFLAGS = $(MODULE_LDFLAGS)
module_dbus_protocol_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
diff --git a/src/daemon/server-lookup.c b/src/daemon/server-lookup.c
index ebacc09..45796e7 100644
--- a/src/daemon/server-lookup.c
+++ b/src/daemon/server-lookup.c
@@ -30,13 +30,13 @@
#include <pulsecore/core.h>
#include <pulsecore/core-util.h>
-#include <pulsecore/dbus-common.h>
#include <pulsecore/dbus-shared.h>
#include <pulsecore/macro.h>
+#include <pulsecore/protocol-dbus.h>
#include "server-lookup.h"
-#define OBJECT_PATH "/org/pulseaudio1/server_lookup"
+#define OBJECT_PATH "/org/pulseaudio/server_lookup1"
#define INTERFACE "org.PulseAudio.ServerLookup1"
struct pa_dbusobj_server_lookup {
diff --git a/src/modules/module-dbus-protocol.c b/src/modules/module-dbus-protocol.c
deleted file mode 100644
index f7c1f0a..0000000
--- a/src/modules/module-dbus-protocol.c
+++ /dev/null
@@ -1,575 +0,0 @@
-/***
- This file is part of PulseAudio.
-
- Copyright 2009 Tanu Kaskinen
- Copyright 2006 Lennart Poettering
- Copyright 2006 Shams E. King
-
- PulseAudio is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License,
- or (at your option) any later version.
-
- PulseAudio is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- 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 <dbus/dbus.h>
-
-#include <pulse/mainloop-api.h>
-#include <pulse/timeval.h>
-#include <pulse/xmalloc.h>
-
-#include <pulsecore/client.h>
-#include <pulsecore/core-util.h>
-#include <pulsecore/dbus-common.h>
-#include <pulsecore/dbus-util.h>
-#include <pulsecore/idxset.h>
-#include <pulsecore/macro.h>
-#include <pulsecore/modargs.h>
-#include <pulsecore/module.h>
-
-#include <pulsecore/dbus-objs/core.h>
-
-#include "module-dbus-protocol-symdef.h"
-
-PA_MODULE_DESCRIPTION("D-Bus interface");
-PA_MODULE_USAGE(
- "access=local|remote|local,remote "
- "tcp_port=<port number>");
-PA_MODULE_LOAD_ONCE(TRUE);
-PA_MODULE_AUTHOR("Tanu Kaskinen");
-PA_MODULE_VERSION(PACKAGE_VERSION);
-
-#define CLEANUP_INTERVAL 10 /* seconds */
-
-enum server_type {
- SERVER_TYPE_LOCAL,
- SERVER_TYPE_TCP
-};
-
-struct server;
-struct connection;
-
-struct userdata {
- pa_module *module;
- pa_bool_t local_access;
- pa_bool_t remote_access;
- uint32_t tcp_port;
-
- struct server *local_server;
- struct server *tcp_server;
-
- pa_idxset *connections;
-
- pa_time_event *cleanup_event;
-
- pa_dbusobj_core *core_object;
-};
-
-struct server {
- struct userdata *userdata;
- enum server_type type;
- DBusServer *dbus_server;
-};
-
-struct connection {
- struct server *server;
- pa_dbus_wrap_connection *wrap_conn;
- pa_client *client;
-};
-
-static const char* const valid_modargs[] = {
- "access",
- "tcp_port",
- NULL
-};
-
-static void connection_free(struct connection *c) {
- pa_assert(c);
-
- pa_assert_se(pa_dbus_unregister_connection(c->server->userdata->module->core, pa_dbus_wrap_connection_get(c->wrap_conn)) >= 0);
-
- pa_client_free(c->client);
- pa_assert_se(pa_idxset_remove_by_data(c->server->userdata->connections, c, NULL));
- pa_dbus_wrap_connection_free(c->wrap_conn);
- pa_xfree(c);
-}
-
-/* Called from pa_client_kill(). */
-static void client_kill_cb(pa_client *c) {
- struct connection *conn;
-
- pa_assert(c);
- pa_assert(c->userdata);
-
- conn = c->userdata;
- connection_free(conn);
-
- pa_log_info("Connection killed.");
-}
-
-static dbus_bool_t user_check_cb(DBusConnection *connection, unsigned long uid, void *data) {
- pa_log_debug("Allowing connection by user %lu.", uid);
-
- return TRUE;
-}
-
-/* Called by D-Bus when a new client connection is received. */
-static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_connection, void *data) {
- struct server *s = data;
- struct connection *c;
- pa_client_new_data new_data;
- pa_client *client;
-
- pa_assert(new_connection);
- pa_assert(s);
-
- pa_client_new_data_init(&new_data);
- new_data.module = s->userdata->module;
- new_data.driver = __FILE__;
- pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: It's probably possible to generate a fancier name. Other props? */
- client = pa_client_new(s->userdata->module->core, &new_data);
- pa_client_new_data_done(&new_data);
-
- if (!client) {
- dbus_connection_close(new_connection);
- return;
- }
-
- if (s->type == SERVER_TYPE_TCP || s->userdata->module->core->server_type == PA_SERVER_TYPE_SYSTEM) {
- /* FIXME: Here we allow anyone from anywhere to access the server,
- * anonymously. Access control should be configurable. */
- dbus_connection_set_unix_user_function(new_connection, user_check_cb, NULL, NULL);
- dbus_connection_set_allow_anonymous(new_connection, TRUE);
- }
-
- c = pa_xnew(struct connection, 1);
- c->server = s;
- c->wrap_conn = pa_dbus_wrap_connection_new_from_existing(s->userdata->module->core->mainloop, TRUE, new_connection);
- c->client = client;
-
- c->client->kill = client_kill_cb;
- c->client->send_event = NULL; /* TODO: Implement this. */
- c->client->userdata = c;
-
- pa_idxset_put(s->userdata->connections, c, NULL);
-
- pa_assert_se(pa_dbus_register_connection(s->userdata->module->core, new_connection) >= 0);
-}
-
-/* Called by PA mainloop when a D-Bus fd watch event needs handling. */
-static void io_event_cb(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
- unsigned int flags = 0;
- DBusWatch *watch = userdata;
-
-#if HAVE_DBUS_WATCH_GET_UNIX_FD
- pa_assert(fd == dbus_watch_get_unix_fd(watch));
-#else
- pa_assert(fd == dbus_watch_get_fd(watch));
-#endif
-
- if (!dbus_watch_get_enabled(watch)) {
- pa_log_warn("Asked to handle disabled watch: %p %i", (void*) watch, fd);
- return;
- }
-
- if (events & PA_IO_EVENT_INPUT)
- flags |= DBUS_WATCH_READABLE;
- if (events & PA_IO_EVENT_OUTPUT)
- flags |= DBUS_WATCH_WRITABLE;
- if (events & PA_IO_EVENT_HANGUP)
- flags |= DBUS_WATCH_HANGUP;
- if (events & PA_IO_EVENT_ERROR)
- flags |= DBUS_WATCH_ERROR;
-
- dbus_watch_handle(watch, flags);
-}
-
-/* Called by PA mainloop when a D-Bus timer event needs handling. */
-static void time_event_cb(pa_mainloop_api *mainloop, pa_time_event* e, const struct timeval *tv, void *userdata) {
- DBusTimeout *timeout = userdata;
-
- if (dbus_timeout_get_enabled(timeout)) {
- struct timeval next = *tv;
- dbus_timeout_handle(timeout);
-
- /* restart it for the next scheduled time */
- pa_timeval_add(&next, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
- mainloop->time_restart(e, &next);
- }
-}
-
-/* Translates D-Bus fd watch event flags to PA IO event flags. */
-static pa_io_event_flags_t get_watch_flags(DBusWatch *watch) {
- unsigned int flags;
- pa_io_event_flags_t events = 0;
-
- pa_assert(watch);
-
- flags = dbus_watch_get_flags(watch);
-
- /* no watch flags for disabled watches */
- if (!dbus_watch_get_enabled(watch))
- return PA_IO_EVENT_NULL;
-
- if (flags & DBUS_WATCH_READABLE)
- events |= PA_IO_EVENT_INPUT;
- if (flags & DBUS_WATCH_WRITABLE)
- events |= PA_IO_EVENT_OUTPUT;
-
- return events | PA_IO_EVENT_HANGUP | PA_IO_EVENT_ERROR;
-}
-
-/* Called by D-Bus when a D-Bus fd watch event is added. */
-static dbus_bool_t watch_add_cb(DBusWatch *watch, void *data) {
- struct server *s = data;
- pa_mainloop_api *mainloop;
- pa_io_event *ev;
-
- pa_assert(watch);
- pa_assert(s);
-
- mainloop = s->userdata->module->core->mainloop;
-
- ev = mainloop->io_new(
- mainloop,
-#if HAVE_DBUS_WATCH_GET_UNIX_FD
- dbus_watch_get_unix_fd(watch),
-#else
- dbus_watch_get_fd(watch),
-#endif
- get_watch_flags(watch), io_event_cb, watch);
-
- dbus_watch_set_data(watch, ev, NULL);
-
- return TRUE;
-}
-
-/* Called by D-Bus when a D-Bus fd watch event is removed. */
-static void watch_remove_cb(DBusWatch *watch, void *data) {
- struct server *s = data;
- pa_io_event *ev;
-
- pa_assert(watch);
- pa_assert(s);
-
- if ((ev = dbus_watch_get_data(watch)))
- s->userdata->module->core->mainloop->io_free(ev);
-}
-
-/* Called by D-Bus when a D-Bus fd watch event is toggled. */
-static void watch_toggled_cb(DBusWatch *watch, void *data) {
- struct server *s = data;
- pa_io_event *ev;
-
- pa_assert(watch);
- pa_assert(s);
-
- pa_assert_se(ev = dbus_watch_get_data(watch));
-
- /* get_watch_flags() checks if the watch is enabled */
- s->userdata->module->core->mainloop->io_enable(ev, get_watch_flags(watch));
-}
-
-/* Called by D-Bus when a D-Bus timer event is added. */
-static dbus_bool_t timeout_add_cb(DBusTimeout *timeout, void *data) {
- struct server *s = data;
- pa_mainloop_api *mainloop;
- pa_time_event *ev;
- struct timeval tv;
-
- pa_assert(timeout);
- pa_assert(s);
-
- if (!dbus_timeout_get_enabled(timeout))
- return FALSE;
-
- mainloop = s->userdata->module->core->mainloop;
-
- pa_gettimeofday(&tv);
- pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
-
- ev = mainloop->time_new(mainloop, &tv, time_event_cb, timeout);
-
- dbus_timeout_set_data(timeout, ev, NULL);
-
- return TRUE;
-}
-
-/* Called by D-Bus when a D-Bus timer event is removed. */
-static void timeout_remove_cb(DBusTimeout *timeout, void *data) {
- struct server *s = data;
- pa_time_event *ev;
-
- pa_assert(timeout);
- pa_assert(s);
-
- if ((ev = dbus_timeout_get_data(timeout)))
- s->userdata->module->core->mainloop->time_free(ev);
-}
-
-/* Called by D-Bus when a D-Bus timer event is toggled. */
-static void timeout_toggled_cb(DBusTimeout *timeout, void *data) {
- struct server *s = data;
- pa_mainloop_api *mainloop;
- pa_time_event *ev;
-
- pa_assert(timeout);
- pa_assert(s);
-
- mainloop = s->userdata->module->core->mainloop;
-
- pa_assert_se(ev = dbus_timeout_get_data(timeout));
-
- if (dbus_timeout_get_enabled(timeout)) {
- struct timeval tv;
-
- pa_gettimeofday(&tv);
- pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
-
- mainloop->time_restart(ev, &tv);
- } else
- mainloop->time_restart(ev, NULL);
-}
-
-static void server_free(struct server *s) {
- pa_assert(s);
-
- if (s->dbus_server) {
- dbus_server_disconnect(s->dbus_server);
- dbus_server_unref(s->dbus_server);
- }
-
- pa_xfree(s);
-}
-
-static struct server *start_server(struct userdata *u, const char *address, enum server_type type) {
- /* XXX: We assume that when we unref the DBusServer instance at module
- * shutdown, nobody else holds any references to it. If we stop assuming
- * that someday, dbus_server_set_new_connection_function,
- * dbus_server_set_watch_functions and dbus_server_set_timeout_functions
- * calls should probably register free callbacks, instead of providing NULL
- * as they do now. */
-
- struct server *s = NULL;
- DBusError error;
-
- pa_assert(u);
- pa_assert(address);
-
- dbus_error_init(&error);
-
- s = pa_xnew0(struct server, 1);
- s->userdata = u;
- s->dbus_server = dbus_server_listen(address, &error);
-
- if (dbus_error_is_set(&error)) {
- pa_log("dbus_server_listen() failed: %s: %s", error.name, error.message);
- goto fail;
- }
-
- dbus_server_set_new_connection_function(s->dbus_server, connection_new_cb, s, NULL);
-
- if (!dbus_server_set_watch_functions(s->dbus_server, watch_add_cb, watch_remove_cb, watch_toggled_cb, s, NULL)) {
- pa_log("dbus_server_set_watch_functions() ran out of memory.");
- goto fail;
- }
-
- if (!dbus_server_set_timeout_functions(s->dbus_server, timeout_add_cb, timeout_remove_cb, timeout_toggled_cb, s, NULL)) {
- pa_log("dbus_server_set_timeout_functions() ran out of memory.");
- goto fail;
- }
-
- return s;
-
-fail:
- if (s)
- server_free(s);
-
- dbus_error_free(&error);
-
- return NULL;
-}
-
-static struct server *start_local_server(struct userdata *u) {
- struct server *s = NULL;
- char *address = NULL;
-
- pa_assert(u);
-
- address = pa_get_dbus_address_from_server_type(u->module->core->server_type);
-
- s = start_server(u, address, SERVER_TYPE_LOCAL); /* May return NULL */
-
- pa_xfree(address);
-
- return s;
-}
-
-static struct server *start_tcp_server(struct userdata *u) {
- struct server *s = NULL;
- char *address = NULL;
-
- pa_assert(u);
-
- address = pa_sprintf_malloc("tcp:host=127.0.0.1,port=%u", u->tcp_port);
-
- s = start_server(u, address, SERVER_TYPE_TCP); /* May return NULL */
-
- pa_xfree(address);
-
- return s;
-}
-
-static int get_access_arg(pa_modargs *ma, pa_bool_t *local_access, pa_bool_t *remote_access) {
- const char *value = NULL;
-
- pa_assert(ma);
- pa_assert(local_access);
- pa_assert(remote_access);
-
- if (!(value = pa_modargs_get_value(ma, "access", NULL)))
- return 0;
-
- if (!strcmp(value, "local")) {
- *local_access = TRUE;
- *remote_access = FALSE;
- } else if (!strcmp(value, "remote")) {
- *local_access = FALSE;
- *remote_access = TRUE;
- } else if (!strcmp(value, "local,remote")) {
- *local_access = TRUE;
- *remote_access = TRUE;
- } else
- return -1;
-
- return 0;
-}
-
-/* Frees dead client connections. Called every CLEANUP_INTERVAL seconds. */
-static void cleanup_cb(pa_mainloop_api *a, pa_time_event *e, const struct timeval *tv, void *userdata) {
- struct userdata *u = userdata;
- struct connection *conn = NULL;
- uint32_t idx;
- struct timeval cleanup_timeval;
- unsigned free_count = 0;
-
- for (conn = pa_idxset_first(u->connections, &idx); conn; conn = pa_idxset_next(u->connections, &idx)) {
- if (!dbus_connection_get_is_connected(pa_dbus_wrap_connection_get(conn->wrap_conn))) {
- connection_free(conn);
- ++free_count;
- }
- }
-
- if (free_count > 0)
- pa_log_debug("Freed %u dead D-Bus client connections.", free_count);
-
- pa_gettimeofday(&cleanup_timeval);
- cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
- u->module->core->mainloop->time_restart(e, &cleanup_timeval);
-}
-
-int pa__init(pa_module *m) {
- struct userdata *u = NULL;
- pa_modargs *ma = NULL;
- struct timeval cleanup_timeval;
-
- 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;
- u->local_access = TRUE;
- u->remote_access = FALSE;
- u->tcp_port = PA_DBUS_DEFAULT_PORT;
-
- if (get_access_arg(ma, &u->local_access, &u->remote_access) < 0) {
- pa_log("Invalid access argument: '%s'", pa_modargs_get_value(ma, "access", NULL));
- goto fail;
- }
-
- if (pa_modargs_get_value_u32(ma, "tcp_port", &u->tcp_port) < 0 || u->tcp_port < 1 || u->tcp_port > 49150) {
- pa_log("Invalid tcp_port argument: '%s'", pa_modargs_get_value(ma, "tcp_port", NULL));
- goto fail;
- }
-
- if (u->local_access && !(u->local_server = start_local_server(u))) {
- pa_log("Starting the local D-Bus server failed.");
- goto fail;
- }
-
- if (u->remote_access && !(u->tcp_server = start_tcp_server(u))) {
- pa_log("Starting the D-Bus server for remote connections failed.");
- goto fail;
- }
-
- u->connections = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
-
- pa_gettimeofday(&cleanup_timeval);
- cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
- u->cleanup_event = m->core->mainloop->time_new(m->core->mainloop, &cleanup_timeval, cleanup_cb, u);
-
- u->core_object = pa_dbusobj_core_new(m->core);
-
- return 0;
-
-fail:
- if (ma)
- pa_modargs_free(ma);
-
- pa__done(m);
-
- return -1;
-}
-
-/* Called by idxset when the connection set is freed. */
-static void connection_free_cb(void *p, void *userdata) {
- struct connection *conn = p;
-
- pa_assert(conn);
-
- connection_free(conn);
-}
-
-void pa__done(pa_module *m) {
- struct userdata *u;
-
- pa_assert(m);
-
- if (!(u = m->userdata))
- return;
-
- if (u->core_object)
- pa_dbusobj_core_free(u->core_object);
-
- if (u->cleanup_event)
- m->core->mainloop->time_free(u->cleanup_event);
-
- if (u->connections)
- pa_idxset_free(u->connections, connection_free_cb, NULL);
-
- if (u->tcp_server)
- server_free(u->tcp_server);
-
- if (u->local_server)
- server_free(u->local_server);
-
- pa_xfree(u);
- m->userdata = NULL;
-}
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 04e7eb2..ebddf36 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2656,6 +2656,28 @@ char *pa_replace(const char*s, const char*a, const char *b) {
return pa_strbuf_tostring_free(sb);
}
+char *pa_escape(const char *p, const char *chars) {
+ const char *s;
+ const char *c;
+ pa_strbuf *buf = pa_strbuf_new();
+
+ for (s = p; *s; ++s) {
+ if (*s == '\\')
+ pa_strbuf_putc(buf, '\\');
+ else if (chars) {
+ for (c = chars; *c; ++c) {
+ if (*s == *c) {
+ pa_strbuf_putc(buf, '\\');
+ break;
+ }
+ }
+ }
+ pa_strbuf_putc(buf, *s);
+ }
+
+ return pa_strbuf_tostring_free(buf);
+}
+
char *pa_unescape(char *p) {
char *s, *d;
pa_bool_t escaped = FALSE;
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 96a0480..aaa51bd 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -220,6 +220,13 @@ unsigned pa_ncpus(void);
char *pa_replace(const char*s, const char*a, const char *b);
+/* Escapes p by inserting backslashes in front of backslashes. chars is a
+ * regular (ie. NULL-terminated) string containing additional characters that
+ * should be escaped. chars can be NULL. The caller has to free the returned
+ * string. */
+char *pa_escape(const char *p, const char *chars);
+
+/* Does regular backslash unescaping. Returns the argument p. */
char *pa_unescape(char *p);
char *pa_realpath(const char *path);
diff --git a/src/pulsecore/dbus-common.c b/src/pulsecore/dbus-common.c
deleted file mode 100644
index 6562cda..0000000
--- a/src/pulsecore/dbus-common.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/***
- This file is part of PulseAudio.
-
- Copyright 2009 Tanu Kaskinen
-
- PulseAudio is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License,
- or (at your option) any later version.
-
- PulseAudio is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- 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 <dbus/dbus.h>
-
-#include <pulse/xmalloc.h>
-
-#include <pulsecore/core-util.h>
-#include <pulsecore/hashmap.h>
-#include <pulsecore/idxset.h>
-#include <pulsecore/strbuf.h>
-
-#include "dbus-common.h"
-
-struct dbus_state {
- pa_core *core;
- pa_hashmap *objects; /* Object path -> struct object_entry */
- pa_idxset *connections; /* DBusConnections */
-};
-
-struct object_entry {
- char *path;
- pa_hashmap *interfaces; /* Interface name -> struct interface_entry */
- char *introspection;
-};
-
-struct interface_entry {
- char *name;
- char **properties;
- char **methods;
- char *introspection_snippet;
- DBusObjectPathMessageFunction receive;
- void *userdata;
-};
-
-char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type) {
- char *address = NULL;
- char *runtime_path = NULL;
- char *escaped_path = NULL;
-
- switch (server_type) {
- case PA_SERVER_TYPE_USER:
- if (!(runtime_path = pa_runtime_path(PA_DBUS_SOCKET_NAME))) {
- pa_log("pa_runtime_path() failed.");
- break;
- }
-
- if (!(escaped_path = dbus_address_escape_value(runtime_path))) {
- pa_log("dbus_address_escape_value() failed.");
- break;
- }
-
- address = pa_sprintf_malloc("unix:path=%s", escaped_path);
- break;
-
- case PA_SERVER_TYPE_SYSTEM:
- if (!(escaped_path = dbus_address_escape_value(PA_DBUS_SYSTEM_SOCKET_PATH))) {
- pa_log("dbus_address_escape_value() failed.");
- break;
- }
-
- address = pa_sprintf_malloc("unix:path=%s", escaped_path);
- break;
-
- case PA_SERVER_TYPE_NONE:
- address = pa_xnew0(char, 1);
- break;
-
- default:
- pa_assert_not_reached();
- }
-
- pa_xfree(runtime_path);
- pa_xfree(escaped_path);
-
- return address;
-}
-
-static void update_introspection(struct object_entry *oe) {
- pa_strbuf *buf;
- void *state = NULL;
- struct interface_entry *iface_entry = NULL;
-
- pa_assert(oe);
-
- buf = pa_strbuf_new();
- pa_strbuf_puts(buf, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE);
- pa_strbuf_puts(buf, "<node>\n");
-
- while ((iface_entry = pa_hashmap_iterate(oe->interfaces, &state, NULL)))
- pa_strbuf_puts(buf, iface_entry->introspection_snippet);
-
- pa_strbuf_puts(buf, " <interface name=\"" DBUS_INTERFACE_INTROSPECTABLE "\">\n"
- " <method name=\"Introspect\">\n"
- " <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
- " </method>\n"
- " </interface>\n"
- " <interface name=\"" DBUS_INTERFACE_PROPERTIES "\">\n"
- " <method name=\"Get\">\n"
- " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"value\" type=\"v\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"Set\">\n"
- " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"value\" type=\"v\" direction=\"in\"/>\n"
- " </method>\n"
- " <method name=\"GetAll\">\n"
- " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"props\" type=\"a{sv}\" direction=\"out\"/>\n"
- " </method>\n"
- " </interface>\n");
-
- pa_strbuf_puts(buf, "</node>\n");
-
- pa_xfree(oe->introspection);
- oe->introspection = pa_strbuf_tostring_free(buf);
-}
-
-enum find_result_t {
- SUCCESS,
- NO_SUCH_PROPERTY,
- NO_SUCH_METHOD,
- INVALID_MESSAGE_ARGUMENTS
-};
-
-static enum find_result_t find_interface_by_property(struct object_entry *obj_entry, const char *property, struct interface_entry **entry) {
- void *state = NULL;
-
- pa_assert(obj_entry);
- pa_assert(property);
- pa_assert(entry);
-
- while ((*entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
- char *iface_property;
- char **pos = (*entry)->properties;
-
- while ((iface_property = *pos++)) {
- if (pa_streq(iface_property, property))
- return SUCCESS;
- }
- }
-
- return NO_SUCH_PROPERTY;
-}
-
-static enum find_result_t find_interface_by_method(struct object_entry *obj_entry, const char *method, struct interface_entry **entry) {
- void *state = NULL;
-
- pa_assert(obj_entry);
- pa_assert(method);
- pa_assert(entry);
-
- while ((*entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
- char *iface_method;
- char **pos = (*entry)->methods;
-
- while ((iface_method = *pos++)) {
- if (pa_streq(iface_method, method))
- return SUCCESS;
- }
- }
-
- return NO_SUCH_METHOD;
-}
-
-static enum find_result_t find_interface_from_properties_call(struct object_entry *obj_entry, DBusMessage *msg, struct interface_entry **entry) {
- const char *interface;
- const char *property;
-
- pa_assert(obj_entry);
- pa_assert(msg);
- pa_assert(entry);
-
- if (dbus_message_has_member(msg, "GetAll")) {
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID))
- return INVALID_MESSAGE_ARGUMENTS;
-
- if (*interface) {
- if ((*entry = pa_hashmap_get(obj_entry->interfaces, interface)))
- return SUCCESS;
- else
- return NO_SUCH_METHOD;
- } else {
- pa_assert_se((*entry = pa_hashmap_first(obj_entry->interfaces)));
- return SUCCESS;
- }
- } else {
- pa_assert(dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set"));
-
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID))
- return INVALID_MESSAGE_ARGUMENTS;
-
- if (*interface) {
- if ((*entry = pa_hashmap_get(obj_entry->interfaces, interface)))
- return SUCCESS;
- else
- return NO_SUCH_METHOD;
- } else
- return find_interface_by_property(obj_entry, property, entry);
- }
-}
-
-static enum find_result_t find_interface(struct object_entry *obj_entry, DBusMessage *msg, struct interface_entry **entry) {
- const char *interface;
-
- pa_assert(obj_entry);
- pa_assert(msg);
- pa_assert(entry);
-
- *entry = NULL;
-
- if (dbus_message_has_interface(msg, DBUS_INTERFACE_PROPERTIES))
- return find_interface_from_properties_call(obj_entry, msg, entry);
-
- else if ((interface = dbus_message_get_interface(msg))) {
- if ((*entry = pa_hashmap_get(obj_entry->interfaces, interface)))
- return SUCCESS;
- else
- return NO_SUCH_METHOD;
-
- } else { /* The method call doesn't contain an interface. */
- if (dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set") || dbus_message_has_member(msg, "GetAll")) {
- if (find_interface_by_method(obj_entry, dbus_message_get_member(msg), entry) == SUCCESS)
- return SUCCESS; /* The object has a method named Get, Set or GetAll in some other interface than .Properties. */
- else
- /* Assume this is a .Properties call. */
- return find_interface_from_properties_call(obj_entry, msg, entry);
-
- } else /* This is not a .Properties call. */
- return find_interface_by_method(obj_entry, dbus_message_get_member(msg), entry);
- }
-}
-
-static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
- struct dbus_state *dbus_state = user_data;
- struct object_entry *obj_entry;
- struct interface_entry *iface_entry;
- DBusMessage *reply = NULL;
-
- pa_assert(connection);
- pa_assert(message);
- pa_assert(dbus_state);
- pa_assert(dbus_state->objects);
-
- if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- pa_assert_se((obj_entry = pa_hashmap_get(dbus_state->objects, dbus_message_get_path(message))));
-
- if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect") ||
- (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Introspect"))) {
- if (!(reply = dbus_message_new_method_return(message)))
- goto oom;
-
- if (!dbus_message_append_args(reply, DBUS_TYPE_STRING, &obj_entry->introspection, DBUS_TYPE_INVALID))
- goto fail;
-
- if (!dbus_connection_send(connection, reply, NULL))
- goto oom;
-
- pa_log_debug("%s.%s handled.", obj_entry->path, "Introspect");
-
- dbus_message_unref(reply);
-
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- switch (find_interface(obj_entry, message, &iface_entry)) {
- case SUCCESS:
- return iface_entry->receive(connection, message, iface_entry->userdata);
-
- case NO_SUCH_PROPERTY:
- if (!(reply = dbus_message_new_error(message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "No such property")))
- goto fail;
-
- if (!dbus_connection_send(connection, reply, NULL))
- goto oom;
-
- dbus_message_unref(reply);
-
- return DBUS_HANDLER_RESULT_HANDLED;
-
- case NO_SUCH_METHOD:
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
- case INVALID_MESSAGE_ARGUMENTS:
- if (!(reply = dbus_message_new_error(message, DBUS_ERROR_INVALID_ARGS, "Invalid arguments")))
- goto fail;
-
- if (!dbus_connection_send(connection, reply, NULL))
- goto oom;
-
- dbus_message_unref(reply);
-
- return DBUS_HANDLER_RESULT_HANDLED;
-
- default:
- pa_assert_not_reached();
- }
-
-fail:
- if (reply)
- dbus_message_unref(reply);
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
-oom:
- if (reply)
- dbus_message_unref(reply);
-
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
-}
-
-static DBusObjectPathVTable vtable = {
- .unregister_function = NULL,
- .message_function = handle_message_cb,
- .dbus_internal_pad1 = NULL,
- .dbus_internal_pad2 = NULL,
- .dbus_internal_pad3 = NULL,
- .dbus_internal_pad4 = NULL
-};
-
-static void register_object(struct dbus_state *dbus_state, struct object_entry *obj_entry) {
- DBusConnection *conn;
- void *state = NULL;
-
- pa_assert(dbus_state);
- pa_assert(obj_entry);
-
- if (!dbus_state->connections)
- return;
-
- while ((conn = pa_idxset_iterate(dbus_state->connections, &state, NULL))) {
- if (!dbus_connection_register_object_path(conn, obj_entry->path, &vtable, dbus_state))
- pa_log_debug("dbus_connection_register_object_path() failed.");
- }
-}
-
-static char **copy_strarray(const char * const *array) {
- unsigned n = 0;
- char **copy;
- unsigned i;
-
- while (array[n++])
- ;
-
- copy = pa_xnew0(char *, n);
-
- for (i = 0; i < n - 1; ++i)
- copy[i] = pa_xstrdup(array[i]);
-
- return copy;
-}
-
-int pa_dbus_add_interface(pa_core *c,
- const char* path,
- const char* interface,
- const char * const *properties,
- const char * const *methods,
- const char* introspection_snippet,
- DBusObjectPathMessageFunction receive_cb,
- void *userdata) {
- struct dbus_state *dbus_state;
- pa_hashmap *objects;
- struct object_entry *obj_entry;
- struct interface_entry *iface_entry;
- pa_bool_t state_created = FALSE;
- pa_bool_t object_map_created = FALSE;
- pa_bool_t obj_entry_created = FALSE;
-
- pa_assert(c);
- pa_assert(path);
- pa_assert(introspection_snippet);
- pa_assert(receive_cb);
-
- if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state"))) {
- dbus_state = pa_xnew0(struct dbus_state, 1);
- dbus_state->core = c;
- pa_hashmap_put(c->shared, "dbus-state", dbus_state);
- state_created = TRUE;
- }
-
- if (!(objects = dbus_state->objects)) {
- objects = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
- dbus_state->objects = objects;
- object_map_created = TRUE;
- }
-
- if (!(obj_entry = pa_hashmap_get(objects, path))) {
- obj_entry = pa_xnew(struct object_entry, 1);
- obj_entry->path = pa_xstrdup(path);
- obj_entry->interfaces = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
- obj_entry->introspection = NULL;
- pa_hashmap_put(objects, path, obj_entry);
- obj_entry_created = TRUE;
- }
-
- if (pa_hashmap_get(obj_entry->interfaces, interface) != NULL)
- goto fail; /* The interface was already registered. */
-
- iface_entry = pa_xnew(struct interface_entry, 1);
- iface_entry->name = pa_xstrdup(interface);
- iface_entry->properties = copy_strarray(properties);
- iface_entry->methods = copy_strarray(methods);
- iface_entry->introspection_snippet = pa_xstrdup(introspection_snippet);
- iface_entry->receive = receive_cb;
- iface_entry->userdata = userdata;
- pa_hashmap_put(obj_entry->interfaces, iface_entry->name, iface_entry);
-
- update_introspection(obj_entry);
-
- if (obj_entry_created)
- register_object(dbus_state, obj_entry);
-
- return 0;
-
-fail:
- if (obj_entry_created) {
- pa_hashmap_remove(objects, path);
- pa_xfree(obj_entry);
- }
-
- if (object_map_created) {
- dbus_state->objects = NULL;
- pa_hashmap_free(objects, NULL, NULL);
- }
-
- if (state_created) {
- pa_hashmap_remove(c->shared, "dbus-state");
- pa_xfree(dbus_state);
- }
-
- return -1;
-}
-
-static void unregister_object(struct dbus_state *dbus_state, struct object_entry *obj_entry) {
- DBusConnection *conn;
- void *state = NULL;
-
- pa_assert(dbus_state);
- pa_assert(obj_entry);
-
- if (!dbus_state->connections)
- return;
-
- while ((conn = pa_idxset_iterate(dbus_state->connections, &state, NULL))) {
- if (!dbus_connection_unregister_object_path(conn, obj_entry->path))
- pa_log_debug("dbus_connection_unregister_object_path() failed.");
- }
-}
-
-static void free_strarray(char **array) {
- char **pos = array;
-
- while (*pos++)
- pa_xfree(*pos);
-
- pa_xfree(array);
-}
-
-int pa_dbus_remove_interface(pa_core *c, const char* path, const char* interface) {
- struct dbus_state *dbus_state;
- pa_hashmap *objects;
- struct object_entry *obj_entry;
- struct interface_entry *iface_entry;
-
- pa_assert(c);
- pa_assert(path);
- pa_assert(interface);
-
- if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state")))
- return -1;
-
- if (!(objects = dbus_state->objects))
- return -1;
-
- if (!(obj_entry = pa_hashmap_get(objects, path)))
- return -1;
-
- if (!(iface_entry = pa_hashmap_remove(obj_entry->interfaces, interface)))
- return -1;
-
- update_introspection(obj_entry);
-
- pa_xfree(iface_entry->name);
- free_strarray(iface_entry->properties);
- free_strarray(iface_entry->methods);
- pa_xfree(iface_entry->introspection_snippet);
- pa_xfree(iface_entry);
-
- if (pa_hashmap_isempty(obj_entry->interfaces)) {
- unregister_object(dbus_state, obj_entry);
-
- pa_hashmap_remove(objects, path);
- pa_xfree(obj_entry->path);
- pa_hashmap_free(obj_entry->interfaces, NULL, NULL);
- pa_xfree(obj_entry->introspection);
- pa_xfree(obj_entry);
- }
-
- if (pa_hashmap_isempty(objects)) {
- dbus_state->objects = NULL;
- pa_hashmap_free(objects, NULL, NULL);
- }
-
- if (!dbus_state->objects && !dbus_state->connections) {
- pa_hashmap_remove(c->shared, "dbus-state");
- pa_xfree(dbus_state);
- }
-
- return 0;
-}
-
-static void register_all_objects(struct dbus_state *dbus_state, DBusConnection *conn) {
- struct object_entry *obj_entry;
- void *state = NULL;
-
- pa_assert(dbus_state);
- pa_assert(conn);
-
- if (!dbus_state->objects)
- return;
-
- while ((obj_entry = pa_hashmap_iterate(dbus_state->objects, &state, NULL))) {
- if (!dbus_connection_register_object_path(conn, obj_entry->path, &vtable, dbus_state))
- pa_log_debug("dbus_connection_register_object_path() failed.");
- }
-}
-
-int pa_dbus_register_connection(pa_core *c, DBusConnection *conn) {
- struct dbus_state *dbus_state;
- pa_idxset *connections;
- pa_bool_t state_created = FALSE;
- pa_bool_t connection_set_created = FALSE;
-
- pa_assert(c);
- pa_assert(conn);
-
- if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state"))) {
- dbus_state = pa_xnew0(struct dbus_state, 1);
- dbus_state->core = c;
- pa_hashmap_put(c->shared, "dbus-state", dbus_state);
- state_created = TRUE;
- }
-
- if (!(connections = dbus_state->connections)) {
- connections = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
- dbus_state->connections = connections;
- connection_set_created = TRUE;
- }
-
- if (pa_idxset_get_by_data(connections, conn, NULL))
- goto fail; /* The connection was already registered. */
-
- register_all_objects(dbus_state, conn);
-
- pa_idxset_put(connections, dbus_connection_ref(conn), NULL);
-
- return 0;
-
-fail:
- if (connection_set_created) {
- dbus_state->connections = NULL;
- pa_idxset_free(connections, NULL, NULL);
- }
-
- if (state_created) {
- pa_hashmap_remove(c->shared, "dbus-state");
- pa_xfree(dbus_state);
- }
-
- return -1;
-}
-
-static void unregister_all_objects(struct dbus_state *dbus_state, DBusConnection *conn) {
- struct object_entry *obj_entry;
- void *state = NULL;
-
- pa_assert(dbus_state);
- pa_assert(conn);
-
- if (!dbus_state->objects)
- return;
-
- while ((obj_entry = pa_hashmap_iterate(dbus_state->objects, &state, NULL))) {
- if (!dbus_connection_unregister_object_path(conn, obj_entry->path))
- pa_log_debug("dus_connection_unregister_object_path() failed.");
- }
-}
-
-int pa_dbus_unregister_connection(pa_core *c, DBusConnection *conn) {
- struct dbus_state *dbus_state;
- pa_idxset *connections;
-
- pa_assert(c);
- pa_assert(conn);
-
- if (!(dbus_state = pa_hashmap_get(c->shared, "dbus-state")))
- return -1;
-
- if (!(connections = dbus_state->connections))
- return -1;
-
- if (!pa_idxset_remove_by_data(connections, conn, NULL))
- return -1;
-
- unregister_all_objects(dbus_state, conn);
-
- dbus_connection_unref(conn);
-
- if (pa_idxset_isempty(connections)) {
- dbus_state->connections = NULL;
- pa_idxset_free(connections, NULL, NULL);
- }
-
- if (!dbus_state->objects && !dbus_state->connections) {
- pa_hashmap_remove(c->shared, "dbus-state");
- pa_xfree(dbus_state);
- }
-
- return 0;
-}
diff --git a/src/pulsecore/dbus-common.h b/src/pulsecore/dbus-common.h
deleted file mode 100644
index 4354c4e..0000000
--- a/src/pulsecore/dbus-common.h
+++ /dev/null
@@ -1,85 +0,0 @@
-#ifndef foodbuscommonhfoo
-#define foodbuscommonhfoo
-
-/***
- This file is part of PulseAudio.
-
- Copyright 2009 Tanu Kaskinen
-
- PulseAudio is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License,
- or (at your option) any later version.
-
- PulseAudio is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with PulseAudio; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA.
-***/
-
-#include <dbus/dbus.h>
-
-#include <pulsecore/core.h>
-#include <pulsecore/macro.h>
-
-#define PA_DBUS_DEFAULT_PORT 24883
-#define PA_DBUS_SOCKET_NAME "dbus-socket"
-
-#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
-
-#define PA_DBUS_ERROR_NO_SUCH_PROPERTY "org.PulseAudio.Core1.NoSuchPropertyError"
-
-/* NOTE: These functions may only be called from the main thread. */
-
-/* Returns the default address of the server type in the escaped form. For
- * PA_SERVER_TYPE_NONE an empty string is returned. The caller frees the
- * string. This function may fail in some rare cases, in which case NULL is
- * returned. */
-char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type);
-
-/* Registers the given interface to the given object path. This is additive: it
- * doesn't matter whether or not the object has already been registered; if it
- * is, then its interface set is just extended.
- *
- * Introspection requests are handled automatically. For that to work, the
- * caller gives an XML snippet containing the interface introspection element.
- * All interface snippets are automatically combined to provide the final
- * introspection string for the object.
- *
- * The introspection snippet contains the interface name, the property names
- * and the method namess, but since this function doesn't do XML parsing, the
- * information needs to be given separately. Property and method names are
- * given as a NULL-terminated array of strings. The interface name is used for
- * message routing, and so are the property and method names too in case the
- * client doesn't tell which interface he's trying to access; in absence of
- * interface information from the client, the correct interface is searched
- * based on the property or method name.
- *
- * Fails and returns a negative number if the object already has the interface
- * registered. */
-int pa_dbus_add_interface(pa_core *c,
- const char* path,
- const char* interface,
- const char * const *properties,
- const char * const *methods,
- const char* introspection_snippet,
- DBusObjectPathMessageFunction receive_cb,
- void *userdata);
-
-/* Returns a negative number if the given object doesn't have the given
- * interface registered. */
-int pa_dbus_remove_interface(pa_core *c, const char* path, const char* interface);
-
-/* Fails and returns a negative number if the connection is already
- * registered. */
-int pa_dbus_register_connection(pa_core *c, DBusConnection *conn);
-
-/* Returns a negative number if the connection wasn't registered. */
-int pa_dbus_unregister_connection(pa_core *c, DBusConnection *conn);
-
-#endif
diff --git a/src/pulsecore/dbus-objs/core.c b/src/pulsecore/dbus-objs/core.c
deleted file mode 100644
index 18bbf78..0000000
--- a/src/pulsecore/dbus-objs/core.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/***
- This file is part of PulseAudio.
-
- Copyright 2009 Tanu Kaskinen
-
- PulseAudio is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License,
- or (at your option) any later version.
-
- PulseAudio is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- 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 <dbus/dbus.h>
-
-#include <pulse/xmalloc.h>
-
-#include <pulsecore/core-util.h>
-#include <pulsecore/dbus-common.h>
-#include <pulsecore/macro.h>
-
-#include "core.h"
-
-#define OBJECT_PATH "/org/pulseaudio1"
-#define INTERFACE_CORE "org.PulseAudio.Core1"
-
-struct pa_dbusobj_core {
- pa_core *core;
-};
-
-static const char *introspection_snippet =
- " <interface name=\"" INTERFACE_CORE "\">\n"
- " <method name=\"GetCardByName\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Card\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"GetSinkByName\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Sink\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"GetSourceByName\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Source\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"GetSampleByName\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"UploadSample\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"SampleFormat\" type=\"y\" direction=\"in\"/>\n"
- " <arg name=\"SampleRate\" type=\"u\" direction=\"in\"/>\n"
- " <arg name=\"Channels\" type=\"ay\" direction=\"in\"/>\n"
- " <arg name=\"DefaultVolume\" type=\"au\" direction=\"in\"/>\n"
- " <arg name=\"Proplist\" type=\"a{say}\" direction=\"in\"/>\n"
- " <arg name=\"Data\" type=\"ay\" direction=\"in\"/>\n"
- " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"LoadSampleFromFile\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Filepath\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"AddLazySample\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Filepath\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Sample\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"AddLazySamplesFromDirectory\">\n"
- " <arg name=\"Dirpath\" type=\"s\" direction=\"in\"/>\n"
- " </method>\n"
- " <method name=\"LoadModule\">\n"
- " <arg name=\"Name\" type=\"s\" direction=\"in\"/>\n"
- " <arg name=\"Arguments\" type=\"a{ss}\" direction=\"in\"/>\n"
- " <arg name=\"Module\" type=\"o\" direction=\"out\"/>\n"
- " </method>\n"
- " <method name=\"Exit\"/>\n"
- " <signal name=\"NewCard\">\n"
- " <arg name=\"Card\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"CardRemoved\">\n"
- " <arg name=\"Card\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewSink\">\n"
- " <arg name=\"Sink\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"SinkRemoved\">\n"
- " <arg name=\"Sink\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"FallbackSinkUpdated\">\n"
- " <arg name=\"Sink\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewSource\">\n"
- " <arg name=\"Source\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"SourceRemoved\">\n"
- " <arg name=\"Source\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"FallbackSourceUpdated\">\n"
- " <arg name=\"Source\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewPlaybackStream\">\n"
- " <arg name=\"PlaybackStream\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"PlaybackStreamRemoved\">\n"
- " <arg name=\"PlaybackStream\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewRecordStream\">\n"
- " <arg name=\"RecordStream\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"RecordStreamRemoved\">\n"
- " <arg name=\"RecordStream\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewSample\">\n"
- " <arg name=\"Sample\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"SampleRemoved\">\n"
- " <arg name=\"Sample\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewModule\">\n"
- " <arg name=\"Module\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"ModuleRemoved\">\n"
- " <arg name=\"Module\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"NewClient\">\n"
- " <arg name=\"Client\" type=\"o\"/>\n"
- " </signal>\n"
- " <signal name=\"ClientRemoved\">\n"
- " <arg name=\"Client\" type=\"o\"/>\n"
- " </signal>\n"
- " <property name=\"InterfaceRevision\" type=\"u\" access=\"read\"/>\n"
- " <property name=\"Name\" type=\"s\" access=\"read\"/>\n"
- " <property name=\"Version\" type=\"s\" access=\"read\"/>\n"
- " <property name=\"Username\" type=\"s\" access=\"read\"/>\n"
- " <property name=\"Hostname\" type=\"s\" access=\"read\"/>\n"
- " <property name=\"DefaultChannels\" type=\"ay\" access=\"readwrite\"/>\n"
- " <property name=\"DefaultSampleFormat\" type=\"y\" access=\"readwrite\"/>\n"
- " <property name=\"DefaultSampleRate\" type=\"u\" access=\"readwrite\"/>\n"
- " <property name=\"Sinks\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"FallbackSink\" type=\"s\" access=\"readwrite\"/>\n"
- " <property name=\"Sources\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"FallbackSource\" type=\"o\" access=\"readwrite\"/>\n"
- " <property name=\"PlaybackStreams\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"RecordStreams\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"Samples\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"Modules\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"Clients\" type=\"ao\" access=\"read\"/>\n"
- " <property name=\"Extensions\" type=\"as\" access=\"read\"/>\n"
- " </interface>\n";
-
-/* If you need to modify this list, note that handle_get_all() uses hard-coded
- * indexes to point to these strings, so make sure the indexes don't go wrong
- * there. */
-static const char *properties[] = {
- "InterfaceRevision",
- "Name",
- "Version",
- "Username",
- "Hostname",
- "DefaultChannels",
- "DefaultSampleFormat",
- "DefaultSampleRate",
- "Sinks",
- "FallbackSink",
- "Sources",
- "FallbackSource",
- "PlaybackStreams",
- "RecordStreams",
- "Samples",
- "Modules",
- "Clients",
- "Extensions",
- NULL
-};
-
-static const char *methods[] = {
- "GetCardByName",
- "GetSinkByName",
- "GetSourceByName",
- "GetSampleByName",
- "UploadSample",
- "LoadSampleFromFile",
- "AddLazySample",
- "AddLazySamplesFromDirectory",
- "LoadModule",
- "Exit",
- NULL
-};
-
-static DBusHandlerResult handle_get_name(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
- DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
- DBusMessage *reply = NULL;
- const char *server_name = PACKAGE_NAME;
- DBusMessageIter msg_iter;
- DBusMessageIter variant_iter;
-
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(c);
-
- if (!(reply = dbus_message_new_method_return(msg))) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- dbus_message_iter_init_append(reply, &msg_iter);
- if (!dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_VARIANT, "s", &variant_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_append_basic(&variant_iter, DBUS_TYPE_STRING, &server_name)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_close_container(&msg_iter, &variant_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
-
-finish:
- if (reply)
- dbus_message_unref(reply);
-
- return r;
-}
-
-static DBusHandlerResult handle_get(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
- DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
- const char* interface;
- const char* property;
- DBusMessage *reply = NULL;
-
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(c);
-
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) {
- if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
- goto finish;
- }
-
- if (*interface && !pa_streq(interface, INTERFACE_CORE)) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
-
- if (pa_streq(property, "Name")) {
- r = handle_get_name(conn, msg, c);
- goto finish;
- }
-
- if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
-
-finish:
- if (reply)
- dbus_message_unref(reply);
-
- return r;
-}
-
-static DBusHandlerResult handle_set(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
- DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
- const char* interface;
- const char* property;
- DBusMessage *reply = NULL;
-
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(c);
-
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID)) {
- if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
- goto finish;
- }
-
- if (*interface && !pa_streq(interface, INTERFACE_CORE)) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
-
- if (pa_streq(property, "Name")) {
- if (!(reply = dbus_message_new_error_printf(msg, DBUS_ERROR_ACCESS_DENIED, "%s: Property not settable", property))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
- goto finish;
- }
-
- if (!(reply = dbus_message_new_error_printf(msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", property))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
- goto finish;
-
- if (!(reply = dbus_message_new_error_printf(msg, DBUS_ERROR_ACCESS_DENIED, "%s: Property not settable", property))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
-
-finish:
- if (reply)
- dbus_message_unref(reply);
-
- return r;
-}
-
-static DBusHandlerResult handle_get_all(DBusConnection *conn, DBusMessage *msg, pa_dbusobj_core *c) {
- DBusHandlerResult r = DBUS_HANDLER_RESULT_HANDLED;
- DBusMessage *reply = NULL;
- char *interface = NULL;
- char const *server_name = PACKAGE_NAME;
- DBusMessageIter msg_iter;
- DBusMessageIter dict_iter;
- DBusMessageIter dict_entry_iter;
- DBusMessageIter variant_iter;
-
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(c);
-
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID)) {
- if (!(reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, "Invalid arguments"))) {
- r = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
- goto finish;
- }
-
- if (!(reply = dbus_message_new_method_return(msg))) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- dbus_message_iter_init_append(reply, &msg_iter);
- if (!dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &properties[1])) { /* Name */
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_open_container(&dict_entry_iter, DBUS_TYPE_VARIANT, "s", &variant_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_append_basic(&variant_iter, DBUS_TYPE_STRING, &server_name)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_close_container(&dict_entry_iter, &variant_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_close_container(&dict_iter, &dict_entry_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_message_iter_close_container(&msg_iter, &dict_iter)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- if (!dbus_connection_send(conn, reply, NULL)) {
- r = DBUS_HANDLER_RESULT_NEED_MEMORY;
- goto finish;
- }
- r = DBUS_HANDLER_RESULT_HANDLED;
-
-finish:
- if (reply)
- dbus_message_unref(reply);
-
- return r;
-}
-
-static DBusHandlerResult receive_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
- pa_dbusobj_core *c = user_data;
-
- pa_assert(connection);
- pa_assert(message);
- pa_assert(c);
-
- if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Get") ||
- (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Get")))
- return handle_get(connection, message, c);
-
- if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Set") ||
- (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Set")))
- return handle_set(connection, message, c);
-
- if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "GetAll") ||
- (!dbus_message_get_interface(message) && dbus_message_has_member(message, "GetAll")))
- return handle_get_all(connection, message, c);
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-pa_dbusobj_core *pa_dbusobj_core_new(pa_core *core) {
- pa_dbusobj_core *c;
-
- pa_assert(core);
-
- c = pa_xnew(pa_dbusobj_core, 1);
- c->core = core;
-
- pa_dbus_add_interface(core, OBJECT_PATH, INTERFACE_CORE, properties, methods, introspection_snippet, receive_cb, c);
-
-
- return c;
-}
-
-void pa_dbusobj_core_free(pa_dbusobj_core *c) {
- pa_assert(c);
-
- pa_dbus_remove_interface(c->core, OBJECT_PATH, INTERFACE_CORE);
-
- pa_xfree(c);
-}
diff --git a/src/pulsecore/dbus-objs/core.h b/src/pulsecore/dbus-objs/core.h
deleted file mode 100644
index 8e59cc3..0000000
--- a/src/pulsecore/dbus-objs/core.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef foodbusobjscorehfoo
-#define foodbusobjscorehfoo
-
-/***
- This file is part of PulseAudio.
-
- Copyright 2009 Tanu Kaskinen
-
- PulseAudio is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1 of the License,
- or (at your option) any later version.
-
- PulseAudio is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- 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.
-***/
-
-/* This object implements the D-Bus object at path /org/pulseaudio/core.
- * The implemented interface is org.pulseaudio.Core.
- *
- * See http://pulseaudio.org/wiki/DBusInterface for the Core interface
- * documentation.
- */
-
-#include <pulsecore/core.h>
-
-typedef struct pa_dbusobj_core pa_dbusobj_core;
-
-pa_dbusobj_core *pa_dbusobj_core_new(pa_core *core);
-void pa_dbusobj_core_free(pa_dbusobj_core *c);
-
-#endif
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index e047dc3..cfc3e8c 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -28,6 +28,7 @@
#include <pulse/rtclock.h>
#include <pulse/timeval.h>
+#include <pulse/utf8.h>
#include <pulse/xmalloc.h>
#include <pulsecore/core-rtclock.h>
@@ -444,3 +445,335 @@ void pa_dbus_free_pending_list(pa_dbus_pending **p) {
pa_dbus_pending_free(i);
}
}
+
+void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *message) {
+ DBusMessage *reply = NULL;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(name);
+ pa_assert(message);
+
+ pa_assert_se((reply = dbus_message_new_error(in_reply_to, name, message)));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+
+ dbus_message_unref(reply);
+}
+
+void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to) {
+ DBusMessage *reply = NULL;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void pa_dbus_send_basic_value_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data) {
+ DBusMessage *reply = NULL;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ pa_assert_se(dbus_message_append_args(reply, type, data, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+static const char *signature_from_basic_type(int type) {
+ switch (type) {
+ case DBUS_TYPE_BOOLEAN: return DBUS_TYPE_BOOLEAN_AS_STRING;
+ case DBUS_TYPE_BYTE: return DBUS_TYPE_BYTE_AS_STRING;
+ case DBUS_TYPE_INT16: return DBUS_TYPE_INT16_AS_STRING;
+ case DBUS_TYPE_UINT16: return DBUS_TYPE_UINT16_AS_STRING;
+ case DBUS_TYPE_INT32: return DBUS_TYPE_INT32_AS_STRING;
+ case DBUS_TYPE_UINT32: return DBUS_TYPE_UINT32_AS_STRING;
+ case DBUS_TYPE_INT64: return DBUS_TYPE_INT64_AS_STRING;
+ case DBUS_TYPE_UINT64: return DBUS_TYPE_UINT64_AS_STRING;
+ case DBUS_TYPE_DOUBLE: return DBUS_TYPE_DOUBLE_AS_STRING;
+ case DBUS_TYPE_STRING: return DBUS_TYPE_STRING_AS_STRING;
+ case DBUS_TYPE_OBJECT_PATH: return DBUS_TYPE_OBJECT_PATH_AS_STRING;
+ case DBUS_TYPE_SIGNATURE: return DBUS_TYPE_SIGNATURE_AS_STRING;
+ default: pa_assert_not_reached();
+ }
+}
+
+void pa_dbus_send_basic_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data) {
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_VARIANT, signature_from_basic_type(type), &variant_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&variant_iter, type, data));
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &variant_iter));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+/* Note: returns sizeof(char*) for strings, object paths and signatures. */
+static unsigned basic_type_size(int type) {
+ switch (type) {
+ case DBUS_TYPE_BOOLEAN: return sizeof(dbus_bool_t);
+ case DBUS_TYPE_BYTE: return 1;
+ case DBUS_TYPE_INT16: return sizeof(dbus_int16_t);
+ case DBUS_TYPE_UINT16: return sizeof(dbus_uint16_t);
+ case DBUS_TYPE_INT32: return sizeof(dbus_int32_t);
+ case DBUS_TYPE_UINT32: return sizeof(dbus_uint32_t);
+ case DBUS_TYPE_INT64: return sizeof(dbus_int64_t);
+ case DBUS_TYPE_UINT64: return sizeof(dbus_uint64_t);
+ case DBUS_TYPE_DOUBLE: return sizeof(double);
+ case DBUS_TYPE_STRING:
+ case DBUS_TYPE_OBJECT_PATH:
+ case DBUS_TYPE_SIGNATURE: return sizeof(char*);
+ default: pa_assert_not_reached();
+ }
+}
+
+void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int item_type, void *array, unsigned n) {
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_dbus_append_basic_array_variant(&msg_iter, item_type, array, n);
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void pa_dbus_append_basic_array(DBusMessageIter *iter, int item_type, const void *array, unsigned n) {
+ DBusMessageIter array_iter;
+ unsigned i;
+ unsigned item_size;
+
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ item_size = basic_type_size(item_type);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, signature_from_basic_type(item_type), &array_iter));
+
+ for (i = 0; i < n; ++i)
+ pa_assert_se(dbus_message_iter_append_basic(&array_iter, item_type, &((uint8_t*) array)[i * item_size]));
+
+ pa_assert_se(dbus_message_iter_close_container(iter, &array_iter));
+};
+
+void pa_dbus_append_basic_variant(DBusMessageIter *iter, int type, void *data) {
+ DBusMessageIter variant_iter;
+
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, signature_from_basic_type(type), &variant_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&variant_iter, type, data));
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+}
+
+void pa_dbus_append_basic_array_variant(DBusMessageIter *iter, int item_type, const void *array, unsigned n) {
+ DBusMessageIter variant_iter;
+ char *array_signature;
+
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ array_signature = pa_sprintf_malloc("a%c", *signature_from_basic_type(item_type));
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, array_signature, &variant_iter));
+ pa_dbus_append_basic_array(&variant_iter, item_type, array, n);
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+
+ pa_xfree(array_signature);
+}
+
+void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int type, void *data) {
+ DBusMessageIter dict_entry_iter;
+
+ pa_assert(dict_iter);
+ pa_assert(key);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se(dbus_message_iter_open_container(dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_dbus_append_basic_variant(&dict_entry_iter, type, data);
+ pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
+}
+
+void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n) {
+ DBusMessageIter dict_entry_iter;
+
+ pa_assert(dict_iter);
+ pa_assert(key);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ pa_assert_se(dbus_message_iter_open_container(dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_dbus_append_basic_array_variant(&dict_entry_iter, item_type, array, n);
+ pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
+}
+
+int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data) {
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ /* Skip the interface and property name arguments. */
+ if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return -1;
+ }
+
+ if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
+ return -1;
+ }
+
+ dbus_message_iter_recurse(&msg_iter, &variant_iter);
+
+ if (dbus_message_iter_get_arg_type(&variant_iter) != type) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Variant has wrong contained type.");
+ return -1;
+ }
+
+ dbus_message_iter_get_basic(&variant_iter, data);
+
+ return 0;
+}
+
+int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data) {
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ if (dbus_message_iter_get_arg_type(iter) != type) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments.");
+ return -1;
+ }
+
+ dbus_message_iter_get_basic(iter, data);
+
+ return 0;
+}
+
+int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n) {
+ DBusMessageIter array_iter;
+ int signed_n;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(iter);
+ pa_assert(dbus_type_is_fixed(item_type));
+ pa_assert(array);
+ pa_assert(n);
+
+ if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments. An array was expected.");
+ return -1;
+ }
+
+ if (dbus_message_iter_get_element_type(iter) != item_type) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type.");
+ return -1;
+ }
+
+ dbus_message_iter_recurse(iter, &array_iter);
+
+ dbus_message_iter_get_fixed_array(&array_iter, array, &signed_n);
+
+ pa_assert(signed_n >= 0);
+
+ *n = signed_n;
+
+ return 0;
+}
+
+pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter) {
+ DBusMessageIter dict_iter;
+ pa_proplist *proplist = NULL;
+ const char *key;
+ const uint8_t *value;
+ int value_length;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(iter);
+
+ if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments. An array was expected.");
+ return NULL;
+ }
+
+ if (dbus_message_iter_get_element_type(iter) != DBUS_TYPE_DICT_ENTRY) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type. A dict entry was expected.");
+ return NULL;
+ }
+
+ proplist = pa_proplist_new();
+
+ dbus_message_iter_recurse(iter, &dict_iter);
+
+ while (dbus_message_iter_has_next(&dict_iter)) {
+ if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_STRING) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type. A string was expected.");
+ goto fail;
+ }
+
+ dbus_message_iter_get_basic(&dict_iter, &key);
+
+ if (strlen(key) <= 0 || !pa_ascii_valid(key)) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Invalid property list key.");
+ goto fail;
+ }
+
+ if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_ARRAY) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type. An array was expected.");
+ goto fail;
+ }
+
+ if (dbus_message_iter_get_element_type(&dict_iter) != DBUS_TYPE_BYTE) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value item type. A byte was expected.");
+ goto fail;
+ }
+
+ dbus_message_iter_get_fixed_array(&dict_iter, &value, &value_length);
+
+ pa_assert(value_length >= 0);
+
+ pa_assert_se(pa_proplist_set(proplist, key, value, value_length) >= 0);
+ }
+
+ return proplist;
+
+fail:
+ if (proplist)
+ pa_proplist_free(proplist);
+
+ return NULL;
+}
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 9732873..1a8aeac 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -26,6 +26,7 @@
#include <pulsecore/llist.h>
#include <pulse/mainloop-api.h>
+#include <pulse/proplist.h>
/* A wrap connection is not shared or refcounted, it is available in client side */
typedef struct pa_dbus_wrap_connection pa_dbus_wrap_connection;
@@ -61,4 +62,32 @@ void pa_dbus_sync_pending_list(pa_dbus_pending **p);
/* Free up a list of pa_dbus_pending_call objects */
void pa_dbus_free_pending_list(pa_dbus_pending **p);
+/* Sends an error message as the reply to the given message. */
+void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *message);
+
+void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to);
+void pa_dbus_send_basic_value_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
+void pa_dbus_send_basic_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
+void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int item_type, void *array, unsigned n);
+
+void pa_dbus_append_basic_array(DBusMessageIter *iter, int item_type, const void *array, unsigned n);
+void pa_dbus_append_basic_array_variant(DBusMessageIter *iter, int item_type, const void *array, unsigned n);
+void pa_dbus_append_basic_variant(DBusMessageIter *iter, int type, void *data);
+void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int type, void *data);
+void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n);
+
+/* Helper function for extracting the value argument of a Set call for a
+ * property with a basic type. If the message is invalid, an error reply is
+ * sent and a negative number is returned. */
+int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data);
+
+/* If the arguments can't be read from the iterator, an error reply is sent and
+ * a negative number is returned. */
+int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data);
+int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n);
+
+/* Returns a new proplist, that the caller has to free. If the proplist can't
+ * be read from the iterator, an error reply is sent and NULL is returned. */
+pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter);
+
#endif
diff --git a/src/pulsecore/namereg.c b/src/pulsecore/namereg.c
index 9df2f58..046c87b 100644
--- a/src/pulsecore/namereg.c
+++ b/src/pulsecore/namereg.c
@@ -149,21 +149,48 @@ const char *pa_namereg_register(pa_core *c, const char *name, pa_namereg_type_t
pa_assert_se(pa_hashmap_put(c->namereg, e->name, e) >= 0);
+ if (type == PA_NAMEREG_SINK && !c->default_sink)
+ pa_namereg_set_default_sink(c, data);
+ else if (type == PA_NAMEREG_SOURCE && !c->default_source)
+ pa_namereg_set_default_source(c, data);
+
return e->name;
}
void pa_namereg_unregister(pa_core *c, const char *name) {
struct namereg_entry *e;
+ uint32_t idx;
pa_assert(c);
pa_assert(name);
pa_assert_se(e = pa_hashmap_remove(c->namereg, name));
- if (c->default_sink == e->data)
- pa_namereg_set_default_sink(c, NULL);
- else if (c->default_source == e->data)
- pa_namereg_set_default_source(c, NULL);
+ if (c->default_sink == e->data) {
+ pa_sink *new_default = pa_idxset_first(c->sinks, &idx);
+
+ if (new_default == e->data)
+ new_default = pa_idxset_next(c->sinks, &idx);
+
+ pa_namereg_set_default_sink(c, new_default);
+
+ } else if (c->default_source == e->data) {
+ pa_source *new_default;
+
+ for (new_default = pa_idxset_first(c->sources, &idx); new_default; new_default = pa_idxset_next(c->sources, &idx)) {
+ if (new_default != e->data && !new_default->monitor_of)
+ break;
+ }
+
+ if (!new_default) {
+ new_default = pa_idxset_first(c->sources, &idx);
+
+ if (new_default == e->data)
+ new_default = pa_idxset_next(c->sources, &idx);
+ }
+
+ pa_namereg_set_default_source(c, new_default);
+ }
pa_xfree(e->name);
pa_xfree(e);
@@ -191,7 +218,6 @@ void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type) {
if ((s = pa_namereg_get(c, NULL, PA_NAMEREG_SINK)))
return s->monitor_source;
-
}
if (!name)
@@ -242,35 +268,16 @@ pa_source* pa_namereg_set_default_source(pa_core*c, pa_source *s) {
return s;
}
+/* XXX: After removing old functionality, has this function become useless? */
pa_sink *pa_namereg_get_default_sink(pa_core *c) {
- pa_sink *s;
-
pa_assert(c);
- if (c->default_sink)
- return c->default_sink;
-
- if ((s = pa_idxset_first(c->sinks, NULL)))
- return pa_namereg_set_default_sink(c, s);
-
- return NULL;
+ return c->default_sink;
}
+/* XXX: After removing old functionality, has this function become useless? */
pa_source *pa_namereg_get_default_source(pa_core *c) {
- pa_source *s;
- uint32_t idx;
-
pa_assert(c);
- if (c->default_source)
- return c->default_source;
-
- for (s = PA_SOURCE(pa_idxset_first(c->sources, &idx)); s; s = PA_SOURCE(pa_idxset_next(c->sources, &idx)))
- if (!s->monitor_of)
- return pa_namereg_set_default_source(c, s);
-
- if ((s = pa_idxset_first(c->sources, NULL)))
- return pa_namereg_set_default_source(c, s);
-
- return NULL;
+ return c->default_source;
}
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
new file mode 100644
index 0000000..fb7d168
--- /dev/null
+++ b/src/pulsecore/protocol-dbus.c
@@ -0,0 +1,930 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/core-util.h>
+#include <pulsecore/hashmap.h>
+#include <pulsecore/idxset.h>
+#include <pulsecore/shared.h>
+#include <pulsecore/strbuf.h>
+
+#include "protocol-dbus.h"
+
+struct pa_dbus_protocol {
+ PA_REFCNT_DECLARE;
+
+ pa_core *core;
+ pa_hashmap *objects; /* Object path -> struct object_entry */
+ pa_hashmap *connections; /* DBusConnection -> struct connection_entry */
+ pa_hashmap *extensions; /* String -> anything */
+};
+
+struct object_entry {
+ char *path;
+ pa_hashmap *interfaces; /* Interface name -> struct interface_entry */
+ char *introspection;
+};
+
+struct connection_entry {
+ DBusConnection *connection;
+ pa_client *client;
+
+ pa_bool_t listening_for_all_signals;
+
+ /* Contains object paths. If this is empty, then signals from all objects
+ * are accepted. Only used when listening_for_all_signals == TRUE. */
+ pa_idxset *all_signals_objects;
+
+ /* Signal name -> idxset. The idxsets contain object paths. If an idxset is
+ * empty, then that signal is accepted from all objects. Only used when
+ * listening_for_all_signals == FALSE. */
+ pa_hashmap *listening_signals;
+};
+
+struct interface_entry {
+ char *name;
+ pa_hashmap *method_handlers;
+ pa_hashmap *property_handlers;
+ pa_dbus_receive_cb_t get_all_properties_cb;
+ pa_dbus_signal_info *signals;
+ unsigned n_signals;
+ void *userdata;
+};
+
+char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type) {
+ char *address = NULL;
+ char *runtime_path = NULL;
+ char *escaped_path = NULL;
+
+ switch (server_type) {
+ case PA_SERVER_TYPE_USER:
+ pa_assert_se((runtime_path = pa_runtime_path(PA_DBUS_SOCKET_NAME)));
+ pa_assert_se((escaped_path = dbus_address_escape_value(runtime_path)));
+ address = pa_sprintf_malloc("unix:path=%s", escaped_path);
+ break;
+
+ case PA_SERVER_TYPE_SYSTEM:
+ pa_assert_se((escaped_path = dbus_address_escape_value(PA_DBUS_SYSTEM_SOCKET_PATH)));
+ address = pa_sprintf_malloc("unix:path=%s", escaped_path);
+ break;
+
+ case PA_SERVER_TYPE_NONE:
+ address = pa_xnew0(char, 1);
+ break;
+
+ default:
+ pa_assert_not_reached();
+ }
+
+ pa_xfree(runtime_path);
+ pa_xfree(escaped_path);
+
+ return address;
+}
+
+static pa_dbus_protocol *dbus_protocol_new(pa_core *c) {
+ pa_dbus_protocol *p;
+
+ pa_assert(c);
+
+ p = pa_xnew(pa_dbus_protocol, 1);
+ PA_REFCNT_INIT(p);
+ p->core = c;
+ p->objects = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ p->connections = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ p->extensions = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ pa_assert_se(pa_shared_set(c, "dbus-protocol", p) >= 0);
+
+ return p;
+}
+
+pa_dbus_protocol* pa_dbus_protocol_get(pa_core *c) {
+ pa_dbus_protocol *p;
+
+ if ((p = pa_shared_get(c, "dbus-protocol")))
+ return pa_dbus_protocol_ref(p);
+
+ return dbus_protocol_new(c);
+}
+
+pa_dbus_protocol* pa_dbus_protocol_ref(pa_dbus_protocol *p) {
+ pa_assert(p);
+ pa_assert(PA_REFCNT_VALUE(p) >= 1);
+
+ PA_REFCNT_INC(p);
+
+ return p;
+}
+
+void pa_dbus_protocol_unref(pa_dbus_protocol *p) {
+ pa_assert(p);
+ pa_assert(PA_REFCNT_VALUE(p) >= 1);
+
+ if (PA_REFCNT_DEC(p) > 0)
+ return;
+
+ pa_assert(pa_hashmap_isempty(p->objects));
+ pa_assert(pa_hashmap_isempty(p->connections));
+ pa_assert(pa_hashmap_isempty(p->extensions));
+
+ pa_hashmap_free(p->objects, NULL, NULL);
+ pa_hashmap_free(p->connections, NULL, NULL);
+ pa_hashmap_free(p->extensions, NULL, NULL);
+
+ pa_assert_se(pa_shared_remove(p->core, "dbus-protocol") >= 0);
+
+ pa_xfree(p);
+}
+
+static void update_introspection(struct object_entry *oe) {
+ pa_strbuf *buf;
+ void *interfaces_state = NULL;
+ struct interface_entry *iface_entry = NULL;
+
+ pa_assert(oe);
+
+ buf = pa_strbuf_new();
+ pa_strbuf_puts(buf, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE);
+ pa_strbuf_puts(buf, "<node>\n");
+
+ while ((iface_entry = pa_hashmap_iterate(oe->interfaces, &interfaces_state, NULL))) {
+ pa_dbus_method_handler *method_handler;
+ pa_dbus_property_handler *property_handler;
+ void *handlers_state = NULL;
+ unsigned i;
+ unsigned j;
+
+ pa_strbuf_printf(buf, " <interface name=\"%s\">\n", iface_entry->name);
+
+ while ((method_handler = pa_hashmap_iterate(iface_entry->method_handlers, &handlers_state, NULL))) {
+ pa_strbuf_printf(buf, " <method name=\"%s\">\n", method_handler->method_name);
+
+ for (i = 0; i < method_handler->n_arguments; ++i)
+ pa_strbuf_printf(buf, " <arg name=\"%s\" type=\"%s\" direction=\"%s\"/>\n", method_handler->arguments[i].name,
+ method_handler->arguments[i].type,
+ method_handler->arguments[i].direction);
+
+ pa_strbuf_puts(buf, " </method>\n");
+ }
+
+ handlers_state = NULL;
+
+ while ((property_handler = pa_hashmap_iterate(iface_entry->property_handlers, &handlers_state, NULL)))
+ pa_strbuf_printf(buf, " <property name=\"%s\" type=\"%s\" access=\"%s\"/>\n", property_handler->property_name,
+ property_handler->type,
+ property_handler->get_cb ? (property_handler->set_cb ? "readwrite" : "read") : "write");
+
+ for (i = 0; i < iface_entry->n_signals; ++i) {
+ pa_strbuf_printf(buf, " <signal name=\"%s\">\n", iface_entry->signals[i].name);
+
+ for (j = 0; j < iface_entry->signals[i].n_arguments; ++j)
+ pa_strbuf_printf(buf, " <arg name=\"%s\" type=\"%s\"/>\n", iface_entry->signals[i].arguments[j].name,
+ iface_entry->signals[i].arguments[j].type);
+
+ pa_strbuf_puts(buf, " </signal>\n");
+ }
+
+ pa_strbuf_puts(buf, " </interface>\n");
+ }
+
+ pa_strbuf_puts(buf, " <interface name=\"" DBUS_INTERFACE_INTROSPECTABLE "\">\n"
+ " <method name=\"Introspect\">\n"
+ " <arg name=\"data\" type=\"s\" direction=\"out\"/>\n"
+ " </method>\n"
+ " </interface>\n"
+ " <interface name=\"" DBUS_INTERFACE_PROPERTIES "\">\n"
+ " <method name=\"Get\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"value\" type=\"v\" direction=\"out\"/>\n"
+ " </method>\n"
+ " <method name=\"Set\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"property_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"value\" type=\"v\" direction=\"in\"/>\n"
+ " </method>\n"
+ " <method name=\"GetAll\">\n"
+ " <arg name=\"interface_name\" type=\"s\" direction=\"in\"/>\n"
+ " <arg name=\"props\" type=\"a{sv}\" direction=\"out\"/>\n"
+ " </method>\n"
+ " </interface>\n");
+
+ pa_strbuf_puts(buf, "</node>\n");
+
+ pa_xfree(oe->introspection);
+ oe->introspection = pa_strbuf_tostring_free(buf);
+}
+
+enum find_result_t {
+ FOUND_METHOD,
+ FOUND_GET_PROPERTY,
+ FOUND_SET_PROPERTY,
+ FOUND_GET_ALL,
+ PROPERTY_ACCESS_DENIED,
+ NO_SUCH_METHOD,
+ NO_SUCH_PROPERTY,
+ INVALID_MESSAGE_ARGUMENTS
+};
+
+static enum find_result_t find_handler_by_property(struct object_entry *obj_entry,
+ DBusMessage *msg,
+ const char *property,
+ struct interface_entry **iface_entry,
+ pa_dbus_property_handler **property_handler) {
+ void *state = NULL;
+
+ pa_assert(obj_entry);
+ pa_assert(msg);
+ pa_assert(property);
+ pa_assert(iface_entry);
+ pa_assert(property_handler);
+
+ while ((*iface_entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ if ((*property_handler = pa_hashmap_get((*iface_entry)->property_handlers, property))) {
+ if (dbus_message_has_member(msg, "Get"))
+ return (*property_handler)->get_cb ? FOUND_GET_PROPERTY : PROPERTY_ACCESS_DENIED;
+ else if (dbus_message_has_member(msg, "Set"))
+ return (*property_handler)->set_cb ? FOUND_SET_PROPERTY : PROPERTY_ACCESS_DENIED;
+ else
+ pa_assert_not_reached();
+ }
+ }
+
+ return NO_SUCH_PROPERTY;
+}
+
+static enum find_result_t find_handler_by_method(struct object_entry *obj_entry,
+ const char *method,
+ struct interface_entry **iface_entry,
+ pa_dbus_method_handler **method_handler) {
+ void *state = NULL;
+
+ pa_assert(obj_entry);
+ pa_assert(method);
+ pa_assert(iface_entry);
+ pa_assert(method_handler);
+
+ while ((*iface_entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ if ((*method_handler = pa_hashmap_get((*iface_entry)->method_handlers, method)))
+ return FOUND_METHOD;
+ }
+
+ return NO_SUCH_METHOD;
+}
+
+static enum find_result_t find_handler_from_properties_call(struct object_entry *obj_entry,
+ DBusMessage *msg,
+ struct interface_entry **iface_entry,
+ pa_dbus_property_handler **property_handler,
+ const char **attempted_property) {
+ const char *interface;
+
+ pa_assert(obj_entry);
+ pa_assert(msg);
+ pa_assert(iface_entry);
+
+ if (dbus_message_has_member(msg, "GetAll")) {
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID))
+ return INVALID_MESSAGE_ARGUMENTS;
+
+ if (*interface) {
+ if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)))
+ return FOUND_GET_ALL;
+ else
+ return NO_SUCH_METHOD; /* XXX: NO_SUCH_INTERFACE or something like that might be more accurate. */
+ } else {
+ pa_assert_se((*iface_entry = pa_hashmap_first(obj_entry->interfaces)));
+ return FOUND_GET_ALL;
+ }
+ } else {
+ if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, attempted_property, DBUS_TYPE_INVALID))
+ return INVALID_MESSAGE_ARGUMENTS;
+
+ if (*interface) {
+ if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)) &&
+ (*property_handler = pa_hashmap_get((*iface_entry)->property_handlers, *attempted_property))) {
+ if (dbus_message_has_member(msg, "Get"))
+ return (*property_handler)->get_cb ? FOUND_GET_PROPERTY : PROPERTY_ACCESS_DENIED;
+ else if (dbus_message_has_member(msg, "Set"))
+ return (*property_handler)->set_cb ? FOUND_SET_PROPERTY : PROPERTY_ACCESS_DENIED;
+ else
+ pa_assert_not_reached();
+ } else
+ return NO_SUCH_PROPERTY;
+ } else
+ return find_handler_by_property(obj_entry, msg, *attempted_property, iface_entry, property_handler);
+ }
+}
+
+static enum find_result_t find_handler(struct object_entry *obj_entry,
+ DBusMessage *msg,
+ struct interface_entry **iface_entry,
+ pa_dbus_method_handler **method_handler,
+ pa_dbus_property_handler **property_handler,
+ const char **attempted_property) {
+ const char *interface;
+
+ pa_assert(obj_entry);
+ pa_assert(msg);
+ pa_assert(iface_entry);
+ pa_assert(method_handler);
+ pa_assert(property_handler);
+ pa_assert(attempted_property);
+
+ *iface_entry = NULL;
+ *method_handler = NULL;
+
+ if (dbus_message_has_interface(msg, DBUS_INTERFACE_PROPERTIES))
+ return find_handler_from_properties_call(obj_entry, msg, iface_entry, property_handler, attempted_property);
+
+ else if ((interface = dbus_message_get_interface(msg))) {
+ if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)) &&
+ (*method_handler = pa_hashmap_get((*iface_entry)->method_handlers, dbus_message_get_member(msg))))
+ return FOUND_METHOD;
+ else
+ return NO_SUCH_METHOD;
+
+ } else { /* The method call doesn't contain an interface. */
+ if (dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set") || dbus_message_has_member(msg, "GetAll")) {
+ if (find_handler_by_method(obj_entry, dbus_message_get_member(msg), iface_entry, method_handler) == FOUND_METHOD)
+ return FOUND_METHOD; /* The object has a method named Get, Set or GetAll in some other interface than .Properties. */
+ else
+ /* Assume this is a .Properties call. */
+ return find_handler_from_properties_call(obj_entry, msg, iface_entry, property_handler, attempted_property);
+
+ } else /* This is not a .Properties call. */
+ return find_handler_by_method(obj_entry, dbus_message_get_member(msg), iface_entry, method_handler);
+ }
+}
+
+static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
+ pa_dbus_protocol *p = user_data;
+ struct object_entry *obj_entry = NULL;
+ struct interface_entry *iface_entry = NULL;
+ pa_dbus_method_handler *method_handler = NULL;
+ pa_dbus_property_handler *property_handler = NULL;
+ const char *attempted_property = NULL;
+ DBusMessage *reply = NULL;
+
+ pa_assert(connection);
+ pa_assert(message);
+ pa_assert(p);
+ pa_assert(p->objects);
+
+ if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+ pa_assert_se((obj_entry = pa_hashmap_get(p->objects, dbus_message_get_path(message))));
+
+ if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect") ||
+ (!dbus_message_get_interface(message) && dbus_message_has_member(message, "Introspect"))) {
+ pa_assert_se((reply = dbus_message_new_method_return(message)));
+ pa_assert_se(dbus_message_append_args(reply, DBUS_TYPE_STRING, &obj_entry->introspection, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_connection_send(connection, reply, NULL));
+
+ pa_log_debug("%s.Introspect handled.", obj_entry->path);
+
+ goto finish;
+ }
+
+ switch (find_handler(obj_entry, message, &iface_entry, &method_handler, &property_handler, &attempted_property)) {
+ case FOUND_METHOD:
+ method_handler->receive_cb(connection, message, iface_entry->userdata);
+ break;
+
+ case FOUND_GET_PROPERTY:
+ property_handler->get_cb(connection, message, iface_entry->userdata);
+ break;
+
+ case FOUND_SET_PROPERTY:
+ property_handler->set_cb(connection, message, iface_entry->userdata);
+ break;
+
+ case FOUND_GET_ALL:
+ if (iface_entry->get_all_properties_cb)
+ iface_entry->get_all_properties_cb(connection, message, iface_entry->userdata);
+ break;
+
+ case PROPERTY_ACCESS_DENIED:
+ pa_assert_se((reply = dbus_message_new_error_printf(message, DBUS_ERROR_ACCESS_DENIED, "%s access denied for property %s", dbus_message_get_member(message), attempted_property)));
+ pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ break;
+
+ case NO_SUCH_METHOD:
+ pa_assert_se((reply = dbus_message_new_error_printf(message, DBUS_ERROR_UNKNOWN_METHOD, "%s: No such method", dbus_message_get_member(message))));
+ pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ break;
+
+ case NO_SUCH_PROPERTY:
+ pa_assert_se((reply = dbus_message_new_error_printf(message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", attempted_property)));
+ pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ break;
+
+ case INVALID_MESSAGE_ARGUMENTS:
+ pa_assert_se((reply = dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS, "Invalid arguments for %s", dbus_message_get_member(message))));
+ pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ break;
+
+ default:
+ pa_assert_not_reached();
+ }
+
+finish:
+ if (reply)
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusObjectPathVTable vtable = {
+ .unregister_function = NULL,
+ .message_function = handle_message_cb,
+ .dbus_internal_pad1 = NULL,
+ .dbus_internal_pad2 = NULL,
+ .dbus_internal_pad3 = NULL,
+ .dbus_internal_pad4 = NULL
+};
+
+static void register_object(pa_dbus_protocol *p, struct object_entry *obj_entry) {
+ struct connection_entry *conn_entry;
+ void *state = NULL;
+
+ pa_assert(p);
+ pa_assert(obj_entry);
+
+ while ((conn_entry = pa_hashmap_iterate(p->connections, &state, NULL)))
+ pa_assert_se(dbus_connection_register_object_path(conn_entry->connection, obj_entry->path, &vtable, p));
+}
+
+static pa_dbus_arg_info *copy_args(const pa_dbus_arg_info *src, unsigned n) {
+ pa_dbus_arg_info *dst;
+ unsigned i;
+
+ if (n == 0)
+ return NULL;
+
+ pa_assert(src);
+
+ dst = pa_xnew0(pa_dbus_arg_info, n);
+
+ for (i = 0; i < n; ++i) {
+ dst[i].name = pa_xstrdup(src[i].name);
+ dst[i].type = pa_xstrdup(src[i].type);
+ dst[i].direction = pa_xstrdup(src[i].direction);
+ }
+
+ return dst;
+}
+
+static pa_hashmap *create_method_handlers(const pa_dbus_interface_info *info) {
+ pa_hashmap *handlers;
+ unsigned i;
+
+ pa_assert(info);
+ pa_assert(info->method_handlers || info->n_method_handlers == 0);
+
+ handlers = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ for (i = 0; i < info->n_method_handlers; ++i) {
+ pa_dbus_method_handler *h = pa_xnew(pa_dbus_method_handler, 1);
+ h->method_name = pa_xstrdup(info->method_handlers[i].method_name);
+ h->arguments = copy_args(info->method_handlers[i].arguments, info->method_handlers[i].n_arguments);
+ h->n_arguments = info->method_handlers[i].n_arguments;
+ h->receive_cb = info->method_handlers[i].receive_cb;
+
+ pa_hashmap_put(handlers, h->method_name, h);
+ }
+
+ return handlers;
+}
+
+static pa_hashmap *create_property_handlers(const pa_dbus_interface_info *info) {
+ pa_hashmap *handlers;
+ unsigned i = 0;
+
+ pa_assert(info);
+ pa_assert(info->property_handlers || info->n_property_handlers == 0);
+
+ handlers = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ for (i = 0; i < info->n_property_handlers; ++i) {
+ pa_dbus_property_handler *h = pa_xnew(pa_dbus_property_handler, 1);
+ h->property_name = pa_xstrdup(info->property_handlers[i].property_name);
+ h->type = pa_xstrdup(info->property_handlers[i].type);
+ h->get_cb = info->property_handlers[i].get_cb;
+ h->set_cb = info->property_handlers[i].set_cb;
+
+ pa_hashmap_put(handlers, h->property_name, h);
+ }
+
+ return handlers;
+}
+
+static pa_dbus_signal_info *copy_signals(const pa_dbus_interface_info *info) {
+ pa_dbus_signal_info *dst;
+ unsigned i;
+
+ pa_assert(info);
+
+ if (info->n_signals == 0)
+ return NULL;
+
+ pa_assert(info->signals);
+
+ dst = pa_xnew(pa_dbus_signal_info, info->n_signals);
+
+ for (i = 0; i < info->n_signals; ++i) {
+ dst[i].name = pa_xstrdup(info->signals[i].name);
+ dst[i].arguments = copy_args(info->signals[i].arguments, info->signals[i].n_arguments);
+ dst[i].n_arguments = info->signals[i].n_arguments;
+ }
+
+ return dst;
+}
+
+int pa_dbus_protocol_add_interface(pa_dbus_protocol *p,
+ const char *path,
+ const pa_dbus_interface_info *info,
+ void *userdata) {
+ struct object_entry *obj_entry;
+ struct interface_entry *iface_entry;
+ pa_bool_t obj_entry_created = FALSE;
+
+ pa_assert(p);
+ pa_assert(path);
+ pa_assert(info);
+ pa_assert(info->name);
+ pa_assert(info->method_handlers || info->n_method_handlers == 0);
+ pa_assert(info->property_handlers || info->n_property_handlers == 0);
+ pa_assert(info->get_all_properties_cb || info->n_property_handlers == 0);
+ pa_assert(info->signals || info->n_signals == 0);
+
+ if (!(obj_entry = pa_hashmap_get(p->objects, path))) {
+ obj_entry = pa_xnew(struct object_entry, 1);
+ obj_entry->path = pa_xstrdup(path);
+ obj_entry->interfaces = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ obj_entry->introspection = NULL;
+
+ pa_hashmap_put(p->objects, path, obj_entry);
+ obj_entry_created = TRUE;
+ }
+
+ if (pa_hashmap_get(obj_entry->interfaces, info->name) != NULL)
+ goto fail; /* The interface was already registered. */
+
+ iface_entry = pa_xnew(struct interface_entry, 1);
+ iface_entry->name = pa_xstrdup(info->name);
+ iface_entry->method_handlers = create_method_handlers(info);
+ iface_entry->property_handlers = create_property_handlers(info);
+ iface_entry->get_all_properties_cb = info->get_all_properties_cb;
+ iface_entry->signals = copy_signals(info);
+ iface_entry->n_signals = info->n_signals;
+ iface_entry->userdata = userdata;
+ pa_hashmap_put(obj_entry->interfaces, iface_entry->name, iface_entry);
+
+ update_introspection(obj_entry);
+
+ if (obj_entry_created)
+ register_object(p, obj_entry);
+
+ return 0;
+
+fail:
+ if (obj_entry_created) {
+ pa_hashmap_remove(p->objects, path);
+ pa_dbus_protocol_unref(p);
+ pa_xfree(obj_entry);
+ }
+
+ return -1;
+}
+
+static void unregister_object(pa_dbus_protocol *p, struct object_entry *obj_entry) {
+ struct connection_entry *conn_entry;
+ void *state = NULL;
+
+ pa_assert(p);
+ pa_assert(obj_entry);
+
+ while ((conn_entry = pa_hashmap_iterate(p->connections, &state, NULL)))
+ pa_assert_se(dbus_connection_unregister_object_path(conn_entry->connection, obj_entry->path));
+}
+
+static void method_handler_free_cb(void *p, void *userdata) {
+ pa_dbus_method_handler *h = p;
+ unsigned i;
+
+ pa_assert(h);
+
+ pa_xfree((char *) h->method_name);
+
+ for (i = 0; i < h->n_arguments; ++i) {
+ pa_xfree((char *) h->arguments[i].name);
+ pa_xfree((char *) h->arguments[i].type);
+ pa_xfree((char *) h->arguments[i].direction);
+ }
+
+ pa_xfree((pa_dbus_arg_info *) h->arguments);
+}
+
+static void property_handler_free_cb(void *p, void *userdata) {
+ pa_dbus_property_handler *h = p;
+
+ pa_assert(h);
+
+ pa_xfree((char *) h->property_name);
+ pa_xfree((char *) h->type);
+}
+
+int pa_dbus_protocol_remove_interface(pa_dbus_protocol *p, const char* path, const char* interface) {
+ struct object_entry *obj_entry;
+ struct interface_entry *iface_entry;
+ unsigned i;
+
+ pa_assert(p);
+ pa_assert(path);
+ pa_assert(interface);
+
+ if (!(obj_entry = pa_hashmap_get(p->objects, path)))
+ return -1;
+
+ if (!(iface_entry = pa_hashmap_remove(obj_entry->interfaces, interface)))
+ return -1;
+
+ update_introspection(obj_entry);
+
+ pa_xfree(iface_entry->name);
+ pa_hashmap_free(iface_entry->method_handlers, method_handler_free_cb, NULL);
+ pa_hashmap_free(iface_entry->property_handlers, property_handler_free_cb, NULL);
+
+ for (i = 0; i < iface_entry->n_signals; ++i) {
+ unsigned j;
+
+ pa_xfree((char *) iface_entry->signals[i].name);
+
+ for (j = 0; j < iface_entry->signals[i].n_arguments; ++j) {
+ pa_xfree((char *) iface_entry->signals[i].arguments[j].name);
+ pa_xfree((char *) iface_entry->signals[i].arguments[j].type);
+ pa_assert(iface_entry->signals[i].arguments[j].direction == NULL);
+ }
+
+ pa_xfree((pa_dbus_arg_info *) iface_entry->signals[i].arguments);
+ }
+
+ pa_xfree(iface_entry->signals);
+ pa_xfree(iface_entry);
+
+ if (pa_hashmap_isempty(obj_entry->interfaces)) {
+ unregister_object(p, obj_entry);
+
+ pa_hashmap_remove(p->objects, path);
+ pa_xfree(obj_entry->path);
+ pa_hashmap_free(obj_entry->interfaces, NULL, NULL);
+ pa_xfree(obj_entry->introspection);
+ pa_xfree(obj_entry);
+ }
+
+ return 0;
+}
+
+static void register_all_objects(pa_dbus_protocol *p, DBusConnection *conn) {
+ struct object_entry *obj_entry;
+ void *state = NULL;
+
+ pa_assert(p);
+ pa_assert(conn);
+
+ while ((obj_entry = pa_hashmap_iterate(p->objects, &state, NULL)))
+ pa_assert_se(dbus_connection_register_object_path(conn, obj_entry->path, &vtable, p));
+}
+
+int pa_dbus_protocol_register_connection(pa_dbus_protocol *p, DBusConnection *conn, pa_client *client) {
+ struct connection_entry *conn_entry;
+
+ pa_assert(p);
+ pa_assert(conn);
+ pa_assert(client);
+
+ if (pa_hashmap_get(p->connections, conn))
+ return -1; /* The connection was already registered. */
+
+ register_all_objects(p, conn);
+
+ conn_entry = pa_xnew(struct connection_entry, 1);
+ conn_entry->connection = dbus_connection_ref(conn);
+ conn_entry->client = client;
+ conn_entry->listening_for_all_signals = FALSE;
+ conn_entry->all_signals_objects = pa_idxset_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ conn_entry->listening_signals = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ pa_hashmap_put(p->connections, conn, conn_entry);
+
+ return 0;
+}
+
+static void unregister_all_objects(pa_dbus_protocol *p, DBusConnection *conn) {
+ struct object_entry *obj_entry;
+ void *state = NULL;
+
+ pa_assert(p);
+ pa_assert(conn);
+
+ while ((obj_entry = pa_hashmap_iterate(p->objects, &state, NULL)))
+ pa_assert_se(dbus_connection_unregister_object_path(conn, obj_entry->path));
+}
+
+static void free_listened_object_name_cb(void *p, void *userdata) {
+ pa_assert(p);
+
+ pa_xfree(p);
+}
+
+static void free_listening_signals_idxset_cb(void *p, void *userdata) {
+ pa_idxset *set = p;
+
+ pa_assert(set);
+
+ pa_idxset_free(set, free_listened_object_name_cb, NULL);
+}
+
+int pa_dbus_protocol_unregister_connection(pa_dbus_protocol *p, DBusConnection *conn) {
+ struct connection_entry *conn_entry;
+
+ pa_assert(p);
+ pa_assert(conn);
+
+ if (!(conn_entry = pa_hashmap_remove(p->connections, conn)))
+ return -1;
+
+ unregister_all_objects(p, conn);
+
+ dbus_connection_unref(conn_entry->connection);
+ pa_idxset_free(conn_entry->all_signals_objects, free_listened_object_name_cb, NULL);
+ pa_hashmap_free(conn_entry->listening_signals, free_listening_signals_idxset_cb, NULL);
+ pa_xfree(conn_entry);
+
+ return 0;
+}
+
+void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal, char **objects, unsigned n_objects) {
+ struct connection_entry *conn_entry;
+ pa_idxset *object_set;
+ char *object_path;
+ unsigned i;
+
+ pa_assert(p);
+ pa_assert(conn);
+ pa_assert(objects || n_objects == 0);
+
+ pa_assert_se((conn_entry = pa_hashmap_get(p->connections, conn)));
+
+ /* all_signals_objects will either be emptied or replaced with new objects,
+ * so we empty it here unconditionally. If listening_for_all_signals is
+ * currently FALSE, the idxset is empty already. */
+ while ((object_path = pa_idxset_steal_first(conn_entry->all_signals_objects, NULL)))
+ pa_xfree(object_path);
+
+ if (signal) {
+ conn_entry->listening_for_all_signals = FALSE;
+
+ /* Replace the old object list with a new one. */
+ if ((object_set = pa_hashmap_get(conn_entry->listening_signals, signal)))
+ pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
+ object_set = pa_idxset_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ for (i = 0; i < n_objects; ++i)
+ pa_idxset_put(object_set, pa_xstrdup(objects[i]), NULL);
+
+ } else {
+ conn_entry->listening_for_all_signals = TRUE;
+
+ /* We're not interested in individual signals anymore, so let's empty
+ * listening_signals. */
+ while ((object_set = pa_hashmap_steal_first(conn_entry->listening_signals)))
+ pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
+
+ for (i = 0; i < n_objects; ++i)
+ pa_idxset_put(conn_entry->all_signals_objects, pa_xstrdup(objects[i]), NULL);
+ }
+}
+
+void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal) {
+ struct connection_entry *conn_entry;
+ pa_idxset *object_set;
+
+ pa_assert(p);
+ pa_assert(conn);
+
+ pa_assert_se((conn_entry = pa_hashmap_get(p->connections, conn)));
+
+ if (signal) {
+ if ((object_set = pa_hashmap_get(conn_entry->listening_signals, signal)))
+ pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
+
+ } else {
+ char *object_path;
+
+ conn_entry->listening_for_all_signals = FALSE;
+
+ while ((object_path = pa_idxset_steal_first(conn_entry->all_signals_objects, NULL)))
+ pa_xfree(object_path);
+
+ while ((object_set = pa_hashmap_steal_first(conn_entry->listening_signals)))
+ pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
+ }
+}
+
+void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
+ struct connection_entry *conn_entry;
+ void *state = NULL;
+ pa_idxset *object_set;
+ DBusMessage *signal_copy;
+
+ pa_assert(p);
+ pa_assert(signal);
+ pa_assert(dbus_message_get_type(signal) == DBUS_MESSAGE_TYPE_SIGNAL);
+
+ /* XXX: We have to do some linear searching to find connections that want
+ * to receive the signal. This shouldn't be very significant performance
+ * problem, and adding an (object path, signal name) -> connection mapping
+ * would be likely to create substantial complexity. */
+
+ while ((conn_entry = pa_hashmap_iterate(p->connections, &state, NULL))) {
+
+ if ((conn_entry->listening_for_all_signals /* Case 1: listening for all signals */
+ && (pa_idxset_get_by_data(conn_entry->all_signals_objects, dbus_message_get_path(signal), NULL)
+ || pa_idxset_isempty(conn_entry->all_signals_objects)))
+
+ || (!conn_entry->listening_for_all_signals /* Case 2: not listening for all signals */
+ && (object_set = pa_hashmap_get(conn_entry->listening_signals, signal))
+ && (pa_idxset_get_by_data(object_set, dbus_message_get_path(signal), NULL)
+ || pa_idxset_isempty(object_set)))) {
+
+ pa_assert_se(signal_copy = dbus_message_copy(signal));
+ pa_assert_se(dbus_connection_send(conn_entry->connection, signal_copy, NULL));
+ dbus_message_unref(signal_copy);
+ }
+ }
+}
+
+pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn) {
+ struct connection_entry *conn_entry;
+
+ pa_assert(p);
+ pa_assert(conn);
+
+ if (!(conn_entry = pa_hashmap_get(p->connections, conn)))
+ return NULL;
+
+ return conn_entry->client;
+}
+
+const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n) {
+ const char **extensions;
+ const char *ext_name;
+ void *state = NULL;
+ unsigned i = 0;
+
+ pa_assert(p);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(p->extensions);
+
+ if (*n <= 0)
+ return NULL;
+
+ extensions = pa_xnew(const char *, *n);
+
+ while (pa_hashmap_iterate(p->extensions, &state, (const void **) &ext_name)) {
+ extensions[i] = ext_name;
+ ++i;
+ }
+
+ return extensions;
+}
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
new file mode 100644
index 0000000..27198f4
--- /dev/null
+++ b/src/pulsecore/protocol-dbus.h
@@ -0,0 +1,158 @@
+#ifndef fooprotocoldbushfoo
+#define fooprotocoldbushfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#include <dbus/dbus.h>
+
+#include <pulsecore/core.h>
+#include <pulsecore/macro.h>
+
+#define PA_DBUS_DEFAULT_PORT 24883
+#define PA_DBUS_SOCKET_NAME "dbus-socket"
+
+#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
+
+#define PA_DBUS_ERROR_NO_SUCH_PROPERTY "org.PulseAudio.Core1.NoSuchPropertyError"
+#define PA_DBUS_ERROR_NOT_FOUND "org.PulseAudio.Core1.NotFoundError"
+
+/* Returns the default address of the server type in the escaped form. For
+ * PA_SERVER_TYPE_NONE an empty string is returned. The caller frees the
+ * string. */
+char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type);
+
+typedef struct pa_dbus_protocol pa_dbus_protocol;
+
+/* This function either creates a new pa_dbus_protocol object, or if one
+ * already exists, increases the reference count. */
+pa_dbus_protocol* pa_dbus_protocol_get(pa_core *c);
+
+pa_dbus_protocol* pa_dbus_protocol_ref(pa_dbus_protocol *p);
+void pa_dbus_protocol_unref(pa_dbus_protocol *p);
+
+/* Called when a received message needs handling. Completely ignoring the
+ * message isn't a good idea; if you can't handle the message, reply with an
+ * error.
+ *
+ * All messages are method calls. */
+typedef void (*pa_dbus_receive_cb_t)(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+typedef struct pa_dbus_arg_info {
+ const char *name;
+ const char *type;
+ const char *direction; /* NULL for signal arguments. */
+} pa_dbus_arg_info;
+
+typedef struct pa_dbus_signal_info {
+ const char *name;
+ const pa_dbus_arg_info *arguments; /* NULL, if the signal has no args. */
+ unsigned n_arguments;
+} pa_dbus_signal_info;
+
+typedef struct pa_dbus_method_handler {
+ const char *method_name;
+ const pa_dbus_arg_info *arguments; /* NULL, if the method has no args. */
+ unsigned n_arguments;
+ pa_dbus_receive_cb_t receive_cb;
+} pa_dbus_method_handler;
+
+typedef struct pa_dbus_property_handler {
+ const char *property_name;
+ const char *type;
+
+ /* The access mode for the property is determined by checking whether
+ * get_cb or set_cb is NULL. */
+ pa_dbus_receive_cb_t get_cb;
+ pa_dbus_receive_cb_t set_cb;
+} pa_dbus_property_handler;
+
+typedef struct pa_dbus_interface_info {
+ const char* name;
+ const pa_dbus_method_handler *method_handlers; /* NULL, if the interface has no methods. */
+ unsigned n_method_handlers;
+ const pa_dbus_property_handler *property_handlers; /* NULL, if the interface has no properties. */
+ unsigned n_property_handlers;
+ const pa_dbus_receive_cb_t get_all_properties_cb; /* May be NULL, in which case GetAll returns an error. */
+ const pa_dbus_signal_info *signals; /* NULL, if the interface has no signals. */
+ unsigned n_signals;
+} pa_dbus_interface_info;
+
+
+/* The following functions may only be called from the main thread. */
+
+/* Registers the given interface to the given object path. It doesn't matter
+ * whether or not the object has already been registered; if it is, then its
+ * interface set is extended.
+ *
+ * Introspection requests are handled automatically.
+ *
+ * Userdata is passed to all the callbacks.
+ *
+ * Fails and returns a negative number if the object already has the interface
+ * registered. */
+int pa_dbus_protocol_add_interface(pa_dbus_protocol *p, const char *path, const pa_dbus_interface_info *info, void *userdata);
+
+/* Returns a negative number if the given object doesn't have the given
+ * interface registered. */
+int pa_dbus_protocol_remove_interface(pa_dbus_protocol *p, const char* path, const char* interface);
+
+/* Fails and returns a negative number if the connection is already
+ * registered. */
+int pa_dbus_protocol_register_connection(pa_dbus_protocol *p, DBusConnection *conn, pa_client *client);
+
+/* Returns a negative number if the connection wasn't registered. */
+int pa_dbus_protocol_unregister_connection(pa_dbus_protocol *p, DBusConnection *conn);
+
+/* Enables signal receiving for the given connection. The connection must have
+ * been registered earlier.
+ *
+ * If the signal argument is NULL, all signals will be sent to the connection,
+ * otherwise calling this function only adds the given signal to the list of
+ * signals that will be delivered to the connection.
+ *
+ * The objects argument is a list of object paths. If the list is not empty,
+ * only signals from the given objects are delivered. If this function is
+ * called multiple time for the same connection and signal, the latest call
+ * always replaces the previous object list. */
+void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal, char **objects, unsigned n_objects);
+
+/* Disables the delivery of the signal for the given connection. The connection
+ * must have been registered. If signal is NULL, all signals are disabled. If
+ * signal is non-NULL and _add_signal_listener() was previously called with
+ * NULL signal (causing all signals to be enabled), this function doesn't do
+ * anything. Also, if the signal wasn't enabled before, this function doesn't
+ * do anything in that case either. */
+void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal);
+
+void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal);
+
+/* Returns NULL if the connection isn't registered. */
+pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn);
+
+/* Returns an array of extension identifier strings. The strings pointers point
+ * to the internal copies, so don't free the strings. The caller must free the
+ * array, however. Also, do not save the returned pointer or any of the string
+ * pointers, because the contained strings may be freed at any time. If you
+ * need to save the array, copy it. */
+const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n);
+
+#endif
commit 9a77d2f81d693d64b63d38be7214626dedf91e11
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Jul 21 00:04:52 2009 +0300
Add the forgotten src/modules/dbus directory to git.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
new file mode 100644
index 0000000..db6aa26
--- /dev/null
+++ b/src/modules/dbus/iface-card.c
@@ -0,0 +1,61 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pulsecore/core-util.h>
+
+#include "iface-card.h"
+
+#define OBJECT_NAME "card"
+
+struct pa_dbusiface_card {
+ pa_card *card;
+ char *path;
+};
+
+pa_dbusiface_card *pa_dbusiface_card_new(pa_card *card, const char *path_prefix) {
+ pa_dbusiface_card *c;
+
+ pa_assert(card);
+ pa_assert(path_prefix);
+
+ c = pa_xnew(pa_dbusiface_card, 1);
+ c->card = card;
+ c->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, card->index);
+
+ return c;
+}
+
+void pa_dbusiface_card_free(pa_dbusiface_card *c) {
+ pa_assert(c);
+
+ pa_xfree(c->path);
+ pa_xfree(c);
+}
+
+const char *pa_dbusiface_card_get_path(pa_dbusiface_card *c) {
+ pa_assert(c);
+
+ return c->path;
+}
diff --git a/src/modules/dbus/iface-card.h b/src/modules/dbus/iface-card.h
new file mode 100644
index 0000000..54db610
--- /dev/null
+++ b/src/modules/dbus/iface-card.h
@@ -0,0 +1,40 @@
+#ifndef foodbusifacecardhfoo
+#define foodbusifacecardhfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Card.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Card interface
+ * documentation.
+ */
+
+#include <pulsecore/card.h>
+
+typedef struct pa_dbusiface_card pa_dbusiface_card;
+
+pa_dbusiface_card *pa_dbusiface_card_new(pa_card *card, const char *path_prefix);
+void pa_dbusiface_card_free(pa_dbusiface_card *c);
+
+const char *pa_dbusiface_card_get_path(pa_dbusiface_card *c);
+
+#endif
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
new file mode 100644
index 0000000..cfa36d0
--- /dev/null
+++ b/src/modules/dbus/iface-client.c
@@ -0,0 +1,61 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pulsecore/core-util.h>
+
+#include "iface-client.h"
+
+#define OBJECT_NAME "client"
+
+struct pa_dbusiface_client {
+ pa_client *client;
+ char *path;
+};
+
+pa_dbusiface_client *pa_dbusiface_client_new(pa_client *client, const char *path_prefix) {
+ pa_dbusiface_client *c;
+
+ pa_assert(client);
+ pa_assert(path_prefix);
+
+ c = pa_xnew(pa_dbusiface_client, 1);
+ c->client = client;
+ c->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, client->index);
+
+ return c;
+}
+
+void pa_dbusiface_client_free(pa_dbusiface_client *c) {
+ pa_assert(c);
+
+ pa_xfree(c->path);
+ pa_xfree(c);
+}
+
+const char *pa_dbusiface_client_get_path(pa_dbusiface_client *c) {
+ pa_assert(c);
+
+ return c->path;
+}
diff --git a/src/modules/dbus/iface-client.h b/src/modules/dbus/iface-client.h
new file mode 100644
index 0000000..62cca7f
--- /dev/null
+++ b/src/modules/dbus/iface-client.h
@@ -0,0 +1,40 @@
+#ifndef foodbusifaceclienthfoo
+#define foodbusifaceclienthfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Card.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Card interface
+ * documentation.
+ */
+
+#include <pulsecore/client.h>
+
+typedef struct pa_dbusiface_client pa_dbusiface_client;
+
+pa_dbusiface_client *pa_dbusiface_client_new(pa_client *client, const char *path_prefix);
+void pa_dbusiface_client_free(pa_dbusiface_client *c);
+
+const char *pa_dbusiface_client_get_path(pa_dbusiface_client *c);
+
+#endif
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
new file mode 100644
index 0000000..31f1260
--- /dev/null
+++ b/src/modules/dbus/iface-core.c
@@ -0,0 +1,1968 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <ctype.h>
+
+#include <dbus/dbus.h>
+
+#include <pulse/utf8.h>
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/macro.h>
+#include <pulsecore/namereg.h>
+#include <pulsecore/protocol-dbus.h>
+#include <pulsecore/socket-util.h>
+#include <pulsecore/strbuf.h>
+
+#include "iface-card.h"
+#include "iface-client.h"
+#include "iface-device.h"
+#include "iface-module.h"
+#include "iface-sample.h"
+#include "iface-stream.h"
+
+#include "iface-core.h"
+
+#define OBJECT_PATH "/org/pulseaudio/core1"
+#define INTERFACE_CORE "org.PulseAudio.Core1"
+
+#define INTERFACE_REVISION 0
+
+
+
+static void handle_get_interface_revision(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_version(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_is_local(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_username(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_hostname(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_cards(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_playback_streams(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_record_streams(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_samples(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_modules(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_clients(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_my_client(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_extensions(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_card_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sink_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_source_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_exit(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_stop_listening_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+struct pa_dbusiface_core {
+ pa_core *core;
+ pa_subscription *subscription;
+
+ pa_dbus_protocol *dbus_protocol;
+
+ pa_hashmap *cards;
+ pa_hashmap *sinks_by_index;
+ pa_hashmap *sinks_by_path;
+ pa_hashmap *sources_by_index;
+ pa_hashmap *sources_by_path;
+ pa_hashmap *playback_streams;
+ pa_hashmap *record_streams;
+ pa_hashmap *samples;
+ pa_hashmap *modules;
+ pa_hashmap *clients;
+
+ pa_sink *fallback_sink;
+ pa_source *fallback_source;
+};
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INTERFACE_REVISION,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_VERSION,
+ PROPERTY_HANDLER_IS_LOCAL,
+ PROPERTY_HANDLER_USERNAME,
+ PROPERTY_HANDLER_HOSTNAME,
+ PROPERTY_HANDLER_DEFAULT_CHANNELS,
+ PROPERTY_HANDLER_DEFAULT_SAMPLE_FORMAT,
+ PROPERTY_HANDLER_DEFAULT_SAMPLE_RATE,
+ PROPERTY_HANDLER_CARDS,
+ PROPERTY_HANDLER_SINKS,
+ PROPERTY_HANDLER_FALLBACK_SINK,
+ PROPERTY_HANDLER_SOURCES,
+ PROPERTY_HANDLER_FALLBACK_SOURCE,
+ PROPERTY_HANDLER_PLAYBACK_STREAMS,
+ PROPERTY_HANDLER_RECORD_STREAMS,
+ PROPERTY_HANDLER_SAMPLES,
+ PROPERTY_HANDLER_MODULES,
+ PROPERTY_HANDLER_CLIENTS,
+ PROPERTY_HANDLER_MY_CLIENT,
+ PROPERTY_HANDLER_EXTENSIONS,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INTERFACE_REVISION] = { .property_name = "InterfaceRevision", .type = "u", .get_cb = handle_get_interface_revision, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_VERSION] = { .property_name = "Version", .type = "s", .get_cb = handle_get_version, .set_cb = NULL },
+ [PROPERTY_HANDLER_IS_LOCAL] = { .property_name = "IsLocal", .type = "b", .get_cb = handle_get_is_local, .set_cb = NULL },
+ [PROPERTY_HANDLER_USERNAME] = { .property_name = "Username", .type = "s", .get_cb = handle_get_username, .set_cb = NULL },
+ [PROPERTY_HANDLER_HOSTNAME] = { .property_name = "Hostname", .type = "s", .get_cb = handle_get_hostname, .set_cb = NULL },
+ [PROPERTY_HANDLER_DEFAULT_CHANNELS] = { .property_name = "DefaultChannels", .type = "au", .get_cb = handle_get_default_channels, .set_cb = handle_set_default_channels },
+ [PROPERTY_HANDLER_DEFAULT_SAMPLE_FORMAT] = { .property_name = "DefaultSampleFormat", .type = "u", .get_cb = handle_get_default_sample_format, .set_cb = handle_set_default_sample_format },
+ [PROPERTY_HANDLER_DEFAULT_SAMPLE_RATE] = { .property_name = "DefaultSampleRate", .type = "u", .get_cb = handle_get_default_sample_rate, .set_cb = handle_set_default_sample_rate },
+ [PROPERTY_HANDLER_CARDS] = { .property_name = "Cards", .type = "ao", .get_cb = handle_get_cards, .set_cb = NULL },
+ [PROPERTY_HANDLER_SINKS] = { .property_name = "Sinks", .type = "ao", .get_cb = handle_get_sinks, .set_cb = NULL },
+ [PROPERTY_HANDLER_FALLBACK_SINK] = { .property_name = "FallbackSink", .type = "o", .get_cb = handle_get_fallback_sink, .set_cb = handle_set_fallback_sink },
+ [PROPERTY_HANDLER_SOURCES] = { .property_name = "Sources", .type = "ao", .get_cb = handle_get_sources, .set_cb = NULL },
+ [PROPERTY_HANDLER_FALLBACK_SOURCE] = { .property_name = "FallbackSource", .type = "o", .get_cb = handle_get_fallback_source, .set_cb = handle_set_fallback_source },
+ [PROPERTY_HANDLER_PLAYBACK_STREAMS] = { .property_name = "PlaybackStreams", .type = "ao", .get_cb = handle_get_playback_streams, .set_cb = NULL },
+ [PROPERTY_HANDLER_RECORD_STREAMS] = { .property_name = "RecordStreams", .type = "ao", .get_cb = handle_get_record_streams, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLES] = { .property_name = "Samples", .type = "ao", .get_cb = handle_get_samples, .set_cb = NULL },
+ [PROPERTY_HANDLER_MODULES] = { .property_name = "Modules", .type = "ao", .get_cb = handle_get_modules, .set_cb = NULL },
+ [PROPERTY_HANDLER_CLIENTS] = { .property_name = "Clients", .type = "ao", .get_cb = handle_get_clients, .set_cb = NULL },
+ [PROPERTY_HANDLER_MY_CLIENT] = { .property_name = "MyClient", .type = "o", .get_cb = handle_get_my_client, .set_cb = NULL },
+ [PROPERTY_HANDLER_EXTENSIONS] = { .property_name = "Extensions", .type = "as", .get_cb = handle_get_extensions, .set_cb = NULL }
+};
+
+enum method_handler_index {
+ METHOD_HANDLER_GET_CARD_BY_NAME,
+ METHOD_HANDLER_GET_SINK_BY_NAME,
+ METHOD_HANDLER_GET_SOURCE_BY_NAME,
+ METHOD_HANDLER_GET_SAMPLE_BY_NAME,
+ METHOD_HANDLER_UPLOAD_SAMPLE,
+ METHOD_HANDLER_LOAD_MODULE,
+ METHOD_HANDLER_EXIT,
+ METHOD_HANDLER_LISTEN_FOR_SIGNAL,
+ METHOD_HANDLER_STOP_LISTENING_FOR_SIGNAL,
+ METHOD_HANDLER_MAX
+};
+
+static pa_dbus_arg_info get_card_by_name_args[] = { { "name", "s", "in" }, { "card", "o", "out" } };
+static pa_dbus_arg_info get_sink_by_name_args[] = { { "name", "s", "in" }, { "sink", "o", "out" } };
+static pa_dbus_arg_info get_source_by_name_args[] = { { "name", "s", "in" }, { "source", "o", "out" } };
+static pa_dbus_arg_info get_sample_by_name_args[] = { { "name", "s", "in" }, { "sample", "o", "out" } };
+static pa_dbus_arg_info upload_sample_args[] = { { "name", "s", "in" },
+ { "sample_format", "u", "in" },
+ { "sample_rate", "u", "in" },
+ { "channels", "au", "in" },
+ { "default_volume", "au", "in" },
+ { "property_list", "a{say}", "in" },
+ { "data", "ay", "in" },
+ { "sample", "o", "out" } };
+static pa_dbus_arg_info load_module_args[] = { { "name", "s", "in" }, { "arguments", "a{ss}", "in" }, { "module", "o", "out" } };
+static pa_dbus_arg_info listen_for_signal_args[] = { { "signal", "s", "in" }, { "objects", "ao", "in" } };
+static pa_dbus_arg_info stop_listening_for_signal_args[] = { { "signal", "s", "in" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_GET_CARD_BY_NAME] = {
+ .method_name = "GetCardByName",
+ .arguments = get_card_by_name_args,
+ .n_arguments = sizeof(get_card_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_card_by_name },
+ [METHOD_HANDLER_GET_SINK_BY_NAME] = {
+ .method_name = "GetSinkByName",
+ .arguments = get_sink_by_name_args,
+ .n_arguments = sizeof(get_sink_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_sink_by_name },
+ [METHOD_HANDLER_GET_SOURCE_BY_NAME] = {
+ .method_name = "GetSourceByName",
+ .arguments = get_source_by_name_args,
+ .n_arguments = sizeof(get_source_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_source_by_name },
+ [METHOD_HANDLER_GET_SAMPLE_BY_NAME] = {
+ .method_name = "GetSampleByName",
+ .arguments = get_sample_by_name_args,
+ .n_arguments = sizeof(get_sample_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_sample_by_name },
+ [METHOD_HANDLER_UPLOAD_SAMPLE] = {
+ .method_name = "UploadSample",
+ .arguments = upload_sample_args,
+ .n_arguments = sizeof(upload_sample_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_upload_sample },
+ [METHOD_HANDLER_LOAD_MODULE] = {
+ .method_name = "LoadModule",
+ .arguments = upload_sample_args,
+ .n_arguments = sizeof(load_module_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_load_module },
+ [METHOD_HANDLER_EXIT] = {
+ .method_name = "Exit",
+ .arguments = NULL,
+ .n_arguments = 0,
+ .receive_cb = handle_exit },
+ [METHOD_HANDLER_LISTEN_FOR_SIGNAL] = {
+ .method_name = "ListenForSignal",
+ .arguments = listen_for_signal_args,
+ .n_arguments = sizeof(listen_for_signal_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_listen_for_signal },
+ [METHOD_HANDLER_STOP_LISTENING_FOR_SIGNAL] = {
+ .method_name = "StopListeningForSignal",
+ .arguments = stop_listening_for_signal_args,
+ .n_arguments = sizeof(stop_listening_for_signal_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_stop_listening_for_signal }
+};
+
+enum signal_index {
+ SIGNAL_NEW_CARD,
+ SIGNAL_CARD_REMOVED,
+ SIGNAL_NEW_SINK,
+ SIGNAL_SINK_REMOVED,
+ SIGNAL_FALLBACK_SINK_UPDATED,
+ SIGNAL_NEW_SOURCE,
+ SIGNAL_SOURCE_REMOVED,
+ SIGNAL_FALLBACK_SOURCE_UPDATED,
+ SIGNAL_NEW_PLAYBACK_STREAM,
+ SIGNAL_PLAYBACK_STREAM_REMOVED,
+ SIGNAL_NEW_RECORD_STREAM,
+ SIGNAL_RECORD_STREAM_REMOVED,
+ SIGNAL_NEW_SAMPLE,
+ SIGNAL_SAMPLE_REMOVED,
+ SIGNAL_NEW_MODULE,
+ SIGNAL_MODULE_REMOVED,
+ SIGNAL_NEW_CLIENT,
+ SIGNAL_CLIENT_REMOVED,
+ SIGNAL_MAX
+};
+
+static pa_dbus_arg_info new_card_args[] = { { "card", "o", NULL } };
+static pa_dbus_arg_info card_removed_args[] = { { "card", "o", NULL } };
+static pa_dbus_arg_info new_sink_args[] = { { "sink", "o", NULL } };
+static pa_dbus_arg_info sink_removed_args[] = { { "sink", "o", NULL } };
+static pa_dbus_arg_info fallback_sink_updated_args[] = { { "sink", "o", NULL } };
+static pa_dbus_arg_info new_source_args[] = { { "source", "o", NULL } };
+static pa_dbus_arg_info source_removed_args[] = { { "source", "o", NULL } };
+static pa_dbus_arg_info fallback_source_updated_args[] = { { "source", "o", NULL } };
+static pa_dbus_arg_info new_playback_stream_args[] = { { "playback_stream", "o", NULL } };
+static pa_dbus_arg_info playback_stream_removed_args[] = { { "playback_stream", "o", NULL } };
+static pa_dbus_arg_info new_record_stream_args[] = { { "record_stream", "o", NULL } };
+static pa_dbus_arg_info record_stream_removed_args[] = { { "record_stream", "o", NULL } };
+static pa_dbus_arg_info new_sample_args[] = { { "sample", "o", NULL } };
+static pa_dbus_arg_info sample_removed_args[] = { { "sample", "o", NULL } };
+static pa_dbus_arg_info new_module_args[] = { { "module", "o", NULL } };
+static pa_dbus_arg_info module_removed_args[] = { { "module", "o", NULL } };
+static pa_dbus_arg_info new_client_args[] = { { "client", "o", NULL } };
+static pa_dbus_arg_info client_removed_args[] = { { "client", "o", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_NEW_CARD] = { .name = "NewCard", .arguments = new_card_args, .n_arguments = 1 },
+ [SIGNAL_CARD_REMOVED] = { .name = "CardRemoved", .arguments = card_removed_args, .n_arguments = 1 },
+ [SIGNAL_NEW_SINK] = { .name = "NewSink", .arguments = new_sink_args, .n_arguments = 1 },
+ [SIGNAL_SINK_REMOVED] = { .name = "SinkRemoved", .arguments = sink_removed_args, .n_arguments = 1 },
+ [SIGNAL_FALLBACK_SINK_UPDATED] = { .name = "FallbackSinkUpdated", .arguments = fallback_sink_updated_args, .n_arguments = 1 },
+ [SIGNAL_NEW_SOURCE] = { .name = "NewSource", .arguments = new_source_args, .n_arguments = 1 },
+ [SIGNAL_SOURCE_REMOVED] = { .name = "SourceRemoved", .arguments = source_removed_args, .n_arguments = 1 },
+ [SIGNAL_FALLBACK_SOURCE_UPDATED] = { .name = "FallbackSourceUpdated", .arguments = fallback_source_updated_args, .n_arguments = 1 },
+ [SIGNAL_NEW_PLAYBACK_STREAM] = { .name = "NewPlaybackStream", .arguments = new_playback_stream_args, .n_arguments = 1 },
+ [SIGNAL_PLAYBACK_STREAM_REMOVED] = { .name = "PlaybackStreamRemoved", .arguments = playback_stream_removed_args, .n_arguments = 1 },
+ [SIGNAL_NEW_RECORD_STREAM] = { .name = "NewRecordStream", .arguments = new_record_stream_args, .n_arguments = 1 },
+ [SIGNAL_RECORD_STREAM_REMOVED] = { .name = "RecordStreamRemoved", .arguments = record_stream_removed_args, .n_arguments = 1 },
+ [SIGNAL_NEW_SAMPLE] = { .name = "NewSample", .arguments = new_sample_args, .n_arguments = 1 },
+ [SIGNAL_SAMPLE_REMOVED] = { .name = "SampleRemoved", .arguments = sample_removed_args, .n_arguments = 1 },
+ [SIGNAL_NEW_MODULE] = { .name = "NewModule", .arguments = new_module_args, .n_arguments = 1 },
+ [SIGNAL_MODULE_REMOVED] = { .name = "ModuleRemoved", .arguments = module_removed_args, .n_arguments = 1 },
+ [SIGNAL_NEW_CLIENT] = { .name = "NewClient", .arguments = new_client_args, .n_arguments = 1 },
+ [SIGNAL_CLIENT_REMOVED] = { .name = "ClientRemoved", .arguments = client_removed_args, .n_arguments = 1 },
+};
+
+static pa_dbus_interface_info core_interface_info = {
+ .name = INTERFACE_CORE,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static void handle_get_interface_revision(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ dbus_uint32_t interface_revision = INTERFACE_REVISION;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &interface_revision);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ const char *server_name = PACKAGE_NAME;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &server_name);
+}
+
+static void handle_get_version(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ const char *version = PACKAGE_VERSION;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &version);
+}
+
+static dbus_bool_t get_is_local(DBusConnection *conn) {
+ int conn_fd;
+
+ pa_assert(conn);
+
+ if (!dbus_connection_get_socket(conn, &conn_fd))
+ return FALSE;
+
+ return pa_socket_is_local(conn_fd);
+}
+
+static void handle_get_is_local(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ dbus_bool_t is_local;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ is_local = get_is_local(conn);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &is_local);
+}
+
+static void handle_get_username(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ char *username = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ username = pa_get_user_name_malloc();
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &username);
+
+ pa_xfree(username);
+}
+
+static void handle_get_hostname(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ char *hostname = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ hostname = pa_get_host_name_malloc();
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &hostname);
+
+ pa_xfree(hostname);
+}
+
+/* Caller frees the returned array. */
+static dbus_uint32_t *get_default_channels(pa_dbusiface_core *c, unsigned *n) {
+ dbus_uint32_t *default_channels = NULL;
+ unsigned i;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = c->core->default_channel_map.channels;
+ default_channels = pa_xnew(dbus_uint32_t, *n);
+
+ for (i = 0; i < *n; ++i)
+ default_channels[i] = c->core->default_channel_map.map[i];
+
+ return default_channels;
+}
+
+static void handle_get_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ dbus_uint32_t *default_channels = NULL;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ default_channels = get_default_channels(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, default_channels, n);
+
+ pa_xfree(default_channels);
+}
+
+static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ pa_channel_map new_channel_map;
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+ DBusMessageIter array_iter;
+ dbus_uint32_t *default_channels;
+ int n_channels;
+ unsigned i;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ pa_channel_map_init(&new_channel_map);
+
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
+
+ /* Skip the interface and property name arguments. */
+ if (!dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
+ return;
+ }
+
+ dbus_message_iter_recurse(&msg_iter, &variant_iter);
+
+ if (dbus_message_iter_get_arg_type(&variant_iter) != DBUS_TYPE_ARRAY) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Variant doesn't contain an array.");
+ return;
+ }
+
+ dbus_message_iter_recurse(&variant_iter, &array_iter);
+
+ if (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_UINT32) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Array type is not uint32.");
+ return;
+ }
+
+ dbus_message_iter_get_fixed_array(&array_iter, &default_channels, &n_channels);
+
+ if (n_channels <= 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty channel array.");
+ return;
+ }
+
+ new_channel_map.channels = n_channels;
+
+ for (i = 0; i < new_channel_map.channels; ++i) {
+ if (default_channels[i] >= PA_CHANNEL_POSITION_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid channel position.");
+ return;
+ }
+
+ new_channel_map.map[i] = default_channels[i];
+ }
+
+ c->core->default_channel_map = new_channel_map;
+ c->core->default_sample_spec.channels = n_channels;
+
+ pa_dbus_send_empty_reply(conn, msg);
+};
+
+static void handle_get_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ dbus_uint32_t default_sample_format;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ default_sample_format = c->core->default_sample_spec.format;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &default_sample_format);
+}
+
+static void handle_set_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ dbus_uint32_t default_sample_format;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &default_sample_format) < 0)
+ return;
+
+ if (default_sample_format >= PA_SAMPLE_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample format.");
+ return;
+ }
+
+ c->core->default_sample_spec.format = default_sample_format;
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ dbus_uint32_t default_sample_rate;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ default_sample_rate = c->core->default_sample_spec.rate;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &default_sample_rate);
+}
+
+static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ dbus_uint32_t default_sample_rate;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &default_sample_rate) < 0)
+ return;
+
+ if (default_sample_rate <= 0 || default_sample_rate > PA_RATE_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample format.");
+ return;
+ }
+
+ c->core->default_sample_spec.rate = default_sample_rate;
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_cards(pa_dbusiface_core *c, unsigned *n) {
+ const char **cards;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_card *card;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->cards);
+
+ if (*n == 0)
+ return NULL;
+
+ cards = pa_xnew(const char *, *n);
+
+ for (i = 0, card = pa_hashmap_iterate(c->cards, &state, NULL); card; ++i, card = pa_hashmap_iterate(c->cards, &state, NULL))
+ cards[i] = pa_dbusiface_card_get_path(card);
+
+ pa_assert(i == *n);
+
+ return cards;
+}
+
+static void handle_get_cards(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **cards;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ cards = get_cards(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, cards, n);
+
+ pa_xfree(cards);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_sinks(pa_dbusiface_core *c, unsigned *n) {
+ const char **sinks;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_device *sink;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->sinks_by_index);
+
+ if (*n == 0)
+ return NULL;
+
+ sinks = pa_xnew(const char *, *n);
+
+ for (i = 0, sink = pa_hashmap_iterate(c->sinks_by_index, &state, NULL); sink; ++i, sink = pa_hashmap_iterate(c->sinks_by_index, &state, NULL))
+ sinks[i] = pa_dbusiface_device_get_path(sink);
+
+ pa_assert(i == *n);
+
+ return sinks;
+}
+
+static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **sinks;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ sinks = get_sinks(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, sinks, n);
+
+ pa_xfree(sinks);
+}
+
+static void handle_get_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ pa_dbusiface_device *fallback_sink;
+ const char *object_path;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->fallback_sink) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sinks, and therefore no fallback sink either.");
+ return;
+ }
+
+ pa_assert_se((fallback_sink = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(c->fallback_sink->index))));
+ object_path = pa_dbusiface_device_get_path(fallback_sink);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ pa_dbusiface_device *fallback_sink;
+ const char *object_path;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->fallback_sink) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sinks, and therefore no fallback sink either.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path) < 0)
+ return;
+
+ if (!(fallback_sink = pa_hashmap_get(c->sinks_by_path, object_path))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such sink.");
+ return;
+ }
+
+ pa_namereg_set_default_sink(c->core, pa_dbusiface_device_get_sink(fallback_sink));
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_sources(pa_dbusiface_core *c, unsigned *n) {
+ const char **sources;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_device *source;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->sources_by_index);
+
+ if (*n == 0)
+ return NULL;
+
+ sources = pa_xnew(const char *, *n);
+
+ for (i = 0, source = pa_hashmap_iterate(c->sources_by_index, &state, NULL); source; ++i, source = pa_hashmap_iterate(c->sources_by_index, &state, NULL))
+ sources[i] = pa_dbusiface_device_get_path(source);
+
+ pa_assert(i == *n);
+
+ return sources;
+}
+
+static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **sources;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ sources = get_sources(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, sources, n);
+
+ pa_xfree(sources);
+}
+
+static void handle_get_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ pa_dbusiface_device *fallback_source;
+ const char *object_path;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->fallback_source) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sources, and therefore no fallback source either.");
+ return;
+ }
+
+ pa_assert_se((fallback_source = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(c->fallback_source->index))));
+ object_path = pa_dbusiface_device_get_path(fallback_source);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ pa_dbusiface_device *fallback_source;
+ const char *object_path;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->fallback_source) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sources, and therefore no fallback source either.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path) < 0)
+ return;
+
+ if (!(fallback_source = pa_hashmap_get(c->sources_by_path, object_path))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such source.");
+ return;
+ }
+
+ pa_namereg_set_default_source(c->core, pa_dbusiface_device_get_source(fallback_source));
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_playback_streams(pa_dbusiface_core *c, unsigned *n) {
+ const char **streams;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_stream *stream;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->playback_streams);
+
+ if (*n == 0)
+ return NULL;
+
+ streams = pa_xnew(const char *, *n);
+
+ for (i = 0, stream = pa_hashmap_iterate(c->playback_streams, &state, NULL); stream; ++i, stream = pa_hashmap_iterate(c->playback_streams, &state, NULL))
+ streams[i] = pa_dbusiface_stream_get_path(stream);
+
+ pa_assert(i == *n);
+
+ return streams;
+}
+
+static void handle_get_playback_streams(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **playback_streams;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ playback_streams = get_playback_streams(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, playback_streams, n);
+
+ pa_xfree(playback_streams);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_record_streams(pa_dbusiface_core *c, unsigned *n) {
+ const char **streams;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_stream *stream;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->record_streams);
+
+ if (*n == 0)
+ return NULL;
+
+ streams = pa_xnew(const char *, *n);
+
+ for (i = 0, stream = pa_hashmap_iterate(c->record_streams, &state, NULL); stream; ++i, stream = pa_hashmap_iterate(c->record_streams, &state, NULL))
+ streams[i] = pa_dbusiface_stream_get_path(stream);
+
+ pa_assert(i == *n);
+
+ return streams;
+}
+
+static void handle_get_record_streams(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **record_streams;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ record_streams = get_record_streams(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, record_streams, n);
+
+ pa_xfree(record_streams);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_samples(pa_dbusiface_core *c, unsigned *n) {
+ const char **samples;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_sample *sample;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->samples);
+
+ if (*n == 0)
+ return NULL;
+
+ samples = pa_xnew(const char *, *n);
+
+ for (i = 0, sample = pa_hashmap_iterate(c->samples, &state, NULL); sample; ++i, sample = pa_hashmap_iterate(c->samples, &state, NULL))
+ samples[i] = pa_dbusiface_sample_get_path(sample);
+
+ pa_assert(i == *n);
+
+ return samples;
+}
+
+static void handle_get_samples(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **samples;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ samples = get_samples(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, samples, n);
+
+ pa_xfree(samples);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_modules(pa_dbusiface_core *c, unsigned *n) {
+ const char **modules;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_module *module;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->modules);
+
+ if (*n == 0)
+ return NULL;
+
+ modules = pa_xnew(const char *, *n);
+
+ for (i = 0, module = pa_hashmap_iterate(c->modules, &state, NULL); module; ++i, module = pa_hashmap_iterate(c->modules, &state, NULL))
+ modules[i] = pa_dbusiface_module_get_path(module);
+
+ pa_assert(i == *n);
+
+ return modules;
+}
+
+static void handle_get_modules(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **modules;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ modules = get_modules(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, modules, n);
+
+ pa_xfree(modules);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_clients(pa_dbusiface_core *c, unsigned *n) {
+ const char **clients;
+ unsigned i;
+ void *state = NULL;
+ pa_dbusiface_client *client;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->clients);
+
+ if (*n == 0)
+ return NULL;
+
+ clients = pa_xnew(const char *, *n);
+
+ for (i = 0, client = pa_hashmap_iterate(c->clients, &state, NULL); client; ++i, client = pa_hashmap_iterate(c->clients, &state, NULL))
+ clients[i] = pa_dbusiface_client_get_path(client);
+
+ pa_assert(i == *n);
+
+ return clients;
+}
+
+static void handle_get_clients(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **clients;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ clients = get_clients(c, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, clients, n);
+
+ pa_xfree(clients);
+}
+
+static const char *get_my_client(pa_dbusiface_core *c, DBusConnection *conn) {
+ pa_client *my_client;
+
+ pa_assert(c);
+ pa_assert(conn);
+
+ pa_assert_se((my_client = pa_dbus_protocol_get_client(c->dbus_protocol, conn)));
+
+ return pa_dbusiface_client_get_path(pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(my_client->index)));
+}
+
+static void handle_get_my_client(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char *my_client;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ my_client = get_my_client(c, conn);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &my_client);
+}
+
+static void handle_get_extensions(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char **extensions;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ extensions = pa_dbus_protocol_get_extensions(c->dbus_protocol, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_STRING, extensions, n);
+
+ pa_xfree(extensions);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t interface_revision;
+ const char *server_name;
+ const char *version;
+ dbus_bool_t is_local;
+ char *username;
+ char *hostname;
+ dbus_uint32_t *default_channels;
+ unsigned n_default_channels;
+ dbus_uint32_t default_sample_format;
+ dbus_uint32_t default_sample_rate;
+ const char **cards;
+ unsigned n_cards;
+ const char **sinks;
+ unsigned n_sinks;
+ const char *fallback_sink;
+ const char **sources;
+ unsigned n_sources;
+ const char *fallback_source;
+ const char **playback_streams;
+ unsigned n_playback_streams;
+ const char **record_streams;
+ unsigned n_record_streams;
+ const char **samples;
+ unsigned n_samples;
+ const char **modules;
+ unsigned n_modules;
+ const char **clients;
+ unsigned n_clients;
+ const char *my_client;
+ const char **extensions;
+ unsigned n_extensions;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ interface_revision = INTERFACE_REVISION;
+ server_name = PACKAGE_NAME;
+ version = PACKAGE_VERSION;
+ is_local = get_is_local(conn);
+ username = pa_get_user_name_malloc();
+ hostname = pa_get_host_name_malloc();
+ default_channels = get_default_channels(c, &n_default_channels);
+ default_sample_format = c->core->default_sample_spec.format;
+ default_sample_rate = c->core->default_sample_spec.rate;
+ cards = get_cards(c, &n_cards);
+ sinks = get_sinks(c, &n_sinks);
+ fallback_sink = c->fallback_sink ? pa_dbusiface_device_get_path(pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(c->fallback_sink->index))) : NULL;
+ sources = get_sources(c, &n_sources);
+ fallback_source = c->fallback_source ? pa_dbusiface_device_get_path(pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(c->fallback_source->index))) : NULL;
+ playback_streams = get_playback_streams(c, &n_playback_streams);
+ record_streams = get_record_streams(c, &n_record_streams);
+ samples = get_samples(c, &n_samples);
+ modules = get_modules(c, &n_modules);
+ clients = get_clients(c, &n_clients);
+ my_client = get_my_client(c, conn);
+ extensions = pa_dbus_protocol_get_extensions(c->dbus_protocol, &n_extensions);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INTERFACE_REVISION].property_name, DBUS_TYPE_UINT32, &interface_revision);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &server_name);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VERSION].property_name, DBUS_TYPE_STRING, &version);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_LOCAL].property_name, DBUS_TYPE_BOOLEAN, &is_local);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_USERNAME].property_name, DBUS_TYPE_STRING, &username);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HOSTNAME].property_name, DBUS_TYPE_STRING, &hostname);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DEFAULT_CHANNELS].property_name, DBUS_TYPE_UINT32, default_channels, n_default_channels);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DEFAULT_SAMPLE_FORMAT].property_name, DBUS_TYPE_UINT32, &default_sample_format);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DEFAULT_SAMPLE_RATE].property_name, DBUS_TYPE_UINT32, &default_sample_rate);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CARDS].property_name, DBUS_TYPE_OBJECT_PATH, cards, n_cards);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SINKS].property_name, DBUS_TYPE_OBJECT_PATH, sinks, n_sinks);
+
+ if (fallback_sink)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_FALLBACK_SINK].property_name, DBUS_TYPE_OBJECT_PATH, &fallback_sink);
+
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SOURCES].property_name, DBUS_TYPE_OBJECT_PATH, sources, n_sources);
+
+ if (fallback_source)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_FALLBACK_SOURCE].property_name, DBUS_TYPE_OBJECT_PATH, &fallback_source);
+
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PLAYBACK_STREAMS].property_name, DBUS_TYPE_OBJECT_PATH, playback_streams, n_playback_streams);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_RECORD_STREAMS].property_name, DBUS_TYPE_OBJECT_PATH, record_streams, n_record_streams);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLES].property_name, DBUS_TYPE_OBJECT_PATH, samples, n_samples);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_MODULES].property_name, DBUS_TYPE_OBJECT_PATH, modules, n_modules);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CLIENTS].property_name, DBUS_TYPE_OBJECT_PATH, clients, n_clients);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_MY_CLIENT].property_name, DBUS_TYPE_OBJECT_PATH, &my_client);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_EXTENSIONS].property_name, DBUS_TYPE_STRING, extensions, n_extensions);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(username);
+ pa_xfree(hostname);
+ pa_xfree(default_channels);
+ pa_xfree(cards);
+ pa_xfree(sinks);
+ pa_xfree(sources);
+ pa_xfree(playback_streams);
+ pa_xfree(record_streams);
+ pa_xfree(samples);
+ pa_xfree(modules);
+ pa_xfree(clients);
+ pa_xfree(extensions);
+}
+
+static void handle_get_card_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ char *card_name;
+ pa_card *card;
+ pa_dbusiface_card *dbus_card;
+ const char *object_path;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &card_name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(card = pa_namereg_get(c->core, card_name, PA_NAMEREG_CARD))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such card.");
+ return;
+ }
+
+ pa_assert_se((dbus_card = pa_hashmap_get(c->cards, PA_UINT32_TO_PTR(card->index))));
+
+ object_path = pa_dbusiface_card_get_path(dbus_card);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_sink_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ char *sink_name;
+ pa_sink *sink;
+ pa_dbusiface_device *dbus_sink;
+ const char *object_path;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &sink_name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(sink = pa_namereg_get(c->core, sink_name, PA_NAMEREG_SINK))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such sink.");
+ return;
+ }
+
+ pa_assert_se((dbus_sink = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(sink->index))));
+
+ object_path = pa_dbusiface_device_get_path(dbus_sink);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_source_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ char *source_name;
+ pa_source *source;
+ pa_dbusiface_device *dbus_source;
+ const char *object_path;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &source_name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(source = pa_namereg_get(c->core, source_name, PA_NAMEREG_SOURCE))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such source.");
+ return;
+ }
+
+ pa_assert_se((dbus_source = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(source->index))));
+
+ object_path = pa_dbusiface_device_get_path(dbus_source);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_sample_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ char *sample_name;
+ pa_scache_entry *sample;
+ pa_dbusiface_sample *dbus_sample;
+ const char *object_path;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &sample_name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(sample = pa_namereg_get(c->core, sample_name, PA_NAMEREG_SAMPLE))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such sample.");
+ return;
+ }
+
+ pa_assert_se((dbus_sample = pa_hashmap_get(c->samples, PA_UINT32_TO_PTR(sample->index))));
+
+ object_path = pa_dbusiface_sample_get_path(dbus_sample);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ DBusMessageIter msg_iter;
+ const char *name;
+ dbus_uint32_t sample_format;
+ dbus_uint32_t sample_rate;
+ const dbus_uint32_t *channels;
+ unsigned n_channels;
+ const dbus_uint32_t *default_volume;
+ unsigned n_volume_entries;
+ pa_proplist *property_list;
+ const uint8_t *data;
+ unsigned data_length;
+ unsigned i;
+ pa_sample_spec ss;
+ pa_channel_map map;
+ pa_memchunk chunk;
+ uint32_t idx;
+ pa_dbusiface_sample *dbus_sample = NULL;
+ pa_scache_entry *sample = NULL;
+ const char *object_path;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ chunk.memblock = NULL;
+
+ if (!dbus_message_iter_init(msg, &msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &sample_format) < 0)
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &sample_rate) < 0)
+ return;
+
+ if (pa_dbus_get_fixed_array_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &channels, &n_channels) < 0)
+ return;
+
+ if (pa_dbus_get_fixed_array_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &default_volume, &n_volume_entries) < 0)
+ return;
+
+ if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
+ return;
+
+ if (pa_dbus_get_fixed_array_arg(conn, msg, &msg_iter, DBUS_TYPE_BYTE, &data, &data_length) < 0)
+ goto finish;
+
+ if (sample_format >= PA_SAMPLE_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample format.");
+ goto finish;
+ }
+
+ if (sample_rate <= 0 || sample_rate > PA_RATE_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample rate.");
+ goto finish;
+ }
+
+ if (n_channels == 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty channel map.");
+ goto finish;
+ }
+
+ if (n_channels > PA_CHANNELS_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too many channels.");
+ goto finish;
+ }
+
+ for (i = 0; i < n_channels; ++i) {
+ if (channels[i] >= PA_CHANNEL_POSITION_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid channel position.");
+ goto finish;
+ }
+ }
+
+ if (n_volume_entries != 0 && n_volume_entries != n_channels) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "The channels and default_volume arguments have different number of elements.");
+ goto finish;
+ }
+
+ for (i = 0; i < n_volume_entries; ++i) {
+ if (default_volume[i] > PA_VOLUME_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume.");
+ goto finish;
+ }
+ }
+
+ if (data_length == 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty data.");
+ goto finish;
+ }
+
+ if (data_length > PA_SCACHE_ENTRY_SIZE_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too big sample.");
+ goto finish;
+ }
+
+ ss.format = sample_format;
+ ss.rate = sample_rate;
+ ss.channels = n_channels;
+
+ if (!pa_frame_aligned(data_length, &ss)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "The sample length in bytes doesn't align with the sample format and channels.");
+ goto finish;
+ }
+
+ map.channels = n_channels;
+ for (i = 0; i < n_channels; ++i)
+ map.map[i] = channels[i];
+
+ chunk.memblock = pa_memblock_new(c->core->mempool, data_length);
+ chunk.index = 0;
+ chunk.length = data_length;
+
+ memcpy(pa_memblock_acquire(chunk.memblock), data, data_length);
+ pa_memblock_release(chunk.memblock);
+
+ if (pa_scache_add_item(c->core, name, &ss, &map, &chunk, property_list, &idx) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Adding the sample failed.");
+ goto finish;
+ }
+
+ sample = pa_idxset_get_by_index(c->core->scache, idx);
+
+ if (n_volume_entries > 0) {
+ sample->volume.channels = n_channels;
+ for (i = 0; i < n_volume_entries; ++i)
+ sample->volume.values[i] = default_volume[i];
+ sample->volume_is_set = TRUE;
+ } else {
+ sample->volume_is_set = FALSE;
+ }
+
+ dbus_sample = pa_dbusiface_sample_new(sample, OBJECT_PATH);
+ pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), dbus_sample);
+
+ object_path = pa_dbusiface_sample_get_path(dbus_sample);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+
+finish:
+ if (property_list)
+ pa_proplist_free(property_list);
+
+ if (chunk.memblock)
+ pa_memblock_unref(chunk.memblock);
+}
+
+static pa_bool_t contains_space(const char *string) {
+ const char *p;
+
+ pa_assert(string);
+
+ for (p = string; *p; ++p) {
+ if (isspace(*p))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ char *name;
+ const char *key;
+ const char *value;
+ char *escaped_value;
+ pa_strbuf *arg_buffer = NULL;
+ pa_module *module;
+ pa_dbusiface_module *dbus_module;
+ const char *object_path;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (c->core->disallow_module_loading) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_ACCESS_DENIED, "The server is configured to disallow module loading.");
+ return;
+ }
+
+ if (!dbus_message_iter_init(msg, &msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
+ return;
+
+ if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_ARRAY) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments. An array was expected.");
+ return;
+ }
+
+ if (dbus_message_iter_get_element_type(&msg_iter) != DBUS_TYPE_DICT_ENTRY) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type. A dict entry was expected.");
+ return;
+ }
+
+ arg_buffer = pa_strbuf_new();
+
+ dbus_message_iter_recurse(&msg_iter, &dict_iter);
+
+ while (dbus_message_iter_has_next(&dict_iter)) {
+ if (!pa_strbuf_isempty(arg_buffer))
+ pa_strbuf_putc(arg_buffer, ' ');
+
+ if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_STRING) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type. A string was expected.");
+ goto finish;
+ }
+
+ dbus_message_iter_get_basic(&dict_iter, &key);
+
+ if (strlen(key) <= 0 || !pa_ascii_valid(key) || contains_space(key)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid module argument name.");
+ goto finish;
+ }
+
+ if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_STRING) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type. A string was expected.");
+ goto finish;
+ }
+
+ dbus_message_iter_get_basic(&dict_iter, &value);
+
+ escaped_value = pa_escape(value, "\"");
+ pa_strbuf_printf(arg_buffer, "%s=\"%s\"", key, escaped_value);
+ pa_xfree(escaped_value);
+ }
+
+ if (!(module = pa_module_load(c->core, name, pa_strbuf_tostring(arg_buffer)))) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Failed to load module.");
+ goto finish;
+ }
+
+ dbus_module = pa_dbusiface_module_new(module, OBJECT_PATH);
+ pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(module->index), dbus_module);
+
+ object_path = pa_dbusiface_module_get_path(dbus_module);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+
+finish:
+ if (arg_buffer)
+ pa_strbuf_free(arg_buffer);
+}
+
+static void handle_exit(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (c->core->disallow_exit) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_ACCESS_DENIED, "The server is configured to disallow exiting.");
+ return;
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ pa_core_exit(c->core, FALSE, 0);
+}
+
+static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char *signal;
+ char **objects = NULL;
+ int n_objects;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &signal, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ dbus_error_free(&error);
+ goto finish;
+ }
+
+ pa_dbus_protocol_add_signal_listener(c->dbus_protocol, conn, *signal ? signal : NULL, objects, n_objects);
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+finish:
+ dbus_free_string_array(objects);
+}
+
+static void handle_stop_listening_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ const char *signal;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &signal, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ pa_dbus_protocol_remove_signal_listener(c->dbus_protocol, conn, *signal ? signal : NULL);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_core *c = userdata;
+ pa_dbusiface_card *card = NULL;
+ pa_dbusiface_device *device = NULL;
+ pa_dbusiface_stream *stream = NULL;
+ pa_dbusiface_sample *sample = NULL;
+ pa_dbusiface_module *module = NULL;
+ pa_dbusiface_client *client = NULL;
+ DBusMessage *signal = NULL;
+ const char *object_path = NULL;
+ pa_sink *new_fallback_sink = NULL;
+ pa_source *new_fallback_source = NULL;
+
+ pa_assert(c);
+
+ switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) {
+ case PA_SUBSCRIPTION_EVENT_SERVER:
+ new_fallback_sink = pa_namereg_get_default_sink(core);
+ new_fallback_source = pa_namereg_get_default_source(core);
+
+ if (c->fallback_sink != new_fallback_sink) {
+ c->fallback_sink = new_fallback_sink;
+
+ if (new_fallback_sink) {
+ pa_assert_se((device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index))));
+
+ object_path = pa_dbusiface_device_get_path(device);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+
+ if (c->fallback_source != new_fallback_source) {
+ c->fallback_source = new_fallback_source;
+
+ if (new_fallback_source) {
+ pa_assert_se((device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index))));
+
+ object_path = pa_dbusiface_device_get_path(device);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_CARD:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ card = pa_dbusiface_card_new(pa_idxset_get_by_index(core->cards, idx), OBJECT_PATH);
+ pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), card);
+
+ object_path = pa_dbusiface_card_get_path(card);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_CARD].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((card = pa_hashmap_remove(c->cards, PA_UINT32_TO_PTR(idx))));
+
+ object_path = pa_dbusiface_card_get_path(card);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_CARD_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_card_free(card);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SINK:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ device = pa_dbusiface_device_new_sink(pa_idxset_get_by_index(core->sinks, idx), OBJECT_PATH);
+ object_path = pa_dbusiface_device_get_path(device);
+
+ pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
+ pa_hashmap_put(c->sinks_by_path, object_path, device);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SINK].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((device = pa_hashmap_remove(c->sinks_by_index, PA_UINT32_TO_PTR(idx))));
+ object_path = pa_dbusiface_device_get_path(device);
+ pa_assert_se(pa_hashmap_remove(c->sinks_by_path, object_path));
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_SINK_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_device_free(device);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SOURCE:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ device = pa_dbusiface_device_new_source(pa_idxset_get_by_index(core->sources, idx), OBJECT_PATH);
+ object_path = pa_dbusiface_device_get_path(device);
+
+ pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
+ pa_hashmap_put(c->sources_by_path, object_path, device);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SOURCE].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((device = pa_hashmap_remove(c->sources_by_index, PA_UINT32_TO_PTR(idx))));
+ object_path = pa_dbusiface_device_get_path(device);
+ pa_assert_se(pa_hashmap_remove(c->sources_by_path, object_path));
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_SOURCE_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_device_free(device);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ stream = pa_dbusiface_stream_new_playback(pa_idxset_get_by_index(core->sink_inputs, idx), OBJECT_PATH);
+ pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), stream);
+
+ object_path = pa_dbusiface_stream_get_path(stream);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((stream = pa_hashmap_remove(c->playback_streams, PA_UINT32_TO_PTR(idx))));
+
+ object_path = pa_dbusiface_stream_get_path(stream);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_stream_free(stream);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ stream = pa_dbusiface_stream_new_record(pa_idxset_get_by_index(core->source_outputs, idx), OBJECT_PATH);
+ pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), stream);
+
+ object_path = pa_dbusiface_stream_get_path(stream);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_RECORD_STREAM].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((stream = pa_hashmap_remove(c->record_streams, PA_UINT32_TO_PTR(idx))));
+
+ object_path = pa_dbusiface_stream_get_path(stream);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_stream_free(stream);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ /* We may have created the pa_dbusiface_sample object already
+ * in handle_upload_sample. */
+ if (!(sample = pa_hashmap_get(c->samples, PA_UINT32_TO_PTR(idx)))) {
+ sample = pa_dbusiface_sample_new(pa_idxset_get_by_index(core->scache, idx), OBJECT_PATH);
+ pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), sample);
+ }
+
+ object_path = pa_dbusiface_sample_get_path(sample);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SAMPLE].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((sample = pa_hashmap_remove(c->samples, PA_UINT32_TO_PTR(idx))));
+
+ object_path = pa_dbusiface_sample_get_path(sample);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_SAMPLE_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_sample_free(sample);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_MODULE:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ /* We may have created the pa_dbusiface_module object already
+ * in handle_load_module. */
+ if (!(module = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(idx)))) {
+ module = pa_dbusiface_module_new(pa_idxset_get_by_index(core->modules, idx), OBJECT_PATH);
+ pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), module);
+ }
+
+ object_path = pa_dbusiface_module_get_path(module);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_MODULE].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((module = pa_hashmap_remove(c->modules, PA_UINT32_TO_PTR(idx))));
+
+ object_path = pa_dbusiface_module_get_path(module);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_MODULE_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_module_free(module);
+ }
+ break;
+
+ case PA_SUBSCRIPTION_EVENT_CLIENT:
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ client = pa_dbusiface_client_new(pa_idxset_get_by_index(core->clients, idx), OBJECT_PATH);
+ pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), client);
+
+ object_path = pa_dbusiface_client_get_path(client);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_CLIENT].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
+ pa_assert_se((client = pa_hashmap_remove(c->clients, PA_UINT32_TO_PTR(idx))));
+
+ object_path = pa_dbusiface_client_get_path(client);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_CLIENT_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbusiface_client_free(client);
+ }
+ break;
+ }
+
+ if (signal) {
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ }
+}
+
+pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
+ pa_dbusiface_core *c;
+ pa_card *card;
+ pa_sink *sink;
+ pa_source *source;
+ pa_dbusiface_device *device;
+ pa_sink_input *sink_input;
+ pa_source_output *source_output;
+ pa_scache_entry *sample;
+ pa_module *module;
+ pa_client *client;
+ uint32_t idx;
+
+ pa_assert(core);
+
+ c = pa_xnew(pa_dbusiface_core, 1);
+ c->core = core;
+ c->subscription = pa_subscription_new(core, PA_SUBSCRIPTION_MASK_ALL, subscription_cb, c);
+ c->dbus_protocol = pa_dbus_protocol_get(core);
+ c->cards = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->sinks_by_index = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->sinks_by_path = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ c->sources_by_index = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->sources_by_path = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ c->playback_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->record_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->samples = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->modules = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->clients = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->fallback_sink = pa_namereg_get_default_sink(core);
+ c->fallback_source = pa_namereg_get_default_source(core);
+
+ for (card = pa_idxset_first(core->cards, &idx); card; card = pa_idxset_next(core->cards, &idx))
+ pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(card, OBJECT_PATH));
+
+ for (sink = pa_idxset_first(core->sinks, &idx); sink; sink = pa_idxset_next(core->sinks, &idx)) {
+ device = pa_dbusiface_device_new_sink(sink, OBJECT_PATH);
+ pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
+ pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
+ }
+
+ for (source = pa_idxset_first(core->sources, &idx); source; source = pa_idxset_next(core->sources, &idx)) {
+ device = pa_dbusiface_device_new_source(source, OBJECT_PATH);
+ pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
+ pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
+ }
+
+ for (sink_input = pa_idxset_first(core->sink_inputs, &idx); sink_input; sink_input = pa_idxset_next(core->sink_inputs, &idx))
+ pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_playback(sink_input, OBJECT_PATH));
+
+ for (source_output = pa_idxset_first(core->source_outputs, &idx); source_output; source_output = pa_idxset_next(core->source_outputs, &idx))
+ pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_record(source_output, OBJECT_PATH));
+
+ for (sample = pa_idxset_first(core->scache, &idx); sample; sample = pa_idxset_next(core->scache, &idx))
+ pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), pa_dbusiface_sample_new(sample, OBJECT_PATH));
+
+ for (module = pa_idxset_first(core->modules, &idx); module; module = pa_idxset_next(core->modules, &idx))
+ pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), pa_dbusiface_module_new(module, OBJECT_PATH));
+
+ for (client = pa_idxset_first(core->clients, &idx); client; client = pa_idxset_next(core->clients, &idx))
+ pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), pa_dbusiface_client_new(client, OBJECT_PATH));
+
+ pa_dbus_protocol_add_interface(c->dbus_protocol, OBJECT_PATH, &core_interface_info, c);
+
+ return c;
+}
+
+static void free_card_cb(void *p, void *userdata) {
+ pa_dbusiface_card *c = p;
+
+ pa_assert(c);
+
+ pa_dbusiface_card_free(c);
+}
+
+static void free_device_cb(void *p, void *userdata) {
+ pa_dbusiface_device *d = p;
+
+ pa_assert(d);
+
+ pa_dbusiface_device_free(d);
+}
+
+static void free_stream_cb(void *p, void *userdata) {
+ pa_dbusiface_stream *s = p;
+
+ pa_assert(s);
+
+ pa_dbusiface_stream_free(s);
+}
+
+static void free_sample_cb(void *p, void *userdata) {
+ pa_dbusiface_sample *s = p;
+
+ pa_assert(s);
+
+ pa_dbusiface_sample_free(s);
+}
+
+static void free_module_cb(void *p, void *userdata) {
+ pa_dbusiface_module *m = p;
+
+ pa_assert(m);
+
+ pa_dbusiface_module_free(m);
+}
+
+static void free_client_cb(void *p, void *userdata) {
+ pa_dbusiface_client *c = p;
+
+ pa_assert(c);
+
+ pa_dbusiface_client_free(c);
+}
+
+void pa_dbusiface_core_free(pa_dbusiface_core *c) {
+ pa_assert(c);
+
+ pa_dbus_protocol_remove_interface(c->dbus_protocol, OBJECT_PATH, INTERFACE_CORE);
+
+ pa_subscription_free(c->subscription);
+ pa_hashmap_free(c->cards, free_card_cb, NULL);
+ pa_hashmap_free(c->sinks_by_index, free_device_cb, NULL);
+ pa_hashmap_free(c->sinks_by_path, NULL, NULL);
+ pa_hashmap_free(c->sources_by_index, free_device_cb, NULL);
+ pa_hashmap_free(c->sources_by_path, NULL, NULL);
+ pa_hashmap_free(c->playback_streams, free_stream_cb, NULL);
+ pa_hashmap_free(c->record_streams, free_stream_cb, NULL);
+ pa_hashmap_free(c->samples, free_sample_cb, NULL);
+ pa_hashmap_free(c->modules, free_module_cb, NULL);
+ pa_hashmap_free(c->clients, free_client_cb, NULL);
+
+ pa_dbus_protocol_unref(c->dbus_protocol);
+
+ pa_xfree(c);
+}
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
new file mode 100644
index 0000000..964a37b
--- /dev/null
+++ b/src/modules/dbus/iface-core.h
@@ -0,0 +1,38 @@
+#ifndef foodbusifacecorehfoo
+#define foodbusifacecorehfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Core interface
+ * documentation.
+ */
+
+#include <pulsecore/core.h>
+
+typedef struct pa_dbusiface_core pa_dbusiface_core;
+
+pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core);
+void pa_dbusiface_core_free(pa_dbusiface_core *c);
+
+#endif
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
new file mode 100644
index 0000000..3b3795e
--- /dev/null
+++ b/src/modules/dbus/iface-device.c
@@ -0,0 +1,105 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pulsecore/core-util.h>
+
+#include "iface-device.h"
+
+#define SINK_OBJECT_NAME "sink"
+#define SOURCE_OBJECT_NAME "source"
+
+enum device_type {
+ DEVICE_TYPE_SINK,
+ DEVICE_TYPE_SOURCE
+};
+
+struct pa_dbusiface_device {
+ union {
+ pa_sink *sink;
+ pa_source *source;
+ };
+ enum device_type type;
+ char *path;
+};
+
+pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_sink *sink, const char *path_prefix) {
+ pa_dbusiface_device *d;
+
+ pa_assert(sink);
+ pa_assert(path_prefix);
+
+ d = pa_xnew(pa_dbusiface_device, 1);
+ d->sink = pa_sink_ref(sink);
+ d->type = DEVICE_TYPE_SINK;
+ d->path = pa_sprintf_malloc("%s/%s%u", path_prefix, SINK_OBJECT_NAME, sink->index);
+
+ return d;
+}
+
+pa_dbusiface_device *pa_dbusiface_device_new_source(pa_source *source, const char *path_prefix) {
+ pa_dbusiface_device *d;
+
+ pa_assert(source);
+ pa_assert(path_prefix);
+
+ d = pa_xnew(pa_dbusiface_device, 1);
+ d->source = pa_source_ref(source);
+ d->type = DEVICE_TYPE_SOURCE;
+ d->path = pa_sprintf_malloc("%s/%s%u", path_prefix, SOURCE_OBJECT_NAME, source->index);
+
+ return d;
+}
+
+void pa_dbusiface_device_free(pa_dbusiface_device *d) {
+ pa_assert(d);
+
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_sink_unref(d->sink);
+ else
+ pa_source_unref(d->source);
+
+ pa_xfree(d->path);
+ pa_xfree(d);
+}
+
+const char *pa_dbusiface_device_get_path(pa_dbusiface_device *d) {
+ pa_assert(d);
+
+ return d->path;
+}
+
+pa_sink *pa_dbusiface_device_get_sink(pa_dbusiface_device *d) {
+ pa_assert(d);
+ pa_assert(d->type == DEVICE_TYPE_SINK);
+
+ return d->sink;
+}
+
+pa_source *pa_dbusiface_device_get_source(pa_dbusiface_device *d) {
+ pa_assert(d);
+ pa_assert(d->type == DEVICE_TYPE_SOURCE);
+
+ return d->source;
+}
diff --git a/src/modules/dbus/iface-device.h b/src/modules/dbus/iface-device.h
new file mode 100644
index 0000000..81ad1d8
--- /dev/null
+++ b/src/modules/dbus/iface-device.h
@@ -0,0 +1,46 @@
+#ifndef foodbusifacedevicehfoo
+#define foodbusifacedevicehfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interfaces org.PulseAudio.Core1.Device,
+ * org.PulseAudio.Core1.Sink and org.PulseAudio.Core1.Source.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the interface
+ * documentation.
+ */
+
+#include <pulsecore/sink.h>
+#include <pulsecore/source.h>
+
+typedef struct pa_dbusiface_device pa_dbusiface_device;
+
+pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_sink *sink, const char *path_prefix);
+pa_dbusiface_device *pa_dbusiface_device_new_source(pa_source *source, const char *path_prefix);
+void pa_dbusiface_device_free(pa_dbusiface_device *d);
+
+const char *pa_dbusiface_device_get_path(pa_dbusiface_device *d);
+
+pa_sink *pa_dbusiface_device_get_sink(pa_dbusiface_device *d);
+pa_source *pa_dbusiface_device_get_source(pa_dbusiface_device *d);
+
+#endif
diff --git a/src/modules/dbus/iface-module.c b/src/modules/dbus/iface-module.c
new file mode 100644
index 0000000..1c95f9e
--- /dev/null
+++ b/src/modules/dbus/iface-module.c
@@ -0,0 +1,61 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pulsecore/core-util.h>
+
+#include "iface-module.h"
+
+#define OBJECT_NAME "module"
+
+struct pa_dbusiface_module {
+ pa_module *module;
+ char *path;
+};
+
+pa_dbusiface_module *pa_dbusiface_module_new(pa_module *module, const char *path_prefix) {
+ pa_dbusiface_module *m;
+
+ pa_assert(module);
+ pa_assert(path_prefix);
+
+ m = pa_xnew(pa_dbusiface_module, 1);
+ m->module = module;
+ m->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, module->index);
+
+ return m;
+}
+
+void pa_dbusiface_module_free(pa_dbusiface_module *m) {
+ pa_assert(m);
+
+ pa_xfree(m->path);
+ pa_xfree(m);
+}
+
+const char *pa_dbusiface_module_get_path(pa_dbusiface_module *m) {
+ pa_assert(m);
+
+ return m->path;
+}
diff --git a/src/modules/dbus/iface-module.h b/src/modules/dbus/iface-module.h
new file mode 100644
index 0000000..7f683e6
--- /dev/null
+++ b/src/modules/dbus/iface-module.h
@@ -0,0 +1,40 @@
+#ifndef foodbusifacemodulehfoo
+#define foodbusifacemodulehfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Module.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Module interface
+ * documentation.
+ */
+
+#include <pulsecore/module.h>
+
+typedef struct pa_dbusiface_module pa_dbusiface_module;
+
+pa_dbusiface_module *pa_dbusiface_module_new(pa_module *module, const char *path_prefix);
+void pa_dbusiface_module_free(pa_dbusiface_module *m);
+
+const char *pa_dbusiface_module_get_path(pa_dbusiface_module *m);
+
+#endif
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
new file mode 100644
index 0000000..b4a308a
--- /dev/null
+++ b/src/modules/dbus/iface-sample.c
@@ -0,0 +1,61 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pulsecore/core-util.h>
+
+#include "iface-sample.h"
+
+#define OBJECT_NAME "sample"
+
+struct pa_dbusiface_sample {
+ pa_scache_entry *sample;
+ char *path;
+};
+
+pa_dbusiface_sample *pa_dbusiface_sample_new(pa_scache_entry *sample, const char *path_prefix) {
+ pa_dbusiface_sample *s;
+
+ pa_assert(sample);
+ pa_assert(path_prefix);
+
+ s = pa_xnew(pa_dbusiface_sample, 1);
+ s->sample = sample;
+ s->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, sample->index);
+
+ return s;
+}
+
+void pa_dbusiface_sample_free(pa_dbusiface_sample *s) {
+ pa_assert(s);
+
+ pa_xfree(s->path);
+ pa_xfree(s);
+}
+
+const char *pa_dbusiface_sample_get_path(pa_dbusiface_sample *s) {
+ pa_assert(s);
+
+ return s->path;
+}
diff --git a/src/modules/dbus/iface-sample.h b/src/modules/dbus/iface-sample.h
new file mode 100644
index 0000000..1b85404
--- /dev/null
+++ b/src/modules/dbus/iface-sample.h
@@ -0,0 +1,40 @@
+#ifndef foodbusifacesamplehfoo
+#define foodbusifacesamplehfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Sample.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Sample interface
+ * documentation.
+ */
+
+#include <pulsecore/core-scache.h>
+
+typedef struct pa_dbusiface_sample pa_dbusiface_sample;
+
+pa_dbusiface_sample *pa_dbusiface_sample_new(pa_scache_entry *sample, const char *path_prefix);
+void pa_dbusiface_sample_free(pa_dbusiface_sample *c);
+
+const char *pa_dbusiface_sample_get_path(pa_dbusiface_sample *c);
+
+#endif
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
new file mode 100644
index 0000000..1d9ffee
--- /dev/null
+++ b/src/modules/dbus/iface-stream.c
@@ -0,0 +1,91 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pulsecore/core-util.h>
+
+#include "iface-stream.h"
+
+#define PLAYBACK_OBJECT_NAME "playback_stream"
+#define RECORD_OBJECT_NAME "record_stream"
+
+enum stream_type {
+ STREAM_TYPE_PLAYBACK,
+ STREAM_TYPE_RECORD
+};
+
+struct pa_dbusiface_stream {
+ union {
+ pa_sink_input *sink_input;
+ pa_source_output *source_output;
+ };
+ enum stream_type type;
+ char *path;
+};
+
+pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_sink_input *sink_input, const char *path_prefix) {
+ pa_dbusiface_stream *s;
+
+ pa_assert(sink_input);
+ pa_assert(path_prefix);
+
+ s = pa_xnew(pa_dbusiface_stream, 1);
+ s->sink_input = pa_sink_input_ref(sink_input);
+ s->type = STREAM_TYPE_PLAYBACK;
+ s->path = pa_sprintf_malloc("%s/%s%u", path_prefix, PLAYBACK_OBJECT_NAME, sink_input->index);
+
+ return s;
+}
+
+pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_source_output *source_output, const char *path_prefix) {
+ pa_dbusiface_stream *s;
+
+ pa_assert(source_output);
+ pa_assert(path_prefix);
+
+ s = pa_xnew(pa_dbusiface_stream, 1);
+ s->source_output = pa_source_output_ref(source_output);
+ s->type = STREAM_TYPE_RECORD;
+ s->path = pa_sprintf_malloc("%s/%s%u", path_prefix, RECORD_OBJECT_NAME, source_output->index);
+
+ return s;
+}
+
+void pa_dbusiface_stream_free(pa_dbusiface_stream *s) {
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ pa_sink_input_unref(s->sink_input);
+ else
+ pa_source_output_unref(s->source_output);
+
+ pa_xfree(s->path);
+ pa_xfree(s);
+}
+
+const char *pa_dbusiface_stream_get_path(pa_dbusiface_stream *s) {
+ pa_assert(s);
+
+ return s->path;
+}
diff --git a/src/modules/dbus/iface-stream.h b/src/modules/dbus/iface-stream.h
new file mode 100644
index 0000000..cc2f3d6
--- /dev/null
+++ b/src/modules/dbus/iface-stream.h
@@ -0,0 +1,42 @@
+#ifndef foodbusifacestreamhfoo
+#define foodbusifacestreamhfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Stream.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Stream interface
+ * documentation.
+ */
+
+#include <pulsecore/sink-input.h>
+#include <pulsecore/source-output.h>
+
+typedef struct pa_dbusiface_stream pa_dbusiface_stream;
+
+pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_sink_input *sink_input, const char *path_prefix);
+pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_source_output *source_output, const char *path_prefix);
+void pa_dbusiface_stream_free(pa_dbusiface_stream *s);
+
+const char *pa_dbusiface_stream_get_path(pa_dbusiface_stream *s);
+
+#endif
diff --git a/src/modules/dbus/module-dbus-protocol.c b/src/modules/dbus/module-dbus-protocol.c
new file mode 100644
index 0000000..807d32d
--- /dev/null
+++ b/src/modules/dbus/module-dbus-protocol.c
@@ -0,0 +1,580 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+ Copyright 2006 Lennart Poettering
+ Copyright 2006 Shams E. King
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulse/mainloop-api.h>
+#include <pulse/timeval.h>
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/client.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/idxset.h>
+#include <pulsecore/macro.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/module.h>
+#include <pulsecore/protocol-dbus.h>
+
+#include "iface-core.h"
+
+#include "module-dbus-protocol-symdef.h"
+
+PA_MODULE_DESCRIPTION("D-Bus interface");
+PA_MODULE_USAGE(
+ "access=local|remote|local,remote "
+ "tcp_port=<port number>");
+PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_AUTHOR("Tanu Kaskinen");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+
+#define CLEANUP_INTERVAL 10 /* seconds */
+
+enum server_type {
+ SERVER_TYPE_LOCAL,
+ SERVER_TYPE_TCP
+};
+
+struct server;
+struct connection;
+
+struct userdata {
+ pa_module *module;
+ pa_bool_t local_access;
+ pa_bool_t remote_access;
+ uint32_t tcp_port;
+
+ struct server *local_server;
+ struct server *tcp_server;
+
+ pa_idxset *connections;
+
+ pa_time_event *cleanup_event;
+
+ pa_dbus_protocol *dbus_protocol;
+ pa_dbusiface_core *core_iface;
+};
+
+struct server {
+ struct userdata *userdata;
+ enum server_type type;
+ DBusServer *dbus_server;
+};
+
+struct connection {
+ struct server *server;
+ pa_dbus_wrap_connection *wrap_conn;
+ pa_client *client;
+};
+
+static const char* const valid_modargs[] = {
+ "access",
+ "tcp_port",
+ NULL
+};
+
+static void connection_free(struct connection *c) {
+ pa_assert(c);
+
+ pa_assert_se(pa_dbus_protocol_unregister_connection(c->server->userdata->dbus_protocol, pa_dbus_wrap_connection_get(c->wrap_conn)) >= 0);
+
+ pa_client_free(c->client);
+ pa_assert_se(pa_idxset_remove_by_data(c->server->userdata->connections, c, NULL));
+ pa_dbus_wrap_connection_free(c->wrap_conn);
+ pa_xfree(c);
+}
+
+/* Called from pa_client_kill(). */
+static void client_kill_cb(pa_client *c) {
+ struct connection *conn;
+
+ pa_assert(c);
+ pa_assert(c->userdata);
+
+ conn = c->userdata;
+ connection_free(conn);
+
+ pa_log_info("Connection killed.");
+}
+
+static dbus_bool_t user_check_cb(DBusConnection *connection, unsigned long uid, void *data) {
+ pa_log_debug("Allowing connection by user %lu.", uid);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a new client connection is received. */
+static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_connection, void *data) {
+ struct server *s = data;
+ struct connection *c;
+ pa_client_new_data new_data;
+ pa_client *client;
+
+ pa_assert(new_connection);
+ pa_assert(s);
+
+ pa_client_new_data_init(&new_data);
+ new_data.module = s->userdata->module;
+ new_data.driver = __FILE__;
+ pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: It's probably possible to generate a fancier name. Other props? */
+ client = pa_client_new(s->userdata->module->core, &new_data);
+ pa_client_new_data_done(&new_data);
+
+ if (!client) {
+ dbus_connection_close(new_connection);
+ return;
+ }
+
+ if (s->type == SERVER_TYPE_TCP || s->userdata->module->core->server_type == PA_SERVER_TYPE_SYSTEM) {
+ /* FIXME: Here we allow anyone from anywhere to access the server,
+ * anonymously. Access control should be configurable. */
+ dbus_connection_set_unix_user_function(new_connection, user_check_cb, NULL, NULL);
+ dbus_connection_set_allow_anonymous(new_connection, TRUE);
+ }
+
+ c = pa_xnew(struct connection, 1);
+ c->server = s;
+ c->wrap_conn = pa_dbus_wrap_connection_new_from_existing(s->userdata->module->core->mainloop, TRUE, new_connection);
+ c->client = client;
+
+ c->client->kill = client_kill_cb;
+ c->client->send_event = NULL; /* TODO: Implement this. */
+ c->client->userdata = c;
+
+ pa_idxset_put(s->userdata->connections, c, NULL);
+
+ pa_assert_se(pa_dbus_protocol_register_connection(s->userdata->dbus_protocol, new_connection, c->client) >= 0);
+}
+
+/* Called by PA mainloop when a D-Bus fd watch event needs handling. */
+static void io_event_cb(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
+ unsigned int flags = 0;
+ DBusWatch *watch = userdata;
+
+#if HAVE_DBUS_WATCH_GET_UNIX_FD
+ pa_assert(fd == dbus_watch_get_unix_fd(watch));
+#else
+ pa_assert(fd == dbus_watch_get_fd(watch));
+#endif
+
+ if (!dbus_watch_get_enabled(watch)) {
+ pa_log_warn("Asked to handle disabled watch: %p %i", (void*) watch, fd);
+ return;
+ }
+
+ if (events & PA_IO_EVENT_INPUT)
+ flags |= DBUS_WATCH_READABLE;
+ if (events & PA_IO_EVENT_OUTPUT)
+ flags |= DBUS_WATCH_WRITABLE;
+ if (events & PA_IO_EVENT_HANGUP)
+ flags |= DBUS_WATCH_HANGUP;
+ if (events & PA_IO_EVENT_ERROR)
+ flags |= DBUS_WATCH_ERROR;
+
+ dbus_watch_handle(watch, flags);
+}
+
+/* Called by PA mainloop when a D-Bus timer event needs handling. */
+static void time_event_cb(pa_mainloop_api *mainloop, pa_time_event* e, const struct timeval *tv, void *userdata) {
+ DBusTimeout *timeout = userdata;
+
+ if (dbus_timeout_get_enabled(timeout)) {
+ struct timeval next = *tv;
+ dbus_timeout_handle(timeout);
+
+ /* restart it for the next scheduled time */
+ pa_timeval_add(&next, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+ mainloop->time_restart(e, &next);
+ }
+}
+
+/* Translates D-Bus fd watch event flags to PA IO event flags. */
+static pa_io_event_flags_t get_watch_flags(DBusWatch *watch) {
+ unsigned int flags;
+ pa_io_event_flags_t events = 0;
+
+ pa_assert(watch);
+
+ flags = dbus_watch_get_flags(watch);
+
+ /* no watch flags for disabled watches */
+ if (!dbus_watch_get_enabled(watch))
+ return PA_IO_EVENT_NULL;
+
+ if (flags & DBUS_WATCH_READABLE)
+ events |= PA_IO_EVENT_INPUT;
+ if (flags & DBUS_WATCH_WRITABLE)
+ events |= PA_IO_EVENT_OUTPUT;
+
+ return events | PA_IO_EVENT_HANGUP | PA_IO_EVENT_ERROR;
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is added. */
+static dbus_bool_t watch_add_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ ev = mainloop->io_new(
+ mainloop,
+#if HAVE_DBUS_WATCH_GET_UNIX_FD
+ dbus_watch_get_unix_fd(watch),
+#else
+ dbus_watch_get_fd(watch),
+#endif
+ get_watch_flags(watch), io_event_cb, watch);
+
+ dbus_watch_set_data(watch, ev, NULL);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is removed. */
+static void watch_remove_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ if ((ev = dbus_watch_get_data(watch)))
+ s->userdata->module->core->mainloop->io_free(ev);
+}
+
+/* Called by D-Bus when a D-Bus fd watch event is toggled. */
+static void watch_toggled_cb(DBusWatch *watch, void *data) {
+ struct server *s = data;
+ pa_io_event *ev;
+
+ pa_assert(watch);
+ pa_assert(s);
+
+ pa_assert_se(ev = dbus_watch_get_data(watch));
+
+ /* get_watch_flags() checks if the watch is enabled */
+ s->userdata->module->core->mainloop->io_enable(ev, get_watch_flags(watch));
+}
+
+/* Called by D-Bus when a D-Bus timer event is added. */
+static dbus_bool_t timeout_add_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_time_event *ev;
+ struct timeval tv;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ if (!dbus_timeout_get_enabled(timeout))
+ return FALSE;
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ pa_gettimeofday(&tv);
+ pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+
+ ev = mainloop->time_new(mainloop, &tv, time_event_cb, timeout);
+
+ dbus_timeout_set_data(timeout, ev, NULL);
+
+ return TRUE;
+}
+
+/* Called by D-Bus when a D-Bus timer event is removed. */
+static void timeout_remove_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_time_event *ev;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ if ((ev = dbus_timeout_get_data(timeout)))
+ s->userdata->module->core->mainloop->time_free(ev);
+}
+
+/* Called by D-Bus when a D-Bus timer event is toggled. */
+static void timeout_toggled_cb(DBusTimeout *timeout, void *data) {
+ struct server *s = data;
+ pa_mainloop_api *mainloop;
+ pa_time_event *ev;
+
+ pa_assert(timeout);
+ pa_assert(s);
+
+ mainloop = s->userdata->module->core->mainloop;
+
+ pa_assert_se(ev = dbus_timeout_get_data(timeout));
+
+ if (dbus_timeout_get_enabled(timeout)) {
+ struct timeval tv;
+
+ pa_gettimeofday(&tv);
+ pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
+
+ mainloop->time_restart(ev, &tv);
+ } else
+ mainloop->time_restart(ev, NULL);
+}
+
+static void server_free(struct server *s) {
+ pa_assert(s);
+
+ if (s->dbus_server) {
+ dbus_server_disconnect(s->dbus_server);
+ dbus_server_unref(s->dbus_server);
+ }
+
+ pa_xfree(s);
+}
+
+static struct server *start_server(struct userdata *u, const char *address, enum server_type type) {
+ /* XXX: We assume that when we unref the DBusServer instance at module
+ * shutdown, nobody else holds any references to it. If we stop assuming
+ * that someday, dbus_server_set_new_connection_function,
+ * dbus_server_set_watch_functions and dbus_server_set_timeout_functions
+ * calls should probably register free callbacks, instead of providing NULL
+ * as they do now. */
+
+ struct server *s = NULL;
+ DBusError error;
+
+ pa_assert(u);
+ pa_assert(address);
+
+ dbus_error_init(&error);
+
+ s = pa_xnew0(struct server, 1);
+ s->userdata = u;
+ s->dbus_server = dbus_server_listen(address, &error);
+
+ if (dbus_error_is_set(&error)) {
+ pa_log("dbus_server_listen() failed: %s: %s", error.name, error.message);
+ goto fail;
+ }
+
+ dbus_server_set_new_connection_function(s->dbus_server, connection_new_cb, s, NULL);
+
+ if (!dbus_server_set_watch_functions(s->dbus_server, watch_add_cb, watch_remove_cb, watch_toggled_cb, s, NULL)) {
+ pa_log("dbus_server_set_watch_functions() ran out of memory.");
+ goto fail;
+ }
+
+ if (!dbus_server_set_timeout_functions(s->dbus_server, timeout_add_cb, timeout_remove_cb, timeout_toggled_cb, s, NULL)) {
+ pa_log("dbus_server_set_timeout_functions() ran out of memory.");
+ goto fail;
+ }
+
+ return s;
+
+fail:
+ if (s)
+ server_free(s);
+
+ dbus_error_free(&error);
+
+ return NULL;
+}
+
+static struct server *start_local_server(struct userdata *u) {
+ struct server *s = NULL;
+ char *address = NULL;
+
+ pa_assert(u);
+
+ address = pa_get_dbus_address_from_server_type(u->module->core->server_type);
+
+ s = start_server(u, address, SERVER_TYPE_LOCAL); /* May return NULL */
+
+ pa_xfree(address);
+
+ return s;
+}
+
+static struct server *start_tcp_server(struct userdata *u) {
+ struct server *s = NULL;
+ char *address = NULL;
+
+ pa_assert(u);
+
+ address = pa_sprintf_malloc("tcp:host=127.0.0.1,port=%u", u->tcp_port);
+
+ s = start_server(u, address, SERVER_TYPE_TCP); /* May return NULL */
+
+ pa_xfree(address);
+
+ return s;
+}
+
+static int get_access_arg(pa_modargs *ma, pa_bool_t *local_access, pa_bool_t *remote_access) {
+ const char *value = NULL;
+
+ pa_assert(ma);
+ pa_assert(local_access);
+ pa_assert(remote_access);
+
+ if (!(value = pa_modargs_get_value(ma, "access", NULL)))
+ return 0;
+
+ if (!strcmp(value, "local")) {
+ *local_access = TRUE;
+ *remote_access = FALSE;
+ } else if (!strcmp(value, "remote")) {
+ *local_access = FALSE;
+ *remote_access = TRUE;
+ } else if (!strcmp(value, "local,remote")) {
+ *local_access = TRUE;
+ *remote_access = TRUE;
+ } else
+ return -1;
+
+ return 0;
+}
+
+/* Frees dead client connections. Called every CLEANUP_INTERVAL seconds. */
+static void cleanup_cb(pa_mainloop_api *a, pa_time_event *e, const struct timeval *tv, void *userdata) {
+ struct userdata *u = userdata;
+ struct connection *conn = NULL;
+ uint32_t idx;
+ struct timeval cleanup_timeval;
+ unsigned free_count = 0;
+
+ for (conn = pa_idxset_first(u->connections, &idx); conn; conn = pa_idxset_next(u->connections, &idx)) {
+ if (!dbus_connection_get_is_connected(pa_dbus_wrap_connection_get(conn->wrap_conn))) {
+ connection_free(conn);
+ ++free_count;
+ }
+ }
+
+ if (free_count > 0)
+ pa_log_debug("Freed %u dead D-Bus client connections.", free_count);
+
+ pa_gettimeofday(&cleanup_timeval);
+ cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
+ u->module->core->mainloop->time_restart(e, &cleanup_timeval);
+}
+
+int pa__init(pa_module *m) {
+ struct userdata *u = NULL;
+ pa_modargs *ma = NULL;
+ struct timeval cleanup_timeval;
+
+ 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;
+ u->local_access = TRUE;
+ u->remote_access = FALSE;
+ u->tcp_port = PA_DBUS_DEFAULT_PORT;
+
+ if (get_access_arg(ma, &u->local_access, &u->remote_access) < 0) {
+ pa_log("Invalid access argument: '%s'", pa_modargs_get_value(ma, "access", NULL));
+ goto fail;
+ }
+
+ if (pa_modargs_get_value_u32(ma, "tcp_port", &u->tcp_port) < 0 || u->tcp_port < 1 || u->tcp_port > 49150) {
+ pa_log("Invalid tcp_port argument: '%s'", pa_modargs_get_value(ma, "tcp_port", NULL));
+ goto fail;
+ }
+
+ if (u->local_access && !(u->local_server = start_local_server(u))) {
+ pa_log("Starting the local D-Bus server failed.");
+ goto fail;
+ }
+
+ if (u->remote_access && !(u->tcp_server = start_tcp_server(u))) {
+ pa_log("Starting the D-Bus server for remote connections failed.");
+ goto fail;
+ }
+
+ u->connections = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+
+ pa_gettimeofday(&cleanup_timeval);
+ cleanup_timeval.tv_sec += CLEANUP_INTERVAL;
+ u->cleanup_event = m->core->mainloop->time_new(m->core->mainloop, &cleanup_timeval, cleanup_cb, u);
+
+ u->dbus_protocol = pa_dbus_protocol_get(m->core);
+ u->core_iface = pa_dbusiface_core_new(m->core);
+
+ return 0;
+
+fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa__done(m);
+
+ return -1;
+}
+
+/* Called by idxset when the connection set is freed. */
+static void connection_free_cb(void *p, void *userdata) {
+ struct connection *conn = p;
+
+ pa_assert(conn);
+
+ connection_free(conn);
+}
+
+void pa__done(pa_module *m) {
+ struct userdata *u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ if (u->core_iface)
+ pa_dbusiface_core_free(u->core_iface);
+
+ if (u->cleanup_event)
+ m->core->mainloop->time_free(u->cleanup_event);
+
+ if (u->connections)
+ pa_idxset_free(u->connections, connection_free_cb, NULL);
+
+ if (u->tcp_server)
+ server_free(u->tcp_server);
+
+ if (u->local_server)
+ server_free(u->local_server);
+
+ if (u->dbus_protocol)
+ pa_dbus_protocol_unref(u->dbus_protocol);
+
+ pa_xfree(u);
+ m->userdata = NULL;
+}
commit 018810ec9a96d63446bdc9a82d6c931779f7a97d
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Jul 27 20:01:39 2009 +0300
Bug fixing and minor cleanups.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 31f1260..d17499c 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -220,7 +220,7 @@ static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
.receive_cb = handle_upload_sample },
[METHOD_HANDLER_LOAD_MODULE] = {
.method_name = "LoadModule",
- .arguments = upload_sample_args,
+ .arguments = load_module_args,
.n_arguments = sizeof(load_module_args) / sizeof(pa_dbus_arg_info),
.receive_cb = handle_load_module },
[METHOD_HANDLER_EXIT] = {
@@ -424,11 +424,8 @@ static void handle_get_default_channels(DBusConnection *conn, DBusMessage *msg,
static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_core *c = userdata;
pa_channel_map new_channel_map;
- DBusMessageIter msg_iter;
- DBusMessageIter variant_iter;
- DBusMessageIter array_iter;
dbus_uint32_t *default_channels;
- int n_channels;
+ unsigned n_channels;
unsigned i;
pa_assert(conn);
@@ -437,37 +434,16 @@ static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg,
pa_channel_map_init(&new_channel_map);
- pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
-
- /* Skip the interface and property name arguments. */
- if (!dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ if (pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &default_channels, &n_channels) < 0)
return;
- }
-
- if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
- return;
- }
-
- dbus_message_iter_recurse(&msg_iter, &variant_iter);
-
- if (dbus_message_iter_get_arg_type(&variant_iter) != DBUS_TYPE_ARRAY) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Variant doesn't contain an array.");
- return;
- }
- dbus_message_iter_recurse(&variant_iter, &array_iter);
-
- if (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_UINT32) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Array type is not uint32.");
+ if (n_channels <= 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty channel array.");
return;
}
- dbus_message_iter_get_fixed_array(&array_iter, &default_channels, &n_channels);
-
- if (n_channels <= 0) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty channel array.");
+ if (n_channels > PA_CHANNELS_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too many channels: %u. The maximum number of channels is %u.", n_channels, PA_CHANNELS_MAX);
return;
}
@@ -475,7 +451,7 @@ static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg,
for (i = 0; i < new_channel_map.channels; ++i) {
if (default_channels[i] >= PA_CHANNEL_POSITION_MAX) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid channel position.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid channel position: %u.", default_channels[i]);
return;
}
@@ -547,7 +523,7 @@ static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *ms
return;
if (default_sample_rate <= 0 || default_sample_rate > PA_RATE_MAX) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample format.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample rate.");
return;
}
@@ -1149,7 +1125,7 @@ static void handle_get_card_by_name(DBusConnection *conn, DBusMessage *msg, void
dbus_error_init(&error);
if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &card_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
@@ -1181,7 +1157,7 @@ static void handle_get_sink_by_name(DBusConnection *conn, DBusMessage *msg, void
dbus_error_init(&error);
if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &sink_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
@@ -1213,7 +1189,7 @@ static void handle_get_source_by_name(DBusConnection *conn, DBusMessage *msg, vo
dbus_error_init(&error);
if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &source_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
@@ -1245,7 +1221,7 @@ static void handle_get_sample_by_name(DBusConnection *conn, DBusMessage *msg, vo
dbus_error_init(&error);
if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &sample_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
@@ -1433,6 +1409,7 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
pa_dbusiface_core *c = userdata;
DBusMessageIter msg_iter;
DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
char *name;
const char *key;
const char *value;
@@ -1441,6 +1418,7 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
pa_module *module;
pa_dbusiface_module *dbus_module;
const char *object_path;
+ int arg_type;
pa_assert(conn);
pa_assert(msg);
@@ -1459,13 +1437,18 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
return;
- if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_ARRAY) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments. An array was expected.");
+ arg_type = dbus_message_iter_get_arg_type(&msg_iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. A dictionary from strings to strings was expected.");
+ else
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An dictionary from strings to strings was expected.", (char) arg_type);
return;
}
- if (dbus_message_iter_get_element_type(&msg_iter) != DBUS_TYPE_DICT_ENTRY) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type. A dict entry was expected.");
+ arg_type = dbus_message_iter_get_element_type(&msg_iter);
+ if (arg_type != DBUS_TYPE_DICT_ENTRY) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A dict entry (string to string) was expected.", (char) arg_type);
return;
}
@@ -1473,28 +1456,38 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
dbus_message_iter_recurse(&msg_iter, &dict_iter);
- while (dbus_message_iter_has_next(&dict_iter)) {
+ while (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID) {
if (!pa_strbuf_isempty(arg_buffer))
pa_strbuf_putc(arg_buffer, ' ');
- if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_STRING) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type. A string was expected.");
+ dbus_message_iter_recurse(&dict_iter, &dict_entry_iter);
+
+ arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_STRING) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
goto finish;
}
- dbus_message_iter_get_basic(&dict_iter, &key);
+ dbus_message_iter_get_basic(&dict_entry_iter, &key);
+ dbus_message_iter_next(&dict_entry_iter);
if (strlen(key) <= 0 || !pa_ascii_valid(key) || contains_space(key)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid module argument name.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid module argument name: %s", key);
goto finish;
}
- if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_STRING) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type. A string was expected.");
+ arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_STRING) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Dict value missing.");
+ else
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type: '%c'. A string was expected.", (char) arg_type);
goto finish;
}
- dbus_message_iter_get_basic(&dict_iter, &value);
+ dbus_message_iter_get_basic(&dict_entry_iter, &value);
+
+ dbus_message_iter_next(&dict_iter);
escaped_value = pa_escape(value, "\"");
pa_strbuf_printf(arg_buffer, "%s=\"%s\"", key, escaped_value);
@@ -1549,7 +1542,7 @@ static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, voi
dbus_error_init(&error);
if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &signal, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
goto finish;
}
@@ -1574,7 +1567,7 @@ static void handle_stop_listening_for_signal(DBusConnection *conn, DBusMessage *
dbus_error_init(&error);
if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &signal, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, error.message);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index cfc3e8c..43dbd6b 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -446,18 +446,25 @@ void pa_dbus_free_pending_list(pa_dbus_pending **p) {
}
}
-void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *message) {
+void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *format, ...) {
+ va_list ap;
+ char *message;
DBusMessage *reply = NULL;
pa_assert(c);
pa_assert(in_reply_to);
pa_assert(name);
- pa_assert(message);
+ pa_assert(format);
+ va_start(ap, format);
+ message = pa_vsprintf_malloc(format, ap);
+ va_end(ap);
pa_assert_se((reply = dbus_message_new_error(in_reply_to, name, message)));
pa_assert_se(dbus_connection_send(c, reply, NULL));
dbus_message_unref(reply);
+
+ pa_xfree(message);
}
void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to) {
@@ -655,36 +662,71 @@ int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int
dbus_message_iter_recurse(&msg_iter, &variant_iter);
- if (dbus_message_iter_get_arg_type(&variant_iter) != type) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Variant has wrong contained type.");
+ if (pa_dbus_get_basic_arg(c, msg, &variant_iter, type, data) < 0)
+ return -1;
+
+ return 0;
+}
+
+int pa_dbus_get_fixed_array_set_property_arg(DBusConnection *c, DBusMessage *msg, int item_type, void *data, unsigned *n) {
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(dbus_type_is_fixed(item_type));
+ pa_assert(data);
+ pa_assert(n);
+
+ /* Skip the interface and property name arguments. */
+ if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
return -1;
}
- dbus_message_iter_get_basic(&variant_iter, data);
+ if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
+ return -1;
+ }
+
+ dbus_message_iter_recurse(&msg_iter, &variant_iter);
+
+ if (pa_dbus_get_fixed_array_arg(c, msg, &variant_iter, item_type, data, n) < 0)
+ return -1;
return 0;
}
int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data) {
+ int arg_type;
+
pa_assert(c);
pa_assert(msg);
pa_assert(iter);
pa_assert(dbus_type_is_basic(type));
pa_assert(data);
- if (dbus_message_iter_get_arg_type(iter) != type) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments.");
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != type) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. D-Bus type '%c' expected.", (char) type);
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. Expected type '%c'.", (char) arg_type, (char) type);
return -1;
}
dbus_message_iter_get_basic(iter, data);
+ dbus_message_iter_next(iter);
+
return 0;
}
int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n) {
DBusMessageIter array_iter;
int signed_n;
+ int arg_type;
+ int element_type;
pa_assert(c);
pa_assert(msg);
@@ -693,13 +735,18 @@ int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessage
pa_assert(array);
pa_assert(n);
- if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments. An array was expected.");
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array of type '%c' was expected.", (char) item_type);
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array of type '%c' was expected.", (char) arg_type, (char) item_type);
return -1;
}
- if (dbus_message_iter_get_element_type(iter) != item_type) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type.");
+ element_type = dbus_message_iter_get_element_type(iter);
+ if (element_type != item_type) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. Element type '%c' was expected.", (char) element_type, (char) item_type);
return -1;
}
@@ -707,6 +754,8 @@ int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessage
dbus_message_iter_get_fixed_array(&array_iter, array, &signed_n);
+ dbus_message_iter_next(iter);
+
pa_assert(signed_n >= 0);
*n = signed_n;
@@ -769,6 +818,8 @@ pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusM
pa_assert_se(pa_proplist_set(proplist, key, value, value_length) >= 0);
}
+ dbus_message_iter_next(iter);
+
return proplist;
fail:
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 1a8aeac..97aae37 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -63,7 +63,7 @@ void pa_dbus_sync_pending_list(pa_dbus_pending **p);
void pa_dbus_free_pending_list(pa_dbus_pending **p);
/* Sends an error message as the reply to the given message. */
-void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *message);
+void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *format, ...) PA_GCC_PRINTF_ATTR(4, 5);
void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to);
void pa_dbus_send_basic_value_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
@@ -76,10 +76,11 @@ void pa_dbus_append_basic_variant(DBusMessageIter *iter, int type, void *data);
void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int type, void *data);
void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n);
-/* Helper function for extracting the value argument of a Set call for a
- * property with a basic type. If the message is invalid, an error reply is
- * sent and a negative number is returned. */
+/* Helper functions for extracting the value argument of a Set call. If the
+ * message is invalid, an error reply is sent and a negative number is
+ * returned. */
int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data);
+int pa_dbus_get_fixed_array_set_property_arg(DBusConnection *c, DBusMessage *msg, int item_type, void *data, unsigned *n);
/* If the arguments can't be read from the iterator, an error reply is sent and
* a negative number is returned. */
commit b061957e57f74d7aa51bde9d24dd5e5c75af9497
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Thu Jul 30 13:11:32 2009 +0300
dbus/iface-core.c: Make sure D-Bus objects are created only once.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index d17499c..cdfd2a3 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -1632,8 +1632,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_CARD:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- card = pa_dbusiface_card_new(pa_idxset_get_by_index(core->cards, idx), OBJECT_PATH);
- pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), card);
+ if (!(card = pa_hashmap_get(c->cards, PA_UINT32_TO_PTR(idx)))) {
+ card = pa_dbusiface_card_new(pa_idxset_get_by_index(core->cards, idx), OBJECT_PATH);
+ pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), card);
+ }
object_path = pa_dbusiface_card_get_path(card);
@@ -1654,11 +1656,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SINK:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- device = pa_dbusiface_device_new_sink(pa_idxset_get_by_index(core->sinks, idx), OBJECT_PATH);
- object_path = pa_dbusiface_device_get_path(device);
+ if (!(device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(idx)))) {
+ device = pa_dbusiface_device_new_sink(pa_idxset_get_by_index(core->sinks, idx), OBJECT_PATH);
+ pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
+ pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
+ }
- pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
- pa_hashmap_put(c->sinks_by_path, object_path, device);
+ object_path = pa_dbusiface_device_get_path(device);
pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SINK].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
@@ -1677,11 +1681,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SOURCE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- device = pa_dbusiface_device_new_source(pa_idxset_get_by_index(core->sources, idx), OBJECT_PATH);
- object_path = pa_dbusiface_device_get_path(device);
+ if (!(device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(idx)))) {
+ device = pa_dbusiface_device_new_source(pa_idxset_get_by_index(core->sources, idx), OBJECT_PATH);
+ pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
+ pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
+ }
- pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
- pa_hashmap_put(c->sources_by_path, object_path, device);
+ object_path = pa_dbusiface_device_get_path(device);
pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SOURCE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
@@ -1700,8 +1706,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- stream = pa_dbusiface_stream_new_playback(pa_idxset_get_by_index(core->sink_inputs, idx), OBJECT_PATH);
- pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), stream);
+ if (!(stream = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(idx)))) {
+ stream = pa_dbusiface_stream_new_playback(pa_idxset_get_by_index(core->sink_inputs, idx), OBJECT_PATH);
+ pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), stream);
+ }
object_path = pa_dbusiface_stream_get_path(stream);
@@ -1722,8 +1730,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- stream = pa_dbusiface_stream_new_record(pa_idxset_get_by_index(core->source_outputs, idx), OBJECT_PATH);
- pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), stream);
+ if (!(stream = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(idx)))) {
+ stream = pa_dbusiface_stream_new_record(pa_idxset_get_by_index(core->source_outputs, idx), OBJECT_PATH);
+ pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), stream);
+ }
object_path = pa_dbusiface_stream_get_path(stream);
@@ -1744,8 +1754,6 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- /* We may have created the pa_dbusiface_sample object already
- * in handle_upload_sample. */
if (!(sample = pa_hashmap_get(c->samples, PA_UINT32_TO_PTR(idx)))) {
sample = pa_dbusiface_sample_new(pa_idxset_get_by_index(core->scache, idx), OBJECT_PATH);
pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), sample);
@@ -1770,8 +1778,6 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_MODULE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- /* We may have created the pa_dbusiface_module object already
- * in handle_load_module. */
if (!(module = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(idx)))) {
module = pa_dbusiface_module_new(pa_idxset_get_by_index(core->modules, idx), OBJECT_PATH);
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), module);
@@ -1796,8 +1802,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_CLIENT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- client = pa_dbusiface_client_new(pa_idxset_get_by_index(core->clients, idx), OBJECT_PATH);
- pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), client);
+ if (!(client = pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(idx)))) {
+ client = pa_dbusiface_client_new(pa_idxset_get_by_index(core->clients, idx), OBJECT_PATH);
+ pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), client);
+ }
object_path = pa_dbusiface_client_get_path(client);
commit c354a08fe3cf2468688264124b763efb1bf1df85
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Jul 31 12:05:49 2009 +0300
dbus-protocol: Implement extension registration.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index fb7d168..81a6c02 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -41,7 +41,9 @@ struct pa_dbus_protocol {
pa_core *core;
pa_hashmap *objects; /* Object path -> struct object_entry */
pa_hashmap *connections; /* DBusConnection -> struct connection_entry */
- pa_hashmap *extensions; /* String -> anything */
+ pa_idxset *extensions; /* Strings */
+
+ pa_hook hooks[PA_DBUS_PROTOCOL_HOOK_MAX];
};
struct object_entry {
@@ -109,6 +111,7 @@ char *pa_get_dbus_address_from_server_type(pa_server_type_t server_type) {
static pa_dbus_protocol *dbus_protocol_new(pa_core *c) {
pa_dbus_protocol *p;
+ unsigned i;
pa_assert(c);
@@ -117,7 +120,10 @@ static pa_dbus_protocol *dbus_protocol_new(pa_core *c) {
p->core = c;
p->objects = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
p->connections = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
- p->extensions = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ p->extensions = pa_idxset_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ for (i = 0; i < PA_DBUS_PROTOCOL_HOOK_MAX; ++i)
+ pa_hook_init(&p->hooks[i], p);
pa_assert_se(pa_shared_set(c, "dbus-protocol", p) >= 0);
@@ -143,6 +149,8 @@ pa_dbus_protocol* pa_dbus_protocol_ref(pa_dbus_protocol *p) {
}
void pa_dbus_protocol_unref(pa_dbus_protocol *p) {
+ unsigned i;
+
pa_assert(p);
pa_assert(PA_REFCNT_VALUE(p) >= 1);
@@ -151,11 +159,14 @@ void pa_dbus_protocol_unref(pa_dbus_protocol *p) {
pa_assert(pa_hashmap_isempty(p->objects));
pa_assert(pa_hashmap_isempty(p->connections));
- pa_assert(pa_hashmap_isempty(p->extensions));
+ pa_assert(pa_idxset_isempty(p->extensions));
pa_hashmap_free(p->objects, NULL, NULL);
pa_hashmap_free(p->connections, NULL, NULL);
- pa_hashmap_free(p->extensions, NULL, NULL);
+ pa_idxset_free(p->extensions, NULL, NULL);
+
+ for (i = 0; i < PA_DBUS_PROTOCOL_HOOK_MAX; ++i)
+ pa_hook_done(&p->hooks[i]);
pa_assert_se(pa_shared_remove(p->core, "dbus-protocol") >= 0);
@@ -660,6 +671,8 @@ static void property_handler_free_cb(void *p, void *userdata) {
pa_xfree((char *) h->property_name);
pa_xfree((char *) h->type);
+
+ pa_xfree(h);
}
int pa_dbus_protocol_remove_interface(pa_dbus_protocol *p, const char* path, const char* interface) {
@@ -792,6 +805,18 @@ int pa_dbus_protocol_unregister_connection(pa_dbus_protocol *p, DBusConnection *
return 0;
}
+pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn) {
+ struct connection_entry *conn_entry;
+
+ pa_assert(p);
+ pa_assert(conn);
+
+ if (!(conn_entry = pa_hashmap_get(p->connections, conn)))
+ return NULL;
+
+ return conn_entry->client;
+}
+
void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal, char **objects, unsigned n_objects) {
struct connection_entry *conn_entry;
pa_idxset *object_set;
@@ -893,18 +918,6 @@ void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
}
}
-pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn) {
- struct connection_entry *conn_entry;
-
- pa_assert(p);
- pa_assert(conn);
-
- if (!(conn_entry = pa_hashmap_get(p->connections, conn)))
- return NULL;
-
- return conn_entry->client;
-}
-
const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n) {
const char **extensions;
const char *ext_name;
@@ -914,17 +927,59 @@ const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n) {
pa_assert(p);
pa_assert(n);
- *n = pa_hashmap_size(p->extensions);
+ *n = pa_idxset_size(p->extensions);
if (*n <= 0)
return NULL;
extensions = pa_xnew(const char *, *n);
- while (pa_hashmap_iterate(p->extensions, &state, (const void **) &ext_name)) {
+ while ((ext_name = pa_idxset_iterate(p->extensions, &state, NULL))) {
extensions[i] = ext_name;
++i;
}
return extensions;
}
+
+int pa_dbus_protocol_register_extension(pa_dbus_protocol *p, const char *name) {
+ char *internal_name;
+
+ pa_assert(p);
+ pa_assert(name);
+
+ internal_name = pa_xstrdup(name);
+
+ if (pa_idxset_put(p->extensions, internal_name, NULL) < 0) {
+ pa_xfree(internal_name);
+ return -1;
+ }
+
+ pa_hook_fire(&p->hooks[PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED], internal_name);
+
+ return 0;
+}
+
+int pa_dbus_protocol_unregister_extension(pa_dbus_protocol *p, const char *name) {
+ char *internal_name;
+
+ pa_assert(p);
+ pa_assert(name);
+
+ if (!(internal_name = pa_idxset_remove_by_data(p->extensions, name, NULL)))
+ return -1;
+
+ pa_hook_fire(&p->hooks[PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED], internal_name);
+
+ pa_xfree(internal_name);
+
+ return 0;
+}
+
+pa_hook_slot *pa_dbus_protocol_hook_connect(pa_dbus_protocol *p, pa_dbus_protocol_hook_t hook, pa_hook_priority_t prio, pa_hook_cb_t cb, void *data) {
+ pa_assert(p);
+ pa_assert(hook < PA_DBUS_PROTOCOL_HOOK_MAX);
+ pa_assert(cb);
+
+ return pa_hook_connect(&p->hooks[hook], prio, cb, data);
+}
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
index 27198f4..f2b1b50 100644
--- a/src/pulsecore/protocol-dbus.h
+++ b/src/pulsecore/protocol-dbus.h
@@ -119,9 +119,12 @@ int pa_dbus_protocol_remove_interface(pa_dbus_protocol *p, const char* path, con
* registered. */
int pa_dbus_protocol_register_connection(pa_dbus_protocol *p, DBusConnection *conn, pa_client *client);
-/* Returns a negative number if the connection wasn't registered. */
+/* Returns a negative number if the connection isn't registered. */
int pa_dbus_protocol_unregister_connection(pa_dbus_protocol *p, DBusConnection *conn);
+/* Returns NULL if the connection isn't registered. */
+pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn);
+
/* Enables signal receiving for the given connection. The connection must have
* been registered earlier.
*
@@ -145,9 +148,6 @@ void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection
void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal);
-/* Returns NULL if the connection isn't registered. */
-pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn);
-
/* Returns an array of extension identifier strings. The strings pointers point
* to the internal copies, so don't free the strings. The caller must free the
* array, however. Also, do not save the returned pointer or any of the string
@@ -155,4 +155,35 @@ pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn
* need to save the array, copy it. */
const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n);
+/* Modules that want to provide a D-Bus interface for clients should register
+ * an identifier that the clients can use to check whether the additional
+ * functionality is available.
+ *
+ * This function registers the extension with the given name. It is recommended
+ * that the name follows the D-Bus interface naming convention, so that the
+ * names remain unique in case there will be at some point in the future
+ * extensions that aren't included with the main PulseAudio source tree. For
+ * in-tree extensions the convention is to use the org.PulseAudio.Ext
+ * namespace.
+ *
+ * It is suggested that the name contains a version number, and whenever the
+ * extension interface is modified in non-backwards compatible way, the version
+ * number is incremented.
+ *
+ * Fails and returns a negative number if the extension is already registered.
+ */
+int pa_dbus_protocol_register_extension(pa_dbus_protocol *p, const char *name);
+
+/* Returns a negative number if the extension isn't registered. */
+int pa_dbus_protocol_unregister_extension(pa_dbus_protocol *p, const char *name);
+
+/* All hooks have the pa_dbus_protocol object as hook data. */
+typedef enum pa_dbus_protocol_hook {
+ PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED, /* Extension name as call data. */
+ PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED, /* Extension name as call data. */
+ PA_DBUS_PROTOCOL_HOOK_MAX
+} pa_dbus_protocol_hook_t;
+
+pa_hook_slot *pa_dbus_protocol_hook_connect(pa_dbus_protocol *p, pa_dbus_protocol_hook_t hook, pa_hook_priority_t prio, pa_hook_cb_t cb, void *data);
+
#endif
commit 68cb63c0d9b1493ebc4274f9ea1fb05a8c273574
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Jul 31 12:06:53 2009 +0300
dbusiface-core: Send signals whenever extensions are registered and unregistered.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index cdfd2a3..e2e3be2 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -112,6 +112,9 @@ struct pa_dbusiface_core {
pa_sink *fallback_sink;
pa_source *fallback_source;
+
+ pa_hook_slot *extension_registered_slot;
+ pa_hook_slot *extension_unregistered_slot;
};
enum property_handler_index {
@@ -259,6 +262,8 @@ enum signal_index {
SIGNAL_MODULE_REMOVED,
SIGNAL_NEW_CLIENT,
SIGNAL_CLIENT_REMOVED,
+ SIGNAL_NEW_EXTENSION,
+ SIGNAL_EXTENSION_REMOVED,
SIGNAL_MAX
};
@@ -280,6 +285,8 @@ static pa_dbus_arg_info new_module_args[] = { { "module",
static pa_dbus_arg_info module_removed_args[] = { { "module", "o", NULL } };
static pa_dbus_arg_info new_client_args[] = { { "client", "o", NULL } };
static pa_dbus_arg_info client_removed_args[] = { { "client", "o", NULL } };
+static pa_dbus_arg_info new_extension_args[] = { { "extension", "s", NULL } };
+static pa_dbus_arg_info extension_removed_args[] = { { "extension", "s", NULL } };
static pa_dbus_signal_info signals[SIGNAL_MAX] = {
[SIGNAL_NEW_CARD] = { .name = "NewCard", .arguments = new_card_args, .n_arguments = 1 },
@@ -300,6 +307,8 @@ static pa_dbus_signal_info signals[SIGNAL_MAX] = {
[SIGNAL_MODULE_REMOVED] = { .name = "ModuleRemoved", .arguments = module_removed_args, .n_arguments = 1 },
[SIGNAL_NEW_CLIENT] = { .name = "NewClient", .arguments = new_client_args, .n_arguments = 1 },
[SIGNAL_CLIENT_REMOVED] = { .name = "ClientRemoved", .arguments = client_removed_args, .n_arguments = 1 },
+ [SIGNAL_NEW_EXTENSION] = { .name = "NewExtension", .arguments = new_extension_args, .n_arguments = 1 },
+ [SIGNAL_EXTENSION_REMOVED] = { .name = "ExtensionRemoved", .arguments = extension_removed_args, .n_arguments = 1 }
};
static pa_dbus_interface_info core_interface_info = {
@@ -1831,6 +1840,40 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
}
}
+static pa_hook_result_t extension_registered_cb(void *hook_data, void *call_data, void *slot_data) {
+ pa_dbusiface_core *c = slot_data;
+ const char *ext_name = call_data;
+ DBusMessage *signal = NULL;
+
+ pa_assert(c);
+ pa_assert(ext_name);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_EXTENSION].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t extension_unregistered_cb(void *hook_data, void *call_data, void *slot_data) {
+ pa_dbusiface_core *c = slot_data;
+ const char *ext_name = call_data;
+ DBusMessage *signal = NULL;
+
+ pa_assert(c);
+ pa_assert(ext_name);
+
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_EXTENSION_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+
+ return PA_HOOK_OK;
+}
+
pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
pa_dbusiface_core *c;
pa_card *card;
@@ -1862,6 +1905,8 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
c->clients = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
c->fallback_sink = pa_namereg_get_default_sink(core);
c->fallback_source = pa_namereg_get_default_source(core);
+ c->extension_registered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED, PA_HOOK_NORMAL, extension_registered_cb, c);
+ c->extension_unregistered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED, PA_HOOK_NORMAL, extension_unregistered_cb, c);
for (card = pa_idxset_first(core->cards, &idx); card; card = pa_idxset_next(core->cards, &idx))
pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(card, OBJECT_PATH));
@@ -1962,6 +2007,8 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_hashmap_free(c->samples, free_sample_cb, NULL);
pa_hashmap_free(c->modules, free_module_cb, NULL);
pa_hashmap_free(c->clients, free_client_cb, NULL);
+ pa_hook_slot_free(c->extension_registered_slot);
+ pa_hook_slot_free(c->extension_unregistered_slot);
pa_dbus_protocol_unref(c->dbus_protocol);
commit a1ba80bc4e715b8ce77f55676bc63b02c1a82d3c
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 1 08:26:51 2009 +0300
dbusiface-core: Don't die if we get a default sink/source change event before the new default device is actually created.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index e2e3be2..69c1bd2 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -1609,9 +1609,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (c->fallback_sink != new_fallback_sink) {
c->fallback_sink = new_fallback_sink;
- if (new_fallback_sink) {
- pa_assert_se((device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index))));
-
+ if (new_fallback_sink && (device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
@@ -1625,9 +1623,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (c->fallback_source != new_fallback_source) {
c->fallback_source = new_fallback_source;
- if (new_fallback_source) {
- pa_assert_se((device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index))));
-
+ if (new_fallback_source && (device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
@@ -1665,8 +1661,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SINK:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ pa_sink *sink = pa_idxset_get_by_index(core->sinks, idx);
+
if (!(device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(idx)))) {
- device = pa_dbusiface_device_new_sink(pa_idxset_get_by_index(core->sinks, idx), OBJECT_PATH);
+ device = pa_dbusiface_device_new_sink(sink, OBJECT_PATH);
pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
}
@@ -1676,6 +1674,23 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SINK].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+
+ if (c->fallback_sink && pa_streq(c->fallback_sink->name, sink->name)) {
+ /* We have got default sink change event, but at that point
+ * the D-Bus sink object wasn't created yet. Now that the
+ * object is created, let's send the fallback sink change
+ * signal. */
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
pa_assert_se((device = pa_hashmap_remove(c->sinks_by_index, PA_UINT32_TO_PTR(idx))));
object_path = pa_dbusiface_device_get_path(device);
@@ -1690,8 +1705,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SOURCE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
+ pa_source *source = pa_idxset_get_by_index(core->sources, idx);
+
if (!(device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(idx)))) {
- device = pa_dbusiface_device_new_source(pa_idxset_get_by_index(core->sources, idx), OBJECT_PATH);
+ device = pa_dbusiface_device_new_source(source, OBJECT_PATH);
pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
}
@@ -1701,6 +1718,23 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SOURCE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+
+ if (c->fallback_source && pa_streq(c->fallback_source->name, source->name)) {
+ /* We have got default source change event, but at that
+ * point the D-Bus source object wasn't created yet. Now
+ * that the object is created, let's send the fallback
+ * source change signal. */
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
pa_assert_se((device = pa_hashmap_remove(c->sources_by_index, PA_UINT32_TO_PTR(idx))));
object_path = pa_dbusiface_device_get_path(device);
commit 8c840572c7e2e560efcefe66707527a1dc4d16a4
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 2 11:12:21 2009 +0300
dbus-protocol: Add debugging output (temporary change).
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 81a6c02..475b952 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -306,6 +306,7 @@ static enum find_result_t find_handler_by_method(struct object_entry *obj_entry,
return FOUND_METHOD;
}
+ pa_log("find_handler_by_method() failed.");
return NO_SUCH_METHOD;
}
@@ -327,8 +328,10 @@ static enum find_result_t find_handler_from_properties_call(struct object_entry
if (*interface) {
if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)))
return FOUND_GET_ALL;
- else
+ else {
+ pa_log("GetAll message has unknown interface: %s", interface);
return NO_SUCH_METHOD; /* XXX: NO_SUCH_INTERFACE or something like that might be more accurate. */
+ }
} else {
pa_assert_se((*iface_entry = pa_hashmap_first(obj_entry->interfaces)));
return FOUND_GET_ALL;
@@ -378,8 +381,10 @@ static enum find_result_t find_handler(struct object_entry *obj_entry,
if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)) &&
(*method_handler = pa_hashmap_get((*iface_entry)->method_handlers, dbus_message_get_member(msg))))
return FOUND_METHOD;
- else
+ else {
+ pa_log("Message has unknown interface or there's no method handler.");
return NO_SUCH_METHOD;
+ }
} else { /* The method call doesn't contain an interface. */
if (dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set") || dbus_message_has_member(msg, "GetAll")) {
@@ -411,6 +416,8 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ pa_log("Received method call: destination = %s, name = %s, iface = %s", dbus_message_get_path(message), dbus_message_get_member(message), dbus_message_get_interface(message));
+
pa_assert_se((obj_entry = pa_hashmap_get(p->objects, dbus_message_get_path(message))));
if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect") ||
@@ -624,6 +631,8 @@ int pa_dbus_protocol_add_interface(pa_dbus_protocol *p,
if (obj_entry_created)
register_object(p, obj_entry);
+ pa_log("Interface %s added for object %s. GetAll callback? %s", iface_entry->name, obj_entry->path, iface_entry->get_all_properties_cb ? "yes" : "no");
+
return 0;
fail:
commit 805af5e8010228bee7521fbd1148e167cfb21e77
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 3 19:36:19 2009 +0300
dbus-util: Fix broken proplist reading logic.
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index 43dbd6b..5db7f21 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -765,6 +765,8 @@ int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessage
pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter) {
DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ int arg_type;
pa_proplist *proplist = NULL;
const char *key;
const uint8_t *value;
@@ -774,13 +776,18 @@ pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusM
pa_assert(msg);
pa_assert(iter);
- if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type or too few arguments. An array was expected.");
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array was expected.");
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array was expected.", (char) arg_type);
return NULL;
}
- if (dbus_message_iter_get_element_type(iter) != DBUS_TYPE_DICT_ENTRY) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type. A dict entry was expected.");
+ arg_type = dbus_message_iter_get_element_type(iter);
+ if (arg_type != DBUS_TYPE_DICT_ENTRY) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A dictionary entry was expected.", (char) arg_type);
return NULL;
}
@@ -788,34 +795,45 @@ pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusM
dbus_message_iter_recurse(iter, &dict_iter);
- while (dbus_message_iter_has_next(&dict_iter)) {
- if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_STRING) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type. A string was expected.");
+ while (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID) {
+ dbus_message_iter_recurse(&dict_iter, &dict_entry_iter);
+
+ arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_STRING) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
goto fail;
}
- dbus_message_iter_get_basic(&dict_iter, &key);
+ dbus_message_iter_get_basic(&dict_entry_iter, &key);
+ dbus_message_iter_next(&dict_entry_iter);
if (strlen(key) <= 0 || !pa_ascii_valid(key)) {
pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Invalid property list key.");
goto fail;
}
- if (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_ARRAY) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type. An array was expected.");
+ arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Dict value missing.");
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type: '%c'. An array was expected.", (char) arg_type);
goto fail;
}
- if (dbus_message_iter_get_element_type(&dict_iter) != DBUS_TYPE_BYTE) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value item type. A byte was expected.");
+ arg_type = dbus_message_iter_get_element_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_BYTE) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value item type: '%c'. A byte was expected.", (char) arg_type);
goto fail;
}
- dbus_message_iter_get_fixed_array(&dict_iter, &value, &value_length);
+ dbus_message_iter_get_fixed_array(&dict_entry_iter, &value, &value_length);
pa_assert(value_length >= 0);
pa_assert_se(pa_proplist_set(proplist, key, value, value_length) >= 0);
+
+ dbus_message_iter_next(&dict_iter);
}
dbus_message_iter_next(iter);
commit d9d166a691cd5ecc786b73f1377244b8d51b4327
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 3 19:38:02 2009 +0300
stream-restore: Expose module to D-Bus.
diff --git a/src/Makefile.am b/src/Makefile.am
index 47eb647..07f81a6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1536,6 +1536,11 @@ module_stream_restore_la_LDFLAGS = $(MODULE_LDFLAGS)
module_stream_restore_la_LIBADD = $(AM_LIBADD) libprotocol-native.la libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_stream_restore_la_CFLAGS = $(AM_CFLAGS)
+if HAVE_DBUS
+module_stream_restore_la_LIBADD += $(DBUS_LIBS)
+module_stream_restore_la_CFLAGS += $(DBUS_CFLAGS)
+endif
+
# Card profile restore module
module_card_restore_la_SOURCES = modules/module-card-restore.c
module_card_restore_la_LDFLAGS = $(MODULE_LDFLAGS)
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index e60cc73..bccdf93 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -2,6 +2,7 @@
This file is part of PulseAudio.
Copyright 2008 Lennart Poettering
+ Copyright 2009 Tanu Kaskinen
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
@@ -51,6 +52,11 @@
#include <pulsecore/pstream-util.h>
#include <pulsecore/database.h>
+#ifdef HAVE_DBUS
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/protocol-dbus.h>
+#endif
+
#include "module-stream-restore-symdef.h"
PA_MODULE_AUTHOR("Lennart Poettering");
@@ -100,6 +106,12 @@ struct userdata {
pa_native_protocol *protocol;
pa_idxset *subscribed;
+
+#ifdef HAVE_DBUS
+ pa_dbus_protocol *dbus_protocol;
+ pa_hashmap *dbus_entries;
+ uint32_t next_index; /* For generating object paths for entries. */
+#endif
};
#define ENTRY_VERSION 2
@@ -122,6 +134,883 @@ enum {
SUBCOMMAND_EVENT
};
+static struct entry *read_entry(struct userdata *u, const char *name);
+static void apply_entry(struct userdata *u, const char *name, struct entry *e);
+static void trigger_save(struct userdata *u);
+
+#ifdef HAVE_DBUS
+
+#define OBJECT_PATH "/org/pulseaudio/stream_restore1"
+#define ENTRY_OBJECT_NAME "entry"
+#define INTERFACE_STREAM_RESTORE "org.PulseAudio.Ext.StreamRestore1"
+#define INTERFACE_ENTRY INTERFACE_STREAM_RESTORE ".RestoreEntry"
+
+#define DBUS_INTERFACE_REVISION 0
+
+struct dbus_entry {
+ struct userdata *userdata;
+
+ char *entry_name;
+ uint32_t index;
+ char *object_path;
+};
+
+static void handle_get_interface_revision(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_entries(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_add_entry(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_entry_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_entry_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_get_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_entry_remove(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INTERFACE_REVISION,
+ PROPERTY_HANDLER_ENTRIES,
+ PROPERTY_HANDLER_MAX
+};
+
+enum entry_property_handler_index {
+ ENTRY_PROPERTY_HANDLER_INDEX,
+ ENTRY_PROPERTY_HANDLER_NAME,
+ ENTRY_PROPERTY_HANDLER_DEVICE,
+ ENTRY_PROPERTY_HANDLER_VOLUME,
+ ENTRY_PROPERTY_HANDLER_IS_MUTED,
+ ENTRY_PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INTERFACE_REVISION] = { .property_name = "InterfaceRevision", .type = "u", .get_cb = handle_get_interface_revision, .set_cb = NULL },
+ [PROPERTY_HANDLER_ENTRIES] = { .property_name = "Entries", .type = "ao", .get_cb = handle_get_entries, .set_cb = NULL }
+};
+
+static pa_dbus_property_handler entry_property_handlers[ENTRY_PROPERTY_HANDLER_MAX] = {
+ [ENTRY_PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_entry_get_index, .set_cb = NULL },
+ [ENTRY_PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_entry_get_name, .set_cb = NULL },
+ [ENTRY_PROPERTY_HANDLER_DEVICE] = { .property_name = "Device", .type = "s", .get_cb = handle_entry_get_device, .set_cb = handle_entry_set_device },
+ [ENTRY_PROPERTY_HANDLER_VOLUME] = { .property_name = "Volume", .type = "a(uu)", .get_cb = handle_entry_get_volume, .set_cb = handle_entry_set_volume },
+ [ENTRY_PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_entry_get_is_muted, .set_cb = handle_entry_set_is_muted }
+};
+
+enum method_handler_index {
+ METHOD_HANDLER_ADD_ENTRY,
+ METHOD_HANDLER_GET_ENTRY_BY_NAME,
+ METHOD_HANDLER_MAX
+};
+
+enum entry_method_handler_index {
+ ENTRY_METHOD_HANDLER_REMOVE,
+ ENTRY_METHOD_HANDLER_MAX
+};
+
+static pa_dbus_arg_info add_entry_args[] = { { "name", "s", "in" },
+ { "device", "s", "in" },
+ { "volume", "a(uu)", "in" },
+ { "is_muted", "b", "in" },
+ { "entry", "o", "out" } };
+static pa_dbus_arg_info get_entry_by_name_args[] = { { "name", "s", "in" }, { "entry", "o", "out" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_ADD_ENTRY] = {
+ .method_name = "AddEntry",
+ .arguments = add_entry_args,
+ .n_arguments = sizeof(add_entry_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_add_entry },
+ [METHOD_HANDLER_GET_ENTRY_BY_NAME] = {
+ .method_name = "GetEntryByName",
+ .arguments = get_entry_by_name_args,
+ .n_arguments = sizeof(get_entry_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_entry_by_name }
+};
+
+static pa_dbus_method_handler entry_method_handlers[ENTRY_METHOD_HANDLER_MAX] = {
+ [ENTRY_METHOD_HANDLER_REMOVE] = {
+ .method_name = "Remove",
+ .arguments = NULL,
+ .n_arguments = 0,
+ .receive_cb = handle_entry_remove }
+};
+
+enum signal_index {
+ SIGNAL_NEW_ENTRY,
+ SIGNAL_ENTRY_REMOVED,
+ SIGNAL_MAX
+};
+
+enum entry_signal_index {
+ ENTRY_SIGNAL_DEVICE_UPDATED,
+ ENTRY_SIGNAL_VOLUME_UPDATED,
+ ENTRY_SIGNAL_MUTE_UPDATED,
+ ENTRY_SIGNAL_MAX
+};
+
+static pa_dbus_arg_info new_entry_args[] = { { "entry", "o", NULL } };
+static pa_dbus_arg_info entry_removed_args[] = { { "entry", "o", NULL } };
+
+static pa_dbus_arg_info entry_device_updated_args[] = { { "device", "s", NULL } };
+static pa_dbus_arg_info entry_volume_updated_args[] = { { "volume", "a(uu)", NULL } };
+static pa_dbus_arg_info entry_mute_updated_args[] = { { "muted", "b", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_NEW_ENTRY] = { .name = "NewEntry", .arguments = new_entry_args, .n_arguments = 1 },
+ [SIGNAL_ENTRY_REMOVED] = { .name = "EntryRemoved", .arguments = entry_removed_args, .n_arguments = 1 }
+};
+
+static pa_dbus_signal_info entry_signals[ENTRY_SIGNAL_MAX] = {
+ [ENTRY_SIGNAL_DEVICE_UPDATED] = { .name = "DeviceUpdated", .arguments = entry_device_updated_args, .n_arguments = 1 },
+ [ENTRY_SIGNAL_VOLUME_UPDATED] = { .name = "VolumeUpdated", .arguments = entry_volume_updated_args, .n_arguments = 1 },
+ [ENTRY_SIGNAL_MUTE_UPDATED] = { .name = "MuteUpdated", .arguments = entry_mute_updated_args, .n_arguments = 1 }
+};
+
+static pa_dbus_interface_info stream_restore_interface_info = {
+ .name = INTERFACE_STREAM_RESTORE,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static pa_dbus_interface_info entry_interface_info = {
+ .name = INTERFACE_ENTRY,
+ .method_handlers = entry_method_handlers,
+ .n_method_handlers = ENTRY_METHOD_HANDLER_MAX,
+ .property_handlers = entry_property_handlers,
+ .n_property_handlers = ENTRY_PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_entry_get_all,
+ .signals = entry_signals,
+ .n_signals = ENTRY_SIGNAL_MAX
+};
+
+static struct dbus_entry *dbus_entry_new(struct userdata *u, const char *entry_name) {
+ struct dbus_entry *de;
+
+ pa_assert(u);
+ pa_assert(entry_name);
+ pa_assert(*entry_name);
+
+ de = pa_xnew(struct dbus_entry, 1);
+ de->userdata = u;
+ de->entry_name = pa_xstrdup(entry_name);
+ de->index = u->next_index++;
+ de->object_path = pa_sprintf_malloc("%s/%s%u", OBJECT_PATH, ENTRY_OBJECT_NAME, de->index);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(u->dbus_protocol, de->object_path, &entry_interface_info, u) >= 0);
+
+ return de;
+}
+
+static void dbus_entry_free(struct dbus_entry *de) {
+ pa_assert(de);
+
+ pa_assert_se(pa_dbus_protocol_remove_interface(de->userdata->dbus_protocol, de->object_path, entry_interface_info.name) >= 0);
+
+ pa_xfree(de->entry_name);
+ pa_xfree(de->object_path);
+}
+
+/* Reads an array [(UInt32, UInt32)] from the iterator. The struct items are
+ * are a channel position and a volume value, respectively. The result is
+ * stored in the map and vol arguments. If the volume can't be read from the
+ * iterator, an error reply is sent and a negative number is returned. In case
+ * of a failure we make no guarantees about the state of map and vol. In case
+ * of an empty array the channels field of both map and vol are set to 0. */
+static int get_volume_arg(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, pa_channel_map *map, pa_cvolume *vol) {
+ DBusMessageIter array_iter;
+ DBusMessageIter struct_iter;
+ int arg_type;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(iter);
+ pa_assert(map);
+ pa_assert(vol);
+
+ pa_channel_map_init(map);
+ pa_cvolume_init(vol);
+
+ map->channels = 0;
+ vol->channels = 0;
+
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array was expected.");
+ else
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array was expected.", (char) arg_type);
+ return -1;
+ }
+
+ arg_type = dbus_message_iter_get_element_type(iter);
+ if (arg_type != DBUS_TYPE_STRUCT) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A struct was expected.", (char) arg_type);
+ return -1;
+ }
+
+ dbus_message_iter_recurse(iter, &array_iter);
+
+ while (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_INVALID) {
+ dbus_uint32_t chan_pos;
+ dbus_uint32_t chan_vol;
+
+ dbus_message_iter_recurse(&array_iter, &struct_iter);
+
+ arg_type = dbus_message_iter_get_arg_type(&struct_iter);
+ if (arg_type != DBUS_TYPE_UINT32) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong channel position type: '%c'. An unsigned 32-bit integer was expected.", (char) arg_type);
+ return -1;
+ }
+
+ dbus_message_iter_get_basic(&struct_iter, &chan_pos);
+ dbus_message_iter_next(&struct_iter);
+
+ if (chan_pos >= PA_CHANNEL_POSITION_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid channel position: %u", chan_pos);
+ return -1;
+ }
+
+ arg_type = dbus_message_iter_get_arg_type(&struct_iter);
+ if (arg_type != DBUS_TYPE_UINT32) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Channel volume missing.");
+ else
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong volume value type: '%c'. An unsigned 32-bit integer was expected.", (char) arg_type);
+ return -1;
+ }
+
+ dbus_message_iter_get_basic(&struct_iter, &chan_vol);
+
+ if (chan_vol > PA_VOLUME_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume: %u", chan_vol);
+ return -1;
+ }
+
+ if (map->channels < PA_CHANNELS_MAX) {
+ map->map[map->channels] = chan_pos;
+ vol->values[map->channels] = chan_vol;
+ }
+ ++map->channels;
+ ++vol->channels;
+
+ dbus_message_iter_next(&array_iter);
+ }
+
+ if (map->channels > PA_CHANNELS_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too many channels: %u. The maximum is %u.", map->channels, PA_CHANNELS_MAX);
+ return -1;
+ }
+
+ dbus_message_iter_next(iter);
+
+ return 0;
+}
+
+static void append_volume(DBusMessageIter *iter, struct entry *e) {
+ DBusMessageIter array_iter;
+ DBusMessageIter struct_iter;
+ unsigned i;
+
+ pa_assert(iter);
+ pa_assert(e);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, "(uu)", &array_iter));
+
+ if (!e->volume_valid) {
+ pa_assert_se(dbus_message_iter_close_container(iter, &array_iter));
+ return;
+ }
+
+ for (i = 0; i < e->channel_map.channels; ++i) {
+ pa_assert_se(dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL, &struct_iter));
+
+ pa_assert_se(dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_UINT32, &e->channel_map.map[i]));
+ pa_assert_se(dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_UINT32, &e->volume.values[i]));
+
+ pa_assert_se(dbus_message_iter_close_container(&array_iter, &struct_iter));
+ }
+
+ pa_assert_se(dbus_message_iter_close_container(iter, &array_iter));
+}
+
+static void append_volume_variant(DBusMessageIter *iter, struct entry *e) {
+ DBusMessageIter variant_iter;
+
+ pa_assert(iter);
+ pa_assert(e);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a(uu)", &variant_iter));
+
+ append_volume(&variant_iter, e);
+
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+}
+
+static void send_new_entry_signal(struct dbus_entry *entry) {
+ DBusMessage *signal;
+
+ pa_assert(entry);
+
+ pa_assert_se(signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_STREAM_RESTORE, signals[SIGNAL_NEW_ENTRY].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &entry->object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(entry->userdata->dbus_protocol, signal);
+ dbus_message_unref(signal);
+}
+
+static void send_entry_removed_signal(struct dbus_entry *entry) {
+ DBusMessage *signal;
+
+ pa_assert(entry);
+
+ pa_assert_se(signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_STREAM_RESTORE, signals[SIGNAL_ENTRY_REMOVED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &entry->object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(entry->userdata->dbus_protocol, signal);
+ dbus_message_unref(signal);
+}
+
+static void send_device_updated_signal(struct dbus_entry *de, struct entry *e) {
+ DBusMessage *signal;
+ const char *device;
+
+ pa_assert(de);
+ pa_assert(e);
+
+ device = e->device_valid ? e->device : "";
+
+ pa_assert_se(signal = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_DEVICE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &device, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal);
+ dbus_message_unref(signal);
+}
+
+static void send_volume_updated_signal(struct dbus_entry *de, struct entry *e) {
+ DBusMessage *signal;
+ DBusMessageIter msg_iter;
+
+ pa_assert(de);
+ pa_assert(e);
+
+ pa_assert_se(signal = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_VOLUME_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ append_volume(&msg_iter, e);
+ pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal);
+ dbus_message_unref(signal);
+}
+
+static void send_mute_updated_signal(struct dbus_entry *de, struct entry *e) {
+ DBusMessage *signal;
+ dbus_bool_t muted;
+
+ pa_assert(de);
+ pa_assert(e);
+
+ pa_assert(e->muted_valid);
+
+ muted = e->muted;
+
+ pa_assert_se(signal = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &muted, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal);
+ dbus_message_unref(signal);
+}
+
+static void handle_get_interface_revision(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ dbus_uint32_t interface_revision = DBUS_INTERFACE_REVISION;
+
+ pa_assert(conn);
+ pa_assert(msg);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &interface_revision);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_entries(struct userdata *u, unsigned *n) {
+ const char **entries;
+ unsigned i = 0;
+ void *state = NULL;
+ struct dbus_entry *de;
+
+ pa_assert(u);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(u->dbus_entries);
+
+ if (*n == 0)
+ return NULL;
+
+ entries = pa_xnew(const char *, *n);
+
+ while ((de = pa_hashmap_iterate(u->dbus_entries, &state, NULL))) {
+ entries[i] = de->object_path;
+ ++i;
+ }
+
+ return entries;
+}
+
+static void handle_get_entries(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct userdata *u = userdata;
+ const char **entries;
+ unsigned n;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+
+ entries = get_entries(u, &n);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, entries, n);
+
+ pa_xfree(entries);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct userdata *u = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t interface_revision;
+ const char **entries;
+ unsigned n_entries;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+
+ interface_revision = DBUS_INTERFACE_REVISION;
+ entries = get_entries(u, &n_entries);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INTERFACE_REVISION].property_name, DBUS_TYPE_UINT32, &interface_revision);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_ENTRIES].property_name, DBUS_TYPE_OBJECT_PATH, entries, n_entries);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(entries);
+}
+
+static void handle_add_entry(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct userdata *u = userdata;
+ DBusMessageIter msg_iter;
+ const char *name;
+ const char *device;
+ pa_channel_map map;
+ pa_cvolume vol;
+ dbus_bool_t muted;
+ dbus_bool_t apply_immediately;
+ pa_datum key;
+ pa_datum value;
+ struct dbus_entry *dbus_entry;
+ struct entry *e;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+
+ if (!dbus_message_iter_init(msg, &msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &device) < 0)
+ return;
+
+ if (get_volume_arg(conn, msg, &msg_iter, &map, &vol) < 0)
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_BOOLEAN, &muted) < 0)
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_BOOLEAN, &apply_immediately) < 0)
+ return;
+
+ if (!*name) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "An empty string was given as the entry name.");
+ return;
+ }
+
+ if ((dbus_entry = pa_hashmap_get(u->dbus_entries, name))) {
+ pa_bool_t mute_updated = FALSE;
+ pa_bool_t volume_updated = FALSE;
+ pa_bool_t device_updated = FALSE;
+
+ pa_assert_se(e = read_entry(u, name));
+ mute_updated = e->muted != muted;
+ e->muted = muted;
+ e->muted_valid = TRUE;
+
+ volume_updated = (e->volume_valid != !!map.channels) || !pa_cvolume_equal(&e->volume, &vol);
+ e->volume = vol;
+ e->channel_map = map;
+ e->volume_valid = !!map.channels;
+
+ device_updated = (e->device_valid != !!device[0]) || !pa_streq(e->device, device);
+ pa_strlcpy(e->device, device, sizeof(e->device));
+ e->device_valid = !!device[0];
+
+ if (mute_updated)
+ send_mute_updated_signal(dbus_entry, e);
+ if (volume_updated)
+ send_volume_updated_signal(dbus_entry, e);
+ if (device_updated)
+ send_device_updated_signal(dbus_entry, e);
+
+ } else {
+ dbus_entry = dbus_entry_new(u, name);
+ pa_assert(pa_hashmap_put(u->dbus_entries, dbus_entry->entry_name, dbus_entry) >= 0);
+
+ e->muted_valid = TRUE;
+ e->volume_valid = !!map.channels;
+ e->device_valid = !!device[0];
+ e->muted = muted;
+ e->volume = vol;
+ e->channel_map = map;
+ pa_strlcpy(e->device, device, sizeof(e->device));
+
+ send_new_entry_signal(dbus_entry);
+ }
+
+ key.data = (char *) name;
+ key.size = strlen(name);
+
+ value.data = e;
+ value.size = sizeof(struct entry);
+
+ pa_assert_se(pa_database_set(u->database, &key, &value, TRUE) == 0);
+ if (apply_immediately)
+ apply_entry(u, name, e);
+
+ trigger_save(u);
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ pa_xfree(e);
+}
+
+static void handle_get_entry_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct userdata *u = userdata;
+ const char *name;
+ struct dbus_entry *de;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(de = pa_hashmap_get(u->dbus_entries, name))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such stream restore entry.");
+ return;
+ }
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &de->object_path);
+}
+
+static void handle_entry_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &de->index);
+}
+
+static void handle_entry_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &de->entry_name);
+}
+
+static void handle_entry_get_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ struct entry *e;
+ const char *device;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ device = e->device_valid ? e->device : "";
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &device);
+
+ pa_xfree(e);
+}
+
+static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ const char *device;
+ struct entry *e;
+ pa_bool_t updated;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_STRING, &device) < 0)
+ return;
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ updated = (e->device_valid != !!device[0]) || !pa_streq(e->device, device);
+
+ if (updated) {
+ pa_datum key;
+ pa_datum value;
+
+ pa_strlcpy(e->device, device, sizeof(e->device));
+ e->device_valid = !!device[0];
+
+ key.data = de->entry_name;
+ key.size = strlen(de->entry_name);
+ value.data = e;
+ value.size = sizeof(struct entry);
+ pa_assert_se(pa_database_set(de->userdata->database, &key, &value, TRUE) == 0);
+
+ send_device_updated_signal(de, e);
+ trigger_save(de->userdata);
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ pa_xfree(e);
+}
+
+static void handle_entry_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ DBusMessage *reply;
+ DBusMessageIter msg_iter;
+ struct entry *e;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ pa_assert_se(reply = dbus_message_new_method_return(msg));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ append_volume_variant(&msg_iter, e);
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ pa_xfree(e);
+}
+
+static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ DBusMessageIter msg_iter;
+ pa_channel_map map;
+ pa_cvolume vol;
+ struct entry *e;
+ pa_bool_t updated;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ /* Skip the interface and property name arguments. */
+ if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (get_volume_arg(conn, msg, &msg_iter, &map, &vol) < 0)
+ return;
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ updated = (e->volume_valid != !!map.channels) || !pa_cvolume_equal(&e->volume, &vol);
+
+ if (updated) {
+ pa_datum key;
+ pa_datum value;
+
+ e->volume = vol;
+ e->channel_map = map;
+ e->volume_valid = !!map.channels;
+
+ key.data = de->entry_name;
+ key.size = strlen(de->entry_name);
+ value.data = e;
+ value.size = sizeof(struct entry);
+ pa_assert_se(pa_database_set(de->userdata->database, &key, &value, TRUE) == 0);
+
+ send_volume_updated_signal(de, e);
+ trigger_save(de->userdata);
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ pa_xfree(e);
+}
+
+static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ struct entry *e;
+ dbus_bool_t muted;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ muted = e->muted_valid ? e->muted : FALSE;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &muted);
+
+ pa_xfree(e);
+}
+
+static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ pa_bool_t muted;
+ struct entry *e;
+ pa_bool_t updated;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &muted) < 0)
+ return;
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ updated = !e->muted_valid || e->muted != muted;
+
+ if (updated) {
+ pa_datum key;
+ pa_datum value;
+
+ e->muted = muted;
+ e->muted_valid = TRUE;
+
+ key.data = de->entry_name;
+ key.size = strlen(de->entry_name);
+ value.data = e;
+ value.size = sizeof(struct entry);
+ pa_assert_se(pa_database_set(de->userdata->database, &key, &value, TRUE) == 0);
+
+ send_mute_updated_signal(de, e);
+ trigger_save(de->userdata);
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ pa_xfree(e);
+}
+
+static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ struct entry *e;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ const char *device;
+ dbus_bool_t muted;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ pa_assert_se(e = read_entry(de->userdata, de->entry_name));
+
+ device = e->device_valid ? e->device : "";
+ muted = e->muted_valid ? e->muted : FALSE;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, entry_property_handlers[ENTRY_PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &de->index);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, entry_property_handlers[ENTRY_PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &de->entry_name);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, entry_property_handlers[ENTRY_PROPERTY_HANDLER_DEVICE].property_name, DBUS_TYPE_STRING, &device);
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &entry_property_handlers[ENTRY_PROPERTY_HANDLER_VOLUME].property_name));
+ append_volume_variant(&dict_entry_iter, e);
+
+ pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, entry_property_handlers[ENTRY_PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &muted);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(e);
+}
+
+static void handle_entry_remove(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ struct dbus_entry *de = userdata;
+ pa_datum key;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(de);
+
+ key.data = de->entry_name;
+ key.size = strlen(de->entry_name);
+
+ pa_assert_se(pa_database_unset(de->userdata->database, &key) == 0);
+
+ send_entry_removed_signal(de);
+ trigger_save(de->userdata);
+
+ pa_assert_se(pa_hashmap_remove(de->userdata->dbus_entries, de->entry_name));
+ dbus_entry_free(de);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+#endif /* HAVE_DBUS */
+
static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
struct userdata *u = userdata;
@@ -162,7 +1051,7 @@ static char *get_name(pa_proplist *p, const char *prefix) {
return t;
}
-static struct entry* read_entry(struct userdata *u, const char *name) {
+static struct entry *read_entry(struct userdata *u, const char *name) {
pa_datum key, data;
struct entry *e;
@@ -270,6 +1159,17 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
char *name;
pa_datum key, data;
+ /* These are only used when D-Bus is enabled, but in order to reduce ifdef
+ * clutter these are defined here unconditionally. */
+ pa_bool_t created_new_entry = TRUE;
+ pa_bool_t device_updated = FALSE;
+ pa_bool_t volume_updated = FALSE;
+ pa_bool_t mute_updated = FALSE;
+
+#ifdef HAVE_DBUS
+ struct dbus_entry *de = NULL;
+#endif
+
pa_assert(c);
pa_assert(u);
@@ -291,23 +1191,34 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
if (!(name = get_name(sink_input->proplist, "sink-input")))
return;
- if ((old = read_entry(u, name)))
+ if ((old = read_entry(u, name))) {
entry = *old;
+ created_new_entry = FALSE;
+ }
if (sink_input->save_volume) {
entry.channel_map = sink_input->channel_map;
pa_sink_input_get_volume(sink_input, &entry.volume, FALSE);
entry.volume_valid = TRUE;
+
+ volume_updated = !created_new_entry
+ && (!old->volume_valid
+ || !pa_channel_map_equal(&entry.channel_map, &old->channel_map)
+ || !pa_cvolume_equal(&entry.volume, &old->volume));
}
if (sink_input->save_muted) {
entry.muted = pa_sink_input_get_mute(sink_input);
entry.muted_valid = TRUE;
+
+ mute_updated = !created_new_entry && (!old->muted_valid || entry.muted != old->muted);
}
if (sink_input->save_sink) {
pa_strlcpy(entry.device, sink_input->sink->name, sizeof(entry.device));
entry.device_valid = TRUE;
+
+ device_updated = !created_new_entry && (!old->device_valid || !pa_streq(entry.device, old->device));
}
} else {
@@ -321,12 +1232,16 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
if (!(name = get_name(source_output->proplist, "source-output")))
return;
- if ((old = read_entry(u, name)))
+ if ((old = read_entry(u, name))) {
entry = *old;
+ created_new_entry = FALSE;
+ }
if (source_output->save_source) {
pa_strlcpy(entry.device, source_output->source->name, sizeof(entry.device));
entry.device_valid = source_output->save_source;
+
+ device_updated = !created_new_entry && (!old->device_valid || !pa_streq(entry.device, old->device));
}
}
@@ -351,6 +1266,23 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
pa_database_set(u->database, &key, &data, TRUE);
+#ifdef HAVE_DBUS
+ if (created_new_entry) {
+ de = dbus_entry_new(u, name);
+ pa_hashmap_put(u->dbus_entries, de->entry_name, de);
+ send_new_entry_signal(de);
+ } else {
+ pa_assert((de = pa_hashmap_get(u->dbus_entries, name)));
+
+ if (device_updated)
+ send_device_updated_signal(de, &entry);
+ if (volume_updated)
+ send_volume_updated_signal(de, &entry);
+ if (mute_updated)
+ send_mute_updated_signal(de, &entry);
+ }
+#endif
+
pa_xfree(name);
trigger_save(u);
@@ -810,14 +1742,27 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
mode != PA_UPDATE_SET)
goto fail;
- if (mode == PA_UPDATE_SET)
+ if (mode == PA_UPDATE_SET) {
+#ifdef HAVE_DBUS
+ struct dbus_entry *de;
+ void *state = NULL;
+
+ while ((de = pa_hashmap_iterate(u->dbus_entries, &state, NULL))) {
+ send_entry_removed_signal(de);
+ dbus_entry_free(pa_hashmap_remove(u->dbus_entries, de->entry_name));
+ }
+#endif
pa_database_clear(u->database);
+ }
while (!pa_tagstruct_eof(t)) {
const char *name, *device;
pa_bool_t muted;
struct entry entry;
pa_datum key, data;
+#ifdef HAVE_DBUS
+ struct entry *old;
+#endif
pa_zero(entry);
entry.version = ENTRY_VERSION;
@@ -849,15 +1794,50 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
!pa_namereg_is_valid_name(entry.device))
goto fail;
+#ifdef HAVE_DBUS
+ old = read_entry(u, name);
+#endif
+
key.data = (char*) name;
key.size = strlen(name);
data.data = &entry;
data.size = sizeof(entry);
- if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0)
+ if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0) {
+#ifdef HAVE_DBUS
+ struct dbus_entry *de;
+
+ if (old) {
+ pa_assert_se((de = pa_hashmap_get(u->dbus_entries, name)));
+
+ if ((old->device_valid != entry.device_valid)
+ || (entry.device_valid && !pa_streq(entry.device, old->device)))
+ send_device_updated_signal(de, &entry);
+
+ if ((old->volume_valid != entry.volume_valid)
+ || (entry.volume_valid
+ && (!pa_cvolume_equal(&entry.volume, &old->volume) || !pa_channel_map_equal(&entry.channel_map, &old->channel_map))))
+ send_volume_updated_signal(de, &entry);
+
+ if (!old->muted_valid || (entry.muted != old->muted))
+ send_mute_updated_signal(de, &entry);
+
+ } else {
+ de = dbus_entry_new(u, name);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de));
+ send_new_entry_signal(de);
+ }
+#endif
+
if (apply_immediately)
apply_entry(u, name, &entry);
+ }
+
+#ifdef HAVE_DBUS
+ if (old)
+ pa_xfree(old);
+#endif
}
trigger_save(u);
@@ -870,10 +1850,20 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
while (!pa_tagstruct_eof(t)) {
const char *name;
pa_datum key;
+#ifdef HAVE_DBUS
+ struct dbus_entry *de;
+#endif
if (pa_tagstruct_gets(t, &name) < 0)
goto fail;
+#ifdef HAVE_DBUS
+ if ((de = pa_hashmap_get(u->dbus_entries, name))) {
+ send_entry_removed_signal(de);
+ dbus_entry_free(pa_hashmap_remove(u->dbus_entries, name));
+ }
+#endif
+
key.data = (char*) name;
key.size = strlen(name);
@@ -932,6 +1922,10 @@ int pa__init(pa_module*m) {
pa_source_output *so;
uint32_t idx;
pa_bool_t restore_device = TRUE, restore_volume = TRUE, restore_muted = TRUE, on_hotplug = TRUE, on_rescue = TRUE;
+#ifdef HAVE_DBUS
+ pa_datum key;
+ pa_bool_t done;
+#endif
pa_assert(m);
@@ -1002,6 +1996,34 @@ int pa__init(pa_module*m) {
pa_log_info("Sucessfully opened database file '%s'.", fname);
pa_xfree(fname);
+#ifdef HAVE_DBUS
+ u->dbus_protocol = pa_dbus_protocol_get(u->core);
+ u->dbus_entries = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(u->dbus_protocol, OBJECT_PATH, &stream_restore_interface_info, u) >= 0);
+ pa_assert_se(pa_dbus_protocol_register_extension(u->dbus_protocol, INTERFACE_STREAM_RESTORE) >= 0);
+
+ /* Create the initial dbus entries. */
+ done = !pa_database_first(u->database, &key, NULL);
+ while (!done) {
+ pa_datum next_key;
+ char *name;
+ struct dbus_entry *de;
+
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
+
+ name = pa_xstrndup(key.data, key.size);
+ pa_datum_free(&key);
+
+ de = dbus_entry_new(u, name);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) >= 0);
+
+ pa_xfree(name);
+
+ key = next_key;
+ }
+#endif
+
PA_IDXSET_FOREACH(si, m->core->sink_inputs, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, si->index, u);
@@ -1020,6 +2042,16 @@ fail:
return -1;
}
+#ifdef HAVE_DBUS
+static void free_dbus_entry_cb(void *p, void *userdata) {
+ struct dbus_entry *de = p;
+
+ pa_assert(de);
+
+ dbus_entry_free(de);
+}
+#endif
+
void pa__done(pa_module*m) {
struct userdata* u;
@@ -1028,6 +2060,19 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
+#ifdef HAVE_DBUS
+ if (u->dbus_protocol) {
+ pa_assert(u->dbus_entries);
+
+ pa_assert_se(pa_dbus_protocol_unregister_extension(u->dbus_protocol, INTERFACE_STREAM_RESTORE) >= 0);
+ pa_assert_se(pa_dbus_protocol_remove_interface(u->dbus_protocol, OBJECT_PATH, stream_restore_interface_info.name) >= 0);
+
+ pa_hashmap_free(u->dbus_entries, free_dbus_entry_cb, NULL);
+
+ pa_dbus_protocol_unref(u->dbus_protocol);
+ }
+#endif
+
if (u->subscription)
pa_subscription_free(u->subscription);
commit 8966c61d3343e13502cfa210bb7123b7d7e7b27e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Aug 4 17:50:18 2009 +0300
dbusiface-core: Make the interface string a public constant.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 69c1bd2..695e4a3 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -48,7 +48,6 @@
#include "iface-core.h"
#define OBJECT_PATH "/org/pulseaudio/core1"
-#define INTERFACE_CORE "org.PulseAudio.Core1"
#define INTERFACE_REVISION 0
@@ -312,7 +311,7 @@ static pa_dbus_signal_info signals[SIGNAL_MAX] = {
};
static pa_dbus_interface_info core_interface_info = {
- .name = INTERFACE_CORE,
+ .name = PA_DBUSIFACE_CORE_INTERFACE,
.method_handlers = method_handlers,
.n_method_handlers = METHOD_HANDLER_MAX,
.property_handlers = property_handlers,
@@ -1612,7 +1611,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (new_fallback_sink && (device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1626,7 +1625,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (new_fallback_source && (device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1644,7 +1643,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_CARD].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_CARD].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1652,7 +1651,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_CARD_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_CARD_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_card_free(card);
@@ -1671,7 +1670,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SINK].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_SINK].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1683,7 +1682,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
* the D-Bus sink object wasn't created yet. Now that the
* object is created, let's send the fallback sink change
* signal. */
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1696,7 +1695,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se(pa_hashmap_remove(c->sinks_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_SINK_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_SINK_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device);
@@ -1715,7 +1714,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SOURCE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_SOURCE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1727,7 +1726,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
* point the D-Bus source object wasn't created yet. Now
* that the object is created, let's send the fallback
* source change signal. */
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1740,7 +1739,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se(pa_hashmap_remove(c->sources_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_SOURCE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_SOURCE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device);
@@ -1756,7 +1755,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1764,7 +1763,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream);
@@ -1780,7 +1779,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_RECORD_STREAM].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_RECORD_STREAM].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1788,7 +1787,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream);
@@ -1804,7 +1803,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_SAMPLE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_SAMPLE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1812,7 +1811,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_SAMPLE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_SAMPLE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_sample_free(sample);
@@ -1828,7 +1827,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_MODULE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_MODULE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1836,7 +1835,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_MODULE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_MODULE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_module_free(module);
@@ -1852,7 +1851,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_CLIENT].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_CLIENT].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1860,7 +1859,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_CLIENT_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_CLIENT_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_client_free(client);
@@ -1882,7 +1881,7 @@ static pa_hook_result_t extension_registered_cb(void *hook_data, void *call_data
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_NEW_EXTENSION].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_EXTENSION].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1899,7 +1898,7 @@ static pa_hook_result_t extension_unregistered_cb(void *hook_data, void *call_da
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_CORE, signals[SIGNAL_EXTENSION_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_EXTENSION_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -2028,7 +2027,7 @@ static void free_client_cb(void *p, void *userdata) {
void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_assert(c);
- pa_dbus_protocol_remove_interface(c->dbus_protocol, OBJECT_PATH, INTERFACE_CORE);
+ pa_dbus_protocol_remove_interface(c->dbus_protocol, OBJECT_PATH, core_interface_info.name);
pa_subscription_free(c->subscription);
pa_hashmap_free(c->cards, free_card_cb, NULL);
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index 964a37b..6c5191b 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -30,6 +30,8 @@
#include <pulsecore/core.h>
+#define PA_DBUSIFACE_CORE_INTERFACE "org.PulseAudio.Core1"
+
typedef struct pa_dbusiface_core pa_dbusiface_core;
pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core);
commit b1578e27b62e7332111bb706f79858b0866029e3
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Aug 4 17:55:10 2009 +0300
dbus-protocol, dbusiface-core: Take a reference when storing the core pointer.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 695e4a3..ca9ba58 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -1923,7 +1923,7 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
pa_assert(core);
c = pa_xnew(pa_dbusiface_core, 1);
- c->core = core;
+ c->core = pa_core_ref(core);
c->subscription = pa_subscription_new(core, PA_SUBSCRIPTION_MASK_ALL, subscription_cb, c);
c->dbus_protocol = pa_dbus_protocol_get(core);
c->cards = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
@@ -2044,6 +2044,7 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_hook_slot_free(c->extension_unregistered_slot);
pa_dbus_protocol_unref(c->dbus_protocol);
+ pa_core_unref(c->core);
pa_xfree(c);
}
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 475b952..8fc0803 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -117,7 +117,7 @@ static pa_dbus_protocol *dbus_protocol_new(pa_core *c) {
p = pa_xnew(pa_dbus_protocol, 1);
PA_REFCNT_INIT(p);
- p->core = c;
+ p->core = pa_core_ref(c);
p->objects = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
p->connections = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
p->extensions = pa_idxset_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
@@ -170,6 +170,8 @@ void pa_dbus_protocol_unref(pa_dbus_protocol *p) {
pa_assert_se(pa_shared_remove(p->core, "dbus-protocol") >= 0);
+ pa_core_unref(p->core);
+
pa_xfree(p);
}
commit 9eeb8eb2729cdc77fa98c704eb8fc7fcca15336b
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Aug 4 17:57:44 2009 +0300
dbus-protocol: Make debug logging saner.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 8fc0803..c82bb5f 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -308,7 +308,6 @@ static enum find_result_t find_handler_by_method(struct object_entry *obj_entry,
return FOUND_METHOD;
}
- pa_log("find_handler_by_method() failed.");
return NO_SUCH_METHOD;
}
@@ -331,7 +330,6 @@ static enum find_result_t find_handler_from_properties_call(struct object_entry
if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)))
return FOUND_GET_ALL;
else {
- pa_log("GetAll message has unknown interface: %s", interface);
return NO_SUCH_METHOD; /* XXX: NO_SUCH_INTERFACE or something like that might be more accurate. */
}
} else {
@@ -418,7 +416,10 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- pa_log("Received method call: destination = %s, name = %s, iface = %s", dbus_message_get_path(message), dbus_message_get_member(message), dbus_message_get_interface(message));
+ pa_log_debug("Received message: destination = %s, interface = %s, member = %s",
+ dbus_message_get_path(message),
+ dbus_message_get_interface(message),
+ dbus_message_get_member(message));
pa_assert_se((obj_entry = pa_hashmap_get(p->objects, dbus_message_get_path(message))));
@@ -428,8 +429,6 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
pa_assert_se(dbus_message_append_args(reply, DBUS_TYPE_STRING, &obj_entry->introspection, DBUS_TYPE_INVALID));
pa_assert_se(dbus_connection_send(connection, reply, NULL));
- pa_log_debug("%s.Introspect handled.", obj_entry->path);
-
goto finish;
}
@@ -633,7 +632,7 @@ int pa_dbus_protocol_add_interface(pa_dbus_protocol *p,
if (obj_entry_created)
register_object(p, obj_entry);
- pa_log("Interface %s added for object %s. GetAll callback? %s", iface_entry->name, obj_entry->path, iface_entry->get_all_properties_cb ? "yes" : "no");
+ pa_log_debug("Interface %s added for object %s", iface_entry->name, obj_entry->path);
return 0;
commit 0fc055226c60fa7429abf80e38f40a565f9e7922
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Aug 4 18:00:08 2009 +0300
dbus-protocol: Remove erroneous protocol object unref.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index c82bb5f..0609867 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -639,7 +639,6 @@ int pa_dbus_protocol_add_interface(pa_dbus_protocol *p,
fail:
if (obj_entry_created) {
pa_hashmap_remove(p->objects, path);
- pa_dbus_protocol_unref(p);
pa_xfree(obj_entry);
}
commit 44770c59e92f49288341afe8646d8bc39eb9f589
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Aug 4 18:01:26 2009 +0300
dbusiface-memstats: Implement the Memstats D-Bus interface.
diff --git a/src/Makefile.am b/src/Makefile.am
index 07f81a6..e10b4ab 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1281,6 +1281,7 @@ module_dbus_protocol_la_SOURCES = \
modules/dbus/iface-client.c modules/dbus/iface-client.h \
modules/dbus/iface-core.c modules/dbus/iface-core.h \
modules/dbus/iface-device.c modules/dbus/iface-device.h \
+ modules/dbus/iface-memstats.c modules/dbus/iface-memstats.h \
modules/dbus/iface-module.c modules/dbus/iface-module.h \
modules/dbus/iface-sample.c modules/dbus/iface-sample.h \
modules/dbus/iface-stream.c modules/dbus/iface-stream.h \
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index ca9ba58..ad729f9 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -41,6 +41,7 @@
#include "iface-card.h"
#include "iface-client.h"
#include "iface-device.h"
+#include "iface-memstats.h"
#include "iface-module.h"
#include "iface-sample.h"
#include "iface-stream.h"
@@ -114,6 +115,8 @@ struct pa_dbusiface_core {
pa_hook_slot *extension_registered_slot;
pa_hook_slot *extension_unregistered_slot;
+
+ pa_dbusiface_memstats *memstats;
};
enum property_handler_index {
@@ -1940,6 +1943,7 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
c->fallback_source = pa_namereg_get_default_source(core);
c->extension_registered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED, PA_HOOK_NORMAL, extension_registered_cb, c);
c->extension_unregistered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED, PA_HOOK_NORMAL, extension_unregistered_cb, c);
+ c->memstats = pa_dbusiface_memstats_new(core, OBJECT_PATH);
for (card = pa_idxset_first(core->cards, &idx); card; card = pa_idxset_next(core->cards, &idx))
pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(card, OBJECT_PATH));
@@ -2042,6 +2046,7 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_hashmap_free(c->clients, free_client_cb, NULL);
pa_hook_slot_free(c->extension_registered_slot);
pa_hook_slot_free(c->extension_unregistered_slot);
+ pa_dbusiface_memstats_free(c->memstats);
pa_dbus_protocol_unref(c->dbus_protocol);
pa_core_unref(c->core);
diff --git a/src/modules/dbus/iface-memstats.c b/src/modules/dbus/iface-memstats.c
new file mode 100644
index 0000000..d3412a2
--- /dev/null
+++ b/src/modules/dbus/iface-memstats.c
@@ -0,0 +1,231 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulsecore/core-scache.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/protocol-dbus.h>
+
+#include "iface-memstats.h"
+
+#define OBJECT_NAME "memstats"
+
+static void handle_get_current_memblocks(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_current_memblocks_size(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_accumulated_memblocks(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_accumulated_memblocks_size(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_cache_size(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+struct pa_dbusiface_memstats {
+ pa_core *core;
+ char *path;
+ pa_dbus_protocol *dbus_protocol;
+};
+
+enum property_handler_index {
+ PROPERTY_HANDLER_CURRENT_MEMBLOCKS,
+ PROPERTY_HANDLER_CURRENT_MEMBLOCKS_SIZE,
+ PROPERTY_HANDLER_ACCUMULATED_MEMBLOCKS,
+ PROPERTY_HANDLER_ACCUMULATED_MEMBLOCKS_SIZE,
+ PROPERTY_HANDLER_SAMPLE_CACHE_SIZE,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_CURRENT_MEMBLOCKS] = { .property_name = "CurrentMemblocks", .type = "u", .get_cb = handle_get_current_memblocks, .set_cb = NULL },
+ [PROPERTY_HANDLER_CURRENT_MEMBLOCKS_SIZE] = { .property_name = "CurrentMemblocksSize", .type = "u", .get_cb = handle_get_current_memblocks_size, .set_cb = NULL },
+ [PROPERTY_HANDLER_ACCUMULATED_MEMBLOCKS] = { .property_name = "AccumulatedMemblocks", .type = "u", .get_cb = handle_get_accumulated_memblocks, .set_cb = NULL },
+ [PROPERTY_HANDLER_ACCUMULATED_MEMBLOCKS_SIZE] = { .property_name = "AccumulatedMemblocksSize", .type = "u", .get_cb = handle_get_accumulated_memblocks_size, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_CACHE_SIZE] = { .property_name = "SampleCacheSize", .type = "u", .get_cb = handle_get_sample_cache_size, .set_cb = NULL }
+};
+
+static pa_dbus_interface_info memstats_interface_info = {
+ .name = PA_DBUSIFACE_MEMSTATS_INTERFACE,
+ .method_handlers = NULL,
+ .n_method_handlers = 0,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = NULL,
+ .n_signals = 0
+};
+
+static void handle_get_current_memblocks(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_memstats *m = userdata;
+ const pa_mempool_stat *stat;
+ dbus_uint32_t current_memblocks;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ stat = pa_mempool_get_stat(m->core->mempool);
+
+ current_memblocks = pa_atomic_load(&stat->n_allocated);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, ¤t_memblocks);
+}
+
+static void handle_get_current_memblocks_size(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_memstats *m = userdata;
+ const pa_mempool_stat *stat;
+ dbus_uint32_t current_memblocks_size;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ stat = pa_mempool_get_stat(m->core->mempool);
+
+ current_memblocks_size = pa_atomic_load(&stat->allocated_size);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, ¤t_memblocks_size);
+}
+
+static void handle_get_accumulated_memblocks(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_memstats *m = userdata;
+ const pa_mempool_stat *stat;
+ dbus_uint32_t accumulated_memblocks;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ stat = pa_mempool_get_stat(m->core->mempool);
+
+ accumulated_memblocks = pa_atomic_load(&stat->n_accumulated);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &accumulated_memblocks);
+}
+
+static void handle_get_accumulated_memblocks_size(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_memstats *m = userdata;
+ const pa_mempool_stat *stat;
+ dbus_uint32_t accumulated_memblocks_size;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ stat = pa_mempool_get_stat(m->core->mempool);
+
+ accumulated_memblocks_size = pa_atomic_load(&stat->accumulated_size);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &accumulated_memblocks_size);
+}
+
+static void handle_get_sample_cache_size(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_memstats *m = userdata;
+ dbus_uint32_t sample_cache_size;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ sample_cache_size = pa_scache_total_size(m->core);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sample_cache_size);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_memstats *m = userdata;
+ const pa_mempool_stat *stat;
+ dbus_uint32_t current_memblocks;
+ dbus_uint32_t current_memblocks_size;
+ dbus_uint32_t accumulated_memblocks;
+ dbus_uint32_t accumulated_memblocks_size;
+ dbus_uint32_t sample_cache_size;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ stat = pa_mempool_get_stat(m->core->mempool);
+
+ current_memblocks = pa_atomic_load(&stat->n_allocated);
+ current_memblocks_size = pa_atomic_load(&stat->allocated_size);
+ accumulated_memblocks = pa_atomic_load(&stat->n_accumulated);
+ accumulated_memblocks_size = pa_atomic_load(&stat->accumulated_size);
+ sample_cache_size = pa_scache_total_size(m->core);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CURRENT_MEMBLOCKS].property_name, DBUS_TYPE_UINT32, ¤t_memblocks);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CURRENT_MEMBLOCKS_SIZE].property_name, DBUS_TYPE_UINT32, ¤t_memblocks_size);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_ACCUMULATED_MEMBLOCKS].property_name, DBUS_TYPE_UINT32, &accumulated_memblocks);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_ACCUMULATED_MEMBLOCKS_SIZE].property_name, DBUS_TYPE_UINT32, &accumulated_memblocks_size);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_CACHE_SIZE].property_name, DBUS_TYPE_UINT32, &sample_cache_size);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+}
+
+pa_dbusiface_memstats *pa_dbusiface_memstats_new(pa_core *core, const char *path_prefix) {
+ pa_dbusiface_memstats *m;
+
+ pa_assert(core);
+ pa_assert(path_prefix);
+
+ m = pa_xnew(pa_dbusiface_memstats, 1);
+ m->core = pa_core_ref(core);
+ m->path = pa_sprintf_malloc("%s/%s", path_prefix, OBJECT_NAME);
+ m->dbus_protocol = pa_dbus_protocol_get(core);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(m->dbus_protocol, m->path, &memstats_interface_info, m) >= 0);
+
+ return m;
+}
+
+void pa_dbusiface_memstats_free(pa_dbusiface_memstats *m) {
+ pa_assert(m);
+
+ pa_assert_se(pa_dbus_protocol_remove_interface(m->dbus_protocol, m->path, memstats_interface_info.name) >= 0);
+
+ pa_xfree(m->path);
+
+ pa_dbus_protocol_unref(m->dbus_protocol);
+ pa_core_unref(m->core);
+
+ pa_xfree(m);
+}
+
+const char *pa_dbusiface_memstats_get_path(pa_dbusiface_memstats *m) {
+ pa_assert(m);
+
+ return m->path;
+}
diff --git a/src/modules/dbus/iface-memstats.h b/src/modules/dbus/iface-memstats.h
new file mode 100644
index 0000000..d7773ee
--- /dev/null
+++ b/src/modules/dbus/iface-memstats.h
@@ -0,0 +1,44 @@
+#ifndef foodbusifacememstatshfoo
+#define foodbusifacememstatshfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Memstats.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the Memstats interface
+ * documentation.
+ */
+
+#include <pulsecore/core.h>
+
+#include "iface-core.h"
+
+#define PA_DBUSIFACE_MEMSTATS_INTERFACE PA_DBUSIFACE_CORE_INTERFACE ".Memstats"
+
+typedef struct pa_dbusiface_memstats pa_dbusiface_memstats;
+
+pa_dbusiface_memstats *pa_dbusiface_memstats_new(pa_core *core, const char *path_prefix);
+void pa_dbusiface_memstats_free(pa_dbusiface_memstats *m);
+
+const char *pa_dbusiface_memstats_get_path(pa_dbusiface_memstats *m);
+
+#endif
commit 8eaa40b6f4cae749610770c85ba500f326d59b50
Author: zbt <huan.zheng at intel.com>
Date: Thu Jul 16 10:41:07 2009 +0800
Add volume ramping feature - envelop fix
diff --git a/src/pulsecore/envelope.c b/src/pulsecore/envelope.c
index fd6a948..0eca811 100644
--- a/src/pulsecore/envelope.c
+++ b/src/pulsecore/envelope.c
@@ -177,7 +177,7 @@ static int32_t item_get_int(pa_envelope_item *i, pa_usec_t x) {
pa_assert(i->j > 0);
pa_assert(i->def->points_x[i->j-1] <= x);
- pa_assert(x < i->def->points_x[i->j]);
+ pa_assert(x <= i->def->points_x[i->j]);
return linear_interpolate_int(i->def->points_x[i->j-1], i->def->points_y.i[i->j-1],
i->def->points_x[i->j], i->def->points_y.i[i->j], x);
@@ -200,7 +200,7 @@ static float item_get_float(pa_envelope_item *i, pa_usec_t x) {
pa_assert(i->j > 0);
pa_assert(i->def->points_x[i->j-1] <= x);
- pa_assert(x < i->def->points_x[i->j]);
+ pa_assert(x <= i->def->points_x[i->j]);
return linear_interpolate_float(i->def->points_x[i->j-1], i->def->points_y.f[i->j-1],
i->def->points_x[i->j], i->def->points_y.f[i->j], x);
@@ -550,7 +550,7 @@ static int32_t linear_get_int(pa_envelope *e, int v) {
e->points[v].cached_valid = TRUE;
}
- return e->points[v].y.i[e->points[v].n_current] + (e->points[v].cached_dy_i * (int32_t) (e->x - e->points[v].x[e->points[v].n_current])) / (int32_t) e->points[v].cached_dx;
+ return e->points[v].y.i[e->points[v].n_current] + ((float)e->points[v].cached_dy_i * (int32_t) (e->x - e->points[v].x[e->points[v].n_current])) / (int32_t) e->points[v].cached_dx;
}
static float linear_get_float(pa_envelope *e, int v) {
@@ -597,34 +597,60 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
fs = pa_frame_size(&e->sample_spec);
n = chunk->length;
+ pa_log_debug("Envelop position %d applying factor %d=%f, sample spec is %d, chunk's length is %d, fs is %d\n", e->x, linear_get_int(e, v), ((float) linear_get_int(e,v))/0x10000, e->sample_spec.format, n, fs);
+
switch (e->sample_spec.format) {
case PA_SAMPLE_U8: {
- uint8_t *t;
+ uint8_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (uint8_t*) p + n;
- for (c = 0; c < e->sample_spec.channels; c++, t++)
- *t = (uint8_t) (((factor * ((int16_t) *t - 0x80)) / 0x10000) + 0x80);
+ for (channel = 0, d = p; d < s; d++) {
+ int32_t t, hi, lo;
+
+ hi = factor >> 16;
+ lo = factor & 0xFFFF;
+
+ t = (int32_t) *d - 0x80;
+ t = ((t * lo) >> 16) + (t * hi);
+ t = PA_CLAMP_UNLIKELY(t, -0x80, 0x7F);
+ *d = (uint8_t) (t + 0x80);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
}
break;
}
case PA_SAMPLE_ULAW: {
- uint8_t *t;
+ uint8_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (uint8_t*) p + n;
- for (c = 0; c < e->sample_spec.channels; c++, t++) {
- int16_t k = st_ulaw2linear16(*t);
- *t = (uint8_t) st_14linear2ulaw((int16_t) (((factor * k) / 0x10000) >> 2));
+ for (channel = 0, d = p; d < s; d++) {
+ int32_t t, hi, lo;
+
+ hi = factor >> 16;
+ lo = factor & 0xFFFF;
+
+ t = (int32_t) st_ulaw2linear16(*d);
+ t = ((t * lo) >> 16) + (t * hi);
+ t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
+ *d = (uint8_t) st_14linear2ulaw((int16_t) t >> 2);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
}
}
@@ -632,16 +658,27 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
}
case PA_SAMPLE_ALAW: {
- uint8_t *t;
+ uint8_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (uint8_t*) p + n;
- for (c = 0; c < e->sample_spec.channels; c++, t++) {
- int16_t k = st_alaw2linear16(*t);
- *t = (uint8_t) st_13linear2alaw((int16_t) (((factor * k) / 0x10000) >> 3));
+ for (channel = 0, d = p; d < s; d++) {
+ int32_t t, hi, lo;
+
+ hi = factor >> 16;
+ lo = factor & 0xFFFF;
+
+ t = (int32_t) st_alaw2linear16(*d);
+ t = ((t * lo) >> 16) + (t * hi);
+ t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
+ *d = (uint8_t) st_13linear2alaw((int16_t) t >> 3);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
}
}
@@ -649,31 +686,55 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
}
case PA_SAMPLE_S16NE: {
- int16_t *t;
+ int16_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (int16_t*) p + n/sizeof(int16_t);
- for (c = 0; c < e->sample_spec.channels; c++, t++)
- *t = (int16_t) ((factor * *t) / 0x10000);
+ for (channel = 0, d = p; d < s; d++) {
+ int32_t t, hi, lo;
+
+ hi = factor >> 16;
+ lo = factor & 0xFFFF;
+
+ t = (int32_t)(*d);
+ t = ((t * lo) >> 16) + (t * hi);
+ t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
+ *d = (int16_t) t;
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
}
break;
}
case PA_SAMPLE_S16RE: {
- int16_t *t;
+ int16_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (int16_t*) p + n/sizeof(int16_t);
- for (c = 0; c < e->sample_spec.channels; c++, t++) {
- int16_t r = (int16_t) ((factor * PA_INT16_SWAP(*t)) / 0x10000);
- *t = PA_INT16_SWAP(r);
+ for (channel = 0, d = p; d < s; d++) {
+ int32_t t, hi, lo;
+
+ hi = factor >> 16;
+ lo = factor & 0xFFFF;
+
+ t = (int32_t) PA_INT16_SWAP(*d);
+ t = ((t * lo) >> 16) + (t * hi);
+ t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
+ *d = PA_INT16_SWAP((int16_t) t);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
}
}
@@ -681,31 +742,49 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
}
case PA_SAMPLE_S32NE: {
- int32_t *t;
+ int32_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (int32_t*) p + n/sizeof(int32_t);
- for (c = 0; c < e->sample_spec.channels; c++, t++)
- *t = (int32_t) (((int64_t) factor * (int64_t) *t) / 0x10000);
+ for (channel = 0, d = p; d < s; d++) {
+ int64_t t;
+
+ t = (int64_t)(*d);
+ t = (t * factor) >> 16;
+ t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
+ *d = (int32_t) t;
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
}
break;
}
case PA_SAMPLE_S32RE: {
- int32_t *t;
+ int32_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
- for (t = p; n > 0; n -= fs) {
- int32_t factor = linear_get_int(e, v);
- unsigned c;
- e->x += fs;
+ s = (int32_t*) p + n/sizeof(int32_t);
- for (c = 0; c < e->sample_spec.channels; c++, t++) {
- int32_t r = (int32_t) (((int64_t) factor * (int64_t) PA_INT32_SWAP(*t)) / 0x10000);
- *t = PA_INT32_SWAP(r);
+ for (channel = 0, d = p; d < s; d++) {
+ int64_t t;
+
+ t = (int64_t) PA_INT32_SWAP(*d);
+ t = (t * factor) >> 16;
+ t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
+ *d = PA_INT32_SWAP((int32_t) t);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
}
}
@@ -713,6 +792,7 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
}
case PA_SAMPLE_FLOAT32NE: {
+ /*Seems the FLOAT32NE part of pa_volume_memchunk not right, do not reuse here*/
float *t;
for (t = p; n > 0; n -= fs) {
@@ -728,6 +808,7 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
}
case PA_SAMPLE_FLOAT32RE: {
+ /*Seems the FLOAT32RE part of pa_volume_memchunk not right, do not reuse here*/
float *t;
for (t = p; n > 0; n -= fs) {
@@ -744,10 +825,101 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
break;
}
- case PA_SAMPLE_S24LE:
- case PA_SAMPLE_S24BE:
- case PA_SAMPLE_S24_32LE:
- case PA_SAMPLE_S24_32BE:
+ case PA_SAMPLE_S24NE: {
+ uint8_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
+
+ s = (uint8_t*) p + n/3;
+
+ for (channel = 0, d = p; d < s; d++) {
+ int64_t t;
+
+ t = (int64_t)((int32_t) (PA_READ24NE(d) << 8));
+ t = (t * factor) >> 16;
+ t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
+ PA_WRITE24NE(d, ((uint32_t) (int32_t) t) >> 8);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
+ }
+
+ break;
+ }
+ case PA_SAMPLE_S24RE: {
+ uint8_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
+
+ s = (uint8_t*) p + n/3;
+
+ for (channel = 0, d = p; d < s; d++) {
+ int64_t t;
+
+ t = (int64_t)((int32_t) (PA_READ24RE(d) << 8));
+ t = (t * factor) >> 16;
+ t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
+ PA_WRITE24RE(d, ((uint32_t) (int32_t) t) >> 8);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
+ }
+
+ break;
+ }
+ case PA_SAMPLE_S24_32NE: {
+ uint32_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
+
+ s = (uint32_t*) p + n/sizeof(uint32_t);
+
+ for (channel = 0, d = p; d < s; d++) {
+ int64_t t;
+
+ t = (int64_t) ((int32_t) (*d << 8));
+ t = (t * factor) >> 16;
+ t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
+ *d = ((uint32_t) ((int32_t) t)) >> 8;
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
+ }
+
+ break;
+ }
+ case PA_SAMPLE_S24_32RE: {
+ uint32_t *d, *s;
+ unsigned channel;
+ int32_t factor = linear_get_int(e, v);
+
+ s = (uint32_t*) p + n/sizeof(uint32_t);
+
+ for (channel = 0, d = p; d < s; d++) {
+ int64_t t;
+
+ t = (int64_t) ((int32_t) (PA_UINT32_SWAP(*d) << 8));
+ t = (t * factor) >> 16;
+ t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
+ *d = PA_UINT32_SWAP(((uint32_t) ((int32_t) t)) >> 8);
+
+ if (PA_UNLIKELY(++channel >= e->sample_spec.channels)) {
+ channel = 0;
+ e->x += fs;
+ factor = linear_get_int(e, v);
+ }
+ }
+ break;
+ }
/* FIXME */
pa_assert_not_reached();
@@ -757,8 +929,6 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
}
pa_memblock_release(chunk->memblock);
-
- e->x += chunk->length;
} else {
/* When we have no envelope to apply we reset our origin */
e->x = 0;
@@ -774,13 +944,48 @@ void pa_envelope_rewind(pa_envelope *e, size_t n_bytes) {
envelope_begin_read(e, &v);
- if (n_bytes < e->x)
- e->x -= n_bytes;
+ if (e->x - n_bytes <= e->points[v].x[0])
+ e->x = e->points[v].x[0];
else
- e->x = 0;
+ e->x -= n_bytes;
e->points[v].n_current = 0;
e->points[v].cached_valid = FALSE;
envelope_commit_read(e, v);
}
+
+void pa_envelope_restart(pa_envelope* e) {
+ int v;
+ pa_assert(e);
+
+ envelope_begin_read(e, &v);
+ e->x = e->points[v].x[0];
+ envelope_commit_read(e, v);
+}
+
+pa_bool_t pa_envelope_is_finished(pa_envelope* e) {
+ pa_assert(e);
+
+ int v;
+ pa_bool_t finished;
+
+ envelope_begin_read(e, &v);
+ finished = (e->x >= e->points[v].x[e->points[v].n_points-1]);
+ envelope_commit_read(e, v);
+
+ return finished;
+}
+
+int32_t pa_envelope_length(pa_envelope *e) {
+ pa_assert(e);
+
+ int v;
+ size_t size;
+
+ envelope_begin_read(e, &v);
+ size = e->points[v].x[e->points[v].n_points-1] - e->points[v].x[0];
+ envelope_commit_read(e, v);
+
+ return size;
+}
diff --git a/src/pulsecore/envelope.h b/src/pulsecore/envelope.h
index 5296415..4fa3657 100644
--- a/src/pulsecore/envelope.h
+++ b/src/pulsecore/envelope.h
@@ -49,5 +49,8 @@ pa_envelope_item *pa_envelope_replace(pa_envelope *e, pa_envelope_item *i, const
void pa_envelope_remove(pa_envelope *e, pa_envelope_item *i);
void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk);
void pa_envelope_rewind(pa_envelope *e, size_t n_bytes);
+void pa_envelope_restart(pa_envelope* e);
+pa_bool_t pa_envelope_is_finished(pa_envelope* e);
+int32_t pa_envelope_length(pa_envelope *e);
#endif
commit 5318eb35ef3f91836084382a4f3d5ef08d322554
Author: zbt <huan.zheng at intel.com>
Date: Thu Jul 16 10:41:34 2009 +0800
Add volume ramping feature - sink-input modification
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index a5f9635..2acaa08 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -38,6 +38,7 @@
#include <pulsecore/play-memblockq.h>
#include <pulsecore/namereg.h>
#include <pulsecore/core-util.h>
+#include <pulse/timeval.h>
#include "sink-input.h"
@@ -47,6 +48,11 @@
static PA_DEFINE_CHECK_TYPE(pa_sink_input, pa_msgobject);
static void sink_input_free(pa_object *o);
+static void sink_input_set_ramping_info(pa_sink_input* i, pa_volume_t pre_virtual_volume, pa_volume_t target_virtual_volume, pa_usec_t t);
+static void sink_input_set_ramping_info_for_mute(pa_sink_input* i, pa_bool_t mute, pa_usec_t t);
+static void sink_input_volume_ramping(pa_sink_input* i, pa_memchunk* chunk);
+static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes);
+static void sink_input_release_envelope(pa_sink_input *i);
pa_sink_input_new_data* pa_sink_input_new_data_init(pa_sink_input_new_data *data) {
pa_assert(data);
@@ -301,6 +307,16 @@ int pa_sink_input_new(
reset_callbacks(i);
i->userdata = NULL;
+ /* Set Ramping info */
+ i->thread_info.ramp_info.is_ramping = FALSE;
+ i->thread_info.ramp_info.envelope_dead = TRUE;
+ i->thread_info.ramp_info.envelope = NULL;
+ i->thread_info.ramp_info.item = NULL;
+ i->thread_info.ramp_info.envelope_dying = 0;
+
+ pa_atomic_store(&i->before_ramping_v, 0);
+ pa_atomic_store(&i->before_ramping_m, 0);
+
i->thread_info.state = i->state;
i->thread_info.attached = FALSE;
pa_atomic_store(&i->thread_info.drained, 1);
@@ -480,6 +496,12 @@ static void sink_input_free(pa_object *o) {
pa_assert(!i->thread_info.attached);
+ if (i->thread_info.ramp_info.envelope) {
+ pa_log_debug ("Freeing envelope\n");
+ pa_envelope_free(i->thread_info.ramp_info.envelope);
+ i->thread_info.ramp_info.envelope = NULL;
+ }
+
if (i->thread_info.render_memblockq)
pa_memblockq_free(i->thread_info.render_memblockq);
@@ -565,6 +587,7 @@ pa_usec_t pa_sink_input_get_latency(pa_sink_input *i, pa_usec_t *sink_latency) {
void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, pa_memchunk *chunk, pa_cvolume *volume) {
pa_bool_t do_volume_adj_here;
pa_bool_t volume_is_norm;
+ pa_bool_t ramping;
size_t block_size_max_sink, block_size_max_sink_input;
size_t ilength;
@@ -608,7 +631,7 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p
* to adjust the volume *before* we resample. Otherwise we can do
* it after and leave it for the sink code */
- do_volume_adj_here = !pa_channel_map_equal(&i->channel_map, &i->sink->channel_map);
+ do_volume_adj_here = !pa_channel_map_equal(&i->channel_map, &i->sink->channel_map) || i->thread_info.ramp_info.is_ramping;
volume_is_norm = pa_cvolume_is_norm(&i->thread_info.soft_volume) && !i->thread_info.muted;
while (!pa_memblockq_is_readable(i->thread_info.render_memblockq)) {
@@ -649,7 +672,7 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p
wchunk.length = block_size_max_sink_input;
/* It might be necessary to adjust the volume here */
- if (do_volume_adj_here && !volume_is_norm) {
+ if (do_volume_adj_here && !volume_is_norm && !i->thread_info.ramp_info.is_ramping) {
pa_memchunk_make_writable(&wchunk, 0);
if (i->thread_info.muted)
@@ -691,6 +714,23 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p
if (chunk->length > block_size_max_sink)
chunk->length = block_size_max_sink;
+ ramping = i->thread_info.ramp_info.is_ramping;
+ if (ramping)
+ sink_input_volume_ramping(i, chunk);
+
+ if (!i->thread_info.ramp_info.envelope_dead) {
+ i->thread_info.ramp_info.envelope_dying += chunk->length;
+ pa_log_debug("Envelope dying is %d, chunk length is %d, dead thresholder is %d\n", i->thread_info.ramp_info.envelope_dying,
+ chunk->length,
+ i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope));
+
+ if (i->thread_info.ramp_info.envelope_dying >= (i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope))) {
+ pa_log_debug("RELEASE Envelop");
+ i->thread_info.ramp_info.envelope_dead = TRUE;
+ sink_input_release_envelope(i);
+ }
+ }
+
/* Let's see if we had to apply the volume adjustment ourselves,
* or if this can be done by the sink for us */
@@ -733,6 +773,7 @@ void pa_sink_input_process_rewind(pa_sink_input *i, size_t nbytes /* in sink sam
if (nbytes > 0 && !i->thread_info.dont_rewind_render) {
pa_log_debug("Have to rewind %lu bytes on render memblockq.", (unsigned long) nbytes);
pa_memblockq_rewind(i->thread_info.render_memblockq, nbytes);
+ sink_input_rewind_ramp_info(i, nbytes);
}
if (i->thread_info.rewrite_nbytes == (size_t) -1) {
@@ -873,50 +914,8 @@ pa_usec_t pa_sink_input_get_requested_latency(pa_sink_input *i) {
/* Called from main context */
void pa_sink_input_set_volume(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute) {
- pa_cvolume v;
-
- pa_sink_input_assert_ref(i);
- pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
- pa_assert(volume);
- pa_assert(pa_cvolume_valid(volume));
- pa_assert(pa_cvolume_compatible(volume, &i->sample_spec));
-
- if ((i->sink->flags & PA_SINK_FLAT_VOLUME) && !absolute) {
- v = i->sink->reference_volume;
- pa_cvolume_remap(&v, &i->sink->channel_map, &i->channel_map);
- volume = pa_sw_cvolume_multiply(&v, &v, volume);
- }
-
- if (pa_cvolume_equal(volume, &i->virtual_volume))
- return;
-
- i->virtual_volume = *volume;
- i->save_volume = save;
-
- if (i->sink->flags & PA_SINK_FLAT_VOLUME) {
- pa_cvolume new_volume;
-
- /* We are in flat volume mode, so let's update all sink input
- * volumes and update the flat volume of the sink */
-
- pa_sink_update_flat_volume(i->sink, &new_volume);
- pa_sink_set_volume(i->sink, &new_volume, FALSE, TRUE, FALSE, FALSE);
-
- } else {
-
- /* OK, we are in normal volume mode. The volume only affects
- * ourselves */
- pa_sink_input_set_relative_volume(i, volume);
-
- /* Hooks have the ability to play games with i->soft_volume */
- pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
-
- /* Copy the new soft_volume to the thread_info struct */
- pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);
- }
-
- /* The virtual volume changed, let's tell people so */
- pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+ /* test ramping -> return pa_sink_input_set_volume_with_ramping(i, volume, save, absolute, 2000 * PA_USEC_PER_MSEC); */
+ return pa_sink_input_set_volume_with_ramping(i, volume, save, absolute, 0);
}
/* Called from main context */
@@ -985,18 +984,8 @@ void pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v) {
/* Called from main context */
void pa_sink_input_set_mute(pa_sink_input *i, pa_bool_t mute, pa_bool_t save) {
- pa_assert(i);
- pa_sink_input_assert_ref(i);
- pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
-
- if (!i->muted == !mute)
- return;
-
- i->muted = mute;
- i->save_muted = save;
-
- pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE, NULL, 0, NULL) == 0);
- pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+ /* test ramping -> return pa_sink_input_set_mute_with_ramping(i, mute, save, 2000 * PA_USEC_PER_MSEC); */
+ return pa_sink_input_set_mute_with_ramping(i, mute, save, 0);
}
/* Called from main context */
@@ -1347,15 +1336,23 @@ int pa_sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int64_t
switch (code) {
case PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME:
+ if (pa_atomic_load(&i->before_ramping_v))
+ i->thread_info.future_soft_volume = i->soft_volume;
+
if (!pa_cvolume_equal(&i->thread_info.soft_volume, &i->soft_volume)) {
- i->thread_info.soft_volume = i->soft_volume;
+ if (!pa_atomic_load(&i->before_ramping_v))
+ i->thread_info.soft_volume = i->soft_volume;
pa_sink_input_request_rewind(i, 0, TRUE, FALSE, FALSE);
}
return 0;
case PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE:
+ if (pa_atomic_load(&i->before_ramping_m))
+ i->thread_info.future_muted = i->muted;
+
if (i->thread_info.muted != i->muted) {
- i->thread_info.muted = i->muted;
+ if (!pa_atomic_load(&i->before_ramping_m))
+ i->thread_info.muted = i->muted;
pa_sink_input_request_rewind(i, 0, TRUE, FALSE, FALSE);
}
return 0;
@@ -1403,6 +1400,26 @@ int pa_sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int64_t
*r = i->thread_info.requested_sink_latency;
return 0;
}
+
+ case PA_SINK_INPUT_MESSAGE_SET_ENVELOPE: {
+ if (!i->thread_info.ramp_info.envelope)
+ i->thread_info.ramp_info.envelope = pa_envelope_new(&i->sink->sample_spec);
+
+ if (i->thread_info.ramp_info.envelope && i->thread_info.ramp_info.item) {
+ pa_envelope_remove(i->thread_info.ramp_info.envelope, i->thread_info.ramp_info.item);
+ i->thread_info.ramp_info.item = NULL;
+ }
+
+ i->thread_info.ramp_info.item = pa_envelope_add(i->thread_info.ramp_info.envelope, &i->using_def);
+ i->thread_info.ramp_info.is_ramping = TRUE;
+ i->thread_info.ramp_info.envelope_dead = FALSE;
+ i->thread_info.ramp_info.envelope_dying = 0;
+
+ if (i->thread_info.ramp_info.envelope)
+ pa_envelope_restart(i->thread_info.ramp_info.envelope);
+
+ return 0;
+ }
}
return -PA_ERR_NOTIMPLEMENTED;
@@ -1550,3 +1567,217 @@ finish:
if (pl)
pa_proplist_free(pl);
}
+
+/* Called from IO context */
+static void sink_input_volume_ramping(pa_sink_input* i, pa_memchunk* chunk) {
+ pa_assert(i);
+ pa_assert(chunk);
+ pa_assert(chunk->memblock);
+ pa_assert(i->thread_info.ramp_info.is_ramping);
+
+ /* Volume is adjusted with ramping effect here */
+ pa_envelope_apply(i->thread_info.ramp_info.envelope, chunk);
+
+ if (pa_envelope_is_finished(i->thread_info.ramp_info.envelope)) {
+ i->thread_info.ramp_info.is_ramping = FALSE;
+ if (pa_atomic_load(&i->before_ramping_v)) {
+ i->thread_info.soft_volume = i->thread_info.future_soft_volume;
+ pa_atomic_store(&i->before_ramping_v, 0);
+ }
+ else if (pa_atomic_load(&i->before_ramping_m)) {
+ i->thread_info.muted = i->thread_info.future_muted;
+ pa_atomic_store(&i->before_ramping_m, 0);
+ }
+ }
+}
+
+/*
+ * Called from main context
+ * This function should be called inside pa_sink_input_set_volume_with_ramping
+ * should be called after soft_volume of sink_input and sink are all adjusted
+ */
+static void sink_input_set_ramping_info(pa_sink_input* i, pa_volume_t pre_virtual_volume, pa_volume_t target_virtual_volume, pa_usec_t t) {
+
+ int32_t target_abs_vol, target_apply_vol, pre_apply_vol;
+ pa_assert(i);
+
+ pa_log_debug("Sink input's soft volume is %d= %f ", pa_cvolume_avg(&i->soft_volume), pa_sw_volume_to_linear(pa_cvolume_avg(&i->soft_volume)));
+
+ /* Calculation formula are target_abs_vol := i->soft_volume
+ * target_apply_vol := lrint(pa_sw_volume_to_linear(target_abs_vol) * 0x10000)
+ * pre_apply_vol := ( previous_virtual_volume / target_virtual_volume ) * target_apply_vol
+ *
+ * Will do volume adjustment inside pa_sink_input_peek
+ */
+ target_abs_vol = pa_cvolume_avg(&i->soft_volume);
+ target_apply_vol = (int32_t) lrint(pa_sw_volume_to_linear(target_abs_vol) * 0x10000);
+ pre_apply_vol = (int32_t) ((pa_sw_volume_to_linear(pre_virtual_volume) / pa_sw_volume_to_linear(target_virtual_volume)) * target_apply_vol);
+
+ i->using_def.n_points = 2;
+ i->using_def.points_x[0] = 0;
+ i->using_def.points_x[1] = t;
+ i->using_def.points_y.i[0] = pre_apply_vol;
+ i->using_def.points_y.i[1] = target_apply_vol;
+ i->using_def.points_y.f[0] = ((float) i->using_def.points_y.i[0]) /0x10000;
+ i->using_def.points_y.f[1] = ((float) i->using_def.points_y.i[1]) /0x10000;
+
+ pa_log_debug("Volume Ramping: Point 1 is %d=%f, Point 2 is %d=%f\n", i->using_def.points_y.i[0], i->using_def.points_y.f[0],
+ i->using_def.points_y.i[1], i->using_def.points_y.f[1]);
+
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_ENVELOPE, NULL, 0, NULL) == 0);
+}
+
+/* Called from main context */
+static void sink_input_set_ramping_info_for_mute(pa_sink_input* i, pa_bool_t mute, pa_usec_t t) {
+
+ int32_t cur_vol;
+ pa_assert(i);
+
+ i->using_def.n_points = 2;
+ i->using_def.points_x[0] = 0;
+ i->using_def.points_x[1] = t;
+ cur_vol = (int32_t) lrint( pa_sw_volume_to_linear(pa_cvolume_avg(&i->soft_volume)) * 0x10000);
+
+ if (mute) {
+ i->using_def.points_y.i[0] = cur_vol;
+ i->using_def.points_y.i[1] = 0;
+ } else {
+ i->using_def.points_y.i[0] = 0;
+ i->using_def.points_y.i[1] = cur_vol;
+ }
+
+ i->using_def.points_y.f[0] = ((float) i->using_def.points_y.i[0]) /0x10000;
+ i->using_def.points_y.f[1] = ((float) i->using_def.points_y.i[1]) /0x10000;
+
+ pa_log_debug("Mute Ramping: Point 1 is %d=%f, Point 2 is %d=%f\n", i->using_def.points_y.i[0], i->using_def.points_y.f[0],
+ i->using_def.points_y.i[1], i->using_def.points_y.f[1]);
+
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_ENVELOPE, NULL, 0, NULL) == 0);
+}
+
+/* Called from IO context */
+static void sink_input_release_envelope(pa_sink_input *i) {
+ pa_assert(i);
+ pa_assert(!i->thread_info.ramp_info.is_ramping);
+ pa_assert(i->thread_info.ramp_info.envelope_dead);
+
+ pa_envelope_free(i->thread_info.ramp_info.envelope);
+ i->thread_info.ramp_info.envelope = NULL;
+ i->thread_info.ramp_info.item = NULL;
+}
+
+/* Called from IO context */
+static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {
+ pa_assert(i);
+
+ if (!i->thread_info.ramp_info.envelope_dead) {
+ pa_assert(i->thread_info.ramp_info.envelope);
+
+ int32_t envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
+
+ if (i->thread_info.ramp_info.envelope_dying > envelope_length) {
+ if ((i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length) {
+ pa_log_debug("Envelope Become Alive");
+ pa_envelope_rewind(i->thread_info.ramp_info.envelope, envelope_length - (i->thread_info.ramp_info.envelope_dying - nbytes));
+ i->thread_info.ramp_info.is_ramping = TRUE;
+ }
+ } else if (i->thread_info.ramp_info.envelope_dying < envelope_length) {
+ if ((i->thread_info.ramp_info.envelope_dying - nbytes) <= 0) {
+ pa_log_debug("Envelope Restart");
+ pa_envelope_restart(i->thread_info.ramp_info.envelope);
+ }
+ else {
+ pa_log_debug("Envelope Simple Rewind");
+ pa_envelope_rewind(i->thread_info.ramp_info.envelope, nbytes);
+ }
+ }
+
+ i->thread_info.ramp_info.envelope_dying -= nbytes;
+ if (i->thread_info.ramp_info.envelope_dying <= 0)
+ i->thread_info.ramp_info.envelope_dying = 0;
+ }
+}
+
+void pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute, pa_usec_t t){
+ pa_cvolume v;
+ pa_volume_t previous_virtual_volume, target_virtual_volume;
+ pa_sink_input_assert_ref(i);
+
+ pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
+ pa_assert(volume);
+ pa_assert(pa_cvolume_valid(volume));
+ pa_assert(pa_cvolume_compatible(volume, &i->sample_spec));
+
+ if ((i->sink->flags & PA_SINK_FLAT_VOLUME) && !absolute) {
+ v = i->sink->reference_volume;
+ pa_cvolume_remap(&v, &i->sink->channel_map, &i->channel_map);
+ volume = pa_sw_cvolume_multiply(&v, &v, volume);
+ }
+
+ if (pa_cvolume_equal(volume, &i->virtual_volume))
+ return;
+
+ previous_virtual_volume = pa_cvolume_avg(&i->virtual_volume);
+ target_virtual_volume = pa_cvolume_avg(volume);
+ if (t > 0 && target_virtual_volume > 0)
+ pa_log_debug("SetVolumeWithRamping: Virtual Volume From %u=%f to %u=%f\n", previous_virtual_volume, pa_sw_volume_to_linear(previous_virtual_volume),
+ target_virtual_volume, pa_sw_volume_to_linear(target_virtual_volume));
+
+ i->virtual_volume = *volume;
+ i->save_volume = save;
+
+ /* Set this flag before the following code modify i->thread_info.soft_volume */
+ if (t > 0 && target_virtual_volume > 0)
+ pa_atomic_store(&i->before_ramping_v, 1);
+
+ if (i->sink->flags & PA_SINK_FLAT_VOLUME) {
+ pa_cvolume new_volume;
+
+ /* We are in flat volume mode, so let's update all sink input
+ * volumes and update the flat volume of the sink */
+
+ pa_sink_update_flat_volume(i->sink, &new_volume);
+ pa_sink_set_volume(i->sink, &new_volume, FALSE, TRUE, FALSE, FALSE);
+
+ } else {
+
+ /* OK, we are in normal volume mode. The volume only affects
+ * ourselves */
+ pa_sink_input_set_relative_volume(i, volume);
+
+ /* Hooks have the ability to play games with i->soft_volume */
+ pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
+
+ /* Copy the new soft_volume to the thread_info struct */
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);
+ }
+
+ if (t > 0 && target_virtual_volume > 0)
+ sink_input_set_ramping_info(i, previous_virtual_volume, target_virtual_volume, t);
+
+ /* The virtual volume changed, let's tell people so */
+ pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+}
+
+void pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t save, pa_usec_t t){
+
+ pa_assert(i);
+ pa_sink_input_assert_ref(i);
+ pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
+
+ if (!i->muted == !mute)
+ return;
+
+ i->muted = mute;
+ i->save_muted = save;
+ /* Set this flag before the following code modify i->thread_info.muted, otherwise distortion will be heard */
+ if (t > 0)
+ pa_atomic_store(&i->before_ramping_m, 1);
+
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE, NULL, 0, NULL) == 0);
+
+ if (t > 0)
+ sink_input_set_ramping_info_for_mute(i, mute, t);
+
+ pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+}
diff --git a/src/pulsecore/sink-input.h b/src/pulsecore/sink-input.h
index 98144d4..036806f 100644
--- a/src/pulsecore/sink-input.h
+++ b/src/pulsecore/sink-input.h
@@ -35,6 +35,7 @@ typedef struct pa_sink_input pa_sink_input;
#include <pulsecore/client.h>
#include <pulsecore/sink.h>
#include <pulsecore/core.h>
+#include <pulsecore/envelope.h>
typedef enum pa_sink_input_state {
PA_SINK_INPUT_INIT, /*< The stream is not active yet, because pa_sink_put() has not been called yet */
@@ -212,8 +213,23 @@ struct pa_sink_input {
pa_usec_t requested_sink_latency;
pa_hashmap *direct_outputs;
+
+ struct {
+ pa_bool_t is_ramping:1;
+ pa_bool_t envelope_dead:1;
+ int32_t envelope_dying; /* Increasing while envelop is not dead. Reduce it while process_rewind. */
+ pa_envelope *envelope;
+ pa_envelope_item *item;
+ } ramp_info;
+ pa_cvolume future_soft_volume;
+ pa_bool_t future_muted;
+
} thread_info;
+ pa_atomic_t before_ramping_v; /* Indicates future volume */
+ pa_atomic_t before_ramping_m; /* Indicates future mute */
+ pa_envelope_def using_def;
+
void *userdata;
};
@@ -228,6 +244,7 @@ enum {
PA_SINK_INPUT_MESSAGE_SET_STATE,
PA_SINK_INPUT_MESSAGE_SET_REQUESTED_LATENCY,
PA_SINK_INPUT_MESSAGE_GET_REQUESTED_LATENCY,
+ PA_SINK_INPUT_MESSAGE_SET_ENVELOPE,
PA_SINK_INPUT_MESSAGE_MAX
};
@@ -359,4 +376,8 @@ pa_memchunk* pa_sink_input_get_silence(pa_sink_input *i, pa_memchunk *ret);
/* To be used by sink.c only */
void pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v);
+/* Volume ramping*/
+void pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute, pa_usec_t t);
+void pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t save, pa_usec_t t);
+
#endif
commit 897ef86b7fbb87ef17d30c584e6cd93abfc342bc
Author: zbt <huan.zheng at intel.com>
Date: Thu Jul 16 10:41:58 2009 +0800
Add volume ramping feature - sink modification
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index d8f3c7d..2950071 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1599,10 +1599,14 @@ static void sync_input_volumes_within_thread(pa_sink *s) {
pa_sink_assert_ref(s);
while ((i = PA_SINK_INPUT(pa_hashmap_iterate(s->thread_info.inputs, &state, NULL)))) {
+ if (pa_atomic_load(&i->before_ramping_v))
+ i->thread_info.future_soft_volume = i->soft_volume;
+
if (pa_cvolume_equal(&i->thread_info.soft_volume, &i->soft_volume))
continue;
- i->thread_info.soft_volume = i->soft_volume;
+ if (!pa_atomic_load(&i->before_ramping_v))
+ i->thread_info.soft_volume = i->soft_volume;
pa_sink_input_request_rewind(i, 0, TRUE, FALSE, FALSE);
}
}
commit 1457df40eee692834d1c5faf95ca0057d74f86d1
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 07:59:06 2009 +0300
proplist: New function: pa_proplist_equal()
diff --git a/src/map-file b/src/map-file
index a1d0a06..3db3a2d 100644
--- a/src/map-file
+++ b/src/map-file
@@ -180,6 +180,7 @@ pa_path_get_filename;
pa_proplist_clear;
pa_proplist_contains;
pa_proplist_copy;
+pa_proplist_equal;
pa_proplist_free;
pa_proplist_from_string;
pa_proplist_get;
diff --git a/src/pulse/proplist.c b/src/pulse/proplist.c
index c904f53..4f0d6a6 100644
--- a/src/pulse/proplist.c
+++ b/src/pulse/proplist.c
@@ -680,3 +680,29 @@ int pa_proplist_isempty(pa_proplist *p) {
return pa_hashmap_isempty(MAKE_HASHMAP(p));
}
+
+int pa_proplist_equal(pa_proplist *a, pa_proplist *b) {
+ const void *key = NULL;
+ struct property *a_prop = NULL;
+ struct property *b_prop = NULL;
+ void *state = NULL;
+
+ pa_assert(a);
+ pa_assert(b);
+
+ if (pa_proplist_size(a) != pa_proplist_size(b))
+ return 0;
+
+ while ((a_prop = pa_hashmap_iterate(MAKE_HASHMAP(a), &state, &key))) {
+ if (!(b_prop = pa_hashmap_get(MAKE_HASHMAP(b), key)))
+ return 0;
+
+ if (a_prop->nbytes != b_prop->nbytes)
+ return 0;
+
+ if (memcmp(a_prop->value, b_prop->value, a_prop->nbytes) != 0)
+ return 0;
+ }
+
+ return 1;
+}
diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index bc4dbd8..a585944 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -354,6 +354,9 @@ unsigned pa_proplist_size(pa_proplist *t);
/** Returns 0 when the proplist is empty, positive otherwise \since 0.9.15 */
int pa_proplist_isempty(pa_proplist *t);
+/** Return non-zero when a and b have the same keys and values. */
+int pa_proplist_equal(pa_proplist *a, pa_proplist *b);
+
PA_C_DECL_END
#endif
commit fcf68752e687123a171b1144f78f8eba1625a204
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 08:37:33 2009 +0300
dbus: Three entangled changes:
* Make the dbus object constructors take a pa_dbusiface_core pointer
as an argument. Remove the path_prefix argument.
* Expose the core object path as a constant in protocol-dbus.h.
* Move the core interface name constant from iface-core.h to
protocol-dbus.h.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index db6aa26..e203c39 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -24,25 +24,30 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-card.h"
#define OBJECT_NAME "card"
struct pa_dbusiface_card {
+ pa_dbusiface_core *core;
+
pa_card *card;
char *path;
};
-pa_dbusiface_card *pa_dbusiface_card_new(pa_card *card, const char *path_prefix) {
- pa_dbusiface_card *c;
+pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card) {
+ pa_dbusiface_card *c = NULL;
+
+ pa_assert(core);
pa_assert(card);
- pa_assert(path_prefix);
- c = pa_xnew(pa_dbusiface_card, 1);
+ c = pa_xnew0(pa_dbusiface_card, 1);
+ c->core = core;
c->card = card;
- c->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, card->index);
+ c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, card->index);
return c;
}
diff --git a/src/modules/dbus/iface-card.h b/src/modules/dbus/iface-card.h
index 54db610..57ad4e3 100644
--- a/src/modules/dbus/iface-card.h
+++ b/src/modules/dbus/iface-card.h
@@ -30,9 +30,13 @@
#include <pulsecore/card.h>
+#include "iface-core.h"
+
+#define PA_DBUSIFACE_CARD_INTERFACE PA_DBUS_CORE_INTERFACE ".Card"
+
typedef struct pa_dbusiface_card pa_dbusiface_card;
-pa_dbusiface_card *pa_dbusiface_card_new(pa_card *card, const char *path_prefix);
+pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card);
void pa_dbusiface_card_free(pa_dbusiface_card *c);
const char *pa_dbusiface_card_get_path(pa_dbusiface_card *c);
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index cfa36d0..d9c8653 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -24,6 +24,7 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-client.h"
@@ -34,15 +35,15 @@ struct pa_dbusiface_client {
char *path;
};
-pa_dbusiface_client *pa_dbusiface_client_new(pa_client *client, const char *path_prefix) {
+pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client *client) {
pa_dbusiface_client *c;
+ pa_assert(core);
pa_assert(client);
- pa_assert(path_prefix);
c = pa_xnew(pa_dbusiface_client, 1);
c->client = client;
- c->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, client->index);
+ c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, client->index);
return c;
}
diff --git a/src/modules/dbus/iface-client.h b/src/modules/dbus/iface-client.h
index 62cca7f..ff90625 100644
--- a/src/modules/dbus/iface-client.h
+++ b/src/modules/dbus/iface-client.h
@@ -30,9 +30,11 @@
#include <pulsecore/client.h>
+#include "iface-core.h"
+
typedef struct pa_dbusiface_client pa_dbusiface_client;
-pa_dbusiface_client *pa_dbusiface_client_new(pa_client *client, const char *path_prefix);
+pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client *client);
void pa_dbusiface_client_free(pa_dbusiface_client *c);
const char *pa_dbusiface_client_get_path(pa_dbusiface_client *c);
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index ad729f9..e40cb97 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -48,12 +48,8 @@
#include "iface-core.h"
-#define OBJECT_PATH "/org/pulseaudio/core1"
-
#define INTERFACE_REVISION 0
-
-
static void handle_get_interface_revision(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_version(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -314,7 +310,7 @@ static pa_dbus_signal_info signals[SIGNAL_MAX] = {
};
static pa_dbus_interface_info core_interface_info = {
- .name = PA_DBUSIFACE_CORE_INTERFACE,
+ .name = PA_DBUS_CORE_INTERFACE,
.method_handlers = method_handlers,
.n_method_handlers = METHOD_HANDLER_MAX,
.property_handlers = property_handlers,
@@ -1388,7 +1384,7 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
sample->volume_is_set = FALSE;
}
- dbus_sample = pa_dbusiface_sample_new(sample, OBJECT_PATH);
+ dbus_sample = pa_dbusiface_sample_new(c, sample);
pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), dbus_sample);
object_path = pa_dbusiface_sample_get_path(dbus_sample);
@@ -1510,7 +1506,7 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
goto finish;
}
- dbus_module = pa_dbusiface_module_new(module, OBJECT_PATH);
+ dbus_module = pa_dbusiface_module_new(c, module);
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(module->index), dbus_module);
object_path = pa_dbusiface_module_get_path(dbus_module);
@@ -1614,7 +1610,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (new_fallback_sink && (device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1628,7 +1624,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (new_fallback_source && (device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1640,13 +1636,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_CARD:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(card = pa_hashmap_get(c->cards, PA_UINT32_TO_PTR(idx)))) {
- card = pa_dbusiface_card_new(pa_idxset_get_by_index(core->cards, idx), OBJECT_PATH);
+ card = pa_dbusiface_card_new(c, pa_idxset_get_by_index(core->cards, idx));
pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), card);
}
object_path = pa_dbusiface_card_get_path(card);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_CARD].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_CARD].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1654,7 +1650,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_CARD_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_CARD_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_card_free(card);
@@ -1666,14 +1662,14 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_sink *sink = pa_idxset_get_by_index(core->sinks, idx);
if (!(device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(idx)))) {
- device = pa_dbusiface_device_new_sink(sink, OBJECT_PATH);
+ device = pa_dbusiface_device_new_sink(c, sink);
pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
}
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_SINK].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_SINK].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1685,7 +1681,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
* the D-Bus sink object wasn't created yet. Now that the
* object is created, let's send the fallback sink change
* signal. */
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1698,7 +1694,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se(pa_hashmap_remove(c->sinks_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_SINK_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_SINK_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device);
@@ -1710,14 +1706,14 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_source *source = pa_idxset_get_by_index(core->sources, idx);
if (!(device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(idx)))) {
- device = pa_dbusiface_device_new_source(source, OBJECT_PATH);
+ device = pa_dbusiface_device_new_source(c, source);
pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
}
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_SOURCE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_SOURCE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1729,7 +1725,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
* point the D-Bus source object wasn't created yet. Now
* that the object is created, let's send the fallback
* source change signal. */
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1742,7 +1738,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se(pa_hashmap_remove(c->sources_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_SOURCE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_SOURCE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device);
@@ -1752,13 +1748,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(stream = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(idx)))) {
- stream = pa_dbusiface_stream_new_playback(pa_idxset_get_by_index(core->sink_inputs, idx), OBJECT_PATH);
+ stream = pa_dbusiface_stream_new_playback(c, pa_idxset_get_by_index(core->sink_inputs, idx));
pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), stream);
}
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1766,7 +1762,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream);
@@ -1776,13 +1772,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(stream = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(idx)))) {
- stream = pa_dbusiface_stream_new_record(pa_idxset_get_by_index(core->source_outputs, idx), OBJECT_PATH);
+ stream = pa_dbusiface_stream_new_record(c, pa_idxset_get_by_index(core->source_outputs, idx));
pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), stream);
}
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_RECORD_STREAM].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_RECORD_STREAM].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1790,7 +1786,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream);
@@ -1800,13 +1796,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(sample = pa_hashmap_get(c->samples, PA_UINT32_TO_PTR(idx)))) {
- sample = pa_dbusiface_sample_new(pa_idxset_get_by_index(core->scache, idx), OBJECT_PATH);
+ sample = pa_dbusiface_sample_new(c, pa_idxset_get_by_index(core->scache, idx));
pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), sample);
}
object_path = pa_dbusiface_sample_get_path(sample);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_SAMPLE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_SAMPLE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1814,7 +1810,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_SAMPLE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_SAMPLE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_sample_free(sample);
@@ -1824,13 +1820,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_MODULE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(module = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(idx)))) {
- module = pa_dbusiface_module_new(pa_idxset_get_by_index(core->modules, idx), OBJECT_PATH);
+ module = pa_dbusiface_module_new(c, pa_idxset_get_by_index(core->modules, idx));
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), module);
}
object_path = pa_dbusiface_module_get_path(module);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_MODULE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_MODULE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1838,7 +1834,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_MODULE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_MODULE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_module_free(module);
@@ -1848,13 +1844,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_CLIENT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(client = pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(idx)))) {
- client = pa_dbusiface_client_new(pa_idxset_get_by_index(core->clients, idx), OBJECT_PATH);
+ client = pa_dbusiface_client_new(c, pa_idxset_get_by_index(core->clients, idx));
pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), client);
}
object_path = pa_dbusiface_client_get_path(client);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_CLIENT].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_CLIENT].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1862,7 +1858,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_CLIENT_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_CLIENT_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_client_free(client);
@@ -1884,7 +1880,7 @@ static pa_hook_result_t extension_registered_cb(void *hook_data, void *call_data
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_NEW_EXTENSION].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_EXTENSION].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1901,7 +1897,7 @@ static pa_hook_result_t extension_unregistered_cb(void *hook_data, void *call_da
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(OBJECT_PATH, PA_DBUSIFACE_CORE_INTERFACE, signals[SIGNAL_EXTENSION_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_EXTENSION_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1943,39 +1939,39 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
c->fallback_source = pa_namereg_get_default_source(core);
c->extension_registered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED, PA_HOOK_NORMAL, extension_registered_cb, c);
c->extension_unregistered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED, PA_HOOK_NORMAL, extension_unregistered_cb, c);
- c->memstats = pa_dbusiface_memstats_new(core, OBJECT_PATH);
+ c->memstats = pa_dbusiface_memstats_new(c, core);
for (card = pa_idxset_first(core->cards, &idx); card; card = pa_idxset_next(core->cards, &idx))
- pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(card, OBJECT_PATH));
+ pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(c, card));
for (sink = pa_idxset_first(core->sinks, &idx); sink; sink = pa_idxset_next(core->sinks, &idx)) {
- device = pa_dbusiface_device_new_sink(sink, OBJECT_PATH);
+ device = pa_dbusiface_device_new_sink(c, sink);
pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
}
for (source = pa_idxset_first(core->sources, &idx); source; source = pa_idxset_next(core->sources, &idx)) {
- device = pa_dbusiface_device_new_source(source, OBJECT_PATH);
+ device = pa_dbusiface_device_new_source(c, source);
pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
}
for (sink_input = pa_idxset_first(core->sink_inputs, &idx); sink_input; sink_input = pa_idxset_next(core->sink_inputs, &idx))
- pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_playback(sink_input, OBJECT_PATH));
+ pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_playback(c, sink_input));
for (source_output = pa_idxset_first(core->source_outputs, &idx); source_output; source_output = pa_idxset_next(core->source_outputs, &idx))
- pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_record(source_output, OBJECT_PATH));
+ pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_record(c, source_output));
for (sample = pa_idxset_first(core->scache, &idx); sample; sample = pa_idxset_next(core->scache, &idx))
- pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), pa_dbusiface_sample_new(sample, OBJECT_PATH));
+ pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), pa_dbusiface_sample_new(c, sample));
for (module = pa_idxset_first(core->modules, &idx); module; module = pa_idxset_next(core->modules, &idx))
- pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), pa_dbusiface_module_new(module, OBJECT_PATH));
+ pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), pa_dbusiface_module_new(c, module));
for (client = pa_idxset_first(core->clients, &idx); client; client = pa_idxset_next(core->clients, &idx))
- pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), pa_dbusiface_client_new(client, OBJECT_PATH));
+ pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), pa_dbusiface_client_new(c, client));
- pa_dbus_protocol_add_interface(c->dbus_protocol, OBJECT_PATH, &core_interface_info, c);
+ pa_dbus_protocol_add_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, &core_interface_info, c);
return c;
}
@@ -2031,7 +2027,7 @@ static void free_client_cb(void *p, void *userdata) {
void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_assert(c);
- pa_dbus_protocol_remove_interface(c->dbus_protocol, OBJECT_PATH, core_interface_info.name);
+ pa_dbus_protocol_remove_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, core_interface_info.name);
pa_subscription_free(c->subscription);
pa_hashmap_free(c->cards, free_card_cb, NULL);
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index 6c5191b..964a37b 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -30,8 +30,6 @@
#include <pulsecore/core.h>
-#define PA_DBUSIFACE_CORE_INTERFACE "org.PulseAudio.Core1"
-
typedef struct pa_dbusiface_core pa_dbusiface_core;
pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core);
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 3b3795e..1a64f43 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -24,6 +24,7 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-device.h"
@@ -44,30 +45,30 @@ struct pa_dbusiface_device {
char *path;
};
-pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_sink *sink, const char *path_prefix) {
+pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_sink *sink) {
pa_dbusiface_device *d;
+ pa_assert(core);
pa_assert(sink);
- pa_assert(path_prefix);
d = pa_xnew(pa_dbusiface_device, 1);
d->sink = pa_sink_ref(sink);
d->type = DEVICE_TYPE_SINK;
- d->path = pa_sprintf_malloc("%s/%s%u", path_prefix, SINK_OBJECT_NAME, sink->index);
+ d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SINK_OBJECT_NAME, sink->index);
return d;
}
-pa_dbusiface_device *pa_dbusiface_device_new_source(pa_source *source, const char *path_prefix) {
+pa_dbusiface_device *pa_dbusiface_device_new_source(pa_dbusiface_core *core, pa_source *source) {
pa_dbusiface_device *d;
+ pa_assert(core);
pa_assert(source);
- pa_assert(path_prefix);
d = pa_xnew(pa_dbusiface_device, 1);
d->source = pa_source_ref(source);
d->type = DEVICE_TYPE_SOURCE;
- d->path = pa_sprintf_malloc("%s/%s%u", path_prefix, SOURCE_OBJECT_NAME, source->index);
+ d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SOURCE_OBJECT_NAME, source->index);
return d;
}
diff --git a/src/modules/dbus/iface-device.h b/src/modules/dbus/iface-device.h
index 81ad1d8..1e9af83 100644
--- a/src/modules/dbus/iface-device.h
+++ b/src/modules/dbus/iface-device.h
@@ -32,10 +32,12 @@
#include <pulsecore/sink.h>
#include <pulsecore/source.h>
+#include "iface-core.h"
+
typedef struct pa_dbusiface_device pa_dbusiface_device;
-pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_sink *sink, const char *path_prefix);
-pa_dbusiface_device *pa_dbusiface_device_new_source(pa_source *source, const char *path_prefix);
+pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_sink *sink);
+pa_dbusiface_device *pa_dbusiface_device_new_source(pa_dbusiface_core *core, pa_source *source);
void pa_dbusiface_device_free(pa_dbusiface_device *d);
const char *pa_dbusiface_device_get_path(pa_dbusiface_device *d);
diff --git a/src/modules/dbus/iface-memstats.c b/src/modules/dbus/iface-memstats.c
index d3412a2..73a84be 100644
--- a/src/modules/dbus/iface-memstats.c
+++ b/src/modules/dbus/iface-memstats.c
@@ -195,15 +195,15 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
dbus_message_unref(reply);
}
-pa_dbusiface_memstats *pa_dbusiface_memstats_new(pa_core *core, const char *path_prefix) {
+pa_dbusiface_memstats *pa_dbusiface_memstats_new(pa_dbusiface_core *dbus_core, pa_core *core) {
pa_dbusiface_memstats *m;
+ pa_assert(dbus_core);
pa_assert(core);
- pa_assert(path_prefix);
m = pa_xnew(pa_dbusiface_memstats, 1);
m->core = pa_core_ref(core);
- m->path = pa_sprintf_malloc("%s/%s", path_prefix, OBJECT_NAME);
+ m->path = pa_sprintf_malloc("%s/%s", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME);
m->dbus_protocol = pa_dbus_protocol_get(core);
pa_assert_se(pa_dbus_protocol_add_interface(m->dbus_protocol, m->path, &memstats_interface_info, m) >= 0);
diff --git a/src/modules/dbus/iface-memstats.h b/src/modules/dbus/iface-memstats.h
index d7773ee..0820e8f 100644
--- a/src/modules/dbus/iface-memstats.h
+++ b/src/modules/dbus/iface-memstats.h
@@ -29,14 +29,15 @@
*/
#include <pulsecore/core.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-core.h"
-#define PA_DBUSIFACE_MEMSTATS_INTERFACE PA_DBUSIFACE_CORE_INTERFACE ".Memstats"
+#define PA_DBUSIFACE_MEMSTATS_INTERFACE PA_DBUS_CORE_INTERFACE ".Memstats"
typedef struct pa_dbusiface_memstats pa_dbusiface_memstats;
-pa_dbusiface_memstats *pa_dbusiface_memstats_new(pa_core *core, const char *path_prefix);
+pa_dbusiface_memstats *pa_dbusiface_memstats_new(pa_dbusiface_core *dbus_core, pa_core *core);
void pa_dbusiface_memstats_free(pa_dbusiface_memstats *m);
const char *pa_dbusiface_memstats_get_path(pa_dbusiface_memstats *m);
diff --git a/src/modules/dbus/iface-module.c b/src/modules/dbus/iface-module.c
index 1c95f9e..788d104 100644
--- a/src/modules/dbus/iface-module.c
+++ b/src/modules/dbus/iface-module.c
@@ -24,6 +24,7 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-module.h"
@@ -34,15 +35,15 @@ struct pa_dbusiface_module {
char *path;
};
-pa_dbusiface_module *pa_dbusiface_module_new(pa_module *module, const char *path_prefix) {
+pa_dbusiface_module *pa_dbusiface_module_new(pa_dbusiface_core *core, pa_module *module) {
pa_dbusiface_module *m;
+ pa_assert(core);
pa_assert(module);
- pa_assert(path_prefix);
m = pa_xnew(pa_dbusiface_module, 1);
m->module = module;
- m->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, module->index);
+ m->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, module->index);
return m;
}
diff --git a/src/modules/dbus/iface-module.h b/src/modules/dbus/iface-module.h
index 7f683e6..c4f2921 100644
--- a/src/modules/dbus/iface-module.h
+++ b/src/modules/dbus/iface-module.h
@@ -30,9 +30,11 @@
#include <pulsecore/module.h>
+#include "iface-core.h"
+
typedef struct pa_dbusiface_module pa_dbusiface_module;
-pa_dbusiface_module *pa_dbusiface_module_new(pa_module *module, const char *path_prefix);
+pa_dbusiface_module *pa_dbusiface_module_new(pa_dbusiface_core *core, pa_module *module);
void pa_dbusiface_module_free(pa_dbusiface_module *m);
const char *pa_dbusiface_module_get_path(pa_dbusiface_module *m);
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
index b4a308a..44cfb03 100644
--- a/src/modules/dbus/iface-sample.c
+++ b/src/modules/dbus/iface-sample.c
@@ -24,6 +24,7 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-sample.h"
@@ -34,15 +35,15 @@ struct pa_dbusiface_sample {
char *path;
};
-pa_dbusiface_sample *pa_dbusiface_sample_new(pa_scache_entry *sample, const char *path_prefix) {
+pa_dbusiface_sample *pa_dbusiface_sample_new(pa_dbusiface_core *core, pa_scache_entry *sample) {
pa_dbusiface_sample *s;
+ pa_assert(core);
pa_assert(sample);
- pa_assert(path_prefix);
s = pa_xnew(pa_dbusiface_sample, 1);
s->sample = sample;
- s->path = pa_sprintf_malloc("%s/%s%u", path_prefix, OBJECT_NAME, sample->index);
+ s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, sample->index);
return s;
}
diff --git a/src/modules/dbus/iface-sample.h b/src/modules/dbus/iface-sample.h
index 1b85404..1b82648 100644
--- a/src/modules/dbus/iface-sample.h
+++ b/src/modules/dbus/iface-sample.h
@@ -30,9 +30,11 @@
#include <pulsecore/core-scache.h>
+#include "iface-core.h"
+
typedef struct pa_dbusiface_sample pa_dbusiface_sample;
-pa_dbusiface_sample *pa_dbusiface_sample_new(pa_scache_entry *sample, const char *path_prefix);
+pa_dbusiface_sample *pa_dbusiface_sample_new(pa_dbusiface_core *core, pa_scache_entry *sample);
void pa_dbusiface_sample_free(pa_dbusiface_sample *c);
const char *pa_dbusiface_sample_get_path(pa_dbusiface_sample *c);
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index 1d9ffee..b5a1789 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -24,6 +24,7 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-stream.h"
@@ -44,30 +45,30 @@ struct pa_dbusiface_stream {
char *path;
};
-pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_sink_input *sink_input, const char *path_prefix) {
+pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, pa_sink_input *sink_input) {
pa_dbusiface_stream *s;
+ pa_assert(core);
pa_assert(sink_input);
- pa_assert(path_prefix);
s = pa_xnew(pa_dbusiface_stream, 1);
s->sink_input = pa_sink_input_ref(sink_input);
s->type = STREAM_TYPE_PLAYBACK;
- s->path = pa_sprintf_malloc("%s/%s%u", path_prefix, PLAYBACK_OBJECT_NAME, sink_input->index);
+ s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, PLAYBACK_OBJECT_NAME, sink_input->index);
return s;
}
-pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_source_output *source_output, const char *path_prefix) {
+pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_dbusiface_core *core, pa_source_output *source_output) {
pa_dbusiface_stream *s;
+ pa_assert(core);
pa_assert(source_output);
- pa_assert(path_prefix);
s = pa_xnew(pa_dbusiface_stream, 1);
s->source_output = pa_source_output_ref(source_output);
s->type = STREAM_TYPE_RECORD;
- s->path = pa_sprintf_malloc("%s/%s%u", path_prefix, RECORD_OBJECT_NAME, source_output->index);
+ s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, RECORD_OBJECT_NAME, source_output->index);
return s;
}
diff --git a/src/modules/dbus/iface-stream.h b/src/modules/dbus/iface-stream.h
index cc2f3d6..b1b1854 100644
--- a/src/modules/dbus/iface-stream.h
+++ b/src/modules/dbus/iface-stream.h
@@ -31,10 +31,12 @@
#include <pulsecore/sink-input.h>
#include <pulsecore/source-output.h>
+#include "iface-core.h"
+
typedef struct pa_dbusiface_stream pa_dbusiface_stream;
-pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_sink_input *sink_input, const char *path_prefix);
-pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_source_output *source_output, const char *path_prefix);
+pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, pa_sink_input *sink_input);
+pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_dbusiface_core *core, pa_source_output *source_output);
void pa_dbusiface_stream_free(pa_dbusiface_stream *s);
const char *pa_dbusiface_stream_get_path(pa_dbusiface_stream *s);
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
index f2b1b50..c6b630a 100644
--- a/src/pulsecore/protocol-dbus.h
+++ b/src/pulsecore/protocol-dbus.h
@@ -32,8 +32,11 @@
#define PA_DBUS_SYSTEM_SOCKET_PATH PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_DBUS_SOCKET_NAME
-#define PA_DBUS_ERROR_NO_SUCH_PROPERTY "org.PulseAudio.Core1.NoSuchPropertyError"
-#define PA_DBUS_ERROR_NOT_FOUND "org.PulseAudio.Core1.NotFoundError"
+#define PA_DBUS_CORE_INTERFACE "org.PulseAudio.Core1"
+#define PA_DBUS_CORE_OBJECT_PATH "/org/pulseaudio/core1"
+
+#define PA_DBUS_ERROR_NO_SUCH_PROPERTY PA_DBUS_CORE_INTERFACE ".NoSuchPropertyError"
+#define PA_DBUS_ERROR_NOT_FOUND PA_DBUS_CORE_INTERFACE ".NotFoundError"
/* Returns the default address of the server type in the escaped form. For
* PA_SERVER_TYPE_NONE an empty string is returned. The caller frees the
commit 06232e2965ee02d62ca566fcbf5e805c571b574a
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:04:15 2009 +0300
dbus: Take advantage of the PA_HASHMAP_FOREACH macro.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index e40cb97..685ba63 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -542,7 +542,7 @@ static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *ms
/* The caller frees the array, but not the strings. */
static const char **get_cards(pa_dbusiface_core *c, unsigned *n) {
const char **cards;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_card *card;
@@ -556,10 +556,8 @@ static const char **get_cards(pa_dbusiface_core *c, unsigned *n) {
cards = pa_xnew(const char *, *n);
- for (i = 0, card = pa_hashmap_iterate(c->cards, &state, NULL); card; ++i, card = pa_hashmap_iterate(c->cards, &state, NULL))
- cards[i] = pa_dbusiface_card_get_path(card);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(card, c->cards, state)
+ cards[i++] = pa_dbusiface_card_get_path(card);
return cards;
}
@@ -583,7 +581,7 @@ static void handle_get_cards(DBusConnection *conn, DBusMessage *msg, void *userd
/* The caller frees the array, but not the strings. */
static const char **get_sinks(pa_dbusiface_core *c, unsigned *n) {
const char **sinks;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_device *sink;
@@ -597,10 +595,8 @@ static const char **get_sinks(pa_dbusiface_core *c, unsigned *n) {
sinks = pa_xnew(const char *, *n);
- for (i = 0, sink = pa_hashmap_iterate(c->sinks_by_index, &state, NULL); sink; ++i, sink = pa_hashmap_iterate(c->sinks_by_index, &state, NULL))
- sinks[i] = pa_dbusiface_device_get_path(sink);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(sink, c->sinks_by_index, state)
+ sinks[i++] = pa_dbusiface_device_get_path(sink);
return sinks;
}
@@ -671,7 +667,7 @@ static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, voi
/* The caller frees the array, but not the strings. */
static const char **get_sources(pa_dbusiface_core *c, unsigned *n) {
const char **sources;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_device *source;
@@ -685,10 +681,8 @@ static const char **get_sources(pa_dbusiface_core *c, unsigned *n) {
sources = pa_xnew(const char *, *n);
- for (i = 0, source = pa_hashmap_iterate(c->sources_by_index, &state, NULL); source; ++i, source = pa_hashmap_iterate(c->sources_by_index, &state, NULL))
- sources[i] = pa_dbusiface_device_get_path(source);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(source, c->sources_by_index, state)
+ sources[i++] = pa_dbusiface_device_get_path(source);
return sources;
}
@@ -759,7 +753,7 @@ static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, v
/* The caller frees the array, but not the strings. */
static const char **get_playback_streams(pa_dbusiface_core *c, unsigned *n) {
const char **streams;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_stream *stream;
@@ -773,10 +767,8 @@ static const char **get_playback_streams(pa_dbusiface_core *c, unsigned *n) {
streams = pa_xnew(const char *, *n);
- for (i = 0, stream = pa_hashmap_iterate(c->playback_streams, &state, NULL); stream; ++i, stream = pa_hashmap_iterate(c->playback_streams, &state, NULL))
- streams[i] = pa_dbusiface_stream_get_path(stream);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(stream, c->playback_streams, state)
+ streams[i++] = pa_dbusiface_stream_get_path(stream);
return streams;
}
@@ -800,7 +792,7 @@ static void handle_get_playback_streams(DBusConnection *conn, DBusMessage *msg,
/* The caller frees the array, but not the strings. */
static const char **get_record_streams(pa_dbusiface_core *c, unsigned *n) {
const char **streams;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_stream *stream;
@@ -814,10 +806,8 @@ static const char **get_record_streams(pa_dbusiface_core *c, unsigned *n) {
streams = pa_xnew(const char *, *n);
- for (i = 0, stream = pa_hashmap_iterate(c->record_streams, &state, NULL); stream; ++i, stream = pa_hashmap_iterate(c->record_streams, &state, NULL))
- streams[i] = pa_dbusiface_stream_get_path(stream);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(stream, c->record_streams, state)
+ streams[i++] = pa_dbusiface_stream_get_path(stream);
return streams;
}
@@ -841,7 +831,7 @@ static void handle_get_record_streams(DBusConnection *conn, DBusMessage *msg, vo
/* The caller frees the array, but not the strings. */
static const char **get_samples(pa_dbusiface_core *c, unsigned *n) {
const char **samples;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_sample *sample;
@@ -855,10 +845,8 @@ static const char **get_samples(pa_dbusiface_core *c, unsigned *n) {
samples = pa_xnew(const char *, *n);
- for (i = 0, sample = pa_hashmap_iterate(c->samples, &state, NULL); sample; ++i, sample = pa_hashmap_iterate(c->samples, &state, NULL))
- samples[i] = pa_dbusiface_sample_get_path(sample);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(sample, c->samples, state)
+ samples[i++] = pa_dbusiface_sample_get_path(sample);
return samples;
}
@@ -882,7 +870,7 @@ static void handle_get_samples(DBusConnection *conn, DBusMessage *msg, void *use
/* The caller frees the array, but not the strings. */
static const char **get_modules(pa_dbusiface_core *c, unsigned *n) {
const char **modules;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_module *module;
@@ -896,10 +884,8 @@ static const char **get_modules(pa_dbusiface_core *c, unsigned *n) {
modules = pa_xnew(const char *, *n);
- for (i = 0, module = pa_hashmap_iterate(c->modules, &state, NULL); module; ++i, module = pa_hashmap_iterate(c->modules, &state, NULL))
- modules[i] = pa_dbusiface_module_get_path(module);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(module, c->modules, state)
+ modules[i++] = pa_dbusiface_module_get_path(module);
return modules;
}
@@ -923,7 +909,7 @@ static void handle_get_modules(DBusConnection *conn, DBusMessage *msg, void *use
/* The caller frees the array, but not the strings. */
static const char **get_clients(pa_dbusiface_core *c, unsigned *n) {
const char **clients;
- unsigned i;
+ unsigned i = 0;
void *state = NULL;
pa_dbusiface_client *client;
@@ -937,10 +923,8 @@ static const char **get_clients(pa_dbusiface_core *c, unsigned *n) {
clients = pa_xnew(const char *, *n);
- for (i = 0, client = pa_hashmap_iterate(c->clients, &state, NULL); client; ++i, client = pa_hashmap_iterate(c->clients, &state, NULL))
- clients[i] = pa_dbusiface_client_get_path(client);
-
- pa_assert(i == *n);
+ PA_HASHMAP_FOREACH(client, c->clients, state)
+ clients[i++] = pa_dbusiface_client_get_path(client);
return clients;
}
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index bccdf93..e906303 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -553,10 +553,8 @@ static const char **get_entries(struct userdata *u, unsigned *n) {
entries = pa_xnew(const char *, *n);
- while ((de = pa_hashmap_iterate(u->dbus_entries, &state, NULL))) {
- entries[i] = de->object_path;
- ++i;
- }
+ PA_HASHMAP_FOREACH(de, u->dbus_entries, state)
+ entries[i++] = de->object_path;
return entries;
}
@@ -1747,7 +1745,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
struct dbus_entry *de;
void *state = NULL;
- while ((de = pa_hashmap_iterate(u->dbus_entries, &state, NULL))) {
+ PA_HASHMAP_FOREACH(de, u->dbus_entries, state) {
send_entry_removed_signal(de);
dbus_entry_free(pa_hashmap_remove(u->dbus_entries, de->entry_name));
}
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 0609867..5cbd0d9 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -186,7 +186,7 @@ static void update_introspection(struct object_entry *oe) {
pa_strbuf_puts(buf, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE);
pa_strbuf_puts(buf, "<node>\n");
- while ((iface_entry = pa_hashmap_iterate(oe->interfaces, &interfaces_state, NULL))) {
+ PA_HASHMAP_FOREACH(iface_entry, oe->interfaces, interfaces_state) {
pa_dbus_method_handler *method_handler;
pa_dbus_property_handler *property_handler;
void *handlers_state = NULL;
@@ -195,7 +195,7 @@ static void update_introspection(struct object_entry *oe) {
pa_strbuf_printf(buf, " <interface name=\"%s\">\n", iface_entry->name);
- while ((method_handler = pa_hashmap_iterate(iface_entry->method_handlers, &handlers_state, NULL))) {
+ PA_HASHMAP_FOREACH(method_handler, iface_entry->method_handlers, handlers_state) {
pa_strbuf_printf(buf, " <method name=\"%s\">\n", method_handler->method_name);
for (i = 0; i < method_handler->n_arguments; ++i)
@@ -278,7 +278,7 @@ static enum find_result_t find_handler_by_property(struct object_entry *obj_entr
pa_assert(iface_entry);
pa_assert(property_handler);
- while ((*iface_entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ PA_HASHMAP_FOREACH(*iface_entry, obj_entry->interfaces, state) {
if ((*property_handler = pa_hashmap_get((*iface_entry)->property_handlers, property))) {
if (dbus_message_has_member(msg, "Get"))
return (*property_handler)->get_cb ? FOUND_GET_PROPERTY : PROPERTY_ACCESS_DENIED;
@@ -303,7 +303,7 @@ static enum find_result_t find_handler_by_method(struct object_entry *obj_entry,
pa_assert(iface_entry);
pa_assert(method_handler);
- while ((*iface_entry = pa_hashmap_iterate(obj_entry->interfaces, &state, NULL))) {
+ PA_HASHMAP_FOREACH(*iface_entry, obj_entry->interfaces, state) {
if ((*method_handler = pa_hashmap_get((*iface_entry)->method_handlers, method)))
return FOUND_METHOD;
}
@@ -497,7 +497,7 @@ static void register_object(pa_dbus_protocol *p, struct object_entry *obj_entry)
pa_assert(p);
pa_assert(obj_entry);
- while ((conn_entry = pa_hashmap_iterate(p->connections, &state, NULL)))
+ PA_HASHMAP_FOREACH(conn_entry, p->connections, state)
pa_assert_se(dbus_connection_register_object_path(conn_entry->connection, obj_entry->path, &vtable, p));
}
@@ -652,7 +652,7 @@ static void unregister_object(pa_dbus_protocol *p, struct object_entry *obj_entr
pa_assert(p);
pa_assert(obj_entry);
- while ((conn_entry = pa_hashmap_iterate(p->connections, &state, NULL)))
+ PA_HASHMAP_FOREACH(conn_entry, p->connections, state)
pa_assert_se(dbus_connection_unregister_object_path(conn_entry->connection, obj_entry->path));
}
@@ -742,7 +742,7 @@ static void register_all_objects(pa_dbus_protocol *p, DBusConnection *conn) {
pa_assert(p);
pa_assert(conn);
- while ((obj_entry = pa_hashmap_iterate(p->objects, &state, NULL)))
+ PA_HASHMAP_FOREACH(obj_entry, p->objects, state)
pa_assert_se(dbus_connection_register_object_path(conn, obj_entry->path, &vtable, p));
}
@@ -777,7 +777,7 @@ static void unregister_all_objects(pa_dbus_protocol *p, DBusConnection *conn) {
pa_assert(p);
pa_assert(conn);
- while ((obj_entry = pa_hashmap_iterate(p->objects, &state, NULL)))
+ PA_HASHMAP_FOREACH(obj_entry, p->objects, state)
pa_assert_se(dbus_connection_unregister_object_path(conn, obj_entry->path));
}
@@ -904,13 +904,7 @@ void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
pa_assert(signal);
pa_assert(dbus_message_get_type(signal) == DBUS_MESSAGE_TYPE_SIGNAL);
- /* XXX: We have to do some linear searching to find connections that want
- * to receive the signal. This shouldn't be very significant performance
- * problem, and adding an (object path, signal name) -> connection mapping
- * would be likely to create substantial complexity. */
-
- while ((conn_entry = pa_hashmap_iterate(p->connections, &state, NULL))) {
-
+ PA_HASHMAP_FOREACH(conn_entry, p->connections, state) {
if ((conn_entry->listening_for_all_signals /* Case 1: listening for all signals */
&& (pa_idxset_get_by_data(conn_entry->all_signals_objects, dbus_message_get_path(signal), NULL)
|| pa_idxset_isempty(conn_entry->all_signals_objects)))
@@ -943,10 +937,8 @@ const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n) {
extensions = pa_xnew(const char *, *n);
- while ((ext_name = pa_idxset_iterate(p->extensions, &state, NULL))) {
- extensions[i] = ext_name;
- ++i;
- }
+ while ((ext_name = pa_idxset_iterate(p->extensions, &state, NULL)))
+ extensions[i++] = ext_name;
return extensions;
}
commit 0b6662023bfb121b0e553ce00b4229705c8e7aef
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:06:21 2009 +0300
dbusiface-core: Generate more informative error messages.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 685ba63..be07648 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -655,7 +655,7 @@ static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, voi
return;
if (!(fallback_sink = pa_hashmap_get(c->sinks_by_path, object_path))) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such sink.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such sink.", object_path);
return;
}
@@ -741,7 +741,7 @@ static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, v
return;
if (!(fallback_source = pa_hashmap_get(c->sources_by_path, object_path))) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such source.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such source.", object_path);
return;
}
@@ -1154,7 +1154,7 @@ static void handle_get_sink_by_name(DBusConnection *conn, DBusMessage *msg, void
}
if (!(sink = pa_namereg_get(c->core, sink_name, PA_NAMEREG_SINK))) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such sink.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such sink.", sink_name);
return;
}
@@ -1186,7 +1186,7 @@ static void handle_get_source_by_name(DBusConnection *conn, DBusMessage *msg, vo
}
if (!(source = pa_namereg_get(c->core, source_name, PA_NAMEREG_SOURCE))) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such source.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such source.", source_name);
return;
}
commit 5ece8e8833ff40a4c535fc7d6705377fcf7fd0fd
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:10:05 2009 +0300
dbusiface-core: Add functions for getting various object paths.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index be07648..e8ea50b 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2033,3 +2033,24 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_xfree(c);
}
+
+const char *pa_dbusiface_core_get_sink_path(pa_dbusiface_core *c, const pa_sink *sink) {
+ pa_assert(c);
+ pa_assert(sink);
+
+ return pa_dbusiface_device_get_path(pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(sink->index)));
+}
+
+const char *pa_dbusiface_core_get_source_path(pa_dbusiface_core *c, const pa_source *source) {
+ pa_assert(c);
+ pa_assert(source);
+
+ return pa_dbusiface_device_get_path(pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(source->index)));
+}
+
+const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module) {
+ pa_assert(c);
+ pa_assert(module);
+
+ return pa_dbusiface_module_get_path(pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(module->index)));
+}
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index 964a37b..1b73782 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -35,4 +35,8 @@ typedef struct pa_dbusiface_core pa_dbusiface_core;
pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core);
void pa_dbusiface_core_free(pa_dbusiface_core *c);
+const char *pa_dbusiface_core_get_sink_path(pa_dbusiface_core *c, const pa_sink *sink);
+const char *pa_dbusiface_core_get_source_path(pa_dbusiface_core *c, const pa_source *source);
+const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module);
+
#endif
commit 3e9de1a36c3f85f558f08167cd82163b0cbf3484
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:12:31 2009 +0300
dbus-util: Add helpers for proplist handling.
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index 5db7f21..903acad 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -564,6 +564,21 @@ void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_r
dbus_message_unref(reply);
}
+void pa_dbus_send_proplist_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, pa_proplist *proplist) {
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(proplist);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_dbus_append_proplist_variant(&msg_iter, proplist);
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
void pa_dbus_append_basic_array(DBusMessageIter *iter, int item_type, const void *array, unsigned n) {
DBusMessageIter array_iter;
unsigned i;
@@ -640,6 +655,62 @@ void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, c
pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
}
+void pa_dbus_append_proplist(DBusMessageIter *iter, pa_proplist *proplist) {
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ DBusMessageIter array_iter;
+ void *state = NULL;
+ const char *key;
+
+ pa_assert(iter);
+ pa_assert(proplist);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, "{say}", &dict_iter));
+
+ while ((key = pa_proplist_iterate(proplist, state))) {
+ const void *value = NULL;
+ size_t nbytes;
+
+ pa_assert_se(pa_proplist_get(proplist, key, &value, &nbytes) >= 0);
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_entry_iter, DBUS_TYPE_ARRAY, "y", &array_iter));
+ pa_assert_se(dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_BYTE, &value, nbytes));
+ pa_assert_se(dbus_message_iter_close_container(&dict_entry_iter, &array_iter));
+
+ pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
+ }
+
+ pa_assert_se(dbus_message_iter_close_container(iter, &dict_iter));
+}
+
+void pa_dbus_append_proplist_variant(DBusMessageIter *iter, pa_proplist *proplist) {
+ DBusMessageIter variant_iter;
+
+ pa_assert(iter);
+ pa_assert(proplist);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a{say}", &variant_iter));
+ pa_dbus_append_proplist(&variant_iter, proplist);
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+}
+
+void pa_dbus_append_proplist_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, pa_proplist *proplist) {
+ DBusMessageIter dict_entry_iter;
+
+ pa_assert(dict_iter);
+ pa_assert(key);
+ pa_assert(proplist);
+
+ pa_assert_se(dbus_message_iter_open_container(dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_dbus_append_proplist_variant(&dict_entry_iter, proplist);
+ pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
+}
+
int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data) {
DBusMessageIter msg_iter;
DBusMessageIter variant_iter;
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 97aae37..5443a4c 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -69,12 +69,16 @@ void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to);
void pa_dbus_send_basic_value_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
void pa_dbus_send_basic_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int item_type, void *array, unsigned n);
+void pa_dbus_send_proplist_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, pa_proplist *proplist);
void pa_dbus_append_basic_array(DBusMessageIter *iter, int item_type, const void *array, unsigned n);
void pa_dbus_append_basic_array_variant(DBusMessageIter *iter, int item_type, const void *array, unsigned n);
void pa_dbus_append_basic_variant(DBusMessageIter *iter, int type, void *data);
void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int type, void *data);
void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n);
+void pa_dbus_append_proplist(DBusMessageIter *iter, pa_proplist *proplist);
+void pa_dbus_append_proplist_variant(DBusMessageIter *iter, pa_proplist *proplist);
+void pa_dbus_append_proplist_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, pa_proplist *proplist);
/* Helper functions for extracting the value argument of a Set call. If the
* message is invalid, an error reply is sent and a negative number is
commit 76bd03bddb7967c56d68ead22e5d4eae5a82625a
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:14:27 2009 +0300
dbus-util: Trivial comment punctuation fix.
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 5443a4c..9cee293 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -91,8 +91,8 @@ int pa_dbus_get_fixed_array_set_property_arg(DBusConnection *c, DBusMessage *msg
int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data);
int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n);
-/* Returns a new proplist, that the caller has to free. If the proplist can't
- * be read from the iterator, an error reply is sent and NULL is returned. */
+/* Returns a new proplist that the caller has to free. If the proplist can't be
+ * read from the iterator, an error reply is sent and NULL is returned. */
pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter);
#endif
commit 7699cfd4c041eedd2dae124cac75da0879b87f1e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:18:03 2009 +0300
dbus-protocol: Split some overly long lines.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 5cbd0d9..2461e4b 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -199,19 +199,21 @@ static void update_introspection(struct object_entry *oe) {
pa_strbuf_printf(buf, " <method name=\"%s\">\n", method_handler->method_name);
for (i = 0; i < method_handler->n_arguments; ++i)
- pa_strbuf_printf(buf, " <arg name=\"%s\" type=\"%s\" direction=\"%s\"/>\n", method_handler->arguments[i].name,
- method_handler->arguments[i].type,
- method_handler->arguments[i].direction);
+ pa_strbuf_printf(buf, " <arg name=\"%s\" type=\"%s\" direction=\"%s\"/>\n",
+ method_handler->arguments[i].name,
+ method_handler->arguments[i].type,
+ method_handler->arguments[i].direction);
pa_strbuf_puts(buf, " </method>\n");
}
handlers_state = NULL;
- while ((property_handler = pa_hashmap_iterate(iface_entry->property_handlers, &handlers_state, NULL)))
- pa_strbuf_printf(buf, " <property name=\"%s\" type=\"%s\" access=\"%s\"/>\n", property_handler->property_name,
- property_handler->type,
- property_handler->get_cb ? (property_handler->set_cb ? "readwrite" : "read") : "write");
+ PA_HASHMAP_FOREACH(property_handler, iface_entry->property_handlers, handlers_state)
+ pa_strbuf_printf(buf, " <property name=\"%s\" type=\"%s\" access=\"%s\"/>\n",
+ property_handler->property_name,
+ property_handler->type,
+ property_handler->get_cb ? (property_handler->set_cb ? "readwrite" : "read") : "write");
for (i = 0; i < iface_entry->n_signals; ++i) {
pa_strbuf_printf(buf, " <signal name=\"%s\">\n", iface_entry->signals[i].name);
commit 16dce8d7cbe4dcad56c3fbd1f47af6b50d2581a7
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:19:33 2009 +0300
dbus-protocol: Take advantage of the helpers in dbus-util.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 2461e4b..62f74a5 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -28,6 +28,7 @@
#include <pulse/xmalloc.h>
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
#include <pulsecore/hashmap.h>
#include <pulsecore/idxset.h>
#include <pulsecore/shared.h>
@@ -408,7 +409,6 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
pa_dbus_method_handler *method_handler = NULL;
pa_dbus_property_handler *property_handler = NULL;
const char *attempted_property = NULL;
- DBusMessage *reply = NULL;
pa_assert(connection);
pa_assert(message);
@@ -427,10 +427,7 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect") ||
(!dbus_message_get_interface(message) && dbus_message_has_member(message, "Introspect"))) {
- pa_assert_se((reply = dbus_message_new_method_return(message)));
- pa_assert_se(dbus_message_append_args(reply, DBUS_TYPE_STRING, &obj_entry->introspection, DBUS_TYPE_INVALID));
- pa_assert_se(dbus_connection_send(connection, reply, NULL));
-
+ pa_dbus_send_basic_value_reply(connection, message, DBUS_TYPE_STRING, &obj_entry->introspection);
goto finish;
}
@@ -450,26 +447,23 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
case FOUND_GET_ALL:
if (iface_entry->get_all_properties_cb)
iface_entry->get_all_properties_cb(connection, message, iface_entry->userdata);
+ /* TODO: Write an else branch where a dummy response is sent. */
break;
case PROPERTY_ACCESS_DENIED:
- pa_assert_se((reply = dbus_message_new_error_printf(message, DBUS_ERROR_ACCESS_DENIED, "%s access denied for property %s", dbus_message_get_member(message), attempted_property)));
- pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ pa_dbus_send_error(connection, message, DBUS_ERROR_ACCESS_DENIED, "%s access denied for property %s", dbus_message_get_member(message), attempted_property);
break;
case NO_SUCH_METHOD:
- pa_assert_se((reply = dbus_message_new_error_printf(message, DBUS_ERROR_UNKNOWN_METHOD, "%s: No such method", dbus_message_get_member(message))));
- pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ pa_dbus_send_error(connection, message, DBUS_ERROR_UNKNOWN_METHOD, "%s: No such method", dbus_message_get_member(message));
break;
case NO_SUCH_PROPERTY:
- pa_assert_se((reply = dbus_message_new_error_printf(message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", attempted_property)));
- pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ pa_dbus_send_error(connection, message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", attempted_property);
break;
case INVALID_MESSAGE_ARGUMENTS:
- pa_assert_se((reply = dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS, "Invalid arguments for %s", dbus_message_get_member(message))));
- pa_assert_se(dbus_connection_send(connection, reply, NULL));
+ pa_dbus_send_error(connection, message, DBUS_ERROR_INVALID_ARGS, "Invalid arguments for %s", dbus_message_get_member(message));
break;
default:
@@ -477,9 +471,6 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
}
finish:
- if (reply)
- dbus_message_unref(reply);
-
return DBUS_HANDLER_RESULT_HANDLED;
}
commit acad5063284f37315c8208916f1ac151791d7220
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 09:20:22 2009 +0300
dbusiface-card: Implement the Card D-Bus interface.
diff --git a/src/Makefile.am b/src/Makefile.am
index e10b4ab..e605ad7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1278,6 +1278,7 @@ module_http_protocol_unix_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMI
module_dbus_protocol_la_SOURCES = \
modules/dbus/iface-card.c modules/dbus/iface-card.h \
+ modules/dbus/iface-card-profile.c modules/dbus/iface-card-profile.h \
modules/dbus/iface-client.c modules/dbus/iface-client.h \
modules/dbus/iface-core.c modules/dbus/iface-core.h \
modules/dbus/iface-device.c modules/dbus/iface-device.h \
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card-profile.c
similarity index 51%
copy from src/modules/dbus/iface-card.c
copy to src/modules/dbus/iface-card-profile.c
index e203c39..7952494 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card-profile.c
@@ -24,43 +24,44 @@
#endif
#include <pulsecore/core-util.h>
-#include <pulsecore/protocol-dbus.h>
-#include "iface-card.h"
+#include "iface-card-profile.h"
-#define OBJECT_NAME "card"
+#define OBJECT_NAME "profile"
-struct pa_dbusiface_card {
- pa_dbusiface_core *core;
-
- pa_card *card;
+struct pa_dbusiface_card_profile {
+ pa_card_profile *profile;
char *path;
};
+pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_card_profile *profile, uint32_t idx) {
+ pa_dbusiface_card_profile *p = NULL;
-pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card) {
- pa_dbusiface_card *c = NULL;
-
- pa_assert(core);
pa_assert(card);
+ pa_assert(profile);
+
+ p = pa_xnew(pa_dbusiface_card_profile, 1);
+ p->profile = profile;
+ p->path = pa_sprintf_malloc("%s/%s%u", pa_dbusiface_card_get_path(card), OBJECT_NAME, idx);
+
+ return p;
+}
- c = pa_xnew0(pa_dbusiface_card, 1);
- c->core = core;
- c->card = card;
- c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, card->index);
+void pa_dbusiface_card_profile_free(pa_dbusiface_card_profile *p) {
+ pa_assert(p);
- return c;
+ pa_xfree(p->path);
+ pa_xfree(p);
}
-void pa_dbusiface_card_free(pa_dbusiface_card *c) {
- pa_assert(c);
+const char *pa_dbusiface_card_profile_get_path(pa_dbusiface_card_profile *p) {
+ pa_assert(p);
- pa_xfree(c->path);
- pa_xfree(c);
+ return p->path;
}
-const char *pa_dbusiface_card_get_path(pa_dbusiface_card *c) {
- pa_assert(c);
+const char *pa_dbusiface_card_profile_get_name(pa_dbusiface_card_profile *p) {
+ pa_assert(p);
- return c->path;
+ return p->profile->name;
}
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card-profile.h
similarity index 50%
copy from src/modules/dbus/iface-card.c
copy to src/modules/dbus/iface-card-profile.h
index e203c39..e90313c 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card-profile.h
@@ -1,3 +1,6 @@
+#ifndef foodbusifacecardprofilehfoo
+#define foodbusifacecardprofilehfoo
+
/***
This file is part of PulseAudio.
@@ -19,48 +22,22 @@
USA.
***/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+/* This object implements the D-Bus interface org.PulseAudio.Core1.CardProfile.
+ *
+ * See http://pulseaudio.org/wiki/DBusInterface for the CardProfile interface
+ * documentation.
+ */
-#include <pulsecore/core-util.h>
-#include <pulsecore/protocol-dbus.h>
+#include <pulsecore/core-scache.h>
#include "iface-card.h"
-#define OBJECT_NAME "card"
-
-struct pa_dbusiface_card {
- pa_dbusiface_core *core;
-
- pa_card *card;
- char *path;
-};
-
-
-pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card) {
- pa_dbusiface_card *c = NULL;
+typedef struct pa_dbusiface_card_profile pa_dbusiface_card_profile;
- pa_assert(core);
- pa_assert(card);
+pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_card_profile *profile, uint32_t idx);
+void pa_dbusiface_card_profile_free(pa_dbusiface_card_profile *p);
- c = pa_xnew0(pa_dbusiface_card, 1);
- c->core = core;
- c->card = card;
- c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, card->index);
+const char *pa_dbusiface_card_profile_get_path(pa_dbusiface_card_profile *p);
+const char *pa_dbusiface_card_profile_get_name(pa_dbusiface_card_profile *p);
- return c;
-}
-
-void pa_dbusiface_card_free(pa_dbusiface_card *c) {
- pa_assert(c);
-
- pa_xfree(c->path);
- pa_xfree(c);
-}
-
-const char *pa_dbusiface_card_get_path(pa_dbusiface_card *c) {
- pa_assert(c);
-
- return c->path;
-}
+#endif
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index e203c39..4ede718 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -23,20 +23,476 @@
#include <config.h>
#endif
+#include <dbus/dbus.h>
+
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
#include <pulsecore/protocol-dbus.h>
+#include "iface-card-profile.h"
+
#include "iface-card.h"
#define OBJECT_NAME "card"
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_profiles(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_profile_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
struct pa_dbusiface_card {
pa_dbusiface_core *core;
pa_card *card;
char *path;
+ pa_hashmap *profiles;
+ uint32_t next_profile_index;
+ pa_card_profile *active_profile;
+ pa_proplist *proplist;
+
+ pa_dbus_protocol *dbus_protocol;
+ pa_subscription *subscription;
};
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_DRIVER,
+ PROPERTY_HANDLER_OWNER_MODULE,
+ PROPERTY_HANDLER_SINKS,
+ PROPERTY_HANDLER_SOURCES,
+ PROPERTY_HANDLER_PROFILES,
+ PROPERTY_HANDLER_ACTIVE_PROFILE,
+ PROPERTY_HANDLER_PROPERTY_LIST,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_DRIVER] = { .property_name = "Driver", .type = "s", .get_cb = handle_get_driver, .set_cb = NULL },
+ [PROPERTY_HANDLER_OWNER_MODULE] = { .property_name = "OwnerModule", .type = "o", .get_cb = handle_get_owner_module, .set_cb = NULL },
+ [PROPERTY_HANDLER_SINKS] = { .property_name = "Sinks", .type = "ao", .get_cb = handle_get_sinks, .set_cb = NULL },
+ [PROPERTY_HANDLER_SOURCES] = { .property_name = "Sources", .type = "ao", .get_cb = handle_get_sources, .set_cb = NULL },
+ [PROPERTY_HANDLER_PROFILES] = { .property_name = "Profiles", .type = "ao", .get_cb = handle_get_profiles, .set_cb = NULL },
+ [PROPERTY_HANDLER_ACTIVE_PROFILE] = { .property_name = "ActiveProfile", .type = "o", .get_cb = handle_get_active_profile, .set_cb = handle_set_active_profile },
+ [PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
+};
+
+enum method_handler_index {
+ METHOD_HANDLER_GET_PROFILE_BY_NAME,
+ METHOD_HANDLER_MAX
+};
+
+static pa_dbus_arg_info get_profile_by_name_args[] = { { "name", "s", "in" }, { "profile", "o", "out" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_GET_PROFILE_BY_NAME] = {
+ .method_name = "GetProfileByName",
+ .arguments = get_profile_by_name_args,
+ .n_arguments = sizeof(get_profile_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_profile_by_name }
+};
+
+enum signal_index {
+ SIGNAL_ACTIVE_PROFILE_UPDATED,
+ SIGNAL_PROPERTY_LIST_UPDATED,
+ SIGNAL_MAX
+};
+
+static pa_dbus_arg_info active_profile_updated_args[] = { { "profile", "o", NULL } };
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_ACTIVE_PROFILE_UPDATED] = { .name = "ActiveProfileUpdated", .arguments = active_profile_updated_args, .n_arguments = 1 },
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }
+};
+
+static pa_dbus_interface_info card_interface_info = {
+ .name = PA_DBUSIFACE_CARD_INTERFACE,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ dbus_uint32_t idx;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ idx = c->card->index;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &c->card->name);
+}
+
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &c->card->driver);
+}
+
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ const char *owner_module;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->card->module) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Card %s doesn't have an owner module.", c->card->name);
+ return;
+ }
+
+ owner_module = pa_dbusiface_core_get_module_path(c->core, c->card->module);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &owner_module);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_sinks(pa_dbusiface_card *c, unsigned *n) {
+ const char **sinks = NULL;
+ unsigned i = 0;
+ uint32_t idx = 0;
+ pa_sink *sink = NULL;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_idxset_size(c->card->sinks);
+
+ if (*n == 0)
+ return NULL;
+
+ sinks = pa_xnew(const char *, *n);
+
+ PA_IDXSET_FOREACH(sink, c->card->sinks, idx) {
+ sinks[i] = pa_dbusiface_core_get_sink_path(c->core, sink);
+ ++i;
+ }
+
+ return sinks;
+}
+
+static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ const char **sinks;
+ unsigned n_sinks;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ sinks = get_sinks(c, &n_sinks);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, sinks, n_sinks);
+
+ pa_xfree(sinks);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_sources(pa_dbusiface_card *c, unsigned *n) {
+ const char **sources = NULL;
+ unsigned i = 0;
+ uint32_t idx = 0;
+ pa_source *source = NULL;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_idxset_size(c->card->sources);
+
+ if (*n == 0)
+ return NULL;
+
+ sources = pa_xnew(const char *, *n);
+
+ PA_IDXSET_FOREACH(source, c->card->sinks, idx) {
+ sources[i] = pa_dbusiface_core_get_source_path(c->core, source);
+ ++i;
+ }
+
+ return sources;
+}
+
+static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ const char **sources;
+ unsigned n_sources;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ sources = get_sources(c, &n_sources);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, sources, n_sources);
+
+ pa_xfree(sources);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_profiles(pa_dbusiface_card *c, unsigned *n) {
+ const char **profiles;
+ unsigned i = 0;
+ void *state = NULL;
+ pa_dbusiface_card_profile *profile;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(c->profiles);
+
+ if (*n == 0)
+ return NULL;
+
+ profiles = pa_xnew(const char *, *n);
+
+ PA_HASHMAP_FOREACH(profile, c->profiles, state) {
+ profiles[i] = pa_dbusiface_card_profile_get_path(profile);
+ ++i;
+ }
+
+ return profiles;
+}
+
+static void handle_get_profiles(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ const char **profiles;
+ unsigned n_profiles;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ profiles = get_profiles(c, &n_profiles);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, profiles, n_profiles);
+
+ pa_xfree(profiles);
+}
+
+static void handle_get_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ const char *active_profile;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->active_profile) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "The card %s has no profiles, and therefore there's no active profile either.", c->card->name);
+ return;
+ }
+
+ active_profile = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &active_profile);
+}
+
+static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ const char *new_active_path;
+ pa_dbusiface_card_profile *new_active;
+ int r;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &new_active_path) < 0)
+ return;
+
+ if (!c->active_profile) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "The card %s has no profiles, and therefore there's no active profile either.",
+ c->card->name);
+ return;
+ }
+
+ if (!(new_active = pa_hashmap_get(c->profiles, new_active_path))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such profile.", new_active_path);
+ return;
+ }
+
+ if ((r = pa_card_set_profile(c->card, pa_dbusiface_card_profile_get_name(new_active), TRUE)) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
+ "Internal error in PulseAudio: pa_card_set_profile() failed with error code %i.", r);
+ return;
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ pa_dbus_send_proplist_variant_reply(conn, msg, c->proplist);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t idx;
+ const char *owner_module = NULL;
+ const char **sinks = NULL;
+ unsigned n_sinks = 0;
+ const char **sources = NULL;
+ unsigned n_sources = 0;
+ const char **profiles = NULL;
+ unsigned n_profiles = 0;
+ const char *active_profile = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ idx = c->card->index;
+ if (c->card->module)
+ owner_module = pa_dbusiface_core_get_module_path(c->core, c->card->module);
+ sinks = get_sinks(c, &n_sinks);
+ sources = get_sources(c, &n_sources);
+ profiles = get_profiles(c, &n_profiles);
+ if (c->active_profile)
+ active_profile = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &c->card->name);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DRIVER].property_name, DBUS_TYPE_STRING, &c->card->driver);
+
+ if (owner_module)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_OWNER_MODULE].property_name, DBUS_TYPE_STRING, &owner_module);
+
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SINKS].property_name, DBUS_TYPE_OBJECT_PATH, sinks, n_sinks);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SOURCES].property_name, DBUS_TYPE_OBJECT_PATH, sources, n_sources);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROFILES].property_name, DBUS_TYPE_OBJECT_PATH, profiles, n_profiles);
+
+ if (active_profile)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_ACTIVE_PROFILE].property_name, DBUS_TYPE_OBJECT_PATH, &active_profile);
+
+ pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, c->proplist);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(sinks);
+ pa_xfree(sources);
+ pa_xfree(profiles);
+}
+
+static void handle_get_profile_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+ DBusError error;
+ const char *profile_name = NULL;
+ pa_dbusiface_card_profile *profile = NULL;
+ const char *profile_path = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &profile_name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(profile = pa_hashmap_get(c->profiles, profile_name))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such profile on card %s.", profile_name, c->card->name);
+ return;
+ }
+
+ profile_path = pa_dbusiface_card_profile_get_path(profile);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &profile_path);
+}
+
+static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_card *c = userdata;
+
+ pa_assert(core);
+ pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CARD);
+ pa_assert(c);
+
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
+ DBusMessage *signal = NULL;
+
+ if (c->active_profile != c->card->active_profile) {
+ const char *object_path;
+
+ c->active_profile = c->card->active_profile;
+ object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
+
+ pa_assert_se(signal = dbus_message_new_signal(c->path, PA_DBUSIFACE_CARD_INTERFACE, signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ if (!pa_proplist_equal(c->proplist, c->card->proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(c->proplist, PA_UPDATE_SET, c->card->proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(c->path, PA_DBUSIFACE_CARD_INTERFACE, signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, c->proplist);
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+}
pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card) {
pa_dbusiface_card *c = NULL;
@@ -48,13 +504,47 @@ pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card)
c->core = core;
c->card = card;
c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, card->index);
+ c->profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ c->next_profile_index = 0;
+ c->active_profile = NULL;
+ c->proplist = pa_proplist_copy(card->proplist);
+ c->dbus_protocol = pa_dbus_protocol_get(card->core);
+ c->subscription = pa_subscription_new(card->core, PA_SUBSCRIPTION_MASK_CARD, subscription_cb, c);
+
+ if (card->profiles) {
+ pa_card_profile *profile;
+ void *state = NULL;
+
+ PA_HASHMAP_FOREACH(profile, card->profiles, state) {
+ pa_dbusiface_card_profile *p = pa_dbusiface_card_profile_new(c, profile, c->next_profile_index++);
+ pa_hashmap_put(c->profiles, pa_dbusiface_card_profile_get_name(p), p);
+ }
+ pa_assert_se(c->active_profile = card->active_profile);
+ }
+
+ pa_assert_se(pa_dbus_protocol_add_interface(c->dbus_protocol, c->path, &card_interface_info, c) >= 0);
return c;
}
+static void profile_free_cb(void *p, void *userdata) {
+ pa_dbusiface_card_profile *profile = p;
+
+ pa_assert(profile);
+
+ pa_dbusiface_card_profile_free(profile);
+}
+
void pa_dbusiface_card_free(pa_dbusiface_card *c) {
pa_assert(c);
+ pa_assert_se(pa_dbus_protocol_remove_interface(c->dbus_protocol, c->path, card_interface_info.name) >= 0);
+
+ pa_hashmap_free(c->profiles, profile_free_cb, NULL);
+ pa_proplist_free(c->proplist);
+ pa_dbus_protocol_unref(c->dbus_protocol);
+ pa_subscription_free(c->subscription);
+
pa_xfree(c->path);
pa_xfree(c);
}
commit 8c8df77d2a774a65741539381496d02f04747974
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 9 10:36:20 2009 +0300
dbusiface-card-profile: Implement the CardProfile D-Bus interface.
diff --git a/src/modules/dbus/iface-card-profile.c b/src/modules/dbus/iface-card-profile.c
index 7952494..2b85a5f 100644
--- a/src/modules/dbus/iface-card-profile.c
+++ b/src/modules/dbus/iface-card-profile.c
@@ -23,26 +23,178 @@
#include <config.h>
#endif
+#include <dbus/dbus.h>
+
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
#include "iface-card-profile.h"
#define OBJECT_NAME "profile"
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_description(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_priority(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
struct pa_dbusiface_card_profile {
+ uint32_t index;
pa_card_profile *profile;
char *path;
+ pa_dbus_protocol *dbus_protocol;
+};
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_DESCRIPTION,
+ PROPERTY_HANDLER_SINKS,
+ PROPERTY_HANDLER_SOURCES,
+ PROPERTY_HANDLER_PRIORITY,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_DESCRIPTION] = { .property_name = "Description", .type = "s", .get_cb = handle_get_description, .set_cb = NULL },
+ [PROPERTY_HANDLER_SINKS] = { .property_name = "Sinks", .type = "u", .get_cb = handle_get_sinks, .set_cb = NULL },
+ [PROPERTY_HANDLER_SOURCES] = { .property_name = "Sources", .type = "u", .get_cb = handle_get_sources, .set_cb = NULL },
+ [PROPERTY_HANDLER_PRIORITY] = { .property_name = "Priority", .type = "u", .get_cb = handle_get_priority, .set_cb = NULL },
};
-pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_card_profile *profile, uint32_t idx) {
+static pa_dbus_interface_info profile_interface_info = {
+ .name = PA_DBUSIFACE_CARD_PROFILE_INTERFACE,
+ .method_handlers = NULL,
+ .n_method_handlers = 0,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = NULL,
+ .n_signals = 0
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &p->index);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &p->profile->name);
+}
+
+static void handle_get_description(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &p->profile->description);
+}
+
+static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+ dbus_uint32_t sinks = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ sinks = p->profile->n_sinks;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sinks);
+}
+
+static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+ dbus_uint32_t sources = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ sources = p->profile->n_sources;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sources);
+}
+
+static void handle_get_priority(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+ dbus_uint32_t priority = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ priority = p->profile->priority;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &priority);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_card_profile *p = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t sinks = 0;
+ dbus_uint32_t sources = 0;
+ dbus_uint32_t priority = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ sinks = p->profile->n_sinks;
+ sources = p->profile->n_sources;
+ priority = p->profile->priority;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &p->index);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &p->profile->name);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DESCRIPTION].property_name, DBUS_TYPE_STRING, &p->profile->description);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SINKS].property_name, DBUS_TYPE_UINT32, &sinks);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SOURCES].property_name, DBUS_TYPE_UINT32, &sources);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PRIORITY].property_name, DBUS_TYPE_UINT32, &priority);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_core *core, pa_card_profile *profile, uint32_t idx) {
pa_dbusiface_card_profile *p = NULL;
pa_assert(card);
pa_assert(profile);
p = pa_xnew(pa_dbusiface_card_profile, 1);
+ p->index = idx;
p->profile = profile;
p->path = pa_sprintf_malloc("%s/%s%u", pa_dbusiface_card_get_path(card), OBJECT_NAME, idx);
+ p->dbus_protocol = pa_dbus_protocol_get(core);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(p->dbus_protocol, p->path, &profile_interface_info, p) >= 0);
return p;
}
@@ -50,6 +202,10 @@ pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card
void pa_dbusiface_card_profile_free(pa_dbusiface_card_profile *p) {
pa_assert(p);
+ pa_assert_se(pa_dbus_protocol_remove_interface(p->dbus_protocol, p->path, profile_interface_info.name) >= 0);
+
+ pa_dbus_protocol_unref(p->dbus_protocol);
+
pa_xfree(p->path);
pa_xfree(p);
}
diff --git a/src/modules/dbus/iface-card-profile.h b/src/modules/dbus/iface-card-profile.h
index e90313c..9edcde7 100644
--- a/src/modules/dbus/iface-card-profile.h
+++ b/src/modules/dbus/iface-card-profile.h
@@ -29,12 +29,15 @@
*/
#include <pulsecore/core-scache.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-card.h"
+#define PA_DBUSIFACE_CARD_PROFILE_INTERFACE PA_DBUS_CORE_INTERFACE ".CardProfile"
+
typedef struct pa_dbusiface_card_profile pa_dbusiface_card_profile;
-pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_card_profile *profile, uint32_t idx);
+pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_core *core, pa_card_profile *profile, uint32_t idx);
void pa_dbusiface_card_profile_free(pa_dbusiface_card_profile *p);
const char *pa_dbusiface_card_profile_get_path(pa_dbusiface_card_profile *p);
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 4ede718..64ec12a 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -516,7 +516,7 @@ pa_dbusiface_card *pa_dbusiface_card_new(pa_dbusiface_core *core, pa_card *card)
void *state = NULL;
PA_HASHMAP_FOREACH(profile, card->profiles, state) {
- pa_dbusiface_card_profile *p = pa_dbusiface_card_profile_new(c, profile, c->next_profile_index++);
+ pa_dbusiface_card_profile *p = pa_dbusiface_card_profile_new(c, card->core, profile, c->next_profile_index++);
pa_hashmap_put(c->profiles, pa_dbusiface_card_profile_get_name(p), p);
}
pa_assert_se(c->active_profile = card->active_profile);
diff --git a/src/modules/dbus/iface-card.h b/src/modules/dbus/iface-card.h
index 57ad4e3..e2c08a3 100644
--- a/src/modules/dbus/iface-card.h
+++ b/src/modules/dbus/iface-card.h
@@ -29,6 +29,7 @@
*/
#include <pulsecore/card.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-core.h"
commit 7cfda56af99b6d6bbb92fd6de208edd4c6991240
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 10 10:38:01 2009 +0300
dbus-protocol: Add a note for _send_signal that by default the signal isn't
actually sent.
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
index c6b630a..38ba8a1 100644
--- a/src/pulsecore/protocol-dbus.h
+++ b/src/pulsecore/protocol-dbus.h
@@ -149,6 +149,10 @@ void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *c
* do anything in that case either. */
void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal);
+/* Sends the given signal to all interested clients. By default no signals are
+ * sent - clients have to explicitly to request signals by calling
+ * .Core1.ListenForSignal. That method's handler then calls
+ * pa_dbus_protocol_add_signal_listener(). */
void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal);
/* Returns an array of extension identifier strings. The strings pointers point
commit 31117fe99e07b11b55564a6df455211db712c2f3
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 10 10:40:40 2009 +0300
dbus-protocol: Fix signal sending for the case when the client doesn't listen
for all signals.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 62f74a5..0128570 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -848,6 +848,8 @@ void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *c
for (i = 0; i < n_objects; ++i)
pa_idxset_put(object_set, pa_xstrdup(objects[i]), NULL);
+ pa_hashmap_put(conn_entry->listening_signals, signal, object_set);
+
} else {
conn_entry->listening_for_all_signals = TRUE;
@@ -892,10 +894,15 @@ void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
void *state = NULL;
pa_idxset *object_set;
DBusMessage *signal_copy;
+ char *signal_string;
pa_assert(p);
pa_assert(signal);
pa_assert(dbus_message_get_type(signal) == DBUS_MESSAGE_TYPE_SIGNAL);
+ pa_assert_se(dbus_message_get_interface(signal));
+ pa_assert_se(dbus_message_get_member(signal));
+
+ signal_string = pa_sprintf_malloc("%s.%s", dbus_message_get_interface(signal), dbus_message_get_member(signal));
PA_HASHMAP_FOREACH(conn_entry, p->connections, state) {
if ((conn_entry->listening_for_all_signals /* Case 1: listening for all signals */
@@ -903,7 +910,7 @@ void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
|| pa_idxset_isempty(conn_entry->all_signals_objects)))
|| (!conn_entry->listening_for_all_signals /* Case 2: not listening for all signals */
- && (object_set = pa_hashmap_get(conn_entry->listening_signals, signal))
+ && (object_set = pa_hashmap_get(conn_entry->listening_signals, signal_string))
&& (pa_idxset_get_by_data(object_set, dbus_message_get_path(signal), NULL)
|| pa_idxset_isempty(object_set)))) {
@@ -912,6 +919,8 @@ void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
dbus_message_unref(signal_copy);
}
}
+
+ pa_xfree(signal_string);
}
const char **pa_dbus_protocol_get_extensions(pa_dbus_protocol *p, unsigned *n) {
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
index 38ba8a1..d771b4f 100644
--- a/src/pulsecore/protocol-dbus.h
+++ b/src/pulsecore/protocol-dbus.h
@@ -129,7 +129,8 @@ int pa_dbus_protocol_unregister_connection(pa_dbus_protocol *p, DBusConnection *
pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn);
/* Enables signal receiving for the given connection. The connection must have
- * been registered earlier.
+ * been registered earlier. The signal string must contain both the signal
+ * interface and the signal name, concatenated using a period as the separator.
*
* If the signal argument is NULL, all signals will be sent to the connection,
* otherwise calling this function only adds the given signal to the list of
commit 8b5550dba32857918fd8e70b93be9094c11cf0c8
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 05:51:55 2009 +0300
dbusiface-card: Split some overly long lines.
diff --git a/src/modules/dbus/iface-card-profile.c b/src/modules/dbus/iface-card-profile.c
index 2b85a5f..4a1696c 100644
--- a/src/modules/dbus/iface-card-profile.c
+++ b/src/modules/dbus/iface-card-profile.c
@@ -182,7 +182,11 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
dbus_message_unref(reply);
}
-pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_core *core, pa_card_profile *profile, uint32_t idx) {
+pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(
+ pa_dbusiface_card *card,
+ pa_core *core,
+ pa_card_profile *profile,
+ uint32_t idx) {
pa_dbusiface_card_profile *p = NULL;
pa_assert(card);
diff --git a/src/modules/dbus/iface-card-profile.h b/src/modules/dbus/iface-card-profile.h
index 9edcde7..a09767f 100644
--- a/src/modules/dbus/iface-card-profile.h
+++ b/src/modules/dbus/iface-card-profile.h
@@ -37,7 +37,11 @@
typedef struct pa_dbusiface_card_profile pa_dbusiface_card_profile;
-pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(pa_dbusiface_card *card, pa_core *core, pa_card_profile *profile, uint32_t idx);
+pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(
+ pa_dbusiface_card *card,
+ pa_core *core,
+ pa_card_profile *profile,
+ uint32_t idx);
void pa_dbusiface_card_profile_free(pa_dbusiface_card_profile *p);
const char *pa_dbusiface_card_profile_get_path(pa_dbusiface_card_profile *p);
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 64ec12a..40031d2 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -312,7 +312,10 @@ static void handle_get_active_profile(DBusConnection *conn, DBusMessage *msg, vo
pa_assert(c);
if (!c->active_profile) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "The card %s has no profiles, and therefore there's no active profile either.", c->card->name);
+ pa_assert(pa_hashmap_isempty(c->profiles));
+
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "The card %s has no profiles, and therefore there's no active profile either.", c->card->name);
return;
}
@@ -470,7 +473,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
c->active_profile = c->card->active_profile;
object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
- pa_assert_se(signal = dbus_message_new_signal(c->path, PA_DBUSIFACE_CARD_INTERFACE, signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
+ pa_assert_se(signal = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CARD_INTERFACE,
+ signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -483,7 +488,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_proplist_update(c->proplist, PA_UPDATE_SET, c->card->proplist);
- pa_assert_se(signal = dbus_message_new_signal(c->path, PA_DBUSIFACE_CARD_INTERFACE, signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ pa_assert_se(signal = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CARD_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
dbus_message_iter_init_append(signal, &msg_iter);
pa_dbus_append_proplist(&msg_iter, c->proplist);
commit afb79ee83e95b3c492abe55ea0c26a9fe902b075
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 05:53:36 2009 +0300
dbusiface-card-profile: Assert the core argument isn't NULL.
diff --git a/src/modules/dbus/iface-card-profile.c b/src/modules/dbus/iface-card-profile.c
index 4a1696c..004e2e8 100644
--- a/src/modules/dbus/iface-card-profile.c
+++ b/src/modules/dbus/iface-card-profile.c
@@ -190,6 +190,7 @@ pa_dbusiface_card_profile *pa_dbusiface_card_profile_new(
pa_dbusiface_card_profile *p = NULL;
pa_assert(card);
+ pa_assert(core);
pa_assert(profile);
p = pa_xnew(pa_dbusiface_card_profile, 1);
commit 18f9f1b5d17c83280205083760edd4dccb37ed6a
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 05:58:24 2009 +0300
dbusiface-card: Use the ++ operator like it's meant to be used.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 40031d2..e3606c7 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -279,10 +279,8 @@ static const char **get_profiles(pa_dbusiface_card *c, unsigned *n) {
profiles = pa_xnew(const char *, *n);
- PA_HASHMAP_FOREACH(profile, c->profiles, state) {
- profiles[i] = pa_dbusiface_card_profile_get_path(profile);
- ++i;
- }
+ PA_HASHMAP_FOREACH(profile, c->profiles, state)
+ profiles[i++] = pa_dbusiface_card_profile_get_path(profile);
return profiles;
}
commit 31c544d8439edee56ecc641c07012042ab38bb80
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 06:00:46 2009 +0300
dbusiface-card: Assert that the profiles list is empty if there's no active
profile.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index e3606c7..924bea9 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -336,6 +336,8 @@ static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, vo
return;
if (!c->active_profile) {
+ pa_assert(pa_hashmap_isempty(c->profiles));
+
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
"The card %s has no profiles, and therefore there's no active profile either.",
c->card->name);
commit 90c73db449e67cf999a354c7e3ccad3edd44a829
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 06:09:35 2009 +0300
dbusiface-card: Fix the OwnerModule property type in handle_get_all().
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 924bea9..5a79794 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -406,7 +406,7 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DRIVER].property_name, DBUS_TYPE_STRING, &c->card->driver);
if (owner_module)
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_OWNER_MODULE].property_name, DBUS_TYPE_STRING, &owner_module);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_OWNER_MODULE].property_name, DBUS_TYPE_OBJECT_PATH, &owner_module);
pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SINKS].property_name, DBUS_TYPE_OBJECT_PATH, sinks, n_sinks);
pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SOURCES].property_name, DBUS_TYPE_OBJECT_PATH, sources, n_sources);
commit 1e65d8d35b23d3c76a30155c42bec282257579e5
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 06:11:38 2009 +0300
dbusiface-core: New function: pa_dbusiface_core_get_card_path().
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index e8ea50b..81e709f 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2034,6 +2034,13 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_xfree(c);
}
+const char *pa_dbusiface_core_get_card_path(pa_dbusiface_core *c, const pa_card *card) {
+ pa_assert(c);
+ pa_assert(card);
+
+ return pa_dbusiface_card_get_path(pa_hashmap_get(c->cards, PA_UINT32_TO_PTR(card->index)));
+}
+
const char *pa_dbusiface_core_get_sink_path(pa_dbusiface_core *c, const pa_sink *sink) {
pa_assert(c);
pa_assert(sink);
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index 1b73782..7010205 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -35,6 +35,7 @@ typedef struct pa_dbusiface_core pa_dbusiface_core;
pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core);
void pa_dbusiface_core_free(pa_dbusiface_core *c);
+const char *pa_dbusiface_core_get_card_path(pa_dbusiface_core *c, const pa_card *card);
const char *pa_dbusiface_core_get_sink_path(pa_dbusiface_core *c, const pa_sink *sink);
const char *pa_dbusiface_core_get_source_path(pa_dbusiface_core *c, const pa_source *source);
const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module);
commit 22ab1414507f84d6a42c5255d66ba15d8097d35f
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 06:13:17 2009 +0300
dbus-protocol: Use pa_hashmap_remove() instead of _get().
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 0128570..cf561c8 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -841,7 +841,7 @@ void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *c
conn_entry->listening_for_all_signals = FALSE;
/* Replace the old object list with a new one. */
- if ((object_set = pa_hashmap_get(conn_entry->listening_signals, signal)))
+ if ((object_set = pa_hashmap_remove(conn_entry->listening_signals, signal)))
pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
object_set = pa_idxset_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
commit 91f626f777402fa6485658b04cbcdf2a7aac3f01
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 06:18:41 2009 +0300
dbusiface-device: Implement the Device and DevicePort D-Bus interfaces.
diff --git a/src/Makefile.am b/src/Makefile.am
index e605ad7..8722f97 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1282,6 +1282,7 @@ module_dbus_protocol_la_SOURCES = \
modules/dbus/iface-client.c modules/dbus/iface-client.h \
modules/dbus/iface-core.c modules/dbus/iface-core.h \
modules/dbus/iface-device.c modules/dbus/iface-device.h \
+ modules/dbus/iface-device-port.c modules/dbus/iface-device-port.h \
modules/dbus/iface-memstats.c modules/dbus/iface-memstats.h \
modules/dbus/iface-module.c modules/dbus/iface-module.h \
modules/dbus/iface-sample.c modules/dbus/iface-sample.h \
diff --git a/src/modules/dbus/iface-device-port.c b/src/modules/dbus/iface-device-port.c
new file mode 100644
index 0000000..d403b6a
--- /dev/null
+++ b/src/modules/dbus/iface-device-port.c
@@ -0,0 +1,190 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Tanu Kaskinen
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dbus/dbus.h>
+
+#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
+
+#include "iface-device-port.h"
+
+#define OBJECT_NAME "port"
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_description(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_priority(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+struct pa_dbusiface_device_port {
+ uint32_t index;
+ pa_device_port *port;
+ char *path;
+ pa_dbus_protocol *dbus_protocol;
+};
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_DESCRIPTION,
+ PROPERTY_HANDLER_PRIORITY,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_DESCRIPTION] = { .property_name = "Description", .type = "s", .get_cb = handle_get_description, .set_cb = NULL },
+ [PROPERTY_HANDLER_PRIORITY] = { .property_name = "Priority", .type = "u", .get_cb = handle_get_priority, .set_cb = NULL },
+};
+
+static pa_dbus_interface_info port_interface_info = {
+ .name = PA_DBUSIFACE_DEVICE_PORT_INTERFACE,
+ .method_handlers = NULL,
+ .n_method_handlers = 0,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = NULL,
+ .n_signals = 0
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device_port *p = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &p->index);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device_port *p = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &p->port->name);
+}
+
+static void handle_get_description(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device_port *p = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &p->port->description);
+}
+
+static void handle_get_priority(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device_port *p = userdata;
+ dbus_uint32_t priority = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ priority = p->port->priority;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &priority);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device_port *p = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t priority = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(p);
+
+ priority = p->port->priority;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &p->index);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &p->port->name);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DESCRIPTION].property_name, DBUS_TYPE_STRING, &p->port->description);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PRIORITY].property_name, DBUS_TYPE_UINT32, &priority);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+pa_dbusiface_device_port *pa_dbusiface_device_port_new(
+ pa_dbusiface_device *device,
+ pa_core *core,
+ pa_device_port *port,
+ uint32_t idx) {
+ pa_dbusiface_device_port *p = NULL;
+
+ pa_assert(device);
+ pa_assert(core);
+ pa_assert(port);
+
+ p = pa_xnew(pa_dbusiface_device_port, 1);
+ p->index = idx;
+ p->port = port;
+ p->path = pa_sprintf_malloc("%s/%s%u", pa_dbusiface_device_get_path(device), OBJECT_NAME, idx);
+ p->dbus_protocol = pa_dbus_protocol_get(core);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(p->dbus_protocol, p->path, &port_interface_info, p) >= 0);
+
+ return p;
+}
+
+void pa_dbusiface_device_port_free(pa_dbusiface_device_port *p) {
+ pa_assert(p);
+
+ pa_assert_se(pa_dbus_protocol_remove_interface(p->dbus_protocol, p->path, port_interface_info.name) >= 0);
+
+ pa_dbus_protocol_unref(p->dbus_protocol);
+
+ pa_xfree(p->path);
+ pa_xfree(p);
+}
+
+const char *pa_dbusiface_device_port_get_path(pa_dbusiface_device_port *p) {
+ pa_assert(p);
+
+ return p->path;
+}
+
+const char *pa_dbusiface_device_port_get_name(pa_dbusiface_device_port *p) {
+ pa_assert(p);
+
+ return p->port->name;
+}
diff --git a/src/modules/dbus/iface-device.h b/src/modules/dbus/iface-device-port.h
similarity index 51%
copy from src/modules/dbus/iface-device.h
copy to src/modules/dbus/iface-device-port.h
index 1e9af83..0461e2f 100644
--- a/src/modules/dbus/iface-device.h
+++ b/src/modules/dbus/iface-device-port.h
@@ -1,5 +1,5 @@
-#ifndef foodbusifacedevicehfoo
-#define foodbusifacedevicehfoo
+#ifndef foodbusifacedeviceporthfoo
+#define foodbusifacedeviceporthfoo
/***
This file is part of PulseAudio.
@@ -22,27 +22,29 @@
USA.
***/
-/* This object implements the D-Bus interfaces org.PulseAudio.Core1.Device,
- * org.PulseAudio.Core1.Sink and org.PulseAudio.Core1.Source.
+/* This object implements the D-Bus interface org.PulseAudio.Core1.DevicePort.
*
- * See http://pulseaudio.org/wiki/DBusInterface for the interface
+ * See http://pulseaudio.org/wiki/DBusInterface for the DevicePort interface
* documentation.
*/
+#include <pulsecore/protocol-dbus.h>
#include <pulsecore/sink.h>
-#include <pulsecore/source.h>
-#include "iface-core.h"
+#include "iface-device.h"
-typedef struct pa_dbusiface_device pa_dbusiface_device;
+#define PA_DBUSIFACE_DEVICE_PORT_INTERFACE PA_DBUS_CORE_INTERFACE ".DevicePort"
-pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_sink *sink);
-pa_dbusiface_device *pa_dbusiface_device_new_source(pa_dbusiface_core *core, pa_source *source);
-void pa_dbusiface_device_free(pa_dbusiface_device *d);
+typedef struct pa_dbusiface_device_port pa_dbusiface_device_port;
-const char *pa_dbusiface_device_get_path(pa_dbusiface_device *d);
+pa_dbusiface_device_port *pa_dbusiface_device_port_new(
+ pa_dbusiface_device *device,
+ pa_core *core,
+ pa_device_port *port,
+ uint32_t idx);
+void pa_dbusiface_device_port_free(pa_dbusiface_device_port *p);
-pa_sink *pa_dbusiface_device_get_sink(pa_dbusiface_device *d);
-pa_source *pa_dbusiface_device_get_source(pa_dbusiface_device *d);
+const char *pa_dbusiface_device_port_get_path(pa_dbusiface_device_port *p);
+const char *pa_dbusiface_device_port_get_name(pa_dbusiface_device_port *p);
#endif
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 1a64f43..3cf9d19 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -24,62 +24,1258 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
#include <pulsecore/protocol-dbus.h>
+#include "iface-device-port.h"
+
#include "iface-device.h"
#define SINK_OBJECT_NAME "sink"
#define SOURCE_OBJECT_NAME "source"
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_card(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_has_flat_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_has_convertible_to_decibel_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_base_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_volume_steps(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_has_hardware_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_has_hardware_mute(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_configured_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_has_dynamic_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_is_hardware_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_is_network_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_state(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_ports(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_suspend(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_port_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_sink_get_monitor_source(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_sink_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_source_get_monitor_of_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_source_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
enum device_type {
DEVICE_TYPE_SINK,
DEVICE_TYPE_SOURCE
};
struct pa_dbusiface_device {
+ pa_dbusiface_core *core;
+
union {
pa_sink *sink;
pa_source *source;
};
enum device_type type;
char *path;
+ pa_cvolume volume;
+ pa_bool_t is_muted;
+ union {
+ pa_sink_state_t sink_state;
+ pa_source_state_t source_state;
+ };
+ pa_hashmap *ports;
+ uint32_t next_port_index;
+ pa_device_port *active_port;
+ pa_proplist *proplist;
+
+ pa_dbus_protocol *dbus_protocol;
+ pa_subscription *subscription;
};
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_DRIVER,
+ PROPERTY_HANDLER_OWNER_MODULE,
+ PROPERTY_HANDLER_CARD,
+ PROPERTY_HANDLER_SAMPLE_FORMAT,
+ PROPERTY_HANDLER_SAMPLE_RATE,
+ PROPERTY_HANDLER_CHANNELS,
+ PROPERTY_HANDLER_VOLUME,
+ PROPERTY_HANDLER_HAS_FLAT_VOLUME,
+ PROPERTY_HANDLER_HAS_CONVERTIBLE_TO_DECIBEL_VOLUME,
+ PROPERTY_HANDLER_BASE_VOLUME,
+ PROPERTY_HANDLER_VOLUME_STEPS,
+ PROPERTY_HANDLER_IS_MUTED,
+ PROPERTY_HANDLER_HAS_HARDWARE_VOLUME,
+ PROPERTY_HANDLER_HAS_HARDWARE_MUTE,
+ PROPERTY_HANDLER_CONFIGURED_LATENCY,
+ PROPERTY_HANDLER_HAS_DYNAMIC_LATENCY,
+ PROPERTY_HANDLER_LATENCY,
+ PROPERTY_HANDLER_IS_HARDWARE_DEVICE,
+ PROPERTY_HANDLER_IS_NETWORK_DEVICE,
+ PROPERTY_HANDLER_STATE,
+ PROPERTY_HANDLER_PORTS,
+ PROPERTY_HANDLER_ACTIVE_PORT,
+ PROPERTY_HANDLER_PROPERTY_LIST,
+ PROPERTY_HANDLER_MAX
+};
+
+enum sink_property_handler_index {
+ SINK_PROPERTY_HANDLER_MONITOR_SOURCE,
+ SINK_PROPERTY_HANDLER_MAX
+};
+
+enum source_property_handler_index {
+ SOURCE_PROPERTY_HANDLER_MONITOR_OF_SINK,
+ SOURCE_PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_DRIVER] = { .property_name = "Driver", .type = "s", .get_cb = handle_get_driver, .set_cb = NULL },
+ [PROPERTY_HANDLER_OWNER_MODULE] = { .property_name = "OwnerModule", .type = "o", .get_cb = handle_get_owner_module, .set_cb = NULL },
+ [PROPERTY_HANDLER_CARD] = { .property_name = "Card", .type = "o", .get_cb = handle_get_card, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_FORMAT] = { .property_name = "SampleFormat", .type = "u", .get_cb = handle_get_sample_format, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_RATE] = { .property_name = "SampleRate", .type = "u", .get_cb = handle_get_sample_rate, .set_cb = NULL },
+ [PROPERTY_HANDLER_CHANNELS] = { .property_name = "Channels", .type = "au", .get_cb = handle_get_channels, .set_cb = NULL },
+ [PROPERTY_HANDLER_VOLUME] = { .property_name = "Volume", .type = "au", .get_cb = handle_get_volume, .set_cb = handle_set_volume },
+ [PROPERTY_HANDLER_HAS_FLAT_VOLUME] = { .property_name = "HasFlatVolume", .type = "b", .get_cb = handle_get_has_flat_volume, .set_cb = NULL },
+ [PROPERTY_HANDLER_HAS_CONVERTIBLE_TO_DECIBEL_VOLUME] = { .property_name = "HasConvertibleToDecibelVolume", .type = "b", .get_cb = handle_get_has_convertible_to_decibel_volume, .set_cb = NULL },
+ [PROPERTY_HANDLER_BASE_VOLUME] = { .property_name = "BaseVolume", .type = "u", .get_cb = handle_get_base_volume, .set_cb = NULL },
+ [PROPERTY_HANDLER_VOLUME_STEPS] = { .property_name = "VolumeSteps", .type = "u", .get_cb = handle_get_volume_steps, .set_cb = NULL },
+ [PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_get_is_muted, .set_cb = handle_set_is_muted },
+ [PROPERTY_HANDLER_HAS_HARDWARE_VOLUME] = { .property_name = "HasHardwareVolume", .type = "b", .get_cb = handle_get_has_hardware_volume, .set_cb = NULL },
+ [PROPERTY_HANDLER_HAS_HARDWARE_MUTE] = { .property_name = "HasHardwareMute", .type = "b", .get_cb = handle_get_has_hardware_mute, .set_cb = NULL },
+ [PROPERTY_HANDLER_CONFIGURED_LATENCY] = { .property_name = "ConfiguredLatency", .type = "t", .get_cb = handle_get_configured_latency, .set_cb = NULL },
+ [PROPERTY_HANDLER_HAS_DYNAMIC_LATENCY] = { .property_name = "HasDynamicLatency", .type = "b", .get_cb = handle_get_has_dynamic_latency, .set_cb = NULL },
+ [PROPERTY_HANDLER_LATENCY] = { .property_name = "Latency", .type = "t", .get_cb = handle_get_latency, .set_cb = NULL },
+ [PROPERTY_HANDLER_IS_HARDWARE_DEVICE] = { .property_name = "IsHardwareDevice", .type = "b", .get_cb = handle_get_is_hardware_device, .set_cb = NULL },
+ [PROPERTY_HANDLER_IS_NETWORK_DEVICE] = { .property_name = "IsNetworkDevice", .type = "b", .get_cb = handle_get_is_network_device, .set_cb = NULL },
+ [PROPERTY_HANDLER_STATE] = { .property_name = "State", .type = "u", .get_cb = handle_get_state, .set_cb = NULL },
+ [PROPERTY_HANDLER_PORTS] = { .property_name = "Ports", .type = "ao", .get_cb = handle_get_ports, .set_cb = NULL },
+ [PROPERTY_HANDLER_ACTIVE_PORT] = { .property_name = "ActivePort", .type = "o", .get_cb = handle_get_active_port, .set_cb = handle_set_active_port },
+ [PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
+};
+
+static pa_dbus_property_handler sink_property_handlers[SINK_PROPERTY_HANDLER_MAX] = {
+ [SINK_PROPERTY_HANDLER_MONITOR_SOURCE] = { .property_name = "MonitorSource", .type = "o", .get_cb = handle_sink_get_monitor_source, .set_cb = NULL }
+};
+
+static pa_dbus_property_handler source_property_handlers[SOURCE_PROPERTY_HANDLER_MAX] = {
+ [SOURCE_PROPERTY_HANDLER_MONITOR_OF_SINK] = { .property_name = "MonitorOfSink", .type = "o", .get_cb = handle_source_get_monitor_of_sink, .set_cb = NULL }
+};
+
+enum method_handler_index {
+ METHOD_HANDLER_SUSPEND,
+ METHOD_HANDLER_GET_PORT_BY_NAME,
+ METHOD_HANDLER_MAX
+};
+
+static pa_dbus_arg_info suspend_args[] = { { "suspend", "b", "in" } };
+static pa_dbus_arg_info get_port_by_name_args[] = { { "name", "s", "in" }, { "port", "o", "out" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_SUSPEND] = {
+ .method_name = "Suspend",
+ .arguments = suspend_args,
+ .n_arguments = sizeof(suspend_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_suspend },
+ [METHOD_HANDLER_GET_PORT_BY_NAME] = {
+ .method_name = "GetPortByName",
+ .arguments = get_port_by_name_args,
+ .n_arguments = sizeof(get_port_by_name_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_get_port_by_name }
+};
+
+enum signal_index {
+ SIGNAL_VOLUME_UPDATED,
+ SIGNAL_MUTE_UPDATED,
+ SIGNAL_STATE_UPDATED,
+ SIGNAL_ACTIVE_PORT_UPDATED,
+ SIGNAL_PROPERTY_LIST_UPDATED,
+ SIGNAL_MAX
+};
+
+static pa_dbus_arg_info volume_updated_args[] = { { "volume", "au", NULL } };
+static pa_dbus_arg_info mute_updated_args[] = { { "muted", "b", NULL } };
+static pa_dbus_arg_info state_updated_args[] = { { "state", "u", NULL } };
+static pa_dbus_arg_info active_port_updated_args[] = { { "port", "o", NULL } };
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_VOLUME_UPDATED] = { .name = "VolumeUpdated", .arguments = volume_updated_args, .n_arguments = 1 },
+ [SIGNAL_MUTE_UPDATED] = { .name = "MuteUpdated", .arguments = mute_updated_args, .n_arguments = 1 },
+ [SIGNAL_STATE_UPDATED] = { .name = "StateUpdated", .arguments = state_updated_args, .n_arguments = 1 },
+ [SIGNAL_ACTIVE_PORT_UPDATED] = { .name = "ActivePortUpdated", .arguments = active_port_updated_args, .n_arguments = 1 },
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }
+};
+
+static pa_dbus_interface_info device_interface_info = {
+ .name = PA_DBUSIFACE_DEVICE_INTERFACE,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static pa_dbus_interface_info sink_interface_info = {
+ .name = PA_DBUSIFACE_SINK_INTERFACE,
+ .method_handlers = NULL,
+ .n_method_handlers = 0,
+ .property_handlers = sink_property_handlers,
+ .n_property_handlers = SINK_PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_sink_get_all,
+ .signals = NULL,
+ .n_signals = 0
+};
+
+static pa_dbus_interface_info source_interface_info = {
+ .name = PA_DBUSIFACE_SOURCE_INTERFACE,
+ .method_handlers = NULL,
+ .n_method_handlers = 0,
+ .property_handlers = source_property_handlers,
+ .n_property_handlers = SOURCE_PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_source_get_all,
+ .signals = NULL,
+ .n_signals = 0
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t idx = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ idx = (d->type == DEVICE_TYPE_SINK) ? d->sink->index : d->source->index;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char *name = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ name = (d->type == DEVICE_TYPE_SINK) ? d->sink->name : d->source->name;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &name);
+}
+
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char *driver = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ driver = (d->type == DEVICE_TYPE_SINK) ? d->sink->driver : d->source->driver;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &driver);
+}
+
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ pa_module *owner_module = NULL;
+ const char *object_path = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ owner_module = (d->type == DEVICE_TYPE_SINK) ? d->sink->module : d->source->module;
+
+ if (!owner_module) {
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Sink %s doesn't have an owner module.", d->sink->name);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s doesn't have an owner module.", d->source->name);
+ return;
+ }
+
+ object_path = pa_dbusiface_core_get_module_path(d->core, owner_module);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_card(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ pa_card *card = NULL;
+ const char *object_path = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ card = (d->type == DEVICE_TYPE_SINK) ? d->sink->card : d->source->card;
+
+ if (!card) {
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Sink %s doesn't belong to any card.", d->sink->name);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s doesn't belong to any card.", d->source->name);
+ return;
+ }
+
+ object_path = pa_dbusiface_core_get_card_path(d->core, card);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t sample_format = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ sample_format = (d->type == DEVICE_TYPE_SINK) ? d->sink->sample_spec.format : d->source->sample_spec.format;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sample_format);
+}
+
+static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t sample_rate = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ sample_rate = (d->type == DEVICE_TYPE_SINK) ? d->sink->sample_spec.rate : d->source->sample_spec.rate;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sample_rate);
+}
+
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ pa_channel_map *channel_map = NULL;
+ dbus_uint32_t channels[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ channel_map = (d->type == DEVICE_TYPE_SINK) ? &d->sink->channel_map : &d->source->channel_map;
+
+ for (i = 0; i < channel_map->channels; ++i)
+ channels[i] = channel_map->map[i];
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, channels, channel_map->channels);
+}
+
+static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ for (i = 0; i < d->volume.channels; ++i)
+ volume[i] = d->volume.values[i];
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, volume, d->volume.channels);
+}
+
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ unsigned device_channels = 0;
+ dbus_uint32_t *volume = NULL;
+ unsigned n_volume_entries = 0;
+ pa_cvolume new_vol;
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ pa_cvolume_init(&new_vol);
+
+ device_channels = (d->type == DEVICE_TYPE_SINK) ? d->sink->channel_map.channels : d->source->channel_map.channels;
+
+ new_vol.channels = device_channels;
+
+ if (pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &volume, &n_volume_entries) < 0)
+ return;
+
+ if (n_volume_entries != device_channels) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Expected %u volume entries, got %u.", device_channels, n_volume_entries);
+ return;
+ }
+
+ for (i = 0; i < n_volume_entries; ++i) {
+ if (volume[i] > PA_VOLUME_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too large volume value: %u", volume[i]);
+ return;
+ }
+ new_vol.values[i] = volume[i];
+ }
+
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_sink_set_volume(d->sink, &new_vol, TRUE, TRUE, TRUE, TRUE);
+ else
+ pa_source_set_volume(d->source, &new_vol, TRUE);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_has_flat_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t has_flat_volume = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ has_flat_volume = (d->type == DEVICE_TYPE_SINK) ? (d->sink->flags & PA_SINK_FLAT_VOLUME) : FALSE;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &has_flat_volume);
+}
+
+static void handle_get_has_convertible_to_decibel_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t has_convertible_to_decibel_volume = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ has_convertible_to_decibel_volume = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_DECIBEL_VOLUME)
+ : (d->source->flags & PA_SOURCE_DECIBEL_VOLUME);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &has_convertible_to_decibel_volume);
+}
+
+static void handle_get_base_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t base_volume;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ base_volume = (d->type == DEVICE_TYPE_SINK) ? d->sink->base_volume : d->source->base_volume;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &base_volume);
+}
+
+static void handle_get_volume_steps(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t volume_steps;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ volume_steps = (d->type == DEVICE_TYPE_SINK) ? d->sink->n_volume_steps : d->source->n_volume_steps;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &volume_steps);
+}
+
+static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &d->is_muted);
+}
+
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t is_muted = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &is_muted) < 0)
+ return;
+
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_sink_set_mute(d->sink, is_muted, TRUE);
+ else
+ pa_source_set_mute(d->source, is_muted, TRUE);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_has_hardware_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t has_hardware_volume = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ has_hardware_volume = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_HW_VOLUME_CTRL)
+ : (d->source->flags & PA_SOURCE_HW_VOLUME_CTRL);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &has_hardware_volume);
+}
+
+static void handle_get_has_hardware_mute(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t has_hardware_mute = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ has_hardware_mute = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_HW_MUTE_CTRL)
+ : (d->source->flags & PA_SOURCE_HW_MUTE_CTRL);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &has_hardware_mute);
+}
+
+static void handle_get_configured_latency(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint64_t configured_latency = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ configured_latency = (d->type == DEVICE_TYPE_SINK)
+ ? pa_sink_get_requested_latency(d->sink)
+ : pa_source_get_requested_latency(d->source);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT64, &configured_latency);
+}
+
+static void handle_get_has_dynamic_latency(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t has_dynamic_latency = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ has_dynamic_latency = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_DYNAMIC_LATENCY)
+ : (d->source->flags & PA_SOURCE_DYNAMIC_LATENCY);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &has_dynamic_latency);
+}
+
+static void handle_get_latency(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint64_t latency = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ if (d->type == DEVICE_TYPE_SINK && !(d->sink->flags & PA_SINK_LATENCY))
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Sink %s doesn't support latency querying.", d->sink->name);
+ else if (d->type == DEVICE_TYPE_SOURCE && !(d->source->flags & PA_SOURCE_LATENCY))
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s doesn't support latency querying.", d->source->name);
+ return;
+
+ latency = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_latency(d->sink) : pa_source_get_latency(d->source);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT64, &latency);
+}
+
+static void handle_get_is_hardware_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t is_hardware_device = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ is_hardware_device = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_HARDWARE)
+ : (d->source->flags & PA_SOURCE_HARDWARE);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &is_hardware_device);
+}
+
+static void handle_get_is_network_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t is_network_device = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ is_network_device = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_NETWORK)
+ : (d->source->flags & PA_SOURCE_NETWORK);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &is_network_device);
+}
+
+static void handle_get_state(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_uint32_t state;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ state = (d->type == DEVICE_TYPE_SINK) ? d->sink_state : d->source_state;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &state);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_ports(pa_dbusiface_device *d, unsigned *n) {
+ const char **ports;
+ unsigned i = 0;
+ void *state = NULL;
+ pa_dbusiface_device_port *port = NULL;
+
+ pa_assert(d);
+ pa_assert(n);
+
+ *n = pa_hashmap_size(d->ports);
+
+ if (*n == 0)
+ return NULL;
+
+ ports = pa_xnew(const char *, *n);
+
+ PA_HASHMAP_FOREACH(port, d->ports, state)
+ ports[i++] = pa_dbusiface_device_port_get_path(port);
+
+ return ports;
+}
+
+static void handle_get_ports(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char **ports = NULL;
+ unsigned n_ports = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ ports = get_ports(d, &n_ports);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, ports, n_ports);
+
+ pa_xfree(ports);
+}
+
+static void handle_get_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char *active_port;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ if (!d->active_port) {
+ pa_assert(pa_hashmap_isempty(d->ports));
+
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "The sink %s has no ports, and therefore there's no active port either.", d->sink->name);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "The source %s has no ports, and therefore there's no active port either.", d->source->name);
+ return;
+ }
+
+ active_port = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &active_port);
+}
+
+static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char *new_active_path;
+ pa_dbusiface_device_port *new_active;
+ int r;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &new_active_path) < 0)
+ return;
+
+ if (!d->active_port) {
+ pa_assert(pa_hashmap_isempty(d->ports));
+
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "The sink %s has no ports, and therefore there's no active port either.", d->sink->name);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "The source %s has no ports, and therefore there's no active port either.", d->source->name);
+ return;
+ }
+
+ if (!(new_active = pa_hashmap_get(d->ports, new_active_path))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such port.", new_active_path);
+ return;
+ }
+
+ if (d->type == DEVICE_TYPE_SINK) {
+ if ((r = pa_sink_set_port(d->sink, pa_dbusiface_device_port_get_name(new_active), TRUE)) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
+ "Internal error in PulseAudio: pa_sink_set_port() failed with error code %i.", r);
+ return;
+ }
+ } else {
+ if ((r = pa_source_set_port(d->source, pa_dbusiface_device_port_get_name(new_active), TRUE)) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
+ "Internal error in PulseAudio: pa_source_set_port() failed with error code %i.", r);
+ return;
+ }
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ pa_dbus_send_proplist_variant_reply(conn, msg, d->proplist);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t idx = 0;
+ const char *name = NULL;
+ const char *driver = NULL;
+ pa_module *owner_module = NULL;
+ const char *owner_module_path = NULL;
+ pa_card *card = NULL;
+ const char *card_path = NULL;
+ dbus_uint32_t sample_format = 0;
+ dbus_uint32_t sample_rate = 0;
+ pa_channel_map *channel_map = NULL;
+ dbus_uint32_t channels[PA_CHANNELS_MAX];
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ dbus_bool_t has_flat_volume = FALSE;
+ dbus_bool_t has_convertible_to_decibel_volume = FALSE;
+ dbus_uint32_t base_volume = 0;
+ dbus_uint32_t volume_steps = 0;
+ dbus_bool_t has_hardware_volume = FALSE;
+ dbus_bool_t has_hardware_mute = FALSE;
+ dbus_uint64_t configured_latency = 0;
+ dbus_bool_t has_dynamic_latency = FALSE;
+ dbus_uint64_t latency = 0;
+ dbus_bool_t is_hardware_device = FALSE;
+ dbus_bool_t is_network_device = FALSE;
+ dbus_uint32_t state = 0;
+ const char **ports = NULL;
+ unsigned n_ports = 0;
+ const char *active_port = NULL;
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ idx = (d->type == DEVICE_TYPE_SINK) ? d->sink->index : d->source->index;
+ name = (d->type == DEVICE_TYPE_SINK) ? d->sink->name : d->source->name;
+ driver = (d->type == DEVICE_TYPE_SINK) ? d->sink->driver : d->source->driver;
+ owner_module = (d->type == DEVICE_TYPE_SINK) ? d->sink->module : d->source->module;
+ if (owner_module)
+ owner_module_path = pa_dbusiface_core_get_module_path(d->core, owner_module);
+ card = (d->type == DEVICE_TYPE_SINK) ? d->sink->card : d->source->card;
+ if (card)
+ card_path = pa_dbusiface_core_get_card_path(d->core, card);
+ sample_format = (d->type == DEVICE_TYPE_SINK) ? d->sink->sample_spec.format : d->source->sample_spec.format;
+ sample_rate = (d->type == DEVICE_TYPE_SINK) ? d->sink->sample_spec.rate : d->source->sample_spec.rate;
+ channel_map = (d->type == DEVICE_TYPE_SINK) ? &d->sink->channel_map : &d->source->channel_map;
+ for (i = 0; i < channel_map->channels; ++i)
+ channels[i] = channel_map->map[i];
+ for (i = 0; i < d->volume.channels; ++i)
+ volume[i] = d->volume.values[i];
+ has_flat_volume = (d->type == DEVICE_TYPE_SINK) ? (d->sink->flags & PA_SINK_FLAT_VOLUME) : FALSE;
+ has_convertible_to_decibel_volume = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_DECIBEL_VOLUME)
+ : (d->source->flags & PA_SOURCE_DECIBEL_VOLUME);
+ base_volume = (d->type == DEVICE_TYPE_SINK) ? d->sink->base_volume : d->source->base_volume;
+ volume_steps = (d->type == DEVICE_TYPE_SINK) ? d->sink->n_volume_steps : d->source->n_volume_steps;
+ has_hardware_volume = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_HW_VOLUME_CTRL)
+ : (d->source->flags & PA_SOURCE_HW_VOLUME_CTRL);
+ has_hardware_mute = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_HW_MUTE_CTRL)
+ : (d->source->flags & PA_SOURCE_HW_MUTE_CTRL);
+ configured_latency = (d->type == DEVICE_TYPE_SINK)
+ ? pa_sink_get_requested_latency(d->sink)
+ : pa_source_get_requested_latency(d->source);
+ has_dynamic_latency = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_DYNAMIC_LATENCY)
+ : (d->source->flags & PA_SOURCE_DYNAMIC_LATENCY);
+ latency = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_latency(d->sink) : pa_source_get_latency(d->source);
+ is_hardware_device = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_HARDWARE)
+ : (d->source->flags & PA_SOURCE_HARDWARE);
+ is_network_device = (d->type == DEVICE_TYPE_SINK)
+ ? (d->sink->flags & PA_SINK_NETWORK)
+ : (d->source->flags & PA_SOURCE_NETWORK);
+ state = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_state(d->sink) : pa_source_get_state(d->source);
+ ports = get_ports(d, &n_ports);
+ if (d->active_port)
+ active_port = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &name);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DRIVER].property_name, DBUS_TYPE_STRING, &driver);
+
+ if (owner_module)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_OWNER_MODULE].property_name, DBUS_TYPE_OBJECT_PATH, &owner_module_path);
+
+ if (card)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CARD].property_name, DBUS_TYPE_OBJECT_PATH, &card_path);
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_FORMAT].property_name, DBUS_TYPE_UINT32, &sample_format);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_RATE].property_name, DBUS_TYPE_UINT32, &sample_rate);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CHANNELS].property_name, DBUS_TYPE_UINT32, channels, channel_map->channels);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VOLUME].property_name, DBUS_TYPE_UINT32, volume, d->volume.channels);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_FLAT_VOLUME].property_name, DBUS_TYPE_BOOLEAN, &has_flat_volume);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_CONVERTIBLE_TO_DECIBEL_VOLUME].property_name, DBUS_TYPE_BOOLEAN, &has_convertible_to_decibel_volume);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_BASE_VOLUME].property_name, DBUS_TYPE_UINT32, &base_volume);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VOLUME_STEPS].property_name, DBUS_TYPE_UINT32, &volume_steps);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &d->is_muted);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_HARDWARE_VOLUME].property_name, DBUS_TYPE_BOOLEAN, &has_hardware_volume);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_HARDWARE_MUTE].property_name, DBUS_TYPE_BOOLEAN, &has_hardware_mute);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CONFIGURED_LATENCY].property_name, DBUS_TYPE_UINT64, &configured_latency);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_DYNAMIC_LATENCY].property_name, DBUS_TYPE_BOOLEAN, &has_dynamic_latency);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_LATENCY].property_name, DBUS_TYPE_UINT64, &latency);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_HARDWARE_DEVICE].property_name, DBUS_TYPE_BOOLEAN, &is_hardware_device);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_NETWORK_DEVICE].property_name, DBUS_TYPE_BOOLEAN, &is_network_device);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_STATE].property_name, DBUS_TYPE_UINT32, &state);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PORTS].property_name, DBUS_TYPE_OBJECT_PATH, ports, n_ports);
+
+ if (active_port)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_ACTIVE_PORT].property_name, DBUS_TYPE_OBJECT_PATH, &active_port);
+
+ pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, d->proplist);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(ports);
+}
+
+static void handle_suspend(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ dbus_bool_t suspend = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &suspend) < 0)
+ return;
+
+ if ((d->type == DEVICE_TYPE_SINK) && (pa_sink_suspend(d->sink, suspend, PA_SUSPEND_USER) < 0)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Internal error in PulseAudio: pa_sink_suspend() failed.");
+ return;
+ } else if ((d->type == DEVICE_TYPE_SOURCE) && (pa_source_suspend(d->source, suspend, PA_SUSPEND_USER) < 0)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Internal error in PulseAudio: pa_source_suspend() failed.");
+ return;
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_port_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ DBusError error;
+ const char *port_name = NULL;
+ pa_dbusiface_device_port *port = NULL;
+ const char *port_path = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &port_name, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (!(port = pa_hashmap_get(d->ports, port_name))) {
+ if (d->type == DEVICE_TYPE_SINK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND,
+ "%s: No such port on sink %s.", port_name, d->sink->name);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND,
+ "%s: No such port on source %s.", port_name, d->source->name);
+ return;
+ }
+
+ port_path = pa_dbusiface_device_port_get_path(port);
+
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &port_path);
+}
+
+static void handle_sink_get_monitor_source(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char *monitor_source = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+ pa_assert(d->type == DEVICE_TYPE_SINK);
+
+ monitor_source = pa_dbusiface_core_get_source_path(d->core, d->sink->monitor_source);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &monitor_source);
+}
+
+static void handle_sink_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ const char *monitor_source = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+ pa_assert(d->type == DEVICE_TYPE_SINK);
+
+ monitor_source = pa_dbusiface_core_get_source_path(d->core, d->sink->monitor_source);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[SINK_PROPERTY_HANDLER_MONITOR_SOURCE].property_name, DBUS_TYPE_OBJECT_PATH, &monitor_source);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+}
+
+static void handle_source_get_monitor_of_sink(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ const char *monitor_of_sink = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+ pa_assert(d->type == DEVICE_TYPE_SOURCE);
+
+ if (!d->source->monitor_of) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s is not a monitor source.", d->source->name);
+ return;
+ }
+
+ monitor_of_sink = pa_dbusiface_core_get_sink_path(d->core, d->source->monitor_of);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &monitor_of_sink);
+}
+
+static void handle_source_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ const char *monitor_of_sink = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(d);
+ pa_assert(d->type == DEVICE_TYPE_SOURCE);
+
+ if (d->source->monitor_of)
+ monitor_of_sink = pa_dbusiface_core_get_sink_path(d->core, d->source->monitor_of);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ if (monitor_of_sink)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[SOURCE_PROPERTY_HANDLER_MONITOR_OF_SINK].property_name, DBUS_TYPE_OBJECT_PATH, &monitor_of_sink);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+}
+
+static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_device *d = userdata;
+
+ pa_assert(c);
+ pa_assert(d);
+
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
+ DBusMessage *signal = NULL;
+ const pa_cvolume *new_volume = NULL;
+ pa_bool_t new_muted = FALSE;
+ pa_sink_state_t new_sink_state = 0;
+ pa_source_state_t new_source_state = 0;
+ pa_device_port *new_active_port = NULL;
+ pa_proplist *new_proplist = NULL;
+ unsigned i = 0;
+
+ pa_assert(((d->type == DEVICE_TYPE_SINK)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK))
+ || ((d->type == DEVICE_TYPE_SOURCE)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE)));
+
+ new_volume = (d->type == DEVICE_TYPE_SINK)
+ ? pa_sink_get_volume(d->sink, FALSE, FALSE)
+ : pa_source_get_volume(d->source, FALSE);
+
+ if (!pa_cvolume_equal(&d->volume, new_volume)) {
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ dbus_uint32_t *volume_ptr = volume;
+
+ d->volume = *new_volume;
+
+ for (i = 0; i < d->volume.channels; ++i)
+ volume[i] = d->volume.values[i];
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_VOLUME_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, d->volume.channels,
+ DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ new_muted = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_mute(d->sink, FALSE) : pa_source_get_mute(d->source, FALSE);
+
+ if (d->is_muted != new_muted) {
+ d->is_muted = new_muted;
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &d->is_muted, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ if (d->type == DEVICE_TYPE_SINK)
+ new_sink_state = pa_sink_get_state(d->sink);
+ else
+ new_source_state = pa_source_get_state(d->source);
+
+ if ((d->type == DEVICE_TYPE_SINK && d->sink_state != new_sink_state)
+ || (d->type == DEVICE_TYPE_SOURCE && d->source_state != new_source_state)) {
+ dbus_uint32_t state = 0;
+
+ if (d->type == DEVICE_TYPE_SINK)
+ d->sink_state = new_sink_state;
+ else
+ d->source_state = new_source_state;
+
+ state = (d->type == DEVICE_TYPE_SINK) ? d->sink_state : d->source_state;
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_STATE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ new_active_port = (d->type == DEVICE_TYPE_SINK) ? d->sink->active_port : d->source->active_port;
+
+ if (d->active_port != new_active_port) {
+ const char *object_path = NULL;
+
+ d->active_port = new_active_port;
+ object_path = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_ACTIVE_PORT_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ new_proplist = (d->type == DEVICE_TYPE_SINK) ? d->sink->proplist : d->source->proplist;
+
+ if (!pa_proplist_equal(d->proplist, new_proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(d->proplist, PA_UPDATE_SET, new_proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, d->proplist);
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+}
+
pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_sink *sink) {
- pa_dbusiface_device *d;
+ pa_dbusiface_device *d = NULL;
pa_assert(core);
pa_assert(sink);
- d = pa_xnew(pa_dbusiface_device, 1);
+ d = pa_xnew0(pa_dbusiface_device, 1);
+ d->core = core;
d->sink = pa_sink_ref(sink);
d->type = DEVICE_TYPE_SINK;
d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SINK_OBJECT_NAME, sink->index);
+ d->volume = *pa_sink_get_volume(sink, FALSE, FALSE);
+ d->is_muted = pa_sink_get_mute(sink, FALSE);
+ d->sink_state = pa_sink_get_state(sink);
+ d->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ d->next_port_index = 0;
+ d->active_port = NULL;
+ d->proplist = pa_proplist_copy(sink->proplist);
+ d->dbus_protocol = pa_dbus_protocol_get(sink->core);
+ d->subscription = pa_subscription_new(sink->core, PA_SUBSCRIPTION_MASK_SINK, subscription_cb, d);
+
+ if (sink->ports) {
+ pa_device_port *port;
+ void *state = NULL;
+
+ PA_HASHMAP_FOREACH(port, sink->ports, state) {
+ pa_dbusiface_device_port *p = pa_dbusiface_device_port_new(d, sink->core, port, d->next_port_index++);
+ pa_hashmap_put(d->ports, pa_dbusiface_device_port_get_name(p), p);
+ }
+ pa_assert_se(d->active_port = sink->active_port);
+ }
+
+ pa_assert_se(pa_dbus_protocol_add_interface(d->dbus_protocol, d->path, &device_interface_info, d) >= 0);
+ pa_assert_se(pa_dbus_protocol_add_interface(d->dbus_protocol, d->path, &sink_interface_info, d) >= 0);
return d;
}
pa_dbusiface_device *pa_dbusiface_device_new_source(pa_dbusiface_core *core, pa_source *source) {
- pa_dbusiface_device *d;
+ pa_dbusiface_device *d = NULL;
pa_assert(core);
pa_assert(source);
- d = pa_xnew(pa_dbusiface_device, 1);
+ d = pa_xnew0(pa_dbusiface_device, 1);
+ d->core = core;
d->source = pa_source_ref(source);
d->type = DEVICE_TYPE_SOURCE;
d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SOURCE_OBJECT_NAME, source->index);
+ d->volume = *pa_source_get_volume(source, FALSE);
+ d->is_muted = pa_source_get_mute(source, FALSE);
+ d->source_state = pa_source_get_state(source);
+ d->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ d->next_port_index = 0;
+ d->active_port = NULL;
+ d->proplist = pa_proplist_copy(source->proplist);
+ d->dbus_protocol = pa_dbus_protocol_get(source->core);
+ d->subscription = pa_subscription_new(source->core, PA_SUBSCRIPTION_MASK_SOURCE, subscription_cb, d);
+
+ if (source->ports) {
+ pa_device_port *port;
+ void *state = NULL;
+
+ PA_HASHMAP_FOREACH(port, source->ports, state) {
+ pa_dbusiface_device_port *p = pa_dbusiface_device_port_new(d, source->core, port, d->next_port_index++);
+ pa_hashmap_put(d->ports, pa_dbusiface_device_port_get_name(p), p);
+ }
+ pa_assert_se(d->active_port = source->active_port);
+ }
+
+ pa_assert_se(pa_dbus_protocol_add_interface(d->dbus_protocol, d->path, &device_interface_info, d) >= 0);
+ pa_assert_se(pa_dbus_protocol_add_interface(d->dbus_protocol, d->path, &source_interface_info, d) >= 0);
return d;
}
+static void port_free_cb(void *p, void *userdata) {
+ pa_dbusiface_device_port *port = p;
+
+ pa_assert(port);
+
+ pa_dbusiface_device_port_free(port);
+}
+
void pa_dbusiface_device_free(pa_dbusiface_device *d) {
pa_assert(d);
- if (d->type == DEVICE_TYPE_SINK)
+ pa_assert_se(pa_dbus_protocol_remove_interface(d->dbus_protocol, d->path, device_interface_info.name) >= 0);
+
+ if (d->type == DEVICE_TYPE_SINK) {
+ pa_assert_se(pa_dbus_protocol_remove_interface(d->dbus_protocol, d->path, sink_interface_info.name) >= 0);
pa_sink_unref(d->sink);
- else
+
+ } else {
+ pa_assert_se(pa_dbus_protocol_remove_interface(d->dbus_protocol, d->path, source_interface_info.name) >= 0);
pa_source_unref(d->source);
+ }
+ pa_hashmap_free(d->ports, port_free_cb, NULL);
+ pa_dbus_protocol_unref(d->dbus_protocol);
+ pa_subscription_free(d->subscription);
pa_xfree(d->path);
pa_xfree(d);
diff --git a/src/modules/dbus/iface-device.h b/src/modules/dbus/iface-device.h
index 1e9af83..62e05e9 100644
--- a/src/modules/dbus/iface-device.h
+++ b/src/modules/dbus/iface-device.h
@@ -29,11 +29,16 @@
* documentation.
*/
+#include <pulsecore/protocol-dbus.h>
#include <pulsecore/sink.h>
#include <pulsecore/source.h>
#include "iface-core.h"
+#define PA_DBUSIFACE_DEVICE_INTERFACE PA_DBUS_CORE_INTERFACE ".Device"
+#define PA_DBUSIFACE_SINK_INTERFACE PA_DBUS_CORE_INTERFACE ".Sink"
+#define PA_DBUSIFACE_SOURCE_INTERFACE PA_DBUS_CORE_INTERFACE ".Source"
+
typedef struct pa_dbusiface_device pa_dbusiface_device;
pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_sink *sink);
commit f663d13acd306feafe2526c6a9258f14fd5d2ffc
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 16:54:11 2009 +0300
dbusiface-core: Two new functions: pa_dbusiface_core_get_playback/record_stream_path().
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 81e709f..2b5cf0b 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2055,6 +2055,20 @@ const char *pa_dbusiface_core_get_source_path(pa_dbusiface_core *c, const pa_sou
return pa_dbusiface_device_get_path(pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(source->index)));
}
+const char *pa_dbusiface_core_get_playback_stream_path(pa_dbusiface_core *c, const pa_sink_input *sink_input) {
+ pa_assert(c);
+ pa_assert(sink_input);
+
+ return pa_dbusiface_stream_get_path(pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(sink_input->index)));
+}
+
+const char *pa_dbusiface_core_get_record_stream_path(pa_dbusiface_core *c, const pa_source_output *source_output) {
+ pa_assert(c);
+ pa_assert(source_output);
+
+ return pa_dbusiface_stream_get_path(pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(source_output->index)));
+}
+
const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module) {
pa_assert(c);
pa_assert(module);
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index 7010205..14dff7e 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -38,6 +38,8 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c);
const char *pa_dbusiface_core_get_card_path(pa_dbusiface_core *c, const pa_card *card);
const char *pa_dbusiface_core_get_sink_path(pa_dbusiface_core *c, const pa_sink *sink);
const char *pa_dbusiface_core_get_source_path(pa_dbusiface_core *c, const pa_source *source);
+const char *pa_dbusiface_core_get_playback_stream_path(pa_dbusiface_core *c, const pa_sink_input *sink_input);
+const char *pa_dbusiface_core_get_record_stream_path(pa_dbusiface_core *c, const pa_source_output *source_output);
const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module);
#endif
commit 9ed25d7388bacfb0948d21d9aefa4fe92dbea0b5
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 16:55:29 2009 +0300
dbusiface-client: Implement the properties of the Client D-Bus interface.
Based on a patch from Vincent Filali-Ansary.
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index d9c8653..dd4e57a 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -2,6 +2,7 @@
This file is part of PulseAudio.
Copyright 2009 Tanu Kaskinen
+ Copyright 2009 Vincent Filali-Ansary <filali.v at azurdigitalnetworks.net>
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
@@ -23,7 +24,10 @@
#include <config.h>
#endif
+#include <dbus/dbus.h>
+
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
#include <pulsecore/protocol-dbus.h>
#include "iface-client.h"
@@ -31,19 +35,288 @@
#define OBJECT_NAME "client"
struct pa_dbusiface_client {
+ pa_dbusiface_core *core;
+
pa_client *client;
char *path;
+
+ pa_dbus_protocol *dbus_protocol;
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_playback_streams(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_record_streams(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+/*static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_update_properties(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_DRIVER,
+ PROPERTY_HANDLER_OWNER_MODULE,
+ PROPERTY_HANDLER_PLAYBACK_STREAMS,
+ PROPERTY_HANDLER_RECORD_STREAMS,
+ PROPERTY_HANDLER_PROPERTY_LIST,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_DRIVER] = { .property_name = "Driver", .type = "s", .get_cb = handle_get_driver, .set_cb = NULL },
+ [PROPERTY_HANDLER_OWNER_MODULE] = { .property_name = "OwnerModule", .type = "o", .get_cb = handle_get_owner_module, .set_cb = NULL },
+ [PROPERTY_HANDLER_PLAYBACK_STREAMS] = { .property_name = "PlaybackStreams", .type = "ao", .get_cb = handle_get_playback_streams, .set_cb = NULL },
+ [PROPERTY_HANDLER_RECORD_STREAMS] = { .property_name = "RecordStreams", .type = "ao", .get_cb = handle_get_record_streams, .set_cb = NULL },
+ [PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
+};
+
+/*enum method_handler_index {
+ METHOD_HANDLER_KILL,
+ METHOD_HANDLER_UPDATE_PROPERTIES,
+ METHOD_HANDLER_REMOVE_PROPERTIES,
+ METHOD_HANDLER_MAX
};
+static pa_dbus_arg_info update_properties_args[] = { { "property_list", "a{say}", "in" }, { "update_mode", "u", "in" } };
+static pa_dbus_arg_info update_properties_args[] = { { "keys", "as", "in" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_KILL] = {
+ .method_name = "Kill",
+ .arguments = NULL,
+ .n_arguments = 0,
+ .receive_cb = handle_kill },
+ [METHOD_HANDLER_UPDATE_PROPERTIES] = {
+ .method_name = "UpdateProperties",
+ .arguments = update_propertes_args,
+ .n_arguments = sizeof(update_properties_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_update_properties },
+ [METHOD_HANDLER_REMOVE_PROPERTIES] = {
+ .method_name = "RemoveProperties",
+ .arguments = remove_propertes_args,
+ .n_arguments = sizeof(update_properties_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_update_properties }
+};
+
+enum signal_index {
+ SIGNAL_PROPERTY_LIST_UPDATED,
+ SIGNAL_CLIENT_EVENT,
+ SIGNAL_MAX
+};
+
+static pa_dbus_arg_info active_profile_updated_args[] = { { "profile", "o", NULL } };
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_ACTIVE_PROFILE_UPDATED] = { .name = "ActiveProfileUpdated", .arguments = active_profile_updated_args, .n_arguments = 1 },
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }
+};*/
+
+static pa_dbus_interface_info client_interface_info = {
+ .name = OBJECT_NAME,
+ .method_handlers = /*method_handlers*/ NULL,
+ .n_method_handlers = /*METHOD_HANDLER_MAX*/ 0,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = /*signals*/ NULL,
+ .n_signals = /*SIGNAL_MAX*/ 0
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ dbus_uint32_t idx = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ idx = c->client->index;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+}
+
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &c->client->driver);
+}
+
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ const char *owner_module = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (!c->client->module) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Client %d doesn't have an owner module.", c->client->index);
+ return;
+ }
+
+ owner_module = pa_dbusiface_core_get_module_path(c->core, c->client->module);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &owner_module);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_playback_streams(pa_dbusiface_client *c, unsigned *n) {
+ const char **playback_streams = NULL;
+ unsigned i = 0;
+ uint32_t idx = 0;
+ pa_sink_input *sink_input = NULL;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_idxset_size(c->client->sink_inputs);
+
+ if (*n == 0)
+ return NULL;
+
+ playback_streams = pa_xnew(const char *, *n);
+
+ PA_IDXSET_FOREACH(sink_input, c->client->sink_inputs, idx)
+ playback_streams[i++] = pa_dbusiface_core_get_playback_stream_path(c->core, sink_input);
+
+ return playback_streams;
+}
+
+static void handle_get_playback_streams(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ const char **playback_streams = NULL;
+ unsigned n_playback_streams = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ playback_streams = get_playback_streams(c, &n_playback_streams);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, playback_streams, n_playback_streams);
+
+ pa_xfree(playback_streams);
+}
+
+/* The caller frees the array, but not the strings. */
+static const char **get_record_streams(pa_dbusiface_client *c, unsigned *n) {
+ const char **record_streams = NULL;
+ unsigned i = 0;
+ uint32_t idx = 0;
+ pa_source_output *source_output = NULL;
+
+ pa_assert(c);
+ pa_assert(n);
+
+ *n = pa_idxset_size(c->client->source_outputs);
+
+ if (*n == 0)
+ return NULL;
+
+ record_streams = pa_xnew(const char *, *n);
+
+ PA_IDXSET_FOREACH(source_output, c->client->source_outputs, idx)
+ record_streams[i++] = pa_dbusiface_core_get_record_stream_path(c->core, source_output);
+
+ return record_streams;
+}
+
+static void handle_get_record_streams(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ const char **record_streams = NULL;
+ unsigned n_record_streams = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ record_streams = get_record_streams(c, &n_record_streams);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, record_streams, n_record_streams);
+
+ pa_xfree(record_streams);
+}
+
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ pa_dbus_send_proplist_variant_reply(conn, msg, c->client->proplist);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t idx = 0;
+ const char *owner_module = NULL;
+ const char **playback_streams = NULL;
+ unsigned n_playback_streams = 0;
+ const char **record_streams = NULL;
+ unsigned n_record_streams = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ idx = c->client->index;
+ if (c->client->module)
+ owner_module = pa_dbusiface_core_get_module_path(c->core, c->client->module);
+ playback_streams = get_playback_streams(c, &n_playback_streams);
+ record_streams = get_record_streams(c, &n_record_streams);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DRIVER].property_name, DBUS_TYPE_STRING, &c->client->driver);
+
+ if (owner_module)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_OWNER_MODULE].property_name, DBUS_TYPE_OBJECT_PATH, &owner_module);
+
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PLAYBACK_STREAMS].property_name, DBUS_TYPE_OBJECT_PATH, playback_streams, n_playback_streams);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_RECORD_STREAMS].property_name, DBUS_TYPE_OBJECT_PATH, record_streams, n_record_streams);
+ pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, c->client->proplist);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(playback_streams);
+ pa_xfree(record_streams);
+}
+
pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client *client) {
- pa_dbusiface_client *c;
+ pa_dbusiface_client *c = NULL;
pa_assert(core);
pa_assert(client);
c = pa_xnew(pa_dbusiface_client, 1);
+ c->core = core;
c->client = client;
c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, client->index);
+ c->dbus_protocol = pa_dbus_protocol_get(client->core);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(c->dbus_protocol, c->path, &client_interface_info, c) >= 0);
return c;
}
@@ -51,6 +324,10 @@ pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client
void pa_dbusiface_client_free(pa_dbusiface_client *c) {
pa_assert(c);
+ pa_assert_se(pa_dbus_protocol_remove_interface(c->dbus_protocol, c->path, client_interface_info.name) >= 0);
+
+ pa_dbus_protocol_unref(c->dbus_protocol);
+
pa_xfree(c->path);
pa_xfree(c);
}
commit c7f4ed3c7a0453ff29181fe03666e0c7d3822317
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 15 17:08:21 2009 +0300
dbusiface-client: Fix the interface name.
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index dd4e57a..186e2d3 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -118,7 +118,7 @@ static pa_dbus_signal_info signals[SIGNAL_MAX] = {
};*/
static pa_dbus_interface_info client_interface_info = {
- .name = OBJECT_NAME,
+ .name = PA_DBUSIFACE_CLIENT_INTERFACE,
.method_handlers = /*method_handlers*/ NULL,
.n_method_handlers = /*METHOD_HANDLER_MAX*/ 0,
.property_handlers = property_handlers,
diff --git a/src/modules/dbus/iface-client.h b/src/modules/dbus/iface-client.h
index ff90625..e8f151c 100644
--- a/src/modules/dbus/iface-client.h
+++ b/src/modules/dbus/iface-client.h
@@ -22,16 +22,19 @@
USA.
***/
-/* This object implements the D-Bus interface org.PulseAudio.Core1.Card.
+/* This object implements the D-Bus interface org.PulseAudio.Core1.Client.
*
- * See http://pulseaudio.org/wiki/DBusInterface for the Card interface
+ * See http://pulseaudio.org/wiki/DBusInterface for the Client interface
* documentation.
*/
#include <pulsecore/client.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-core.h"
+#define PA_DBUSIFACE_CLIENT_INTERFACE PA_DBUS_CORE_INTERFACE ".Client"
+
typedef struct pa_dbusiface_client pa_dbusiface_client;
pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client *client);
commit a72bba18ea4dd273371179844a0a964e706fd489
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 16 19:39:39 2009 +0300
dbusiface-client: Fix indentation.
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index 186e2d3..587d5c4 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -129,16 +129,16 @@ static pa_dbus_interface_info client_interface_info = {
};
static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
- pa_dbusiface_client *c = userdata;
- dbus_uint32_t idx = 0;
+ pa_dbusiface_client *c = userdata;
+ dbus_uint32_t idx = 0;
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(c);
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
- idx = c->client->index;
+ idx = c->client->index;
- pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
}
static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata) {
commit f0db081223dd056d6ddbc2a97c557254198a0eaf
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 16 19:41:43 2009 +0300
dbusiface-device: Free the copied proplist.
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 3cf9d19..15ece83 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -1274,6 +1274,7 @@ void pa_dbusiface_device_free(pa_dbusiface_device *d) {
pa_source_unref(d->source);
}
pa_hashmap_free(d->ports, port_free_cb, NULL);
+ pa_proplist_free(d->proplist);
pa_dbus_protocol_unref(d->dbus_protocol);
pa_subscription_free(d->subscription);
commit 2bb3eef414f80189cf6af6cd66c519630e4c0a43
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 16 19:42:56 2009 +0300
dbusiface-stream: Implement about a half of the Stream D-Bus interface.
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index b5a1789..4333c16 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -2,6 +2,7 @@
This file is part of PulseAudio.
Copyright 2009 Tanu Kaskinen
+ Copyright 2009 Vincent Filali-Ansary <filali.v at azurdigitalnetworks.net>
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
@@ -24,6 +25,7 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
#include <pulsecore/protocol-dbus.h>
#include "iface-stream.h"
@@ -43,8 +45,369 @@ struct pa_dbusiface_stream {
};
enum stream_type type;
char *path;
+ pa_cvolume volume;
+ pa_bool_t is_muted;
+ pa_proplist *proplist;
+
+ pa_dbus_protocol *dbus_protocol;
+ pa_subscription *subscription;
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+/*static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_client(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+/*static void handle_get_buffer_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_device_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_resample_method(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+/*static void handle_move(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+/* PROPERTY_HANDLER_DRIVER,
+ PROPERTY_HANDLER_OWNER_MODULE,
+ PROPERTY_HANDLER_CLIENT,
+ PROPERTY_HANDLER_DEVICE,
+ PROPERTY_HANDLER_SAMPLE_FORMAT,
+ PROPERTY_HANDLER_SAMPLE_RATE,
+ PROPERTY_HANDLER_CHANNELS,*/
+ PROPERTY_HANDLER_VOLUME,
+ PROPERTY_HANDLER_IS_MUTED,
+/* PROPERTY_HANDLER_BUFFER_LATENCY,
+ PROPERTY_HANDLER_DEVICE_LATENCY,
+ PROPERTY_HANDLER_RESAMPLE_METHOD,*/
+ PROPERTY_HANDLER_PROPERTY_LIST,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+/* [PROPERTY_HANDLER_DRIVER] = { .property_name = "Driver", .type = "s", .get_cb = handle_get_driver, .set_cb = NULL },
+ [PROPERTY_HANDLER_OWNER_MODULE] = { .property_name = "OwnerModule", .type = "o", .get_cb = handle_get_owner_module, .set_cb = NULL },
+ [PROPERTY_HANDLER_CLIENT] = { .property_name = "Client", .type = "o", .get_cb = handle_get_client, .set_cb = NULL },
+ [PROPERTY_HANDLER_DEVICE] = { .property_name = "Device", .type = "o", .get_cb = handle_get_device, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_FORMAT] = { .property_name = "SampleFormat", .type = "u", .get_cb = handle_get_sample_format, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_RATE] = { .property_name = "SampleRate", .type = "u", .get_cb = handle_get_sample_rate, .set_cb = NULL },
+ [PROPERTY_HANDLER_CHANNELS] = { .property_name = "Channels", .type = "au", .get_cb = handle_get_channels, .set_cb = NULL },*/
+ [PROPERTY_HANDLER_VOLUME] = { .property_name = "Volume", .type = "au", .get_cb = handle_get_volume, .set_cb = handle_set_volume },
+ [PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_get_is_muted, .set_cb = handle_set_is_muted },
+/* [PROPERTY_HANDLER_BUFFER_LATENCY] = { .property_name = "BufferLatency", .type = "t", .get_cb = handle_get_buffer_latency, .set_cb = NULL },
+ [PROPERTY_HANDLER_DEVICE_LATENCY] = { .property_name = "DeviceLatency", .type = "t", .get_cb = handle_get_device_latency, .set_cb = NULL },
+ [PROPERTY_HANDLER_RESAMPLE_METHOD] = { .property_name = "ResampleMethod", .type = "s", .get_cb = handle_get_resample_method, .set_cb = NULL },*/
+ [PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
+};
+
+/*enum method_handler_index {
+ METHOD_HANDLER_MOVE,
+ METHOD_HANDLER_KILL,
+ METHOD_HANDLER_MAX
+};
+
+static pa_dbus_arg_info move_args[] = { { "device", "o", "in" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_MOVE] = {
+ .method_name = "Move",
+ .arguments = move_args,
+ .n_arguments = sizeof(move_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_move },
+ [METHOD_HANDLER_KILL] = {
+ .method_name = "Kill",
+ .arguments = NULL,
+ .n_arguments = 0,
+ .receive_cb = handle_kill }
+};*/
+
+enum signal_index {
+/* SIGNAL_DEVICE_UPDATED,
+ SIGNAL_SAMPLE_RATE_UPDATED,*/
+ SIGNAL_VOLUME_UPDATED,
+ SIGNAL_MUTE_UPDATED,
+ SIGNAL_PROPERTY_LIST_UPDATED,
+/* SIGNAL_STREAM_EVENT,*/
+ SIGNAL_MAX
+};
+
+/*static pa_dbus_arg_info device_updated_args[] = { { "device", "o", NULL } };
+static pa_dbus_arg_info sample_rate_updated_args[] = { { "sample_rate", "u", NULL } };*/
+static pa_dbus_arg_info volume_updated_args[] = { { "volume", "au", NULL } };
+static pa_dbus_arg_info mute_updated_args[] = { { "muted", "b", NULL } };
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+/*static pa_dbus_arg_info stream_event_args[] = { { "name", "s", NULL }, { "property_list", "a{say}", NULL } };*/
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+/* [SIGNAL_DEVICE_UPDATED] = { .name = "DeviceUpdated", .arguments = device_updated_args, .n_arguments = 1 },
+ [SIGNAL_SAMPLE_RATE_UPDATED] = { .name = "SampleRateUpdated", .arguments = sample_rate_updated_args, .n_arguments = 1 },*/
+ [SIGNAL_VOLUME_UPDATED] = { .name = "VolumeUpdated", .arguments = volume_updated_args, .n_arguments = 1 },
+ [SIGNAL_MUTE_UPDATED] = { .name = "MuteUpdated", .arguments = mute_updated_args, .n_arguments = 1 },
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }/*,
+ [SIGNAL_STREAM_EVENT] = { .name = "StreamEvent", .arguments = stream_event_args, .n_arguments = sizeof(stream_event_args) / sizeof(pa_dbus_arg_info) }*/
};
+static pa_dbus_interface_info stream_interface_info = {
+ .name = PA_DBUSIFACE_STREAM_INTERFACE,
+ .method_handlers = /*method_handlers*/ NULL,
+ .n_method_handlers = /*METHOD_HANDLER_MAX*/ 0,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ dbus_uint32_t idx;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ idx = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->index : s->source_output->index;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+}
+
+static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_RECORD) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Record streams don't have volume.");
+ return;
+ }
+
+ for (i = 0; i < s->volume.channels; ++i)
+ volume[i] = s->volume.values[i];
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, volume, s->volume.channels);
+}
+
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ unsigned stream_channels = 0;
+ dbus_uint32_t *volume = NULL;
+ unsigned n_volume_entries = 0;
+ pa_cvolume new_vol;
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_RECORD) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Record streams don't have volume.");
+ return;
+ }
+
+ pa_cvolume_init(&new_vol);
+
+ stream_channels = s->sink_input->channel_map.channels;
+
+ new_vol.channels = stream_channels;
+
+ if (pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &volume, &n_volume_entries) < 0)
+ return;
+
+ if (n_volume_entries != stream_channels) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Expected %u volume entries, got %u.", stream_channels, n_volume_entries);
+ return;
+ }
+
+ for (i = 0; i < n_volume_entries; ++i) {
+ if (volume[i] > PA_VOLUME_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too large volume value: %u", volume[i]);
+ return;
+ }
+ new_vol.values[i] = volume[i];
+ }
+
+ pa_sink_input_set_volume(s->sink_input, &new_vol, TRUE, TRUE);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_RECORD) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Record streams don't have mute.");
+ return;
+ }
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &s->is_muted);
+}
+
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ dbus_bool_t is_muted = FALSE;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &is_muted) < 0)
+ return;
+
+ if (s->type == STREAM_TYPE_RECORD) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Record streams don't have mute.");
+ return;
+ }
+
+ pa_sink_input_set_mute(s->sink_input, is_muted, TRUE);
+
+ pa_dbus_send_empty_reply(conn, msg);
+};
+
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ pa_dbus_send_proplist_variant_reply(conn, msg, s->proplist);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t idx;
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ idx = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->index : s->source_output->index;
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ for (i = 0; i < s->volume.channels; ++i)
+ volume[i] = s->volume.values[i];
+ }
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VOLUME].property_name, DBUS_TYPE_UINT32, volume, s->volume.channels);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &s->is_muted);
+ }
+
+ pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, s->proplist);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+
+ pa_assert(c);
+ pa_assert(s);
+
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
+ DBusMessage *signal = NULL;
+ pa_proplist *new_proplist = NULL;
+ unsigned i = 0;
+
+ pa_assert(((s->type == STREAM_TYPE_PLAYBACK)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK_INPUT))
+ || ((s->type == STREAM_TYPE_RECORD)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT)));
+
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ pa_cvolume new_volume;
+ pa_bool_t new_muted = FALSE;
+
+ pa_sink_input_get_volume(s->sink_input, &new_volume, TRUE);
+
+ if (!pa_cvolume_equal(&s->volume, &new_volume)) {
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ dbus_uint32_t *volume_ptr = volume;
+
+ s->volume = new_volume;
+
+ for (i = 0; i < s->volume.channels; ++i)
+ volume[i] = s->volume.values[i];
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_VOLUME_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, s->volume.channels,
+ DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ new_muted = pa_sink_input_get_mute(s->sink_input);
+
+ if (s->is_muted != new_muted) {
+ s->is_muted = new_muted;
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &s->is_muted, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+
+ new_proplist = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->proplist : s->source_output->proplist;
+
+ if (!pa_proplist_equal(s->proplist, new_proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(s->proplist, PA_UPDATE_SET, new_proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, s->proplist);
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+}
+
pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, pa_sink_input *sink_input) {
pa_dbusiface_stream *s;
@@ -55,6 +418,13 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, p
s->sink_input = pa_sink_input_ref(sink_input);
s->type = STREAM_TYPE_PLAYBACK;
s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, PLAYBACK_OBJECT_NAME, sink_input->index);
+ pa_sink_input_get_volume(sink_input, &s->volume, TRUE);
+ s->is_muted = pa_sink_input_get_mute(sink_input);
+ s->proplist = pa_proplist_copy(sink_input->proplist);
+ s->dbus_protocol = pa_dbus_protocol_get(sink_input->core);
+ s->subscription = pa_subscription_new(sink_input->core, PA_SUBSCRIPTION_MASK_SINK_INPUT, subscription_cb, s);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(s->dbus_protocol, s->path, &stream_interface_info, s) >= 0);
return s;
}
@@ -69,6 +439,13 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_dbusiface_core *core, pa_
s->source_output = pa_source_output_ref(source_output);
s->type = STREAM_TYPE_RECORD;
s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, RECORD_OBJECT_NAME, source_output->index);
+ pa_cvolume_init(&s->volume);
+ s->is_muted = FALSE;
+ s->proplist = pa_proplist_copy(source_output->proplist);
+ s->dbus_protocol = pa_dbus_protocol_get(source_output->core);
+ s->subscription = pa_subscription_new(source_output->core, PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT, subscription_cb, s);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(s->dbus_protocol, s->path, &stream_interface_info, s) >= 0);
return s;
}
@@ -76,11 +453,17 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_dbusiface_core *core, pa_
void pa_dbusiface_stream_free(pa_dbusiface_stream *s) {
pa_assert(s);
+ pa_assert_se(pa_dbus_protocol_remove_interface(s->dbus_protocol, s->path, stream_interface_info.name) >= 0);
+
if (s->type == STREAM_TYPE_PLAYBACK)
pa_sink_input_unref(s->sink_input);
else
pa_source_output_unref(s->source_output);
+ pa_proplist_free(s->proplist);
+ pa_dbus_protocol_unref(s->dbus_protocol);
+ pa_subscription_free(s->subscription);
+
pa_xfree(s->path);
pa_xfree(s);
}
diff --git a/src/modules/dbus/iface-stream.h b/src/modules/dbus/iface-stream.h
index b1b1854..036b4e7 100644
--- a/src/modules/dbus/iface-stream.h
+++ b/src/modules/dbus/iface-stream.h
@@ -28,11 +28,14 @@
* documentation.
*/
+#include <pulsecore/protocol-dbus.h>
#include <pulsecore/sink-input.h>
#include <pulsecore/source-output.h>
#include "iface-core.h"
+#define PA_DBUSIFACE_STREAM_INTERFACE PA_DBUS_CORE_INTERFACE ".Stream"
+
typedef struct pa_dbusiface_stream pa_dbusiface_stream;
pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, pa_sink_input *sink_input);
commit bcaba0b1b43d6a1b32aadfa98860f40b2c93e136
Merge: 2bb3eef 01e4b61
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 16 21:25:48 2009 +0300
Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
Conflicts:
src/Makefile.am
src/daemon/daemon-conf.c
src/daemon/daemon.conf.in
src/modules/module-stream-restore.c
src/pulse/client-conf.c
src/pulsecore/namereg.c
diff --cc po/es.po
index 8af1c73,b36d693..6995716
--- a/po/es.po
+++ b/po/es.po
@@@ -2600,9 -2408,8 +2408,7 @@@ msgstr "Servidor de Sonido PulseAudio
#~ "Tipo: %s\n"
#~ "Módulo: %s\n"
#~ "Argumento: %s\n"
-
#~ msgid "sink"
#~ msgstr "destino"
-
#~ msgid "source"
#~ msgstr "fuente"
-
diff --cc po/pt_BR.po
index fd4f539,20365ee..323e5b9
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@@ -2497,6 -2370,6 +2370,5 @@@ msgstr "Servidor de som PulseAudio
#~ msgstr ""
#~ "', ou eleve o RLIMIT_NICE/RLIMIT_RTPRIO dos limites do recurso para este "
#~ "usuário."
-
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair(): %s"
-
diff --cc src/daemon/daemon-conf.c
index ace460e,9a87b55..31f2900
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@@ -476,14 -441,15 +476,18 @@@ int pa_daemon_conf_load(pa_daemon_conf
{ "high-priority", pa_config_parse_bool, &c->high_priority, NULL },
{ "realtime-scheduling", pa_config_parse_bool, &c->realtime_scheduling, NULL },
{ "disallow-module-loading", pa_config_parse_bool, &c->disallow_module_loading, NULL },
+ { "allow-module-loading", pa_config_parse_not_bool, &c->disallow_module_loading, NULL },
{ "disallow-exit", pa_config_parse_bool, &c->disallow_exit, NULL },
+ { "allow-exit", pa_config_parse_not_bool, &c->disallow_exit, NULL },
{ "use-pid-file", pa_config_parse_bool, &c->use_pid_file, NULL },
{ "system-instance", pa_config_parse_bool, &c->system_instance, NULL },
+#ifdef HAVE_DBUS
+ { "local-server-type", parse_server_type, c, NULL },
+#endif
{ "no-cpu-limit", pa_config_parse_bool, &c->no_cpu_limit, NULL },
+ { "cpu-limit", pa_config_parse_not_bool, &c->no_cpu_limit, NULL },
{ "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
+ { "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL },
{ "flat-volumes", pa_config_parse_bool, &c->flat_volumes, NULL },
{ "lock-memory", pa_config_parse_bool, &c->lock_memory, NULL },
{ "exit-idle-time", pa_config_parse_int, &c->exit_idle_time, NULL },
@@@ -669,15 -629,12 +675,15 @@@ char *pa_daemon_conf_dump(pa_daemon_con
pa_strbuf_printf(s, "nice-level = %i\n", c->nice_level);
pa_strbuf_printf(s, "realtime-scheduling = %s\n", pa_yes_no(c->realtime_scheduling));
pa_strbuf_printf(s, "realtime-priority = %i\n", c->realtime_priority);
- pa_strbuf_printf(s, "disallow-module-loading = %s\n", pa_yes_no(c->disallow_module_loading));
- pa_strbuf_printf(s, "disallow-exit = %s\n", pa_yes_no(c->disallow_exit));
+ pa_strbuf_printf(s, "allow-module-loading = %s\n", pa_yes_no(!c->disallow_module_loading));
+ pa_strbuf_printf(s, "allow-exit = %s\n", pa_yes_no(!c->disallow_exit));
pa_strbuf_printf(s, "use-pid-file = %s\n", pa_yes_no(c->use_pid_file));
pa_strbuf_printf(s, "system-instance = %s\n", pa_yes_no(c->system_instance));
+#ifdef HAVE_DBUS
+ pa_strbuf_printf(s, "local-server-type = %s\n", server_type_to_string[c->local_server_type]);
+#endif
- pa_strbuf_printf(s, "no-cpu-limit = %s\n", pa_yes_no(c->no_cpu_limit));
- pa_strbuf_printf(s, "disable-shm = %s\n", pa_yes_no(c->disable_shm));
+ pa_strbuf_printf(s, "cpu-limit = %s\n", pa_yes_no(!c->no_cpu_limit));
+ pa_strbuf_printf(s, "enable-shm = %s\n", pa_yes_no(!c->disable_shm));
pa_strbuf_printf(s, "flat-volumes = %s\n", pa_yes_no(c->flat_volumes));
pa_strbuf_printf(s, "lock-memory = %s\n", pa_yes_no(c->lock_memory));
pa_strbuf_printf(s, "exit-idle-time = %i\n", c->exit_idle_time);
diff --cc src/daemon/daemon.conf.in
index 9bea614,d8b58d8..a11fd06
--- a/src/daemon/daemon.conf.in
+++ b/src/daemon/daemon.conf.in
@@@ -21,15 -21,14 +21,15 @@@
; daemonize = no
; fail = yes
- ; disallow-module-loading = no
- ; disallow-exit = no
+ ; allow-module-loading = yes
+ ; allow-exit = yes
; use-pid-file = yes
; system-instance = no
+; local-server-type = user
- ; disable-shm = no
+ ; enable-shm = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
- ; no-cpu-limit = no
+ ; cpu-limit = yes
; high-priority = yes
; nice-level = -11
diff --cc src/modules/module-stream-restore.c
index e906303,e560bd2..076b391
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@@ -106,15 -100,9 +106,15 @@@ struct userdata
pa_native_protocol *protocol;
pa_idxset *subscribed;
+
+#ifdef HAVE_DBUS
+ pa_dbus_protocol *dbus_protocol;
+ pa_hashmap *dbus_entries;
+ uint32_t next_index; /* For generating object paths for entries. */
+#endif
};
- #define ENTRY_VERSION 2
+ #define ENTRY_VERSION 3
struct entry {
uint8_t version;
@@@ -1216,7 -324,10 +1231,11 @@@ static void subscribe_callback(pa_core
pa_strlcpy(entry.device, sink_input->sink->name, sizeof(entry.device));
entry.device_valid = TRUE;
+ device_updated = !created_new_entry && (!old->device_valid || !pa_streq(entry.device, old->device));
+ if (sink_input->sink->card) {
+ pa_strlcpy(entry.card, sink_input->sink->card->name, sizeof(entry.card));
+ entry.card_valid = TRUE;
+ }
}
} else {
@@@ -1239,7 -348,10 +1258,12 @@@
pa_strlcpy(entry.device, source_output->source->name, sizeof(entry.device));
entry.device_valid = source_output->save_source;
+ device_updated = !created_new_entry && (!old->device_valid || !pa_streq(entry.device, old->device));
++
+ if (source_output->source->card) {
+ pa_strlcpy(entry.card, source_output->source->card->name, sizeof(entry.card));
+ entry.card_valid = TRUE;
+ }
}
}
diff --cc src/pulse/client-conf.c
index 8eab109,4aa4ba1..62c06f6
--- a/src/pulse/client-conf.c
+++ b/src/pulse/client-conf.c
@@@ -94,17 -92,17 +94,18 @@@ int pa_client_conf_load(pa_client_conf
/* Prepare the configuration parse table */
pa_config_item table[] = {
- { "daemon-binary", pa_config_parse_string, &c->daemon_binary, NULL },
- { "extra-arguments", pa_config_parse_string, &c->extra_arguments, NULL },
- { "default-sink", pa_config_parse_string, &c->default_sink, NULL },
- { "default-source", pa_config_parse_string, &c->default_source, NULL },
- { "default-server", pa_config_parse_string, &c->default_server, NULL },
- { "default-dbus-server", pa_config_parse_string, &c->default_dbus_server, NULL },
- { "autospawn", pa_config_parse_bool, &c->autospawn, NULL },
- { "cookie-file", pa_config_parse_string, &c->cookie_file, NULL },
- { "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
- { "shm-size-bytes", pa_config_parse_size, &c->shm_size, NULL },
- { NULL, NULL, NULL, NULL },
+ { "daemon-binary", pa_config_parse_string, &c->daemon_binary, NULL },
+ { "extra-arguments", pa_config_parse_string, &c->extra_arguments, NULL },
+ { "default-sink", pa_config_parse_string, &c->default_sink, NULL },
+ { "default-source", pa_config_parse_string, &c->default_source, NULL },
+ { "default-server", pa_config_parse_string, &c->default_server, NULL },
++ { "default-dbus-server", pa_config_parse_string, &c->default_dbus_server, NULL },
+ { "autospawn", pa_config_parse_bool, &c->autospawn, NULL },
+ { "cookie-file", pa_config_parse_string, &c->cookie_file, NULL },
+ { "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
+ { "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL },
+ { "shm-size-bytes", pa_config_parse_size, &c->shm_size, NULL },
+ { NULL, NULL, NULL, NULL },
};
if (filename) {
diff --cc src/pulsecore/dbus-util.c
index 903acad,4e6148f..b45e6a6
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@@ -445,475 -422,3 +445,475 @@@ void pa_dbus_free_pending_list(pa_dbus_
pa_dbus_pending_free(i);
}
}
+
+void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *format, ...) {
+ va_list ap;
+ char *message;
+ DBusMessage *reply = NULL;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(name);
+ pa_assert(format);
+
+ va_start(ap, format);
+ message = pa_vsprintf_malloc(format, ap);
+ va_end(ap);
+ pa_assert_se((reply = dbus_message_new_error(in_reply_to, name, message)));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+
+ dbus_message_unref(reply);
+
+ pa_xfree(message);
+}
+
+void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to) {
+ DBusMessage *reply = NULL;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void pa_dbus_send_basic_value_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data) {
+ DBusMessage *reply = NULL;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ pa_assert_se(dbus_message_append_args(reply, type, data, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+static const char *signature_from_basic_type(int type) {
+ switch (type) {
+ case DBUS_TYPE_BOOLEAN: return DBUS_TYPE_BOOLEAN_AS_STRING;
+ case DBUS_TYPE_BYTE: return DBUS_TYPE_BYTE_AS_STRING;
+ case DBUS_TYPE_INT16: return DBUS_TYPE_INT16_AS_STRING;
+ case DBUS_TYPE_UINT16: return DBUS_TYPE_UINT16_AS_STRING;
+ case DBUS_TYPE_INT32: return DBUS_TYPE_INT32_AS_STRING;
+ case DBUS_TYPE_UINT32: return DBUS_TYPE_UINT32_AS_STRING;
+ case DBUS_TYPE_INT64: return DBUS_TYPE_INT64_AS_STRING;
+ case DBUS_TYPE_UINT64: return DBUS_TYPE_UINT64_AS_STRING;
+ case DBUS_TYPE_DOUBLE: return DBUS_TYPE_DOUBLE_AS_STRING;
+ case DBUS_TYPE_STRING: return DBUS_TYPE_STRING_AS_STRING;
+ case DBUS_TYPE_OBJECT_PATH: return DBUS_TYPE_OBJECT_PATH_AS_STRING;
+ case DBUS_TYPE_SIGNATURE: return DBUS_TYPE_SIGNATURE_AS_STRING;
+ default: pa_assert_not_reached();
+ }
+}
+
+void pa_dbus_send_basic_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data) {
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_VARIANT, signature_from_basic_type(type), &variant_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&variant_iter, type, data));
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &variant_iter));
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+/* Note: returns sizeof(char*) for strings, object paths and signatures. */
+static unsigned basic_type_size(int type) {
+ switch (type) {
+ case DBUS_TYPE_BOOLEAN: return sizeof(dbus_bool_t);
+ case DBUS_TYPE_BYTE: return 1;
+ case DBUS_TYPE_INT16: return sizeof(dbus_int16_t);
+ case DBUS_TYPE_UINT16: return sizeof(dbus_uint16_t);
+ case DBUS_TYPE_INT32: return sizeof(dbus_int32_t);
+ case DBUS_TYPE_UINT32: return sizeof(dbus_uint32_t);
+ case DBUS_TYPE_INT64: return sizeof(dbus_int64_t);
+ case DBUS_TYPE_UINT64: return sizeof(dbus_uint64_t);
+ case DBUS_TYPE_DOUBLE: return sizeof(double);
+ case DBUS_TYPE_STRING:
+ case DBUS_TYPE_OBJECT_PATH:
+ case DBUS_TYPE_SIGNATURE: return sizeof(char*);
+ default: pa_assert_not_reached();
+ }
+}
+
+void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int item_type, void *array, unsigned n) {
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_dbus_append_basic_array_variant(&msg_iter, item_type, array, n);
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void pa_dbus_send_proplist_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, pa_proplist *proplist) {
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+
+ pa_assert(c);
+ pa_assert(in_reply_to);
+ pa_assert(proplist);
+
+ pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_dbus_append_proplist_variant(&msg_iter, proplist);
+ pa_assert_se(dbus_connection_send(c, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void pa_dbus_append_basic_array(DBusMessageIter *iter, int item_type, const void *array, unsigned n) {
+ DBusMessageIter array_iter;
+ unsigned i;
+ unsigned item_size;
+
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ item_size = basic_type_size(item_type);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, signature_from_basic_type(item_type), &array_iter));
+
+ for (i = 0; i < n; ++i)
+ pa_assert_se(dbus_message_iter_append_basic(&array_iter, item_type, &((uint8_t*) array)[i * item_size]));
+
+ pa_assert_se(dbus_message_iter_close_container(iter, &array_iter));
+};
+
+void pa_dbus_append_basic_variant(DBusMessageIter *iter, int type, void *data) {
+ DBusMessageIter variant_iter;
+
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, signature_from_basic_type(type), &variant_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&variant_iter, type, data));
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+}
+
+void pa_dbus_append_basic_array_variant(DBusMessageIter *iter, int item_type, const void *array, unsigned n) {
+ DBusMessageIter variant_iter;
+ char *array_signature;
+
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ array_signature = pa_sprintf_malloc("a%c", *signature_from_basic_type(item_type));
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, array_signature, &variant_iter));
+ pa_dbus_append_basic_array(&variant_iter, item_type, array, n);
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+
+ pa_xfree(array_signature);
+}
+
+void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int type, void *data) {
+ DBusMessageIter dict_entry_iter;
+
+ pa_assert(dict_iter);
+ pa_assert(key);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ pa_assert_se(dbus_message_iter_open_container(dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_dbus_append_basic_variant(&dict_entry_iter, type, data);
+ pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
+}
+
+void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n) {
+ DBusMessageIter dict_entry_iter;
+
+ pa_assert(dict_iter);
+ pa_assert(key);
+ pa_assert(dbus_type_is_basic(item_type));
+ pa_assert(array || n == 0);
+
+ pa_assert_se(dbus_message_iter_open_container(dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_dbus_append_basic_array_variant(&dict_entry_iter, item_type, array, n);
+ pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
+}
+
+void pa_dbus_append_proplist(DBusMessageIter *iter, pa_proplist *proplist) {
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ DBusMessageIter array_iter;
+ void *state = NULL;
+ const char *key;
+
+ pa_assert(iter);
+ pa_assert(proplist);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, "{say}", &dict_iter));
+
- while ((key = pa_proplist_iterate(proplist, state))) {
++ while ((key = pa_proplist_iterate(proplist, &state))) {
+ const void *value = NULL;
+ size_t nbytes;
+
+ pa_assert_se(pa_proplist_get(proplist, key, &value, &nbytes) >= 0);
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_entry_iter, DBUS_TYPE_ARRAY, "y", &array_iter));
+ pa_assert_se(dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_BYTE, &value, nbytes));
+ pa_assert_se(dbus_message_iter_close_container(&dict_entry_iter, &array_iter));
+
+ pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
+ }
+
+ pa_assert_se(dbus_message_iter_close_container(iter, &dict_iter));
+}
+
+void pa_dbus_append_proplist_variant(DBusMessageIter *iter, pa_proplist *proplist) {
+ DBusMessageIter variant_iter;
+
+ pa_assert(iter);
+ pa_assert(proplist);
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a{say}", &variant_iter));
+ pa_dbus_append_proplist(&variant_iter, proplist);
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+}
+
+void pa_dbus_append_proplist_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, pa_proplist *proplist) {
+ DBusMessageIter dict_entry_iter;
+
+ pa_assert(dict_iter);
+ pa_assert(key);
+ pa_assert(proplist);
+
+ pa_assert_se(dbus_message_iter_open_container(dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_dbus_append_proplist_variant(&dict_entry_iter, proplist);
+ pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
+}
+
+int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data) {
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ /* Skip the interface and property name arguments. */
+ if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return -1;
+ }
+
+ if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
+ return -1;
+ }
+
+ dbus_message_iter_recurse(&msg_iter, &variant_iter);
+
+ if (pa_dbus_get_basic_arg(c, msg, &variant_iter, type, data) < 0)
+ return -1;
+
+ return 0;
+}
+
+int pa_dbus_get_fixed_array_set_property_arg(DBusConnection *c, DBusMessage *msg, int item_type, void *data, unsigned *n) {
+ DBusMessageIter msg_iter;
+ DBusMessageIter variant_iter;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(dbus_type_is_fixed(item_type));
+ pa_assert(data);
+ pa_assert(n);
+
+ /* Skip the interface and property name arguments. */
+ if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return -1;
+ }
+
+ if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
+ return -1;
+ }
+
+ dbus_message_iter_recurse(&msg_iter, &variant_iter);
+
+ if (pa_dbus_get_fixed_array_arg(c, msg, &variant_iter, item_type, data, n) < 0)
+ return -1;
+
+ return 0;
+}
+
+int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data) {
+ int arg_type;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(iter);
+ pa_assert(dbus_type_is_basic(type));
+ pa_assert(data);
+
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != type) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. D-Bus type '%c' expected.", (char) type);
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. Expected type '%c'.", (char) arg_type, (char) type);
+ return -1;
+ }
+
+ dbus_message_iter_get_basic(iter, data);
+
+ dbus_message_iter_next(iter);
+
+ return 0;
+}
+
+int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n) {
+ DBusMessageIter array_iter;
+ int signed_n;
+ int arg_type;
+ int element_type;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(iter);
+ pa_assert(dbus_type_is_fixed(item_type));
+ pa_assert(array);
+ pa_assert(n);
+
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array of type '%c' was expected.", (char) item_type);
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array of type '%c' was expected.", (char) arg_type, (char) item_type);
+ return -1;
+ }
+
+ element_type = dbus_message_iter_get_element_type(iter);
+ if (element_type != item_type) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. Element type '%c' was expected.", (char) element_type, (char) item_type);
+ return -1;
+ }
+
+ dbus_message_iter_recurse(iter, &array_iter);
+
+ dbus_message_iter_get_fixed_array(&array_iter, array, &signed_n);
+
+ dbus_message_iter_next(iter);
+
+ pa_assert(signed_n >= 0);
+
+ *n = signed_n;
+
+ return 0;
+}
+
+pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter) {
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ int arg_type;
+ pa_proplist *proplist = NULL;
+ const char *key;
+ const uint8_t *value;
+ int value_length;
+
+ pa_assert(c);
+ pa_assert(msg);
+ pa_assert(iter);
+
+ arg_type = dbus_message_iter_get_arg_type(iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array was expected.");
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array was expected.", (char) arg_type);
+ return NULL;
+ }
+
+ arg_type = dbus_message_iter_get_element_type(iter);
+ if (arg_type != DBUS_TYPE_DICT_ENTRY) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A dictionary entry was expected.", (char) arg_type);
+ return NULL;
+ }
+
+ proplist = pa_proplist_new();
+
+ dbus_message_iter_recurse(iter, &dict_iter);
+
+ while (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID) {
+ dbus_message_iter_recurse(&dict_iter, &dict_entry_iter);
+
+ arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_STRING) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
+ goto fail;
+ }
+
+ dbus_message_iter_get_basic(&dict_entry_iter, &key);
+ dbus_message_iter_next(&dict_entry_iter);
+
+ if (strlen(key) <= 0 || !pa_ascii_valid(key)) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Invalid property list key.");
+ goto fail;
+ }
+
+ arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_ARRAY) {
+ if (arg_type == DBUS_TYPE_INVALID)
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Dict value missing.");
+ else
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type: '%c'. An array was expected.", (char) arg_type);
+ goto fail;
+ }
+
+ arg_type = dbus_message_iter_get_element_type(&dict_entry_iter);
+ if (arg_type != DBUS_TYPE_BYTE) {
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value item type: '%c'. A byte was expected.", (char) arg_type);
+ goto fail;
+ }
+
+ dbus_message_iter_get_fixed_array(&dict_entry_iter, &value, &value_length);
+
+ pa_assert(value_length >= 0);
+
+ pa_assert_se(pa_proplist_set(proplist, key, value, value_length) >= 0);
+
+ dbus_message_iter_next(&dict_iter);
+ }
+
+ dbus_message_iter_next(iter);
+
+ return proplist;
+
+fail:
+ if (proplist)
+ pa_proplist_free(proplist);
+
+ return NULL;
+}
diff --cc src/pulsecore/namereg.c
index 046c87b,e26923d..d7d83c5
--- a/src/pulsecore/namereg.c
+++ b/src/pulsecore/namereg.c
@@@ -166,31 -160,10 +166,38 @@@ void pa_namereg_unregister(pa_core *c,
pa_assert_se(e = pa_hashmap_remove(c->namereg, name));
- if (c->default_sink == e->data)
- pa_namereg_set_default_sink(c, NULL);
- else if (c->default_source == e->data)
- pa_namereg_set_default_source(c, NULL);
+ if (c->default_sink == e->data) {
- pa_sink *new_default = pa_idxset_first(c->sinks, &idx);
++ pa_sink *new_default = NULL;
+
- if (new_default == e->data)
- new_default = pa_idxset_next(c->sinks, &idx);
++ /* FIXME: the selection here should be based priority values on
++ * the sinks */
++
++ PA_IDXSET_FOREACH(new_default, c->sinks, idx) {
++ if (new_default != e->data && PA_SINK_IS_LINKED(pa_sink_get_state(new_default)))
++ break;
++ }
+
+ pa_namereg_set_default_sink(c, new_default);
+
+ } else if (c->default_source == e->data) {
- pa_source *new_default;
++ pa_source *new_default = NULL;
+
- for (new_default = pa_idxset_first(c->sources, &idx); new_default; new_default = pa_idxset_next(c->sources, &idx)) {
- if (new_default != e->data && !new_default->monitor_of)
++ /* First, try to find one that isn't a monitor */
++ PA_IDXSET_FOREACH(new_default, c->sources, idx) {
++ if (new_default != e->data && !new_default->monitor_of && PA_SOURCE_IS_LINKED(pa_source_get_state(new_default)))
+ break;
+ }
+
+ if (!new_default) {
- new_default = pa_idxset_first(c->sources, &idx);
-
- if (new_default == e->data)
- new_default = pa_idxset_next(c->sources, &idx);
++ /* Then, fallback to a monitor */
++ PA_IDXSET_FOREACH(new_default, c->sources, idx) {
++ if (new_default != e->data && PA_SOURCE_IS_LINKED(pa_source_get_state(new_default)))
++ break;
++ }
+ }
+
+ pa_namereg_set_default_source(c, new_default);
+ }
pa_xfree(e->name);
pa_xfree(e);
@@@ -268,16 -248,43 +281,49 @@@ pa_source* pa_namereg_set_default_sourc
return s;
}
+/* XXX: After removing old functionality, has this function become useless? */
pa_sink *pa_namereg_get_default_sink(pa_core *c) {
+ pa_sink *s;
+ uint32_t idx;
+
pa_assert(c);
- return c->default_sink;
- if (c->default_sink && PA_SINK_IS_LINKED(pa_sink_get_state(c->default_sink)))
++ if (!c->default_sink || PA_SINK_IS_LINKED(pa_sink_get_state(c->default_sink)))
+ return c->default_sink;
+
++ /* The old default sink has become unlinked, set a new one. */
++
+ /* FIXME: the selection here should be based priority values on
+ * the sinks */
+
+ PA_IDXSET_FOREACH(s, c->sinks, idx)
+ if (PA_SINK_IS_LINKED(pa_sink_get_state(s)))
+ return pa_namereg_set_default_sink(c, s);
+
- return NULL;
++ return pa_namereg_set_default_sink(c, NULL);
}
+/* XXX: After removing old functionality, has this function become useless? */
pa_source *pa_namereg_get_default_source(pa_core *c) {
+ pa_source *s;
+ uint32_t idx;
+
pa_assert(c);
- return c->default_source;
- if (c->default_source && PA_SOURCE_IS_LINKED(pa_source_get_state(c->default_source)))
++ if (!c->default_source || PA_SOURCE_IS_LINKED(pa_source_get_state(c->default_source)))
+ return c->default_source;
+
++ /* The old default source has become unlinked, set a new one. */
++
+ /* First, try to find one that isn't a monitor */
+ PA_IDXSET_FOREACH(s, c->sources, idx)
+ if (!s->monitor_of && PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
+ return pa_namereg_set_default_source(c, s);
+
+ /* Then, fallback to a monitor */
+ PA_IDXSET_FOREACH(s, c->sources, idx)
+ if (PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
+ return pa_namereg_set_default_source(c, s);
+
- return NULL;
++ return pa_namereg_set_default_source(c, NULL);
}
commit f48684e4dbc00d102ed17700fb693726a2676566
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 08:26:06 2009 +0300
namereg: Revert default device handling back to the upstream version.
diff --git a/src/pulsecore/namereg.c b/src/pulsecore/namereg.c
index d7d83c5..e26923d 100644
--- a/src/pulsecore/namereg.c
+++ b/src/pulsecore/namereg.c
@@ -149,55 +149,21 @@ const char *pa_namereg_register(pa_core *c, const char *name, pa_namereg_type_t
pa_assert_se(pa_hashmap_put(c->namereg, e->name, e) >= 0);
- if (type == PA_NAMEREG_SINK && !c->default_sink)
- pa_namereg_set_default_sink(c, data);
- else if (type == PA_NAMEREG_SOURCE && !c->default_source)
- pa_namereg_set_default_source(c, data);
-
return e->name;
}
void pa_namereg_unregister(pa_core *c, const char *name) {
struct namereg_entry *e;
- uint32_t idx;
pa_assert(c);
pa_assert(name);
pa_assert_se(e = pa_hashmap_remove(c->namereg, name));
- if (c->default_sink == e->data) {
- pa_sink *new_default = NULL;
-
- /* FIXME: the selection here should be based priority values on
- * the sinks */
-
- PA_IDXSET_FOREACH(new_default, c->sinks, idx) {
- if (new_default != e->data && PA_SINK_IS_LINKED(pa_sink_get_state(new_default)))
- break;
- }
-
- pa_namereg_set_default_sink(c, new_default);
-
- } else if (c->default_source == e->data) {
- pa_source *new_default = NULL;
-
- /* First, try to find one that isn't a monitor */
- PA_IDXSET_FOREACH(new_default, c->sources, idx) {
- if (new_default != e->data && !new_default->monitor_of && PA_SOURCE_IS_LINKED(pa_source_get_state(new_default)))
- break;
- }
-
- if (!new_default) {
- /* Then, fallback to a monitor */
- PA_IDXSET_FOREACH(new_default, c->sources, idx) {
- if (new_default != e->data && PA_SOURCE_IS_LINKED(pa_source_get_state(new_default)))
- break;
- }
- }
-
- pa_namereg_set_default_source(c, new_default);
- }
+ if (c->default_sink == e->data)
+ pa_namereg_set_default_sink(c, NULL);
+ else if (c->default_source == e->data)
+ pa_namereg_set_default_source(c, NULL);
pa_xfree(e->name);
pa_xfree(e);
@@ -225,6 +191,7 @@ void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type) {
if ((s = pa_namereg_get(c, NULL, PA_NAMEREG_SINK)))
return s->monitor_source;
+
}
if (!name)
@@ -281,18 +248,15 @@ pa_source* pa_namereg_set_default_source(pa_core*c, pa_source *s) {
return s;
}
-/* XXX: After removing old functionality, has this function become useless? */
pa_sink *pa_namereg_get_default_sink(pa_core *c) {
pa_sink *s;
uint32_t idx;
pa_assert(c);
- if (!c->default_sink || PA_SINK_IS_LINKED(pa_sink_get_state(c->default_sink)))
+ if (c->default_sink && PA_SINK_IS_LINKED(pa_sink_get_state(c->default_sink)))
return c->default_sink;
- /* The old default sink has become unlinked, set a new one. */
-
/* FIXME: the selection here should be based priority values on
* the sinks */
@@ -300,21 +264,18 @@ pa_sink *pa_namereg_get_default_sink(pa_core *c) {
if (PA_SINK_IS_LINKED(pa_sink_get_state(s)))
return pa_namereg_set_default_sink(c, s);
- return pa_namereg_set_default_sink(c, NULL);
+ return NULL;
}
-/* XXX: After removing old functionality, has this function become useless? */
pa_source *pa_namereg_get_default_source(pa_core *c) {
pa_source *s;
uint32_t idx;
pa_assert(c);
- if (!c->default_source || PA_SOURCE_IS_LINKED(pa_source_get_state(c->default_source)))
+ if (c->default_source && PA_SOURCE_IS_LINKED(pa_source_get_state(c->default_source)))
return c->default_source;
- /* The old default source has become unlinked, set a new one. */
-
/* First, try to find one that isn't a monitor */
PA_IDXSET_FOREACH(s, c->sources, idx)
if (!s->monitor_of && PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
@@ -325,5 +286,5 @@ pa_source *pa_namereg_get_default_source(pa_core *c) {
if (PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
return pa_namereg_set_default_source(c, s);
- return pa_namereg_set_default_source(c, NULL);
+ return NULL;
}
commit a10e8360d72626635de1242cfc2c77207f13d56f
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:42:06 2009 +0300
dbusiface-core: New function: pa_dbusiface_core_get_client_path().
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 2b5cf0b..ec87158 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2075,3 +2075,10 @@ const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_mod
return pa_dbusiface_module_get_path(pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(module->index)));
}
+
+const char *pa_dbusiface_core_get_client_path(pa_dbusiface_core *c, const pa_client *client) {
+ pa_assert(c);
+ pa_assert(client);
+
+ return pa_dbusiface_client_get_path(pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(client->index)));
+}
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index 14dff7e..cf2a3b2 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -41,5 +41,6 @@ const char *pa_dbusiface_core_get_source_path(pa_dbusiface_core *c, const pa_sou
const char *pa_dbusiface_core_get_playback_stream_path(pa_dbusiface_core *c, const pa_sink_input *sink_input);
const char *pa_dbusiface_core_get_record_stream_path(pa_dbusiface_core *c, const pa_source_output *source_output);
const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module);
+const char *pa_dbusiface_core_get_client_path(pa_dbusiface_core *c, const pa_client *client);
#endif
commit efec274b6dcf239f580713f889957c370ac7ffc7
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:42:58 2009 +0300
dbusiface-core: Two new functions: pa_dbusiface_core_get_sink/source().
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index ec87158..86a8fc7 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2082,3 +2082,31 @@ const char *pa_dbusiface_core_get_client_path(pa_dbusiface_core *c, const pa_cli
return pa_dbusiface_client_get_path(pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(client->index)));
}
+
+pa_sink *pa_dbusiface_core_get_sink(pa_dbusiface_core *c, const char *object_path) {
+ pa_dbusiface_device *device = NULL;
+
+ pa_assert(c);
+ pa_assert(object_path);
+
+ device = pa_hashmap_get(c->sinks_by_path, object_path);
+
+ if (device)
+ return pa_dbusiface_device_get_sink(device);
+ else
+ return NULL;
+}
+
+pa_source *pa_dbusiface_core_get_source(pa_dbusiface_core *c, const char *object_path) {
+ pa_dbusiface_device *device = NULL;
+
+ pa_assert(c);
+ pa_assert(object_path);
+
+ device = pa_hashmap_get(c->sources_by_path, object_path);
+
+ if (device)
+ return pa_dbusiface_device_get_source(device);
+ else
+ return NULL;
+}
diff --git a/src/modules/dbus/iface-core.h b/src/modules/dbus/iface-core.h
index cf2a3b2..900b6d1 100644
--- a/src/modules/dbus/iface-core.h
+++ b/src/modules/dbus/iface-core.h
@@ -43,4 +43,10 @@ const char *pa_dbusiface_core_get_record_stream_path(pa_dbusiface_core *c, const
const char *pa_dbusiface_core_get_module_path(pa_dbusiface_core *c, const pa_module *module);
const char *pa_dbusiface_core_get_client_path(pa_dbusiface_core *c, const pa_client *client);
+/* Returns NULL if there's no sink with the given path. */
+pa_sink *pa_dbusiface_core_get_sink(pa_dbusiface_core *c, const char *object_path);
+
+/* Returns NULL if there's no source with the given path. */
+pa_source *pa_dbusiface_core_get_source(pa_dbusiface_core *c, const char *object_path);
+
#endif
commit 150cd1684a1e67d3a3797b34b45256afb0fa7f53
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:50:29 2009 +0300
dbusiface-device: Split some overly long lines.
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 15ece83..486a094 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -310,9 +310,11 @@ static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void
if (!owner_module) {
if (d->type == DEVICE_TYPE_SINK)
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Sink %s doesn't have an owner module.", d->sink->name);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sink %s doesn't have an owner module.", d->sink->name);
else
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s doesn't have an owner module.", d->source->name);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Source %s doesn't have an owner module.", d->source->name);
return;
}
@@ -334,9 +336,11 @@ static void handle_get_card(DBusConnection *conn, DBusMessage *msg, void *userda
if (!card) {
if (d->type == DEVICE_TYPE_SINK)
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Sink %s doesn't belong to any card.", d->sink->name);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sink %s doesn't belong to any card.", d->sink->name);
else
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s doesn't belong to any card.", d->source->name);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Source %s doesn't belong to any card.", d->source->name);
return;
}
@@ -426,7 +430,8 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *user
return;
if (n_volume_entries != device_channels) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Expected %u volume entries, got %u.", device_channels, n_volume_entries);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Expected %u volume entries, got %u.", device_channels, n_volume_entries);
return;
}
@@ -598,9 +603,11 @@ static void handle_get_latency(DBusConnection *conn, DBusMessage *msg, void *use
pa_assert(d);
if (d->type == DEVICE_TYPE_SINK && !(d->sink->flags & PA_SINK_LATENCY))
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Sink %s doesn't support latency querying.", d->sink->name);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sink %s doesn't support latency querying.", d->sink->name);
else if (d->type == DEVICE_TYPE_SOURCE && !(d->source->flags & PA_SOURCE_LATENCY))
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Source %s doesn't support latency querying.", d->source->name);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Source %s doesn't support latency querying.", d->source->name);
return;
latency = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_latency(d->sink) : pa_source_get_latency(d->source);
commit bce6af18a3cc761375acebe589c821fc2abf9d1e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:52:10 2009 +0300
dbusiface-device: Use a single if-else section instead of ternary operator overuse.
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 486a094..078ae74 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -817,48 +817,57 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
pa_assert(msg);
pa_assert(d);
- idx = (d->type == DEVICE_TYPE_SINK) ? d->sink->index : d->source->index;
- name = (d->type == DEVICE_TYPE_SINK) ? d->sink->name : d->source->name;
- driver = (d->type == DEVICE_TYPE_SINK) ? d->sink->driver : d->source->driver;
- owner_module = (d->type == DEVICE_TYPE_SINK) ? d->sink->module : d->source->module;
+ if (d->type == DEVICE_TYPE_SINK) {
+ idx = d->sink->index;
+ name = d->sink->name;
+ driver = d->sink->driver;
+ owner_module = d->sink->module;
+ card = d->sink->card;
+ sample_format = d->sink->sample_spec.format;
+ sample_rate = d->sink->sample_spec.rate;
+ channel_map = &d->sink->channel_map;
+ has_flat_volume = d->sink->flags & PA_SINK_FLAT_VOLUME;
+ has_convertible_to_decibel_volume = d->sink->flags & PA_SINK_DECIBEL_VOLUME;
+ base_volume = d->sink->base_volume;
+ volume_steps = d->sink->n_volume_steps;
+ has_hardware_volume = d->sink->flags & PA_SINK_HW_VOLUME_CTRL;
+ has_hardware_mute = d->sink->flags & PA_SINK_HW_MUTE_CTRL;
+ configured_latency = pa_sink_get_requested_latency(d->sink);
+ has_dynamic_latency = d->sink->flags & PA_SINK_DYNAMIC_LATENCY;
+ latency = pa_sink_get_latency(d->sink);
+ is_hardware_device = d->sink->flags & PA_SINK_HARDWARE;
+ is_network_device = d->sink->flags & PA_SINK_NETWORK;
+ state = pa_sink_get_state(d->sink);
+ } else {
+ idx = d->source->index;
+ name = d->source->name;
+ driver = d->source->driver;
+ owner_module = d->source->module;
+ card = d->source->card;
+ sample_format = d->source->sample_spec.format;
+ sample_rate = d->source->sample_spec.rate;
+ channel_map = &d->source->channel_map;
+ has_flat_volume = FALSE;
+ has_convertible_to_decibel_volume = d->source->flags & PA_SOURCE_DECIBEL_VOLUME;
+ base_volume = d->source->base_volume;
+ volume_steps = d->source->n_volume_steps;
+ has_hardware_volume = d->source->flags & PA_SOURCE_HW_VOLUME_CTRL;
+ has_hardware_mute = d->source->flags & PA_SOURCE_HW_MUTE_CTRL;
+ configured_latency = pa_source_get_requested_latency(d->source);
+ has_dynamic_latency = d->source->flags & PA_SOURCE_DYNAMIC_LATENCY;
+ latency = pa_source_get_latency(d->source);
+ is_hardware_device = d->source->flags & PA_SOURCE_HARDWARE;
+ is_network_device = d->source->flags & PA_SOURCE_NETWORK;
+ state = pa_source_get_state(d->source);
+ }
if (owner_module)
owner_module_path = pa_dbusiface_core_get_module_path(d->core, owner_module);
- card = (d->type == DEVICE_TYPE_SINK) ? d->sink->card : d->source->card;
if (card)
card_path = pa_dbusiface_core_get_card_path(d->core, card);
- sample_format = (d->type == DEVICE_TYPE_SINK) ? d->sink->sample_spec.format : d->source->sample_spec.format;
- sample_rate = (d->type == DEVICE_TYPE_SINK) ? d->sink->sample_spec.rate : d->source->sample_spec.rate;
- channel_map = (d->type == DEVICE_TYPE_SINK) ? &d->sink->channel_map : &d->source->channel_map;
for (i = 0; i < channel_map->channels; ++i)
channels[i] = channel_map->map[i];
for (i = 0; i < d->volume.channels; ++i)
volume[i] = d->volume.values[i];
- has_flat_volume = (d->type == DEVICE_TYPE_SINK) ? (d->sink->flags & PA_SINK_FLAT_VOLUME) : FALSE;
- has_convertible_to_decibel_volume = (d->type == DEVICE_TYPE_SINK)
- ? (d->sink->flags & PA_SINK_DECIBEL_VOLUME)
- : (d->source->flags & PA_SOURCE_DECIBEL_VOLUME);
- base_volume = (d->type == DEVICE_TYPE_SINK) ? d->sink->base_volume : d->source->base_volume;
- volume_steps = (d->type == DEVICE_TYPE_SINK) ? d->sink->n_volume_steps : d->source->n_volume_steps;
- has_hardware_volume = (d->type == DEVICE_TYPE_SINK)
- ? (d->sink->flags & PA_SINK_HW_VOLUME_CTRL)
- : (d->source->flags & PA_SOURCE_HW_VOLUME_CTRL);
- has_hardware_mute = (d->type == DEVICE_TYPE_SINK)
- ? (d->sink->flags & PA_SINK_HW_MUTE_CTRL)
- : (d->source->flags & PA_SOURCE_HW_MUTE_CTRL);
- configured_latency = (d->type == DEVICE_TYPE_SINK)
- ? pa_sink_get_requested_latency(d->sink)
- : pa_source_get_requested_latency(d->source);
- has_dynamic_latency = (d->type == DEVICE_TYPE_SINK)
- ? (d->sink->flags & PA_SINK_DYNAMIC_LATENCY)
- : (d->source->flags & PA_SOURCE_DYNAMIC_LATENCY);
- latency = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_latency(d->sink) : pa_source_get_latency(d->source);
- is_hardware_device = (d->type == DEVICE_TYPE_SINK)
- ? (d->sink->flags & PA_SINK_HARDWARE)
- : (d->source->flags & PA_SOURCE_HARDWARE);
- is_network_device = (d->type == DEVICE_TYPE_SINK)
- ? (d->sink->flags & PA_SINK_NETWORK)
- : (d->source->flags & PA_SOURCE_NETWORK);
- state = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_state(d->sink) : pa_source_get_state(d->source);
ports = get_ports(d, &n_ports);
if (d->active_port)
active_port = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
commit b52871517944d55cec549af362398a5012f0b8b8
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:53:58 2009 +0300
dbusiface-device: Fix argument reading in handle_suspend().
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 078ae74..2e5940c 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -923,13 +923,19 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
static void handle_suspend(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_device *d = userdata;
dbus_bool_t suspend = FALSE;
+ DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(d);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &suspend) < 0)
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_BOOLEAN, &suspend, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
return;
+ }
if ((d->type == DEVICE_TYPE_SINK) && (pa_sink_suspend(d->sink, suspend, PA_SUSPEND_USER) < 0)) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Internal error in PulseAudio: pa_sink_suspend() failed.");
commit 70ff96b8ab100abb4969b882f66518ce739ae655
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:55:08 2009 +0300
dbusiface-device: Save one level of identation by returning early.
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 2e5940c..8dc0b2c 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -1075,126 +1075,129 @@ static void handle_source_get_all(DBusConnection *conn, DBusMessage *msg, void *
static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_device *d = userdata;
+ DBusMessage *signal = NULL;
+ const pa_cvolume *new_volume = NULL;
+ pa_bool_t new_muted = FALSE;
+ pa_sink_state_t new_sink_state = 0;
+ pa_source_state_t new_source_state = 0;
+ pa_device_port *new_active_port = NULL;
+ pa_proplist *new_proplist = NULL;
+ unsigned i = 0;
pa_assert(c);
pa_assert(d);
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
- DBusMessage *signal = NULL;
- const pa_cvolume *new_volume = NULL;
- pa_bool_t new_muted = FALSE;
- pa_sink_state_t new_sink_state = 0;
- pa_source_state_t new_source_state = 0;
- pa_device_port *new_active_port = NULL;
- pa_proplist *new_proplist = NULL;
- unsigned i = 0;
-
- pa_assert(((d->type == DEVICE_TYPE_SINK)
- && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK))
- || ((d->type == DEVICE_TYPE_SOURCE)
- && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE)));
-
- new_volume = (d->type == DEVICE_TYPE_SINK)
- ? pa_sink_get_volume(d->sink, FALSE, FALSE)
- : pa_source_get_volume(d->source, FALSE);
-
- if (!pa_cvolume_equal(&d->volume, new_volume)) {
- dbus_uint32_t volume[PA_CHANNELS_MAX];
- dbus_uint32_t *volume_ptr = volume;
-
- d->volume = *new_volume;
-
- for (i = 0; i < d->volume.channels; ++i)
- volume[i] = d->volume.values[i];
-
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_VOLUME_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal,
- DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, d->volume.channels,
- DBUS_TYPE_INVALID));
-
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ if ((d->type == DEVICE_TYPE_SINK && idx != d->sink->index) || (d->type == DEVICE_TYPE_SOURCE && idx != d->source->index))
+ return;
- new_muted = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_mute(d->sink, FALSE) : pa_source_get_mute(d->source, FALSE);
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
+ return;
- if (d->is_muted != new_muted) {
- d->is_muted = new_muted;
+ pa_assert(((d->type == DEVICE_TYPE_SINK)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK))
+ || ((d->type == DEVICE_TYPE_SOURCE)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE)));
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &d->is_muted, DBUS_TYPE_INVALID));
+ new_volume = (d->type == DEVICE_TYPE_SINK)
+ ? pa_sink_get_volume(d->sink, FALSE, FALSE)
+ : pa_source_get_volume(d->source, FALSE);
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ if (!pa_cvolume_equal(&d->volume, new_volume)) {
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ dbus_uint32_t *volume_ptr = volume;
- if (d->type == DEVICE_TYPE_SINK)
- new_sink_state = pa_sink_get_state(d->sink);
- else
- new_source_state = pa_source_get_state(d->source);
+ d->volume = *new_volume;
- if ((d->type == DEVICE_TYPE_SINK && d->sink_state != new_sink_state)
- || (d->type == DEVICE_TYPE_SOURCE && d->source_state != new_source_state)) {
- dbus_uint32_t state = 0;
+ for (i = 0; i < d->volume.channels; ++i)
+ volume[i] = d->volume.values[i];
- if (d->type == DEVICE_TYPE_SINK)
- d->sink_state = new_sink_state;
- else
- d->source_state = new_source_state;
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_VOLUME_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, d->volume.channels,
+ DBUS_TYPE_INVALID));
- state = (d->type == DEVICE_TYPE_SINK) ? d->sink_state : d->source_state;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_STATE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID));
+ new_muted = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_mute(d->sink, FALSE) : pa_source_get_mute(d->source, FALSE);
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ if (d->is_muted != new_muted) {
+ d->is_muted = new_muted;
- new_active_port = (d->type == DEVICE_TYPE_SINK) ? d->sink->active_port : d->source->active_port;
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &d->is_muted, DBUS_TYPE_INVALID));
- if (d->active_port != new_active_port) {
- const char *object_path = NULL;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
- d->active_port = new_active_port;
- object_path = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
+ if (d->type == DEVICE_TYPE_SINK)
+ new_sink_state = pa_sink_get_state(d->sink);
+ else
+ new_source_state = pa_source_get_state(d->source);
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_ACTIVE_PORT_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ if ((d->type == DEVICE_TYPE_SINK && d->sink_state != new_sink_state)
+ || (d->type == DEVICE_TYPE_SOURCE && d->source_state != new_source_state)) {
+ dbus_uint32_t state = 0;
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ if (d->type == DEVICE_TYPE_SINK)
+ d->sink_state = new_sink_state;
+ else
+ d->source_state = new_source_state;
- new_proplist = (d->type == DEVICE_TYPE_SINK) ? d->sink->proplist : d->source->proplist;
+ state = (d->type == DEVICE_TYPE_SINK) ? d->sink_state : d->source_state;
- if (!pa_proplist_equal(d->proplist, new_proplist)) {
- DBusMessageIter msg_iter;
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_STATE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID));
- pa_proplist_update(d->proplist, PA_UPDATE_SET, new_proplist);
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
- pa_dbus_append_proplist(&msg_iter, d->proplist);
+ new_active_port = (d->type == DEVICE_TYPE_SINK) ? d->sink->active_port : d->source->active_port;
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ if (d->active_port != new_active_port) {
+ const char *object_path = NULL;
+
+ d->active_port = new_active_port;
+ object_path = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_ACTIVE_PORT_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ new_proplist = (d->type == DEVICE_TYPE_SINK) ? d->sink->proplist : d->source->proplist;
+
+ if (!pa_proplist_equal(d->proplist, new_proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(d->proplist, PA_UPDATE_SET, new_proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, d->proplist);
+
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
}
}
commit 36dc61a2bff7ee93ca289c33c24b76cb82068cac
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 17 16:56:12 2009 +0300
dbusiface-stream: Finish the Stream D-Bus interface.
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index 4333c16..354ca6e 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -39,78 +39,86 @@ enum stream_type {
};
struct pa_dbusiface_stream {
+ pa_dbusiface_core *core;
+
union {
pa_sink_input *sink_input;
pa_source_output *source_output;
};
enum stream_type type;
char *path;
+ union {
+ pa_sink *sink;
+ pa_source *source;
+ };
+ uint32_t sample_rate;
pa_cvolume volume;
pa_bool_t is_muted;
pa_proplist *proplist;
pa_dbus_protocol *dbus_protocol;
pa_subscription *subscription;
+ pa_hook_slot *send_event_slot;
};
static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
-/*static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_client(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-/*static void handle_get_buffer_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_buffer_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_device_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_get_resample_method(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+static void handle_get_resample_method(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
-/*static void handle_move(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+static void handle_move(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata);
enum property_handler_index {
PROPERTY_HANDLER_INDEX,
-/* PROPERTY_HANDLER_DRIVER,
+ PROPERTY_HANDLER_DRIVER,
PROPERTY_HANDLER_OWNER_MODULE,
PROPERTY_HANDLER_CLIENT,
PROPERTY_HANDLER_DEVICE,
PROPERTY_HANDLER_SAMPLE_FORMAT,
PROPERTY_HANDLER_SAMPLE_RATE,
- PROPERTY_HANDLER_CHANNELS,*/
+ PROPERTY_HANDLER_CHANNELS,
PROPERTY_HANDLER_VOLUME,
PROPERTY_HANDLER_IS_MUTED,
-/* PROPERTY_HANDLER_BUFFER_LATENCY,
+ PROPERTY_HANDLER_BUFFER_LATENCY,
PROPERTY_HANDLER_DEVICE_LATENCY,
- PROPERTY_HANDLER_RESAMPLE_METHOD,*/
+ PROPERTY_HANDLER_RESAMPLE_METHOD,
PROPERTY_HANDLER_PROPERTY_LIST,
PROPERTY_HANDLER_MAX
};
static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
[PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
-/* [PROPERTY_HANDLER_DRIVER] = { .property_name = "Driver", .type = "s", .get_cb = handle_get_driver, .set_cb = NULL },
+ [PROPERTY_HANDLER_DRIVER] = { .property_name = "Driver", .type = "s", .get_cb = handle_get_driver, .set_cb = NULL },
[PROPERTY_HANDLER_OWNER_MODULE] = { .property_name = "OwnerModule", .type = "o", .get_cb = handle_get_owner_module, .set_cb = NULL },
[PROPERTY_HANDLER_CLIENT] = { .property_name = "Client", .type = "o", .get_cb = handle_get_client, .set_cb = NULL },
[PROPERTY_HANDLER_DEVICE] = { .property_name = "Device", .type = "o", .get_cb = handle_get_device, .set_cb = NULL },
[PROPERTY_HANDLER_SAMPLE_FORMAT] = { .property_name = "SampleFormat", .type = "u", .get_cb = handle_get_sample_format, .set_cb = NULL },
[PROPERTY_HANDLER_SAMPLE_RATE] = { .property_name = "SampleRate", .type = "u", .get_cb = handle_get_sample_rate, .set_cb = NULL },
- [PROPERTY_HANDLER_CHANNELS] = { .property_name = "Channels", .type = "au", .get_cb = handle_get_channels, .set_cb = NULL },*/
+ [PROPERTY_HANDLER_CHANNELS] = { .property_name = "Channels", .type = "au", .get_cb = handle_get_channels, .set_cb = NULL },
[PROPERTY_HANDLER_VOLUME] = { .property_name = "Volume", .type = "au", .get_cb = handle_get_volume, .set_cb = handle_set_volume },
[PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_get_is_muted, .set_cb = handle_set_is_muted },
-/* [PROPERTY_HANDLER_BUFFER_LATENCY] = { .property_name = "BufferLatency", .type = "t", .get_cb = handle_get_buffer_latency, .set_cb = NULL },
+ [PROPERTY_HANDLER_BUFFER_LATENCY] = { .property_name = "BufferLatency", .type = "t", .get_cb = handle_get_buffer_latency, .set_cb = NULL },
[PROPERTY_HANDLER_DEVICE_LATENCY] = { .property_name = "DeviceLatency", .type = "t", .get_cb = handle_get_device_latency, .set_cb = NULL },
- [PROPERTY_HANDLER_RESAMPLE_METHOD] = { .property_name = "ResampleMethod", .type = "s", .get_cb = handle_get_resample_method, .set_cb = NULL },*/
+ [PROPERTY_HANDLER_RESAMPLE_METHOD] = { .property_name = "ResampleMethod", .type = "s", .get_cb = handle_get_resample_method, .set_cb = NULL },
[PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
};
-/*enum method_handler_index {
+enum method_handler_index {
METHOD_HANDLER_MOVE,
METHOD_HANDLER_KILL,
METHOD_HANDLER_MAX
@@ -129,38 +137,38 @@ static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
.arguments = NULL,
.n_arguments = 0,
.receive_cb = handle_kill }
-};*/
+};
enum signal_index {
-/* SIGNAL_DEVICE_UPDATED,
- SIGNAL_SAMPLE_RATE_UPDATED,*/
+ SIGNAL_DEVICE_UPDATED,
+ SIGNAL_SAMPLE_RATE_UPDATED,
SIGNAL_VOLUME_UPDATED,
SIGNAL_MUTE_UPDATED,
SIGNAL_PROPERTY_LIST_UPDATED,
-/* SIGNAL_STREAM_EVENT,*/
+ SIGNAL_STREAM_EVENT,
SIGNAL_MAX
};
-/*static pa_dbus_arg_info device_updated_args[] = { { "device", "o", NULL } };
-static pa_dbus_arg_info sample_rate_updated_args[] = { { "sample_rate", "u", NULL } };*/
+static pa_dbus_arg_info device_updated_args[] = { { "device", "o", NULL } };
+static pa_dbus_arg_info sample_rate_updated_args[] = { { "sample_rate", "u", NULL } };
static pa_dbus_arg_info volume_updated_args[] = { { "volume", "au", NULL } };
static pa_dbus_arg_info mute_updated_args[] = { { "muted", "b", NULL } };
static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
-/*static pa_dbus_arg_info stream_event_args[] = { { "name", "s", NULL }, { "property_list", "a{say}", NULL } };*/
+static pa_dbus_arg_info stream_event_args[] = { { "name", "s", NULL }, { "property_list", "a{say}", NULL } };
static pa_dbus_signal_info signals[SIGNAL_MAX] = {
-/* [SIGNAL_DEVICE_UPDATED] = { .name = "DeviceUpdated", .arguments = device_updated_args, .n_arguments = 1 },
- [SIGNAL_SAMPLE_RATE_UPDATED] = { .name = "SampleRateUpdated", .arguments = sample_rate_updated_args, .n_arguments = 1 },*/
+ [SIGNAL_DEVICE_UPDATED] = { .name = "DeviceUpdated", .arguments = device_updated_args, .n_arguments = 1 },
+ [SIGNAL_SAMPLE_RATE_UPDATED] = { .name = "SampleRateUpdated", .arguments = sample_rate_updated_args, .n_arguments = 1 },
[SIGNAL_VOLUME_UPDATED] = { .name = "VolumeUpdated", .arguments = volume_updated_args, .n_arguments = 1 },
[SIGNAL_MUTE_UPDATED] = { .name = "MuteUpdated", .arguments = mute_updated_args, .n_arguments = 1 },
- [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }/*,
- [SIGNAL_STREAM_EVENT] = { .name = "StreamEvent", .arguments = stream_event_args, .n_arguments = sizeof(stream_event_args) / sizeof(pa_dbus_arg_info) }*/
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 },
+ [SIGNAL_STREAM_EVENT] = { .name = "StreamEvent", .arguments = stream_event_args, .n_arguments = sizeof(stream_event_args) / sizeof(pa_dbus_arg_info) }
};
static pa_dbus_interface_info stream_interface_info = {
.name = PA_DBUSIFACE_STREAM_INTERFACE,
- .method_handlers = /*method_handlers*/ NULL,
- .n_method_handlers = /*METHOD_HANDLER_MAX*/ 0,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
.property_handlers = property_handlers,
.n_property_handlers = PROPERTY_HANDLER_MAX,
.get_all_properties_cb = handle_get_all,
@@ -181,6 +189,140 @@ static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userd
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
}
+static void handle_get_driver(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ const char *driver = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ driver = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->driver : s->source_output->driver;
+
+ if (!driver) {
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Playback stream %u doesn't have a driver.", s->sink_input->index);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Record stream %u doesn't have a driver.", s->source_output->index);
+ return;
+ }
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &driver);
+}
+
+static void handle_get_owner_module(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ pa_module *owner_module = NULL;
+ const char *object_path = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ owner_module = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->module : s->source_output->module;
+
+ if (!owner_module) {
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Playback stream %u doesn't have an owner module.", s->sink_input->index);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Record stream %u doesn't have an owner module.", s->source_output->index);
+ return;
+ }
+
+ object_path = pa_dbusiface_core_get_module_path(s->core, owner_module);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_client(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ pa_client *client = NULL;
+ const char *object_path = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ client = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->client : s->source_output->client;
+
+ if (!client) {
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Playback stream %u isn't associated to any client.", s->sink_input->index);
+ else
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Record stream %u isn't associated to any client.", s->source_output->index);
+ return;
+ }
+
+ object_path = pa_dbusiface_core_get_client_path(s->core, client);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
+}
+
+static void handle_get_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ const char *device = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ device = pa_dbusiface_core_get_sink_path(s->core, s->sink);
+ else
+ device = pa_dbusiface_core_get_source_path(s->core, s->source);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &device);
+}
+
+static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ dbus_uint32_t sample_format = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ sample_format = (s->type == STREAM_TYPE_PLAYBACK)
+ ? s->sink_input->sample_spec.format
+ : s->source_output->sample_spec.format;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sample_format);
+}
+
+static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &s->sample_rate);
+}
+
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ pa_channel_map *channel_map = NULL;
+ dbus_uint32_t channels[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ channel_map = (s->type == STREAM_TYPE_PLAYBACK) ? &s->sink_input->channel_map : &s->source_output->channel_map;
+
+ for (i = 0; i < channel_map->channels; ++i)
+ channels[i] = channel_map->map[i];
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, channels, channel_map->channels);
+}
+
static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_stream *s = userdata;
dbus_uint32_t volume[PA_CHANNELS_MAX];
@@ -228,7 +370,8 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *user
return;
if (n_volume_entries != stream_channels) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Expected %u volume entries, got %u.", stream_channels, n_volume_entries);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Expected %u volume entries, got %u.", stream_channels, n_volume_entries);
return;
}
@@ -281,6 +424,54 @@ static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *us
pa_dbus_send_empty_reply(conn, msg);
};
+static void handle_get_buffer_latency(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ dbus_uint64_t buffer_latency = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ buffer_latency = pa_sink_input_get_latency(s->sink_input, NULL);
+ else
+ buffer_latency = pa_source_output_get_latency(s->source_output, NULL);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT64, &buffer_latency);
+}
+
+static void handle_get_device_latency(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ dbus_uint64_t device_latency = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ pa_sink_input_get_latency(s->sink_input, &device_latency);
+ else
+ pa_source_output_get_latency(s->source_output, &device_latency);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT64, &device_latency);
+}
+
+static void handle_get_resample_method(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ const char *resample_method = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ resample_method = pa_resample_method_to_string(s->sink_input->actual_resample_method);
+ else
+ resample_method = pa_resample_method_to_string(s->source_output->actual_resample_method);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &resample_method);
+}
+
static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_stream *s = userdata;
@@ -296,19 +487,55 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
DBusMessage *reply = NULL;
DBusMessageIter msg_iter;
DBusMessageIter dict_iter;
- dbus_uint32_t idx;
+ dbus_uint32_t idx = 0;
+ const char *driver = NULL;
+ pa_module *owner_module = NULL;
+ const char *owner_module_path = NULL;
+ pa_client *client = NULL;
+ const char *client_path = NULL;
+ const char *device = NULL;
+ dbus_uint32_t sample_format = 0;
+ pa_channel_map *channel_map = NULL;
+ dbus_uint32_t channels[PA_CHANNELS_MAX];
dbus_uint32_t volume[PA_CHANNELS_MAX];
+ dbus_uint64_t buffer_latency = 0;
+ dbus_uint64_t device_latency = 0;
+ const char *resample_method = NULL;
unsigned i = 0;
pa_assert(conn);
pa_assert(msg);
pa_assert(s);
- idx = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->index : s->source_output->index;
if (s->type == STREAM_TYPE_PLAYBACK) {
+ idx = s->sink_input->index;
+ driver = s->sink_input->driver;
+ owner_module = s->sink_input->module;
+ client = s->sink_input->client;
+ device = pa_dbusiface_core_get_sink_path(s->core, s->sink);
+ sample_format = s->sink_input->sample_spec.format;
+ channel_map = &s->sink_input->channel_map;
for (i = 0; i < s->volume.channels; ++i)
volume[i] = s->volume.values[i];
+ buffer_latency = pa_sink_input_get_latency(s->sink_input, &device_latency);
+ resample_method = pa_resample_method_to_string(s->sink_input->actual_resample_method);
+ } else {
+ idx = s->source_output->index;
+ driver = s->source_output->driver;
+ owner_module = s->source_output->module;
+ client = s->source_output->client;
+ device = pa_dbusiface_core_get_source_path(s->core, s->source);
+ sample_format = s->source_output->sample_spec.format;
+ channel_map = &s->source_output->channel_map;
+ buffer_latency = pa_source_output_get_latency(s->source_output, &device_latency);
+ resample_method = pa_resample_method_to_string(s->source_output->actual_resample_method);
}
+ if (owner_module)
+ owner_module_path = pa_dbusiface_core_get_module_path(s->core, owner_module);
+ if (client)
+ client_path = pa_dbusiface_core_get_client_path(s->core, client);
+ for (i = 0; i < channel_map->channels; ++i)
+ channels[i] = channel_map->map[i];
pa_assert_se((reply = dbus_message_new_method_return(msg)));
@@ -317,11 +544,27 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+ if (driver)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DRIVER].property_name, DBUS_TYPE_STRING, &driver);
+
+ if (owner_module)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_OWNER_MODULE].property_name, DBUS_TYPE_OBJECT_PATH, &owner_module_path);
+
+ if (client)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CLIENT].property_name, DBUS_TYPE_OBJECT_PATH, &client_path);
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_FORMAT].property_name, DBUS_TYPE_UINT32, &sample_format);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_RATE].property_name, DBUS_TYPE_UINT32, &s->sample_rate);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CHANNELS].property_name, DBUS_TYPE_UINT32, channels, channel_map->channels);
+
if (s->type == STREAM_TYPE_PLAYBACK) {
pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VOLUME].property_name, DBUS_TYPE_UINT32, volume, s->volume.channels);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &s->is_muted);
}
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_BUFFER_LATENCY].property_name, DBUS_TYPE_UINT64, &buffer_latency);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DEVICE_LATENCY].property_name, DBUS_TYPE_UINT64, &device_latency);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_RESAMPLE_METHOD].property_name, DBUS_TYPE_STRING, &resample_method);
pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, s->proplist);
pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
@@ -329,83 +572,240 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
dbus_message_unref(reply);
}
+static void handle_move(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+ const char *device = NULL;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ dbus_error_init(&error);
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &device, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ pa_sink *sink = pa_dbusiface_core_get_sink(s->core, device);
+
+ if (!sink) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such sink.", device);
+ return;
+ }
+
+ if (pa_sink_input_move_to(s->sink_input, sink, TRUE) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
+ "Moving playback stream %u to sink %s failed.", s->sink_input->index, sink->name);
+ return;
+ }
+ } else {
+ pa_source *source = pa_dbusiface_core_get_source(s->core, device);
+
+ if (!source) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such source.", device);
+ return;
+ }
+
+ if (pa_source_output_move_to(s->source_output, source, TRUE) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
+ "Moving record stream %u to source %s failed.", s->source_output->index, source->name);
+ return;
+ }
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_stream *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK)
+ pa_sink_input_kill(s->sink_input);
+ else
+ pa_source_output_kill(s->source_output);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_stream *s = userdata;
+ DBusMessage *signal = NULL;
+ const char *new_device_path = NULL;
+ uint32_t new_sample_rate = 0;
+ pa_proplist *new_proplist = NULL;
+ unsigned i = 0;
pa_assert(c);
pa_assert(s);
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
- DBusMessage *signal = NULL;
- pa_proplist *new_proplist = NULL;
- unsigned i = 0;
-
- pa_assert(((s->type == STREAM_TYPE_PLAYBACK)
- && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK_INPUT))
- || ((s->type == STREAM_TYPE_RECORD)
- && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT)));
+ if ((s->type == STREAM_TYPE_PLAYBACK && idx != s->sink_input->index)
+ || (s->type == STREAM_TYPE_RECORD && idx != s->source_output->index))
+ return;
- if (s->type == STREAM_TYPE_PLAYBACK) {
- pa_cvolume new_volume;
- pa_bool_t new_muted = FALSE;
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
+ return;
- pa_sink_input_get_volume(s->sink_input, &new_volume, TRUE);
+ pa_assert(((s->type == STREAM_TYPE_PLAYBACK)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK_INPUT))
+ || ((s->type == STREAM_TYPE_RECORD)
+ && ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT)));
- if (!pa_cvolume_equal(&s->volume, &new_volume)) {
- dbus_uint32_t volume[PA_CHANNELS_MAX];
- dbus_uint32_t *volume_ptr = volume;
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ pa_sink *new_sink = s->sink_input->sink;
- s->volume = new_volume;
+ if (s->sink != new_sink) {
+ pa_sink_unref(s->sink);
+ s->sink = pa_sink_ref(new_sink);
- for (i = 0; i < s->volume.channels; ++i)
- volume[i] = s->volume.values[i];
+ new_device_path = pa_dbusiface_core_get_sink_path(s->core, new_sink);
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_VOLUME_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal,
- DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, s->volume.channels,
- DBUS_TYPE_INVALID));
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_DEVICE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &new_device_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ } else {
+ pa_source *new_source = s->source_output->source;
- new_muted = pa_sink_input_get_mute(s->sink_input);
+ if (s->source != new_source) {
+ pa_source_unref(s->source);
+ s->source = pa_source_ref(new_source);
- if (s->is_muted != new_muted) {
- s->is_muted = new_muted;
+ new_device_path = pa_dbusiface_core_get_source_path(s->core, new_source);
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &s->is_muted, DBUS_TYPE_INVALID));
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_DEVICE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &new_device_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
}
+ }
+
+ new_sample_rate = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->sample_spec.rate : s->source_output->sample_spec.rate;
+
+ if (s->sample_rate != new_sample_rate) {
+ s->sample_rate = new_sample_rate;
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_SAMPLE_RATE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_UINT32, &s->sample_rate, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ pa_cvolume new_volume;
+ pa_bool_t new_muted = FALSE;
+
+ pa_sink_input_get_volume(s->sink_input, &new_volume, TRUE);
+
+ if (!pa_cvolume_equal(&s->volume, &new_volume)) {
+ dbus_uint32_t volume[PA_CHANNELS_MAX];
+ dbus_uint32_t *volume_ptr = volume;
+
+ s->volume = new_volume;
+
+ for (i = 0; i < s->volume.channels; ++i)
+ volume[i] = s->volume.values[i];
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_VOLUME_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, s->volume.channels,
+ DBUS_TYPE_INVALID));
- new_proplist = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->proplist : s->source_output->proplist;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
- if (!pa_proplist_equal(s->proplist, new_proplist)) {
- DBusMessageIter msg_iter;
+ new_muted = pa_sink_input_get_mute(s->sink_input);
- pa_proplist_update(s->proplist, PA_UPDATE_SET, new_proplist);
+ if (s->is_muted != new_muted) {
+ s->is_muted = new_muted;
pa_assert_se(signal = dbus_message_new_signal(s->path,
PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
- pa_dbus_append_proplist(&msg_iter, s->proplist);
+ signals[SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &s->is_muted, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
dbus_message_unref(signal);
signal = NULL;
}
}
+
+ new_proplist = (s->type == STREAM_TYPE_PLAYBACK) ? s->sink_input->proplist : s->source_output->proplist;
+
+ if (!pa_proplist_equal(s->proplist, new_proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(s->proplist, PA_UPDATE_SET, new_proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, s->proplist);
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+}
+
+static pa_hook_result_t send_event_cb(void *hook_data, void *call_data, void *slot_data) {
+ pa_dbusiface_stream *s = slot_data;
+ DBusMessage *signal = NULL;
+ DBusMessageIter msg_iter;
+ const char *name = NULL;
+ pa_proplist *property_list = NULL;
+
+ pa_assert(call_data);
+ pa_assert(s);
+
+ if (s->type == STREAM_TYPE_PLAYBACK) {
+ pa_sink_input_send_event_hook_data *data = call_data;
+
+ name = data->event;
+ property_list = data->data;
+ } else {
+ pa_source_output_send_event_hook_data *data = call_data;
+
+ name = data->event;
+ property_list = data->data;
+ }
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_STREAM_EVENT].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(dbus_message_iter_append_basic(&msg_iter, DBUS_TYPE_STRING, &name));
+ pa_dbus_append_proplist(&msg_iter, property_list);
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+
+ return PA_HOOK_OK;
}
pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, pa_sink_input *sink_input) {
@@ -415,14 +815,21 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, p
pa_assert(sink_input);
s = pa_xnew(pa_dbusiface_stream, 1);
+ s->core = core;
s->sink_input = pa_sink_input_ref(sink_input);
s->type = STREAM_TYPE_PLAYBACK;
s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, PLAYBACK_OBJECT_NAME, sink_input->index);
+ s->sink = pa_sink_ref(sink_input->sink);
+ s->sample_rate = sink_input->sample_spec.rate;
pa_sink_input_get_volume(sink_input, &s->volume, TRUE);
s->is_muted = pa_sink_input_get_mute(sink_input);
s->proplist = pa_proplist_copy(sink_input->proplist);
s->dbus_protocol = pa_dbus_protocol_get(sink_input->core);
s->subscription = pa_subscription_new(sink_input->core, PA_SUBSCRIPTION_MASK_SINK_INPUT, subscription_cb, s);
+ s->send_event_slot = pa_hook_connect(&sink_input->core->hooks[PA_CORE_HOOK_SINK_INPUT_SEND_EVENT],
+ PA_HOOK_NORMAL,
+ send_event_cb,
+ s);
pa_assert_se(pa_dbus_protocol_add_interface(s->dbus_protocol, s->path, &stream_interface_info, s) >= 0);
@@ -436,14 +843,21 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_dbusiface_core *core, pa_
pa_assert(source_output);
s = pa_xnew(pa_dbusiface_stream, 1);
+ s->core = core;
s->source_output = pa_source_output_ref(source_output);
s->type = STREAM_TYPE_RECORD;
s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, RECORD_OBJECT_NAME, source_output->index);
+ s->source = pa_source_ref(source_output->source);
+ s->sample_rate = source_output->sample_spec.rate;
pa_cvolume_init(&s->volume);
s->is_muted = FALSE;
s->proplist = pa_proplist_copy(source_output->proplist);
s->dbus_protocol = pa_dbus_protocol_get(source_output->core);
s->subscription = pa_subscription_new(source_output->core, PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT, subscription_cb, s);
+ s->send_event_slot = pa_hook_connect(&source_output->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_SEND_EVENT],
+ PA_HOOK_NORMAL,
+ send_event_cb,
+ s);
pa_assert_se(pa_dbus_protocol_add_interface(s->dbus_protocol, s->path, &stream_interface_info, s) >= 0);
@@ -455,14 +869,18 @@ void pa_dbusiface_stream_free(pa_dbusiface_stream *s) {
pa_assert_se(pa_dbus_protocol_remove_interface(s->dbus_protocol, s->path, stream_interface_info.name) >= 0);
- if (s->type == STREAM_TYPE_PLAYBACK)
+ if (s->type == STREAM_TYPE_PLAYBACK) {
pa_sink_input_unref(s->sink_input);
- else
+ pa_sink_unref(s->sink);
+ } else {
pa_source_output_unref(s->source_output);
+ pa_source_unref(s->source);
+ }
pa_proplist_free(s->proplist);
pa_dbus_protocol_unref(s->dbus_protocol);
pa_subscription_free(s->subscription);
+ pa_hook_slot_free(s->send_event_slot);
pa_xfree(s->path);
pa_xfree(s);
commit 8e6664f499ff3431ea51c99baf366ef11c5301a5
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 19 09:09:40 2009 +0300
dbusiface-core: Split some overly long lines.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 86a8fc7..946fdcc 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -450,7 +450,8 @@ static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg,
}
if (n_channels > PA_CHANNELS_MAX) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too many channels: %u. The maximum number of channels is %u.", n_channels, PA_CHANNELS_MAX);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Too many channels: %u. The maximum number of channels is %u.", n_channels, PA_CHANNELS_MAX);
return;
}
@@ -627,7 +628,8 @@ static void handle_get_fallback_sink(DBusConnection *conn, DBusMessage *msg, voi
pa_assert(c);
if (!c->fallback_sink) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sinks, and therefore no fallback sink either.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "There are no sinks, and therefore no fallback sink either.");
return;
}
@@ -647,7 +649,8 @@ static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, voi
pa_assert(c);
if (!c->fallback_sink) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sinks, and therefore no fallback sink either.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "There are no sinks, and therefore no fallback sink either.");
return;
}
@@ -713,7 +716,8 @@ static void handle_get_fallback_source(DBusConnection *conn, DBusMessage *msg, v
pa_assert(c);
if (!c->fallback_source) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sources, and therefore no fallback source either.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "There are no sources, and therefore no fallback source either.");
return;
}
@@ -733,7 +737,8 @@ static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, v
pa_assert(c);
if (!c->fallback_source) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "There are no sources, and therefore no fallback source either.");
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "There are no sources, and therefore no fallback source either.");
return;
}
@@ -1037,9 +1042,14 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
default_sample_rate = c->core->default_sample_spec.rate;
cards = get_cards(c, &n_cards);
sinks = get_sinks(c, &n_sinks);
- fallback_sink = c->fallback_sink ? pa_dbusiface_device_get_path(pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(c->fallback_sink->index))) : NULL;
+ fallback_sink = c->fallback_sink
+ ? pa_dbusiface_device_get_path(pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(c->fallback_sink->index)))
+ : NULL;
sources = get_sources(c, &n_sources);
- fallback_source = c->fallback_source ? pa_dbusiface_device_get_path(pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(c->fallback_source->index))) : NULL;
+ fallback_source = c->fallback_source
+ ? pa_dbusiface_device_get_path(pa_hashmap_get(c->sources_by_index,
+ PA_UINT32_TO_PTR(c->fallback_source->index)))
+ : NULL;
playback_streams = get_playback_streams(c, &n_playback_streams);
record_streams = get_record_streams(c, &n_record_streams);
samples = get_samples(c, &n_samples);
@@ -1299,7 +1309,8 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
}
if (n_channels > PA_CHANNELS_MAX) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too many channels.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Too many channels: %u. The maximum is %u.", n_channels, PA_CHANNELS_MAX);
goto finish;
}
@@ -1311,7 +1322,8 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
}
if (n_volume_entries != 0 && n_volume_entries != n_channels) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "The channels and default_volume arguments have different number of elements.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "The channels and default_volume arguments have different number of elements.");
goto finish;
}
@@ -1337,7 +1349,8 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
ss.channels = n_channels;
if (!pa_frame_aligned(data_length, &ss)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "The sample length in bytes doesn't align with the sample format and channels.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "The sample length in bytes doesn't align with the sample format and channels.");
goto finish;
}
@@ -1431,15 +1444,19 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
arg_type = dbus_message_iter_get_arg_type(&msg_iter);
if (arg_type != DBUS_TYPE_ARRAY) {
if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. A dictionary from strings to strings was expected.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Too few arguments. A dictionary from strings to strings was expected.");
else
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An dictionary from strings to strings was expected.", (char) arg_type);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Wrong argument type: '%c'. An dictionary from strings to strings was expected.",
+ (char) arg_type);
return;
}
arg_type = dbus_message_iter_get_element_type(&msg_iter);
if (arg_type != DBUS_TYPE_DICT_ENTRY) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A dict entry (string to string) was expected.", (char) arg_type);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Wrong array element type: '%c'. A dict entry (string to string) was expected.", (char) arg_type);
return;
}
@@ -1455,7 +1472,8 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
if (arg_type != DBUS_TYPE_STRING) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
goto finish;
}
@@ -1472,7 +1490,8 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
if (arg_type == DBUS_TYPE_INVALID)
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Dict value missing.");
else
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type: '%c'. A string was expected.", (char) arg_type);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Wrong dict value type: '%c'. A string was expected.", (char) arg_type);
goto finish;
}
@@ -1532,7 +1551,10 @@ static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, voi
dbus_error_init(&error);
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &signal, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects, DBUS_TYPE_INVALID)) {
+ if (!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_STRING, &signal,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects,
+ DBUS_TYPE_INVALID)) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
goto finish;
@@ -1591,10 +1613,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (c->fallback_sink != new_fallback_sink) {
c->fallback_sink = new_fallback_sink;
- if (new_fallback_sink && (device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
+ if (new_fallback_sink
+ && (device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1605,10 +1630,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if (c->fallback_source != new_fallback_source) {
c->fallback_source = new_fallback_source;
- if (new_fallback_source && (device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
+ if (new_fallback_source
+ && (device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1626,7 +1654,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_CARD].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_CARD].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1634,7 +1664,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_CARD_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_CARD_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_card_free(card);
@@ -1653,7 +1685,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_SINK].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_SINK].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1665,7 +1699,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
* the D-Bus sink object wasn't created yet. Now that the
* object is created, let's send the fallback sink change
* signal. */
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1678,7 +1714,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se(pa_hashmap_remove(c->sinks_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_SINK_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_SINK_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device);
@@ -1697,7 +1735,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_SOURCE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_SOURCE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1709,7 +1749,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
* point the D-Bus source object wasn't created yet. Now
* that the object is created, let's send the fallback
* source change signal. */
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1722,7 +1764,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device);
pa_assert_se(pa_hashmap_remove(c->sources_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_SOURCE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_SOURCE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device);
@@ -1738,7 +1782,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1746,7 +1792,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream);
@@ -1762,7 +1810,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_RECORD_STREAM].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_RECORD_STREAM].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1770,7 +1820,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream);
@@ -1786,7 +1838,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_SAMPLE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_SAMPLE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1794,7 +1848,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_SAMPLE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_SAMPLE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_sample_free(sample);
@@ -1810,7 +1866,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_MODULE].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_MODULE].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1818,7 +1876,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_MODULE_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_MODULE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_module_free(module);
@@ -1834,7 +1894,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_CLIENT].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_CLIENT].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1842,7 +1904,9 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_CLIENT_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_CLIENT_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_client_free(client);
@@ -1864,7 +1928,9 @@ static pa_hook_result_t extension_registered_cb(void *hook_data, void *call_data
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_NEW_EXTENSION].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_EXTENSION].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1881,7 +1947,9 @@ static pa_hook_result_t extension_unregistered_cb(void *hook_data, void *call_da
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH, PA_DBUS_CORE_INTERFACE, signals[SIGNAL_EXTENSION_REMOVED].name)));
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_EXTENSION_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
@@ -1921,8 +1989,16 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
c->clients = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
c->fallback_sink = pa_namereg_get_default_sink(core);
c->fallback_source = pa_namereg_get_default_source(core);
- c->extension_registered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED, PA_HOOK_NORMAL, extension_registered_cb, c);
- c->extension_unregistered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol, PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED, PA_HOOK_NORMAL, extension_unregistered_cb, c);
+ c->extension_registered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol,
+ PA_DBUS_PROTOCOL_HOOK_EXTENSION_REGISTERED,
+ PA_HOOK_NORMAL,
+ extension_registered_cb,
+ c);
+ c->extension_unregistered_slot = pa_dbus_protocol_hook_connect(c->dbus_protocol,
+ PA_DBUS_PROTOCOL_HOOK_EXTENSION_UNREGISTERED,
+ PA_HOOK_NORMAL,
+ extension_unregistered_cb,
+ c);
c->memstats = pa_dbusiface_memstats_new(c, core);
for (card = pa_idxset_first(core->cards, &idx); card; card = pa_idxset_next(core->cards, &idx))
commit 636dbc31f9f7acd76402ea01121f327d21315177
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 19 09:10:38 2009 +0300
dbusiface-core: Use the PA_IDXSET_FOREACH macro.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 946fdcc..e0aedbe 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2001,34 +2001,34 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
c);
c->memstats = pa_dbusiface_memstats_new(c, core);
- for (card = pa_idxset_first(core->cards, &idx); card; card = pa_idxset_next(core->cards, &idx))
+ PA_IDXSET_FOREACH(card, core->cards, idx)
pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(c, card));
- for (sink = pa_idxset_first(core->sinks, &idx); sink; sink = pa_idxset_next(core->sinks, &idx)) {
+ PA_IDXSET_FOREACH(sink, core->sinks, idx) {
device = pa_dbusiface_device_new_sink(c, sink);
pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
}
- for (source = pa_idxset_first(core->sources, &idx); source; source = pa_idxset_next(core->sources, &idx)) {
+ PA_IDXSET_FOREACH(source, core->sources, idx) {
device = pa_dbusiface_device_new_source(c, source);
pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
}
- for (sink_input = pa_idxset_first(core->sink_inputs, &idx); sink_input; sink_input = pa_idxset_next(core->sink_inputs, &idx))
+ PA_IDXSET_FOREACH(sink_input, core->sink_inputs, idx)
pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_playback(c, sink_input));
- for (source_output = pa_idxset_first(core->source_outputs, &idx); source_output; source_output = pa_idxset_next(core->source_outputs, &idx))
+ PA_IDXSET_FOREACH(source_output, core->source_outputs, idx)
pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), pa_dbusiface_stream_new_record(c, source_output));
- for (sample = pa_idxset_first(core->scache, &idx); sample; sample = pa_idxset_next(core->scache, &idx))
+ PA_IDXSET_FOREACH(sample, core->scache, idx)
pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), pa_dbusiface_sample_new(c, sample));
- for (module = pa_idxset_first(core->modules, &idx); module; module = pa_idxset_next(core->modules, &idx))
+ PA_IDXSET_FOREACH(module, core->modules, idx)
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), pa_dbusiface_module_new(c, module));
- for (client = pa_idxset_first(core->clients, &idx); client; client = pa_idxset_next(core->clients, &idx))
+ PA_IDXSET_FOREACH(client, core->clients, idx)
pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), pa_dbusiface_client_new(c, client));
pa_dbus_protocol_add_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, &core_interface_info, c);
commit 3de210b67120debc680d74e93118a80d360fe1e1
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 19 09:13:59 2009 +0300
dbusiface-core: Assert that _add/remove_interface calls succeed.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index e0aedbe..a0694d6 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2031,7 +2031,7 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
PA_IDXSET_FOREACH(client, core->clients, idx)
pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), pa_dbusiface_client_new(c, client));
- pa_dbus_protocol_add_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, &core_interface_info, c);
+ pa_assert_se(pa_dbus_protocol_add_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, &core_interface_info, c) >= 0);
return c;
}
@@ -2087,7 +2087,7 @@ static void free_client_cb(void *p, void *userdata) {
void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_assert(c);
- pa_dbus_protocol_remove_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, core_interface_info.name);
+ pa_assert_se(pa_dbus_protocol_remove_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, core_interface_info.name) >= 0);
pa_subscription_free(c->subscription);
pa_hashmap_free(c->cards, free_card_cb, NULL);
commit b4e0d5d1e17409557d21dae9a770d1429e17cb15
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 19 09:18:50 2009 +0300
dbusiface-sample: Implement the Sample D-Bus interface.
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
index 44cfb03..4cffd59 100644
--- a/src/modules/dbus/iface-sample.c
+++ b/src/modules/dbus/iface-sample.c
@@ -24,6 +24,8 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/namereg.h>
#include <pulsecore/protocol-dbus.h>
#include "iface-sample.h"
@@ -31,19 +33,474 @@
#define OBJECT_NAME "sample"
struct pa_dbusiface_sample {
+ pa_dbusiface_core *core;
+
pa_scache_entry *sample;
char *path;
+ pa_proplist *proplist;
+
+ pa_dbus_protocol *dbus_protocol;
+ pa_subscription *subscription;
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_default_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_duration(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_bytes(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_play(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_play_to_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_remove(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_SAMPLE_FORMAT,
+ PROPERTY_HANDLER_SAMPLE_RATE,
+ PROPERTY_HANDLER_CHANNELS,
+ PROPERTY_HANDLER_DEFAULT_VOLUME,
+ PROPERTY_HANDLER_DURATION,
+ PROPERTY_HANDLER_BYTES,
+ PROPERTY_HANDLER_PROPERTY_LIST,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_FORMAT] = { .property_name = "SampleFormat", .type = "u", .get_cb = handle_get_sample_format, .set_cb = NULL },
+ [PROPERTY_HANDLER_SAMPLE_RATE] = { .property_name = "SampleRate", .type = "u", .get_cb = handle_get_sample_rate, .set_cb = NULL },
+ [PROPERTY_HANDLER_CHANNELS] = { .property_name = "Channels", .type = "au", .get_cb = handle_get_channels, .set_cb = NULL },
+ [PROPERTY_HANDLER_DEFAULT_VOLUME] = { .property_name = "DefaultVolume", .type = "au", .get_cb = handle_get_default_volume, .set_cb = NULL },
+ [PROPERTY_HANDLER_DURATION] = { .property_name = "Duration", .type = "t", .get_cb = handle_get_duration, .set_cb = NULL },
+ [PROPERTY_HANDLER_BYTES] = { .property_name = "Bytes", .type = "u", .get_cb = handle_get_bytes, .set_cb = NULL },
+ [PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
+};
+
+enum method_handler_index {
+ METHOD_HANDLER_PLAY,
+ METHOD_HANDLER_PLAY_TO_SINK,
+ METHOD_HANDLER_REMOVE,
+ METHOD_HANDLER_MAX
+};
+
+static pa_dbus_arg_info play_args[] = { { "volume", "u", "in" }, { "property_list", "a{say}", "in" } };
+static pa_dbus_arg_info play_to_sink_args[] = { { "sink", "o", "in" },
+ { "volume", "u", "in" },
+ { "property_list", "a{say}", "in" } };
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_PLAY] = {
+ .method_name = "Play",
+ .arguments = play_args,
+ .n_arguments = sizeof(play_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_play },
+ [METHOD_HANDLER_PLAY_TO_SINK] = {
+ .method_name = "PlayToSink",
+ .arguments = play_to_sink_args,
+ .n_arguments = sizeof(play_to_sink_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_play_to_sink },
+ [METHOD_HANDLER_REMOVE] = {
+ .method_name = "Remove",
+ .arguments = NULL,
+ .n_arguments = 0,
+ .receive_cb = handle_remove }
+};
+
+enum signal_index {
+ SIGNAL_PROPERTY_LIST_UPDATED,
+ SIGNAL_MAX
+};
+
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }
};
+static pa_dbus_interface_info sample_interface_info = {
+ .name = PA_DBUSIFACE_SAMPLE_INTERFACE,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint32_t idx = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ idx = s->sample->index;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &s->sample->name);
+}
+
+static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint32_t sample_format = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!s->sample->memchunk.memblock) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sample %s isn't loaded into memory yet, so its sample format is unknown.", s->sample->name);
+ return;
+ }
+
+ sample_format = s->sample->sample_spec.format;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sample_format);
+}
+
+static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint32_t sample_rate = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!s->sample->memchunk.memblock) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sample %s isn't loaded into memory yet, so its sample rate is unknown.", s->sample->name);
+ return;
+ }
+
+ sample_rate = s->sample->sample_spec.rate;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &sample_rate);
+}
+
+static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint32_t channels[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!s->sample->memchunk.memblock) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sample %s isn't loaded into memory yet, so its channel map is unknown.", s->sample->name);
+ return;
+ }
+
+ for (i = 0; i < s->sample->channel_map.channels; ++i)
+ channels[i] = s->sample->channel_map.map[i];
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, channels, s->sample->channel_map.channels);
+}
+
+static void handle_get_default_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint32_t default_volume[PA_CHANNELS_MAX];
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!s->sample->volume_is_set) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sample %s doesn't have default volume stored.", s->sample->name);
+ return;
+ }
+
+ for (i = 0; i < s->sample->volume.channels; ++i)
+ default_volume[i] = s->sample->volume.values[i];
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, default_volume, s->sample->volume.channels);
+}
+
+static void handle_get_duration(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint64_t duration = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!s->sample->memchunk.memblock) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sample %s isn't loaded into memory yet, so its duration is unknown.", s->sample->name);
+ return;
+ }
+
+ duration = pa_bytes_to_usec(s->sample->memchunk.length, &s->sample->sample_spec);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT64, &duration);
+}
+
+static void handle_get_bytes(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ dbus_uint32_t bytes = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!s->sample->memchunk.memblock) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Sample %s isn't loaded into memory yet, so its size is unknown.", s->sample->name);
+ return;
+ }
+
+ bytes = s->sample->memchunk.length;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &bytes);
+}
+
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ pa_dbus_send_proplist_variant_reply(conn, msg, s->proplist);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ dbus_uint32_t idx = 0;
+ dbus_uint32_t sample_format = 0;
+ dbus_uint32_t sample_rate = 0;
+ dbus_uint32_t channels[PA_CHANNELS_MAX];
+ dbus_uint32_t default_volume[PA_CHANNELS_MAX];
+ dbus_uint64_t duration = 0;
+ dbus_uint32_t bytes = 0;
+ unsigned i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ idx = s->sample->index;
+ if (s->sample->memchunk.memblock) {
+ sample_format = s->sample->sample_spec.format;
+ sample_rate = s->sample->sample_spec.rate;
+ for (i = 0; i < s->sample->channel_map.channels; ++i)
+ channels[i] = s->sample->channel_map.map[i];
+ duration = pa_bytes_to_usec(s->sample->memchunk.length, &s->sample->sample_spec);
+ bytes = s->sample->memchunk.length;
+ }
+ if (s->sample->volume_is_set) {
+ for (i = 0; i < s->sample->volume.channels; ++i)
+ default_volume[i] = s->sample->volume.values[i];
+ }
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &s->sample->name);
+
+ if (s->sample->memchunk.memblock) {
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_FORMAT].property_name, DBUS_TYPE_UINT32, &sample_format);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLE_RATE].property_name, DBUS_TYPE_UINT32, &sample_rate);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CHANNELS].property_name, DBUS_TYPE_UINT32, channels, s->sample->channel_map.channels);
+ }
+
+ if (s->sample->volume_is_set)
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DEFAULT_VOLUME].property_name, DBUS_TYPE_UINT32, default_volume, s->sample->volume.channels);
+
+ if (s->sample->memchunk.memblock) {
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_DURATION].property_name, DBUS_TYPE_UINT64, &duration);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_BYTES].property_name, DBUS_TYPE_UINT32, &bytes);
+ }
+
+ pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, s->proplist);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+static void handle_play(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ DBusMessageIter msg_iter;
+ dbus_uint32_t volume = 0;
+ pa_proplist *property_list = NULL;
+ pa_sink *sink = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!dbus_message_iter_init(msg, &msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &volume) < 0)
+ return;
+
+ if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
+ return;
+
+ if (volume > PA_VOLUME_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume.");
+ goto finish;
+ }
+
+ if (!(sink = pa_namereg_get_default_sink(s->sample->core))) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
+ "Can't play sample %s, because there are no sinks available.", s->sample->name);
+ goto finish;
+ }
+
+ if (pa_scache_play_item(s->sample->core, s->sample->name, sink, volume, property_list, NULL) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Playing sample %s failed.", s->sample->name);
+ goto finish;
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+finish:
+ if (property_list)
+ pa_proplist_free(property_list);
+}
+
+static void handle_play_to_sink(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ DBusMessageIter msg_iter;
+ const char *sink_path = NULL;
+ dbus_uint32_t volume = 0;
+ pa_proplist *property_list = NULL;
+ pa_sink *sink = NULL;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (!dbus_message_iter_init(msg, &msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_OBJECT_PATH, &sink_path) < 0)
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &volume) < 0)
+ return;
+
+ if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
+ return;
+
+ if (!(sink = pa_dbusiface_core_get_sink(s->core, sink_path))) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such sink.", sink_path);
+ goto finish;
+ }
+
+ if (volume > PA_VOLUME_MAX) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume.");
+ goto finish;
+ }
+
+ if (pa_scache_play_item(s->sample->core, s->sample->name, sink, volume, property_list, NULL) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Playing sample %s failed.", s->sample->name);
+ goto finish;
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+finish:
+ if (property_list)
+ pa_proplist_free(property_list);
+}
+
+static void handle_remove(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(s);
+
+ if (pa_scache_remove_item(s->sample->core, s->sample->name) < 0) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Removing sample %s failed.", s->sample->name);
+ return;
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_sample *s = userdata;
+ DBusMessage *signal = NULL;
+
+ pa_assert(c);
+ pa_assert(s);
+
+ if (idx != s->sample->index)
+ return;
+
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
+ return;
+
+ if (!pa_proplist_equal(s->proplist, s->sample->proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(s->proplist, PA_UPDATE_SET, s->sample->proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_SAMPLE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, s->proplist);
+
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+}
+
pa_dbusiface_sample *pa_dbusiface_sample_new(pa_dbusiface_core *core, pa_scache_entry *sample) {
- pa_dbusiface_sample *s;
+ pa_dbusiface_sample *s = NULL;
pa_assert(core);
pa_assert(sample);
- s = pa_xnew(pa_dbusiface_sample, 1);
+ s = pa_xnew0(pa_dbusiface_sample, 1);
+ s->core = core;
s->sample = sample;
s->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, sample->index);
+ s->proplist = pa_proplist_copy(sample->proplist);
+ s->dbus_protocol = pa_dbus_protocol_get(sample->core);
+ s->subscription = pa_subscription_new(sample->core, PA_SUBSCRIPTION_MASK_SAMPLE_CACHE, subscription_cb, s);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(s->dbus_protocol, s->path, &sample_interface_info, s) >= 0);
return s;
}
@@ -51,6 +508,12 @@ pa_dbusiface_sample *pa_dbusiface_sample_new(pa_dbusiface_core *core, pa_scache_
void pa_dbusiface_sample_free(pa_dbusiface_sample *s) {
pa_assert(s);
+ pa_assert_se(pa_dbus_protocol_remove_interface(s->dbus_protocol, s->path, sample_interface_info.name) >= 0);
+
+ pa_proplist_free(s->proplist);
+ pa_dbus_protocol_unref(s->dbus_protocol);
+ pa_subscription_free(s->subscription);
+
pa_xfree(s->path);
pa_xfree(s);
}
diff --git a/src/modules/dbus/iface-sample.h b/src/modules/dbus/iface-sample.h
index 1b82648..f1947ce 100644
--- a/src/modules/dbus/iface-sample.h
+++ b/src/modules/dbus/iface-sample.h
@@ -29,9 +29,12 @@
*/
#include <pulsecore/core-scache.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-core.h"
+#define PA_DBUSIFACE_SAMPLE_INTERFACE PA_DBUS_CORE_INTERFACE ".Sample"
+
typedef struct pa_dbusiface_sample pa_dbusiface_sample;
pa_dbusiface_sample *pa_dbusiface_sample_new(pa_dbusiface_core *core, pa_scache_entry *sample);
commit 292d6dcb5f1568fdc66a813cc464c66571092991
Merge: b4e0d5d f4f16ab
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 19 09:20:02 2009 +0300
Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
commit 179f849c0869982c6fc97d6bbf9083203c586b17
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 19 09:54:09 2009 +0300
dbusifaca-device: Adapt to the changed pa_sink_get/set_volume() interface.
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 8dc0b2c..8f719bc 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -444,7 +444,7 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *user
}
if (d->type == DEVICE_TYPE_SINK)
- pa_sink_set_volume(d->sink, &new_vol, TRUE, TRUE, TRUE, TRUE);
+ pa_sink_set_volume(d->sink, &new_vol, TRUE, TRUE);
else
pa_source_set_volume(d->source, &new_vol, TRUE);
@@ -1099,7 +1099,7 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
&& ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE)));
new_volume = (d->type == DEVICE_TYPE_SINK)
- ? pa_sink_get_volume(d->sink, FALSE, FALSE)
+ ? pa_sink_get_volume(d->sink, FALSE)
: pa_source_get_volume(d->source, FALSE);
if (!pa_cvolume_equal(&d->volume, new_volume)) {
@@ -1212,7 +1212,7 @@ pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_si
d->sink = pa_sink_ref(sink);
d->type = DEVICE_TYPE_SINK;
d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SINK_OBJECT_NAME, sink->index);
- d->volume = *pa_sink_get_volume(sink, FALSE, FALSE);
+ d->volume = *pa_sink_get_volume(sink, FALSE);
d->is_muted = pa_sink_get_mute(sink, FALSE);
d->sink_state = pa_sink_get_state(sink);
d->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
commit 1e4e26c87fc4f74c9805cc084c88783558acb418
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 24 14:22:32 2009 +0300
proplist: Return early from pa_proplist_equal() if the pointers are equal.
diff --git a/src/pulse/proplist.c b/src/pulse/proplist.c
index 4f0d6a6..8b5b653 100644
--- a/src/pulse/proplist.c
+++ b/src/pulse/proplist.c
@@ -690,6 +690,9 @@ int pa_proplist_equal(pa_proplist *a, pa_proplist *b) {
pa_assert(a);
pa_assert(b);
+ if (a == b)
+ return 1;
+
if (pa_proplist_size(a) != pa_proplist_size(b))
return 0;
commit 187c4f32cffb75787213e8692b27d0a3c736b95e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 24 14:23:49 2009 +0300
proplist: A couple of documentation fixes.
diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index a585944..9effc86 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -337,7 +337,7 @@ char *pa_proplist_to_string_sep(pa_proplist *p, const char *sep);
* readable string. \since 0.9.15 */
pa_proplist *pa_proplist_from_string(const char *str);
- /** Returns 1 if an entry for the specified key is existant in the
+/** Returns 1 if an entry for the specified key is existant in the
* property list. \since 0.9.11 */
int pa_proplist_contains(pa_proplist *p, const char *key);
@@ -354,7 +354,8 @@ unsigned pa_proplist_size(pa_proplist *t);
/** Returns 0 when the proplist is empty, positive otherwise \since 0.9.15 */
int pa_proplist_isempty(pa_proplist *t);
-/** Return non-zero when a and b have the same keys and values. */
+/** Return non-zero when a and b have the same keys and values.
+ * \since 0.9.16 */
int pa_proplist_equal(pa_proplist *a, pa_proplist *b);
PA_C_DECL_END
commit 7049b3c5bc351b9ea7ed932baa5bf7ccc1b67347
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 24 14:24:59 2009 +0300
modargs: New function: pa_modargs_iterate().
diff --git a/src/pulsecore/modargs.c b/src/pulsecore/modargs.c
index c7d734d..e78cdb9 100644
--- a/src/pulsecore/modargs.c
+++ b/src/pulsecore/modargs.c
@@ -415,3 +415,13 @@ int pa_modargs_get_proplist(pa_modargs *ma, const char *name, pa_proplist *p, pa
return 0;
}
+
+const char *pa_modargs_iterate(pa_modargs *ma, void **state) {
+ pa_hashmap *map = (pa_hashmap*) ma;
+ struct entry *e;
+
+ if (!(e = pa_hashmap_iterate(map, state, NULL)))
+ return NULL;
+
+ return e->key;
+}
diff --git a/src/pulsecore/modargs.h b/src/pulsecore/modargs.h
index b3125b1..1ed66e9 100644
--- a/src/pulsecore/modargs.h
+++ b/src/pulsecore/modargs.h
@@ -60,4 +60,13 @@ int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *s
int pa_modargs_get_proplist(pa_modargs *ma, const char *name, pa_proplist *p, pa_update_mode_t m);
+/* Iterate through the module argument list. The user should allocate a
+ * state variable of type void* and initialize it with NULL. A pointer
+ * to this variable should then be passed to pa_modargs_iterate()
+ * which should be called in a loop until it returns NULL which
+ * signifies EOL. On each invication this function will return the
+ * key string for the next entry. The keys in the argument list do not
+ * have any particular order. */
+const char *pa_modargs_iterate(pa_modargs *ma, void **state);
+
#endif
commit 57886ff34ac39dae709cb50cbc7fbbf817df534b
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 24 14:26:13 2009 +0300
dbus-protocol: Print a debug line whenever interfaces are unregistered.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index cf561c8..d1e19ff 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -694,6 +694,8 @@ int pa_dbus_protocol_remove_interface(pa_dbus_protocol *p, const char* path, con
update_introspection(obj_entry);
+ pa_log_debug("Interface %s removed from object %s", iface_entry->name, obj_entry->path);
+
pa_xfree(iface_entry->name);
pa_hashmap_free(iface_entry->method_handlers, method_handler_free_cb, NULL);
pa_hashmap_free(iface_entry->property_handlers, property_handler_free_cb, NULL);
commit 3025645b0b58f476f6404f2aed3b61a633794d10
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 24 14:27:14 2009 +0300
dbusiface-module: Implement the Module D-Bus interface.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index a0694d6..9e8f775 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -1509,7 +1509,7 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
goto finish;
}
- dbus_module = pa_dbusiface_module_new(c, module);
+ dbus_module = pa_dbusiface_module_new(module);
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(module->index), dbus_module);
object_path = pa_dbusiface_module_get_path(dbus_module);
@@ -1860,7 +1860,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_MODULE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
if (!(module = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(idx)))) {
- module = pa_dbusiface_module_new(c, pa_idxset_get_by_index(core->modules, idx));
+ module = pa_dbusiface_module_new(pa_idxset_get_by_index(core->modules, idx));
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), module);
}
@@ -2026,7 +2026,7 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), pa_dbusiface_sample_new(c, sample));
PA_IDXSET_FOREACH(module, core->modules, idx)
- pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), pa_dbusiface_module_new(c, module));
+ pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), pa_dbusiface_module_new(module));
PA_IDXSET_FOREACH(client, core->clients, idx)
pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), pa_dbusiface_client_new(c, client));
diff --git a/src/modules/dbus/iface-module.c b/src/modules/dbus/iface-module.c
index 788d104..63786da 100644
--- a/src/modules/dbus/iface-module.c
+++ b/src/modules/dbus/iface-module.c
@@ -24,6 +24,8 @@
#endif
#include <pulsecore/core-util.h>
+#include <pulsecore/dbus-util.h>
+#include <pulsecore/modargs.h>
#include <pulsecore/protocol-dbus.h>
#include "iface-module.h"
@@ -33,17 +35,278 @@
struct pa_dbusiface_module {
pa_module *module;
char *path;
+ pa_proplist *proplist;
+
+ pa_dbus_protocol *dbus_protocol;
+ pa_subscription *subscription;
};
-pa_dbusiface_module *pa_dbusiface_module_new(pa_dbusiface_core *core, pa_module *module) {
- pa_dbusiface_module *m;
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_arguments(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_usage_counter(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+static void handle_unload(DBusConnection *conn, DBusMessage *msg, void *userdata);
+
+enum property_handler_index {
+ PROPERTY_HANDLER_INDEX,
+ PROPERTY_HANDLER_NAME,
+ PROPERTY_HANDLER_ARGUMENTS,
+ PROPERTY_HANDLER_USAGE_COUNTER,
+ PROPERTY_HANDLER_PROPERTY_LIST,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
+ [PROPERTY_HANDLER_INDEX] = { .property_name = "Index", .type = "u", .get_cb = handle_get_index, .set_cb = NULL },
+ [PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_get_name, .set_cb = NULL },
+ [PROPERTY_HANDLER_ARGUMENTS] = { .property_name = "Arguments", .type = "a{ss}", .get_cb = handle_get_arguments, .set_cb = NULL },
+ [PROPERTY_HANDLER_USAGE_COUNTER] = { .property_name = "UsageCounter", .type = "u", .get_cb = handle_get_usage_counter, .set_cb = NULL },
+ [PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
+};
+
+enum method_handler_index {
+ METHOD_HANDLER_UNLOAD,
+ METHOD_HANDLER_MAX
+};
+
+static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
+ [METHOD_HANDLER_UNLOAD] = {
+ .method_name = "Unload",
+ .arguments = NULL,
+ .n_arguments = 0,
+ .receive_cb = handle_unload }
+};
+
+enum signal_index {
+ SIGNAL_PROPERTY_LIST_UPDATED,
+ SIGNAL_MAX
+};
+
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+
+static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }
+};
+
+static pa_dbus_interface_info module_interface_info = {
+ .name = PA_DBUSIFACE_MODULE_INTERFACE,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
+ .property_handlers = property_handlers,
+ .n_property_handlers = PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb = handle_get_all,
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
+};
+
+static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+ dbus_uint32_t idx = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ idx = m->module->index;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &idx);
+}
+
+static void handle_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_STRING, &m->module->name);
+}
+
+static void append_modargs_variant(DBusMessageIter *iter, pa_dbusiface_module *m) {
+ pa_modargs *ma = NULL;
+ DBusMessageIter variant_iter;
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ void *state = NULL;
+ const char *key = NULL;
+ const char *value = NULL;
+
+ pa_assert(iter);
+ pa_assert(m);
+
+ pa_assert_se(ma = pa_modargs_new(m->module->argument, NULL));
+
+ pa_assert_se(dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, "a{ss}", &variant_iter));
+ pa_assert_se(dbus_message_iter_open_container(&variant_iter, DBUS_TYPE_ARRAY, "{ss}", &dict_iter));
+
+ for (state = NULL, key = pa_modargs_iterate(ma, &state); key; key = pa_modargs_iterate(ma, &state)) {
+ pa_assert_se(value = pa_modargs_get_value(ma, key, NULL));
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &key));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &value));
+
+ pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
+ }
+
+ pa_assert_se(dbus_message_iter_close_container(&variant_iter, &dict_iter));
+ pa_assert_se(dbus_message_iter_close_container(iter, &variant_iter));
+
+ pa_modargs_free(ma);
+}
+
+static void handle_get_arguments(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ pa_assert_se(reply = dbus_message_new_method_return(msg));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ append_modargs_variant(&msg_iter, m);
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+static void handle_get_usage_counter(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+ int real_counter_value = -1;
+ dbus_uint32_t usage_counter = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ if (!m->module->get_n_used || (real_counter_value = m->module->get_n_used(m->module)) < 0) {
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY,
+ "Module %u (%s) doesn't have a usage counter.", m->module->index, m->module->name);
+ return;
+ }
+
+ usage_counter = real_counter_value;
+
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &usage_counter);
+}
+
+static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ pa_dbus_send_proplist_variant_reply(conn, msg, m->proplist);
+}
+
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+ DBusMessageIter dict_entry_iter;
+ dbus_uint32_t idx = 0;
+ int real_counter_value = -1;
+ dbus_uint32_t usage_counter = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ idx = m->module->index;
+ if (m->module->get_n_used && (real_counter_value = m->module->get_n_used(m->module)) >= 0)
+ usage_counter = real_counter_value;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_INDEX].property_name, DBUS_TYPE_UINT32, &idx);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_NAME].property_name, DBUS_TYPE_STRING, &m->module->name);
+
+ pa_assert_se(dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &dict_entry_iter));
+ pa_assert_se(dbus_message_iter_append_basic(&dict_entry_iter, DBUS_TYPE_STRING, &property_handlers[PROPERTY_HANDLER_ARGUMENTS].property_name));
+ append_modargs_variant(&dict_entry_iter, m);
+ pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
+
+ if (real_counter_value >= 0)
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_ARGUMENTS].property_name, DBUS_TYPE_UINT32, &usage_counter);
+
+ pa_dbus_append_proplist_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_PROPERTY_LIST].property_name, m->proplist);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+
+ dbus_message_unref(reply);
+}
+
+static void handle_unload(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_module *m = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ if (m->module->core->disallow_module_loading) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_ACCESS_DENIED, "The server is configured to disallow module unloading.");
+ return;
+ }
+
+ pa_module_unload_request(m->module, FALSE);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_module *m = userdata;
pa_assert(core);
+ pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_MODULE);
+ pa_assert(m);
+
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
+ DBusMessage *signal = NULL;
+
+ if (!pa_proplist_equal(m->proplist, m->module->proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(m->proplist, PA_UPDATE_SET, m->module->proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(m->path,
+ PA_DBUSIFACE_MODULE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, m->proplist);
+
+ pa_dbus_protocol_send_signal(m->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+ }
+}
+
+pa_dbusiface_module *pa_dbusiface_module_new(pa_module *module) {
+ pa_dbusiface_module *m;
+
pa_assert(module);
- m = pa_xnew(pa_dbusiface_module, 1);
+ m = pa_xnew0(pa_dbusiface_module, 1);
m->module = module;
m->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, module->index);
+ m->proplist = pa_proplist_copy(module->proplist);
+ m->dbus_protocol = pa_dbus_protocol_get(module->core);
+ m->subscription = pa_subscription_new(module->core, PA_SUBSCRIPTION_MASK_MODULE, subscription_cb, m);
+
+ pa_assert_se(pa_dbus_protocol_add_interface(m->dbus_protocol, m->path, &module_interface_info, m) >= 0);
return m;
}
@@ -51,6 +314,12 @@ pa_dbusiface_module *pa_dbusiface_module_new(pa_dbusiface_core *core, pa_module
void pa_dbusiface_module_free(pa_dbusiface_module *m) {
pa_assert(m);
+ pa_assert_se(pa_dbus_protocol_remove_interface(m->dbus_protocol, m->path, module_interface_info.name) >= 0);
+
+ pa_proplist_free(m->proplist);
+ pa_dbus_protocol_unref(m->dbus_protocol);
+ pa_subscription_free(m->subscription);
+
pa_xfree(m->path);
pa_xfree(m);
}
diff --git a/src/modules/dbus/iface-module.h b/src/modules/dbus/iface-module.h
index c4f2921..68ca1de 100644
--- a/src/modules/dbus/iface-module.h
+++ b/src/modules/dbus/iface-module.h
@@ -29,12 +29,15 @@
*/
#include <pulsecore/module.h>
+#include <pulsecore/protocol-dbus.h>
#include "iface-core.h"
+#define PA_DBUSIFACE_MODULE_INTERFACE PA_DBUS_CORE_INTERFACE ".Module"
+
typedef struct pa_dbusiface_module pa_dbusiface_module;
-pa_dbusiface_module *pa_dbusiface_module_new(pa_dbusiface_core *core, pa_module *module);
+pa_dbusiface_module *pa_dbusiface_module_new(pa_module *module);
void pa_dbusiface_module_free(pa_dbusiface_module *m);
const char *pa_dbusiface_module_get_path(pa_dbusiface_module *m);
commit 2f3fc2f1d6ba418303a4bab6f8fd3caed7d291b4
Merge: 3025645 be46eaa
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 24 14:43:11 2009 +0300
Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
Conflicts:
src/Makefile.am
diff --cc src/pulsecore/cpu-arm.h
index b00a16a,3ccd070..a87cb63
--- a/src/pulsecore/cpu-arm.h
+++ b/src/pulsecore/cpu-arm.h
@@@ -5,7 -5,7 +5,7 @@@
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
- Copyright 2006 Pierre Ossman <ossman at cendio.se> for Cendio AB
- Copyright 2009 Wim Taymans <wim.taymans at collabora.co.uk>
++ Copyright 2009 Wim Taymans <wim.taymans at collabora.co.uk>
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
diff --cc src/pulsecore/cpu-x86.h
index 0000000,b11ef6e..f3f9e56
mode 000000,100644..100644
--- a/src/pulsecore/cpu-x86.h
+++ b/src/pulsecore/cpu-x86.h
@@@ -1,0 -1,68 +1,68 @@@
+ #ifndef foocpux86hfoo
+ #define foocpux86hfoo
+
+ /***
+ This file is part of PulseAudio.
+
+ Copyright 2004-2006 Lennart Poettering
- Copyright 2009 Wim Taymans <wim.taymans at collabora.co.uk>
++ Copyright 2009 Wim Taymans <wim.taymans at collabora.co.uk>
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+ ***/
+
+ #include <stdint.h>
+
+ typedef enum pa_cpu_x86_flag {
+ PA_CPU_X86_MMX = (1 << 0),
+ PA_CPU_X86_MMXEXT = (1 << 1),
+ PA_CPU_X86_SSE = (1 << 2),
+ PA_CPU_X86_SSE2 = (1 << 3),
+ PA_CPU_X86_SSE3 = (1 << 4),
+ PA_CPU_X86_SSSE3 = (1 << 5),
+ PA_CPU_X86_SSE4_1 = (1 << 6),
+ PA_CPU_X86_SSE4_2 = (1 << 7),
+ PA_CPU_X86_3DNOW = (1 << 8),
+ PA_CPU_X86_3DNOWEXT = (1 << 9)
+ } pa_cpu_x86_flag_t;
+
+ void pa_cpu_init_x86 (void);
+
+
+ #if defined (__i386__)
+ typedef int32_t pa_reg_x86;
+ #define PA_REG_a "eax"
+ #define PA_REG_b "ebx"
+ #define PA_REG_c "ecx"
+ #define PA_REG_d "edx"
+ #define PA_REG_D "edi"
+ #define PA_REG_S "esi"
+ #elif defined (__amd64__)
+ typedef int64_t pa_reg_x86;
+ #define PA_REG_a "rax"
+ #define PA_REG_b "rbx"
+ #define PA_REG_c "rcx"
+ #define PA_REG_d "rdx"
+ #define PA_REG_D "rdi"
+ #define PA_REG_S "rsi"
+ #endif
+
+ /* some optimized functions */
+ void pa_volume_func_init_mmx(pa_cpu_x86_flag_t flags);
+ void pa_volume_func_init_sse(pa_cpu_x86_flag_t flags);
+
+ void pa_remap_func_init_mmx(pa_cpu_x86_flag_t flags);
+
+ #endif /* foocpux86hfoo */
commit 3e0e685a8c6372fb67efad5ffa54583dc757203e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 26 14:12:42 2009 +0300
dbus: Save one level of identation by returning early.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 5a79794..fce44ff 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -459,45 +459,46 @@ static void handle_get_profile_by_name(DBusConnection *conn, DBusMessage *msg, v
static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_card *c = userdata;
+ DBusMessage *signal = NULL;
pa_assert(core);
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CARD);
pa_assert(c);
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
- DBusMessage *signal = NULL;
- if (c->active_profile != c->card->active_profile) {
- const char *object_path;
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
+ return;
- c->active_profile = c->card->active_profile;
- object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
+ if (c->active_profile != c->card->active_profile) {
+ const char *object_path;
- pa_assert_se(signal = dbus_message_new_signal(c->path,
- PA_DBUSIFACE_CARD_INTERFACE,
- signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ c->active_profile = c->card->active_profile;
+ object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ pa_assert_se(signal = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CARD_INTERFACE,
+ signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- if (!pa_proplist_equal(c->proplist, c->card->proplist)) {
- DBusMessageIter msg_iter;
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
- pa_proplist_update(c->proplist, PA_UPDATE_SET, c->card->proplist);
+ if (!pa_proplist_equal(c->proplist, c->card->proplist)) {
+ DBusMessageIter msg_iter;
- pa_assert_se(signal = dbus_message_new_signal(c->path,
- PA_DBUSIFACE_CARD_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
- pa_dbus_append_proplist(&msg_iter, c->proplist);
+ pa_proplist_update(c->proplist, PA_UPDATE_SET, c->card->proplist);
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ pa_assert_se(signal = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CARD_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, c->proplist);
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
}
}
diff --git a/src/modules/dbus/iface-module.c b/src/modules/dbus/iface-module.c
index 63786da..e3882fc 100644
--- a/src/modules/dbus/iface-module.c
+++ b/src/modules/dbus/iface-module.c
@@ -268,29 +268,29 @@ static void handle_unload(DBusConnection *conn, DBusMessage *msg, void *userdata
static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_module *m = userdata;
+ DBusMessage *signal = NULL;
pa_assert(core);
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_MODULE);
pa_assert(m);
- if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) {
- DBusMessage *signal = NULL;
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
+ return;
- if (!pa_proplist_equal(m->proplist, m->module->proplist)) {
- DBusMessageIter msg_iter;
+ if (!pa_proplist_equal(m->proplist, m->module->proplist)) {
+ DBusMessageIter msg_iter;
- pa_proplist_update(m->proplist, PA_UPDATE_SET, m->module->proplist);
+ pa_proplist_update(m->proplist, PA_UPDATE_SET, m->module->proplist);
- pa_assert_se(signal = dbus_message_new_signal(m->path,
- PA_DBUSIFACE_MODULE_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
- pa_dbus_append_proplist(&msg_iter, m->proplist);
+ pa_assert_se(signal = dbus_message_new_signal(m->path,
+ PA_DBUSIFACE_MODULE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, m->proplist);
- pa_dbus_protocol_send_signal(m->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
- }
+ pa_dbus_protocol_send_signal(m->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
}
}
commit edf80104e32830a3d4ec58f88f9a092c32203d8a
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 26 14:17:35 2009 +0300
dbus: Make sure that subscription callbacks don't try to access removed objects.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index fce44ff..7e37f8b 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -465,6 +465,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CARD);
pa_assert(c);
+ /* We can't use idx != c->card->index, because the c->card pointer may
+ * be stale at this point. */
+ if (pa_idxset_get_by_index(core->cards, idx) != c->card)
+ return;
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
return;
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 9e8f775..c54a3b7 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -1592,12 +1592,12 @@ static void handle_stop_listening_for_signal(DBusConnection *conn, DBusMessage *
static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_core *c = userdata;
- pa_dbusiface_card *card = NULL;
- pa_dbusiface_device *device = NULL;
- pa_dbusiface_stream *stream = NULL;
- pa_dbusiface_sample *sample = NULL;
- pa_dbusiface_module *module = NULL;
- pa_dbusiface_client *client = NULL;
+ pa_dbusiface_card *card_iface = NULL;
+ pa_dbusiface_device *device_iface = NULL;
+ pa_dbusiface_stream *stream_iface = NULL;
+ pa_dbusiface_sample *sample_iface = NULL;
+ pa_dbusiface_module *module_iface = NULL;
+ pa_dbusiface_client *client_iface = NULL;
DBusMessage *signal = NULL;
const char *object_path = NULL;
pa_sink *new_fallback_sink = NULL;
@@ -1611,11 +1611,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
new_fallback_source = pa_namereg_get_default_source(core);
if (c->fallback_sink != new_fallback_sink) {
- c->fallback_sink = new_fallback_sink;
+ if (c->fallback_sink)
+ pa_sink_unref(c->fallback_sink);
+ c->fallback_sink = new_fallback_sink ? pa_sink_ref(new_fallback_sink) : NULL;
if (new_fallback_sink
- && (device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
- object_path = pa_dbusiface_device_get_path(device);
+ && (device_iface = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
+ object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1628,11 +1630,13 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
}
if (c->fallback_source != new_fallback_source) {
- c->fallback_source = new_fallback_source;
+ if (c->fallback_source)
+ pa_source_unref(c->fallback_source);
+ c->fallback_source = new_fallback_source ? pa_source_ref(new_fallback_source) : NULL;
if (new_fallback_source
- && (device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
- object_path = pa_dbusiface_device_get_path(device);
+ && (device_iface = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
+ object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1647,12 +1651,17 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
case PA_SUBSCRIPTION_EVENT_CARD:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- if (!(card = pa_hashmap_get(c->cards, PA_UINT32_TO_PTR(idx)))) {
- card = pa_dbusiface_card_new(c, pa_idxset_get_by_index(core->cards, idx));
- pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), card);
+ if (!(card_iface = pa_hashmap_get(c->cards, PA_UINT32_TO_PTR(idx)))) {
+ pa_card *card = NULL;
+
+ if (!(card = pa_idxset_get_by_index(core->cards, idx)))
+ return; /* The card was removed immediately after creation. */
+
+ card_iface = pa_dbusiface_card_new(c, card);
+ pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), card_iface);
}
- object_path = pa_dbusiface_card_get_path(card);
+ object_path = pa_dbusiface_card_get_path(card_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1660,30 +1669,34 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((card = pa_hashmap_remove(c->cards, PA_UINT32_TO_PTR(idx))));
+ if (!(card_iface = pa_hashmap_remove(c->cards, PA_UINT32_TO_PTR(idx))))
+ return;
- object_path = pa_dbusiface_card_get_path(card);
+ object_path = pa_dbusiface_card_get_path(card_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
signals[SIGNAL_CARD_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_card_free(card);
+ pa_dbusiface_card_free(card_iface);
}
break;
case PA_SUBSCRIPTION_EVENT_SINK:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- pa_sink *sink = pa_idxset_get_by_index(core->sinks, idx);
+ pa_sink *sink = NULL;
- if (!(device = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(idx)))) {
- device = pa_dbusiface_device_new_sink(c, sink);
- pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device);
- pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device), device);
+ if (!(sink = pa_idxset_get_by_index(core->sinks, idx)))
+ return; /* The sink was removed immediately after creation. */
+
+ if (!(device_iface = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(idx)))) {
+ device_iface = pa_dbusiface_device_new_sink(c, sink);
+ pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(idx), device_iface);
+ pa_hashmap_put(c->sinks_by_path, pa_dbusiface_device_get_path(device_iface), device_iface);
}
- object_path = pa_dbusiface_device_get_path(device);
+ object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1710,8 +1723,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
}
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((device = pa_hashmap_remove(c->sinks_by_index, PA_UINT32_TO_PTR(idx))));
- object_path = pa_dbusiface_device_get_path(device);
+ if (!(device_iface = pa_hashmap_remove(c->sinks_by_index, PA_UINT32_TO_PTR(idx))))
+ return;
+
+ object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se(pa_hashmap_remove(c->sinks_by_path, object_path));
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
@@ -1719,7 +1734,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
signals[SIGNAL_SINK_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_device_free(device);
+ pa_dbusiface_device_free(device_iface);
}
break;
@@ -1727,13 +1742,16 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
pa_source *source = pa_idxset_get_by_index(core->sources, idx);
- if (!(device = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(idx)))) {
- device = pa_dbusiface_device_new_source(c, source);
- pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device);
- pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device), device);
+ if (!(source = pa_idxset_get_by_index(core->sources, idx)))
+ return; /* The source was removed immediately after creation. */
+
+ if (!(device_iface = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(idx)))) {
+ device_iface = pa_dbusiface_device_new_source(c, source);
+ pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(idx), device_iface);
+ pa_hashmap_put(c->sources_by_path, pa_dbusiface_device_get_path(device_iface), device_iface);
}
- object_path = pa_dbusiface_device_get_path(device);
+ object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1760,8 +1778,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
}
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((device = pa_hashmap_remove(c->sources_by_index, PA_UINT32_TO_PTR(idx))));
- object_path = pa_dbusiface_device_get_path(device);
+ if (!(device_iface = pa_hashmap_remove(c->sources_by_index, PA_UINT32_TO_PTR(idx))))
+ return;
+
+ object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se(pa_hashmap_remove(c->sources_by_path, object_path));
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
@@ -1769,18 +1789,23 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
signals[SIGNAL_SOURCE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_device_free(device);
+ pa_dbusiface_device_free(device_iface);
}
break;
case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- if (!(stream = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(idx)))) {
- stream = pa_dbusiface_stream_new_playback(c, pa_idxset_get_by_index(core->sink_inputs, idx));
- pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), stream);
+ pa_sink_input *sink_input = NULL;
+
+ if (!(sink_input = pa_idxset_get_by_index(core->sink_inputs, idx)))
+ return; /* The sink input was removed immediately after creation. */
+
+ if (!(stream_iface = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(idx)))) {
+ stream_iface = pa_dbusiface_stream_new_playback(c, sink_input);
+ pa_hashmap_put(c->playback_streams, PA_UINT32_TO_PTR(idx), stream_iface);
}
- object_path = pa_dbusiface_stream_get_path(stream);
+ object_path = pa_dbusiface_stream_get_path(stream_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1788,27 +1813,33 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((stream = pa_hashmap_remove(c->playback_streams, PA_UINT32_TO_PTR(idx))));
+ if (!(stream_iface = pa_hashmap_remove(c->playback_streams, PA_UINT32_TO_PTR(idx))))
+ return;
- object_path = pa_dbusiface_stream_get_path(stream);
+ object_path = pa_dbusiface_stream_get_path(stream_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_stream_free(stream);
+ pa_dbusiface_stream_free(stream_iface);
}
break;
case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- if (!(stream = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(idx)))) {
- stream = pa_dbusiface_stream_new_record(c, pa_idxset_get_by_index(core->source_outputs, idx));
- pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), stream);
+ pa_source_output *source_output = NULL;
+
+ if (!(source_output = pa_idxset_get_by_index(core->source_outputs, idx)))
+ return; /* The source output was removed immediately after creation. */
+
+ if (!(stream_iface = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(idx)))) {
+ stream_iface = pa_dbusiface_stream_new_record(c, source_output);
+ pa_hashmap_put(c->record_streams, PA_UINT32_TO_PTR(idx), stream_iface);
}
- object_path = pa_dbusiface_stream_get_path(stream);
+ object_path = pa_dbusiface_stream_get_path(stream_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1816,27 +1847,33 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((stream = pa_hashmap_remove(c->record_streams, PA_UINT32_TO_PTR(idx))));
+ if (!(stream_iface = pa_hashmap_remove(c->record_streams, PA_UINT32_TO_PTR(idx))))
+ return;
- object_path = pa_dbusiface_stream_get_path(stream);
+ object_path = pa_dbusiface_stream_get_path(stream_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_stream_free(stream);
+ pa_dbusiface_stream_free(stream_iface);
}
break;
case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- if (!(sample = pa_hashmap_get(c->samples, PA_UINT32_TO_PTR(idx)))) {
- sample = pa_dbusiface_sample_new(c, pa_idxset_get_by_index(core->scache, idx));
- pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), sample);
+ pa_scache_entry *sample = NULL;
+
+ if (!(sample = pa_idxset_get_by_index(core->scache, idx)))
+ return; /* The sample was removed immediately after creation. */
+
+ if (!(sample_iface = pa_hashmap_get(c->samples, PA_UINT32_TO_PTR(idx)))) {
+ sample_iface = pa_dbusiface_sample_new(c, sample);
+ pa_hashmap_put(c->samples, PA_UINT32_TO_PTR(idx), sample_iface);
}
- object_path = pa_dbusiface_sample_get_path(sample);
+ object_path = pa_dbusiface_sample_get_path(sample_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1844,27 +1881,33 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((sample = pa_hashmap_remove(c->samples, PA_UINT32_TO_PTR(idx))));
+ if (!(sample_iface = pa_hashmap_remove(c->samples, PA_UINT32_TO_PTR(idx))))
+ return;
- object_path = pa_dbusiface_sample_get_path(sample);
+ object_path = pa_dbusiface_sample_get_path(sample_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
signals[SIGNAL_SAMPLE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_sample_free(sample);
+ pa_dbusiface_sample_free(sample_iface);
}
break;
case PA_SUBSCRIPTION_EVENT_MODULE:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- if (!(module = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(idx)))) {
- module = pa_dbusiface_module_new(pa_idxset_get_by_index(core->modules, idx));
- pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), module);
+ pa_module *module = NULL;
+
+ if (!(module = pa_idxset_get_by_index(core->modules, idx)))
+ return; /* The module was removed immediately after creation. */
+
+ if (!(module_iface = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(idx)))) {
+ module_iface = pa_dbusiface_module_new(module);
+ pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(idx), module_iface);
}
- object_path = pa_dbusiface_module_get_path(module);
+ object_path = pa_dbusiface_module_get_path(module_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1872,27 +1915,33 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((module = pa_hashmap_remove(c->modules, PA_UINT32_TO_PTR(idx))));
+ if (!(module_iface = pa_hashmap_remove(c->modules, PA_UINT32_TO_PTR(idx))))
+ return;
- object_path = pa_dbusiface_module_get_path(module);
+ object_path = pa_dbusiface_module_get_path(module_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
signals[SIGNAL_MODULE_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_module_free(module);
+ pa_dbusiface_module_free(module_iface);
}
break;
case PA_SUBSCRIPTION_EVENT_CLIENT:
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) {
- if (!(client = pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(idx)))) {
- client = pa_dbusiface_client_new(c, pa_idxset_get_by_index(core->clients, idx));
- pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), client);
+ pa_client *client = NULL;
+
+ if (!(client = pa_idxset_get_by_index(core->clients, idx)))
+ return; /* The client was removed immediately after creation. */
+
+ if (!(client_iface = pa_hashmap_get(c->clients, PA_UINT32_TO_PTR(idx)))) {
+ client_iface = pa_dbusiface_client_new(c, client);
+ pa_hashmap_put(c->clients, PA_UINT32_TO_PTR(idx), client_iface);
}
- object_path = pa_dbusiface_client_get_path(client);
+ object_path = pa_dbusiface_client_get_path(client_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
@@ -1900,16 +1949,17 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
- pa_assert_se((client = pa_hashmap_remove(c->clients, PA_UINT32_TO_PTR(idx))));
+ if (!(client_iface = pa_hashmap_remove(c->clients, PA_UINT32_TO_PTR(idx))))
+ return;
- object_path = pa_dbusiface_client_get_path(client);
+ object_path = pa_dbusiface_client_get_path(client_iface);
pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
PA_DBUS_CORE_INTERFACE,
signals[SIGNAL_CLIENT_REMOVED].name)));
pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbusiface_client_free(client);
+ pa_dbusiface_client_free(client_iface);
}
break;
}
@@ -2001,6 +2051,11 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
c);
c->memstats = pa_dbusiface_memstats_new(c, core);
+ if (c->fallback_sink)
+ pa_sink_ref(c->fallback_sink);
+ if (c->fallback_source)
+ pa_source_ref(c->fallback_source);
+
PA_IDXSET_FOREACH(card, core->cards, idx)
pa_hashmap_put(c->cards, PA_UINT32_TO_PTR(idx), pa_dbusiface_card_new(c, card));
@@ -2104,6 +2159,11 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_hook_slot_free(c->extension_unregistered_slot);
pa_dbusiface_memstats_free(c->memstats);
+ if (c->fallback_sink)
+ pa_sink_unref(c->fallback_sink);
+ if (c->fallback_source)
+ pa_source_unref(c->fallback_source);
+
pa_dbus_protocol_unref(c->dbus_protocol);
pa_core_unref(c->core);
diff --git a/src/modules/dbus/iface-module.c b/src/modules/dbus/iface-module.c
index e3882fc..e8aea50 100644
--- a/src/modules/dbus/iface-module.c
+++ b/src/modules/dbus/iface-module.c
@@ -274,6 +274,11 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_MODULE);
pa_assert(m);
+ /* We can't use idx != m->module->index, because the m->module pointer may
+ * be stale at this point. */
+ if (pa_idxset_get_by_index(core->modules, idx) != m->module)
+ return;
+
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
return;
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
index 4cffd59..7147be1 100644
--- a/src/modules/dbus/iface-sample.c
+++ b/src/modules/dbus/iface-sample.c
@@ -463,7 +463,9 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
pa_assert(c);
pa_assert(s);
- if (idx != s->sample->index)
+ /* We can't use idx != s->sample->index, because the s->sample pointer may
+ * be stale at this point. */
+ if (pa_idxset_get_by_index(c->scache, idx) != s->sample)
return;
if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
commit 11fcc8c85f15dba8e78dffb88b3d0d04ebc329e1
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 26 14:19:11 2009 +0300
dbusiface-stream: Only send stream event signals from the right D-Bus objects.
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index 354ca6e..183625b 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -786,11 +786,17 @@ static pa_hook_result_t send_event_cb(void *hook_data, void *call_data, void *sl
if (s->type == STREAM_TYPE_PLAYBACK) {
pa_sink_input_send_event_hook_data *data = call_data;
+ if (data->sink_input != s->sink_input)
+ return PA_HOOK_OK;
+
name = data->event;
property_list = data->data;
} else {
pa_source_output_send_event_hook_data *data = call_data;
+ if (data->source_output != s->source_output)
+ return PA_HOOK_OK;
+
name = data->event;
property_list = data->data;
}
commit 219f7508f6420f94ad8c426c6aa3dc79df246f36
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 26 14:20:26 2009 +0300
dbus: Finish the Client D-Bus interface.
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index 587d5c4..a68259a 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -39,8 +39,10 @@ struct pa_dbusiface_client {
pa_client *client;
char *path;
+ pa_proplist *proplist;
pa_dbus_protocol *dbus_protocol;
+ pa_subscription *subscription;
};
static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -52,9 +54,9 @@ static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, voi
static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
-/*static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_update_properties(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, void *userdata);*/
+static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, void *userdata);
enum property_handler_index {
PROPERTY_HANDLER_INDEX,
@@ -75,7 +77,7 @@ static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
[PROPERTY_HANDLER_PROPERTY_LIST] = { .property_name = "PropertyList", .type = "a{say}", .get_cb = handle_get_property_list, .set_cb = NULL }
};
-/*enum method_handler_index {
+enum method_handler_index {
METHOD_HANDLER_KILL,
METHOD_HANDLER_UPDATE_PROPERTIES,
METHOD_HANDLER_REMOVE_PROPERTIES,
@@ -83,7 +85,7 @@ static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
};
static pa_dbus_arg_info update_properties_args[] = { { "property_list", "a{say}", "in" }, { "update_mode", "u", "in" } };
-static pa_dbus_arg_info update_properties_args[] = { { "keys", "as", "in" } };
+static pa_dbus_arg_info remove_properties_args[] = { { "keys", "as", "in" } };
static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
[METHOD_HANDLER_KILL] = {
@@ -93,14 +95,14 @@ static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
.receive_cb = handle_kill },
[METHOD_HANDLER_UPDATE_PROPERTIES] = {
.method_name = "UpdateProperties",
- .arguments = update_propertes_args,
+ .arguments = update_properties_args,
.n_arguments = sizeof(update_properties_args) / sizeof(pa_dbus_arg_info),
.receive_cb = handle_update_properties },
[METHOD_HANDLER_REMOVE_PROPERTIES] = {
.method_name = "RemoveProperties",
- .arguments = remove_propertes_args,
+ .arguments = remove_properties_args,
.n_arguments = sizeof(update_properties_args) / sizeof(pa_dbus_arg_info),
- .receive_cb = handle_update_properties }
+ .receive_cb = handle_remove_properties }
};
enum signal_index {
@@ -109,23 +111,25 @@ enum signal_index {
SIGNAL_MAX
};
-static pa_dbus_arg_info active_profile_updated_args[] = { { "profile", "o", NULL } };
-static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+static pa_dbus_arg_info property_list_updated_args[] = { { "property_list", "a{say}", NULL } };
+static pa_dbus_arg_info client_event_args[] = { { "name", "s", NULL },
+ { "property_list", "a{say}", NULL } };
static pa_dbus_signal_info signals[SIGNAL_MAX] = {
- [SIGNAL_ACTIVE_PROFILE_UPDATED] = { .name = "ActiveProfileUpdated", .arguments = active_profile_updated_args, .n_arguments = 1 },
- [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 }
-};*/
+ [SIGNAL_PROPERTY_LIST_UPDATED] = { .name = "PropertyListUpdated", .arguments = property_list_updated_args, .n_arguments = 1 },
+ /* ClientEvent is sent from module-dbus-protocol.c. */
+ [SIGNAL_CLIENT_EVENT] = { .name = "ClientEvent", .arguments = client_event_args, .n_arguments = 1 }
+};
static pa_dbus_interface_info client_interface_info = {
.name = PA_DBUSIFACE_CLIENT_INTERFACE,
- .method_handlers = /*method_handlers*/ NULL,
- .n_method_handlers = /*METHOD_HANDLER_MAX*/ 0,
+ .method_handlers = method_handlers,
+ .n_method_handlers = METHOD_HANDLER_MAX,
.property_handlers = property_handlers,
.n_property_handlers = PROPERTY_HANDLER_MAX,
.get_all_properties_cb = handle_get_all,
- .signals = /*signals*/ NULL,
- .n_signals = /*SIGNAL_MAX*/ 0
+ .signals = signals,
+ .n_signals = SIGNAL_MAX
};
static void handle_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata) {
@@ -304,6 +308,131 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
pa_xfree(record_streams);
}
+static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_connection_ref(conn);
+
+ pa_client_kill(c->client);
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ dbus_connection_unref(conn);
+}
+
+static void handle_update_properties(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ DBusMessageIter msg_iter;
+ pa_proplist *property_list = NULL;
+ dbus_uint32_t update_mode = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ if (pa_dbus_protocol_get_client(c->dbus_protocol, conn) != c->client) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_ACCESS_DENIED, "Client tried to modify the property list of another client.");
+ return;
+ }
+
+ if (!dbus_message_iter_init(msg, &msg_iter)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
+ return;
+ }
+
+ if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
+ return;
+
+ if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &update_mode) < 0)
+ goto finish;
+
+ if (!(update_mode == PA_UPDATE_SET || update_mode == PA_UPDATE_MERGE || update_mode == PA_UPDATE_REPLACE)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid update mode: %u", update_mode);
+ goto finish;
+ }
+
+ pa_client_update_proplist(c->client, update_mode, property_list);
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+finish:
+ if (property_list)
+ pa_proplist_free(property_list);
+}
+
+static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ char **keys = NULL;
+ int n_keys = 0;
+ DBusError error;
+ pa_bool_t changed = FALSE;
+ int i = 0;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+
+ dbus_error_init(&error);
+
+ if (pa_dbus_protocol_get_client(c->dbus_protocol, conn) != c->client) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_ACCESS_DENIED, "Client tried to modify the property list of another client.");
+ return;
+ }
+
+ if (!dbus_message_get_args(msg, &error, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &keys, &n_keys, DBUS_TYPE_INVALID)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+
+ for (i = 0; i < n_keys; ++i)
+ changed |= pa_proplist_unset(c->client->proplist, keys[i]) >= 0;
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ if (changed)
+ pa_subscription_post(c->client->core, PA_SUBSCRIPTION_EVENT_CLIENT|PA_SUBSCRIPTION_EVENT_CHANGE, c->client->index);
+
+ dbus_free_string_array(keys);
+}
+
+static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_dbusiface_client *c = userdata;
+ DBusMessage *signal = NULL;
+
+ pa_assert(core);
+ pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CLIENT);
+ pa_assert(c);
+
+ /* We can't use idx != c->client->index, because the c->client pointer may
+ * be stale at this point. */
+ if (pa_idxset_get_by_index(core->clients, idx) != c->client)
+ return;
+
+ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) != PA_SUBSCRIPTION_EVENT_CHANGE)
+ return;
+
+ if (!pa_proplist_equal(c->proplist, c->client->proplist)) {
+ DBusMessageIter msg_iter;
+
+ pa_proplist_update(c->proplist, PA_UPDATE_SET, c->client->proplist);
+
+ pa_assert_se(signal = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CLIENT_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_dbus_append_proplist(&msg_iter, c->proplist);
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
+ }
+}
+
pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client *client) {
pa_dbusiface_client *c = NULL;
@@ -314,7 +443,9 @@ pa_dbusiface_client *pa_dbusiface_client_new(pa_dbusiface_core *core, pa_client
c->core = core;
c->client = client;
c->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, OBJECT_NAME, client->index);
+ c->proplist = pa_proplist_copy(client->proplist);
c->dbus_protocol = pa_dbus_protocol_get(client->core);
+ c->subscription = pa_subscription_new(client->core, PA_SUBSCRIPTION_MASK_CLIENT, subscription_cb, c);
pa_assert_se(pa_dbus_protocol_add_interface(c->dbus_protocol, c->path, &client_interface_info, c) >= 0);
diff --git a/src/modules/dbus/module-dbus-protocol.c b/src/modules/dbus/module-dbus-protocol.c
index 807d32d..11064c3 100644
--- a/src/modules/dbus/module-dbus-protocol.c
+++ b/src/modules/dbus/module-dbus-protocol.c
@@ -40,6 +40,7 @@
#include <pulsecore/module.h>
#include <pulsecore/protocol-dbus.h>
+#include "iface-client.h"
#include "iface-core.h"
#include "module-dbus-protocol-symdef.h"
@@ -117,10 +118,36 @@ static void client_kill_cb(pa_client *c) {
conn = c->userdata;
connection_free(conn);
+ c->userdata = NULL;
pa_log_info("Connection killed.");
}
+/* Called from pa_client_send_event(). */
+static void client_send_event_cb(pa_client *c, const char *name, pa_proplist *data) {
+ struct connection *conn = NULL;
+ DBusMessage *signal = NULL;
+ DBusMessageIter msg_iter;
+
+ pa_assert(c);
+ pa_assert(name);
+ pa_assert(data);
+ pa_assert(c->userdata);
+
+ conn = c->userdata;
+
+ pa_assert_se(signal = dbus_message_new_signal(pa_dbusiface_core_get_client_path(conn->server->userdata->core_iface, c),
+ PA_DBUSIFACE_CLIENT_INTERFACE,
+ "ClientEvent"));
+ dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(dbus_message_iter_append_basic(&msg_iter, DBUS_TYPE_STRING, &name));
+ pa_dbus_append_proplist(&msg_iter, data);
+
+ pa_assert_se(dbus_connection_send(pa_dbus_wrap_connection_get(conn->wrap_conn), signal, NULL));
+ dbus_message_unref(signal);
+}
+
+/* Called by D-Bus at the authentication phase. */
static dbus_bool_t user_check_cb(DBusConnection *connection, unsigned long uid, void *data) {
pa_log_debug("Allowing connection by user %lu.", uid);
@@ -140,7 +167,7 @@ static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_conne
pa_client_new_data_init(&new_data);
new_data.module = s->userdata->module;
new_data.driver = __FILE__;
- pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client"); /* TODO: It's probably possible to generate a fancier name. Other props? */
+ pa_proplist_sets(new_data.proplist, PA_PROP_APPLICATION_NAME, "D-Bus client");
client = pa_client_new(s->userdata->module->core, &new_data);
pa_client_new_data_done(&new_data);
@@ -162,7 +189,7 @@ static void connection_new_cb(DBusServer *dbus_server, DBusConnection *new_conne
c->client = client;
c->client->kill = client_kill_cb;
- c->client->send_event = NULL; /* TODO: Implement this. */
+ c->client->send_event = client_send_event_cb;
c->client->userdata = c;
pa_idxset_put(s->userdata->connections, c, NULL);
commit 7bc8a793b8ae4c46e59a444313e4d06186de1680
Merge: 219f750 4614412
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Aug 26 14:29:55 2009 +0300
Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
Conflicts:
src/Makefile.am
diff --cc src/Makefile.am
index c3ca1eb,e65662c..16834ee
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@@ -1253,7 -1250,7 +1254,8 @@@ SYMDEF_FILES =
modules/module-augment-properties-symdef.h \
modules/module-cork-music-on-phone-symdef.h \
modules/module-console-kit-symdef.h \
- modules/dbus/module-dbus-protocol-symdef.h
++ modules/dbus/module-dbus-protocol-symdef.h \
+ modules/module-loopback-symdef.h
EXTRA_DIST += $(SYMDEF_FILES)
BUILT_SOURCES += $(SYMDEF_FILES)
commit 0e096632c53b746b9f4b4c0249d9e5a18c1c543d
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 30 19:52:22 2009 +0300
dbus: Do message argument type checking early, centrally.
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 7e37f8b..1714df3 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -43,7 +43,7 @@ static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userd
static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_profiles(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -322,7 +322,7 @@ static void handle_get_active_profile(DBusConnection *conn, DBusMessage *msg, vo
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &active_profile);
}
-static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_card *c = userdata;
const char *new_active_path;
pa_dbusiface_card_profile *new_active;
@@ -330,11 +330,9 @@ static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, vo
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(c);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &new_active_path) < 0)
- return;
-
if (!c->active_profile) {
pa_assert(pa_hashmap_isempty(c->profiles));
@@ -344,6 +342,8 @@ static void handle_set_active_profile(DBusConnection *conn, DBusMessage *msg, vo
return;
}
+ dbus_message_iter_get_basic(iter, &new_active_path);
+
if (!(new_active = pa_hashmap_get(c->profiles, new_active_path))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such profile.", new_active_path);
return;
@@ -430,7 +430,6 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
static void handle_get_profile_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_card *c = userdata;
- DBusError error;
const char *profile_name = NULL;
pa_dbusiface_card_profile *profile = NULL;
const char *profile_path = NULL;
@@ -439,13 +438,7 @@ static void handle_get_profile_by_name(DBusConnection *conn, DBusMessage *msg, v
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &profile_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &profile_name, DBUS_TYPE_INVALID));
if (!(profile = pa_hashmap_get(c->profiles, profile_name))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such profile on card %s.", profile_name, c->card->name);
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index a68259a..54550d2 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -339,16 +339,12 @@ static void handle_update_properties(DBusConnection *conn, DBusMessage *msg, voi
return;
}
- if (!dbus_message_iter_init(msg, &msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
return;
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &update_mode) < 0)
- goto finish;
+ dbus_message_iter_get_basic(&msg_iter, &update_mode);
if (!(update_mode == PA_UPDATE_SET || update_mode == PA_UPDATE_MERGE || update_mode == PA_UPDATE_REPLACE)) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid update mode: %u", update_mode);
@@ -368,7 +364,6 @@ static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, voi
pa_dbusiface_client *c = userdata;
char **keys = NULL;
int n_keys = 0;
- DBusError error;
pa_bool_t changed = FALSE;
int i = 0;
@@ -376,18 +371,12 @@ static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, voi
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
if (pa_dbus_protocol_get_client(c->dbus_protocol, conn) != c->client) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_ACCESS_DENIED, "Client tried to modify the property list of another client.");
return;
}
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &keys, &n_keys, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &keys, &n_keys, DBUS_TYPE_INVALID));
for (i = 0; i < n_keys; ++i)
changed |= pa_proplist_unset(c->client->proplist, keys[i]) >= 0;
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index c54a3b7..0507ac9 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -57,18 +57,18 @@ static void handle_get_is_local(DBusConnection *conn, DBusMessage *msg, void *us
static void handle_get_username(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_hostname(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_default_sample_format(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_cards(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_sinks(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_sources(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_playback_streams(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_record_streams(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_samples(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -428,30 +428,32 @@ static void handle_get_default_channels(DBusConnection *conn, DBusMessage *msg,
pa_xfree(default_channels);
}
-static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_default_channels(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_core *c = userdata;
+ DBusMessageIter array_iter;
pa_channel_map new_channel_map;
- dbus_uint32_t *default_channels;
- unsigned n_channels;
+ const dbus_uint32_t *default_channels;
+ int n_channels;
unsigned i;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(c);
pa_channel_map_init(&new_channel_map);
- if (pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &default_channels, &n_channels) < 0)
- return;
+ dbus_message_iter_recurse(iter, &array_iter);
+ dbus_message_iter_get_fixed_array(&array_iter, &default_channels, &n_channels);
if (n_channels <= 0) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty channel array.");
return;
}
- if (n_channels > PA_CHANNELS_MAX) {
+ if (n_channels > (int) PA_CHANNELS_MAX) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Too many channels: %u. The maximum number of channels is %u.", n_channels, PA_CHANNELS_MAX);
+ "Too many channels: %i. The maximum number of channels is %u.", n_channels, PA_CHANNELS_MAX);
return;
}
@@ -485,16 +487,16 @@ static void handle_get_default_sample_format(DBusConnection *conn, DBusMessage *
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &default_sample_format);
}
-static void handle_set_default_sample_format(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_default_sample_format(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_core *c = userdata;
dbus_uint32_t default_sample_format;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(c);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &default_sample_format) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &default_sample_format);
if (default_sample_format >= PA_SAMPLE_MAX) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample format.");
@@ -519,16 +521,16 @@ static void handle_get_default_sample_rate(DBusConnection *conn, DBusMessage *ms
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &default_sample_rate);
}
-static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_default_sample_rate(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_core *c = userdata;
dbus_uint32_t default_sample_rate;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(c);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &default_sample_rate) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &default_sample_rate);
if (default_sample_rate <= 0 || default_sample_rate > PA_RATE_MAX) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample rate.");
@@ -639,13 +641,14 @@ static void handle_get_fallback_sink(DBusConnection *conn, DBusMessage *msg, voi
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
}
-static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_core *c = userdata;
pa_dbusiface_device *fallback_sink;
const char *object_path;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(c);
if (!c->fallback_sink) {
@@ -654,8 +657,7 @@ static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, voi
return;
}
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &object_path);
if (!(fallback_sink = pa_hashmap_get(c->sinks_by_path, object_path))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such sink.", object_path);
@@ -727,13 +729,14 @@ static void handle_get_fallback_source(DBusConnection *conn, DBusMessage *msg, v
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
}
-static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_core *c = userdata;
pa_dbusiface_device *fallback_source;
const char *object_path;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(c);
if (!c->fallback_source) {
@@ -742,8 +745,7 @@ static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, v
return;
}
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &object_path);
if (!(fallback_source = pa_hashmap_get(c->sources_by_path, object_path))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such source.", object_path);
@@ -1117,19 +1119,12 @@ static void handle_get_card_by_name(DBusConnection *conn, DBusMessage *msg, void
pa_card *card;
pa_dbusiface_card *dbus_card;
const char *object_path;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &card_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &card_name, DBUS_TYPE_INVALID));
if (!(card = pa_namereg_get(c->core, card_name, PA_NAMEREG_CARD))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such card.");
@@ -1149,19 +1144,12 @@ static void handle_get_sink_by_name(DBusConnection *conn, DBusMessage *msg, void
pa_sink *sink;
pa_dbusiface_device *dbus_sink;
const char *object_path;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &sink_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &sink_name, DBUS_TYPE_INVALID));
if (!(sink = pa_namereg_get(c->core, sink_name, PA_NAMEREG_SINK))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such sink.", sink_name);
@@ -1181,19 +1169,12 @@ static void handle_get_source_by_name(DBusConnection *conn, DBusMessage *msg, vo
pa_source *source;
pa_dbusiface_device *dbus_source;
const char *object_path;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &source_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &source_name, DBUS_TYPE_INVALID));
if (!(source = pa_namereg_get(c->core, source_name, PA_NAMEREG_SOURCE))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such source.", source_name);
@@ -1213,19 +1194,12 @@ static void handle_get_sample_by_name(DBusConnection *conn, DBusMessage *msg, vo
pa_scache_entry *sample;
pa_dbusiface_sample *dbus_sample;
const char *object_path;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &sample_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &sample_name, DBUS_TYPE_INVALID));
if (!(sample = pa_namereg_get(c->core, sample_name, PA_NAMEREG_SAMPLE))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such sample.");
@@ -1242,17 +1216,18 @@ static void handle_get_sample_by_name(DBusConnection *conn, DBusMessage *msg, vo
static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_core *c = userdata;
DBusMessageIter msg_iter;
+ DBusMessageIter array_iter;
const char *name;
dbus_uint32_t sample_format;
dbus_uint32_t sample_rate;
const dbus_uint32_t *channels;
- unsigned n_channels;
+ int n_channels;
const dbus_uint32_t *default_volume;
- unsigned n_volume_entries;
+ int n_volume_entries;
pa_proplist *property_list;
const uint8_t *data;
- unsigned data_length;
- unsigned i;
+ int data_length;
+ int i;
pa_sample_spec ss;
pa_channel_map map;
pa_memchunk chunk;
@@ -1267,31 +1242,29 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
chunk.memblock = NULL;
- if (!dbus_message_iter_init(msg, &msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
-
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
- return;
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &name);
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &sample_format) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &sample_format);
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &sample_rate) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &sample_rate);
- if (pa_dbus_get_fixed_array_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &channels, &n_channels) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_recurse(&msg_iter, &array_iter);
+ dbus_message_iter_get_fixed_array(&array_iter, &channels, &n_channels);
- if (pa_dbus_get_fixed_array_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &default_volume, &n_volume_entries) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_recurse(&msg_iter, &array_iter);
+ dbus_message_iter_get_fixed_array(&array_iter, &default_volume, &n_volume_entries);
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
return;
- if (pa_dbus_get_fixed_array_arg(conn, msg, &msg_iter, DBUS_TYPE_BYTE, &data, &data_length) < 0)
- goto finish;
+ dbus_message_iter_recurse(&msg_iter, &array_iter);
+ dbus_message_iter_get_fixed_array(&array_iter, &data, &data_length);
if (sample_format >= PA_SAMPLE_MAX) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid sample format.");
@@ -1303,14 +1276,14 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
goto finish;
}
- if (n_channels == 0) {
+ if (n_channels <= 0) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Empty channel map.");
goto finish;
}
- if (n_channels > PA_CHANNELS_MAX) {
+ if (n_channels > (int) PA_CHANNELS_MAX) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Too many channels: %u. The maximum is %u.", n_channels, PA_CHANNELS_MAX);
+ "Too many channels: %i. The maximum is %u.", n_channels, PA_CHANNELS_MAX);
goto finish;
}
@@ -1323,13 +1296,14 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
if (n_volume_entries != 0 && n_volume_entries != n_channels) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "The channels and default_volume arguments have different number of elements.");
+ "The channels and default_volume arguments have different number of elements (%i and %i, resp).",
+ n_channels, n_volume_entries);
goto finish;
}
for (i = 0; i < n_volume_entries; ++i) {
if (default_volume[i] > PA_VOLUME_MAX) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume: %u.", default_volume[i]);
goto finish;
}
}
@@ -1340,7 +1314,9 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
}
if (data_length > PA_SCACHE_ENTRY_SIZE_MAX) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too big sample.");
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
+ "Too big sample: %i bytes. The maximum sample length is %u bytes.",
+ data_length, PA_SCACHE_ENTRY_SIZE_MAX);
goto finish;
}
@@ -1348,9 +1324,13 @@ static void handle_upload_sample(DBusConnection *conn, DBusMessage *msg, void *u
ss.rate = sample_rate;
ss.channels = n_channels;
+ pa_assert(pa_sample_spec_valid(&ss));
+
if (!pa_frame_aligned(data_length, &ss)) {
+ char buf[PA_SAMPLE_SPEC_SNPRINT_MAX];
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "The sample length in bytes doesn't align with the sample format and channels.");
+ "The sample length (%i bytes) doesn't align with the sample format and channels (%s).",
+ data_length, pa_sample_spec_snprint(buf, sizeof(buf), &ss));
goto finish;
}
@@ -1414,15 +1394,15 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
DBusMessageIter msg_iter;
DBusMessageIter dict_iter;
DBusMessageIter dict_entry_iter;
- char *name;
- const char *key;
- const char *value;
- char *escaped_value;
+ char *name = NULL;
+ const char *key = NULL;
+ const char *value = NULL;
+ char *escaped_value = NULL;
pa_strbuf *arg_buffer = NULL;
- pa_module *module;
- pa_dbusiface_module *dbus_module;
- const char *object_path;
- int arg_type;
+ char *arg_string = NULL;
+ pa_module *module = NULL;
+ pa_dbusiface_module *dbus_module = NULL;
+ const char *object_path = NULL;
pa_assert(conn);
pa_assert(msg);
@@ -1433,35 +1413,12 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
return;
}
- if (!dbus_message_iter_init(msg, &msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
-
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
- return;
-
- arg_type = dbus_message_iter_get_arg_type(&msg_iter);
- if (arg_type != DBUS_TYPE_ARRAY) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Too few arguments. A dictionary from strings to strings was expected.");
- else
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Wrong argument type: '%c'. An dictionary from strings to strings was expected.",
- (char) arg_type);
- return;
- }
-
- arg_type = dbus_message_iter_get_element_type(&msg_iter);
- if (arg_type != DBUS_TYPE_DICT_ENTRY) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Wrong array element type: '%c'. A dict entry (string to string) was expected.", (char) arg_type);
- return;
- }
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &name);
arg_buffer = pa_strbuf_new();
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
dbus_message_iter_recurse(&msg_iter, &dict_iter);
while (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID) {
@@ -1470,41 +1427,26 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
dbus_message_iter_recurse(&dict_iter, &dict_entry_iter);
- arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
- if (arg_type != DBUS_TYPE_STRING) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
- goto finish;
- }
-
dbus_message_iter_get_basic(&dict_entry_iter, &key);
- dbus_message_iter_next(&dict_entry_iter);
if (strlen(key) <= 0 || !pa_ascii_valid(key) || contains_space(key)) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid module argument name: %s", key);
goto finish;
}
- arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
- if (arg_type != DBUS_TYPE_STRING) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Dict value missing.");
- else
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Wrong dict value type: '%c'. A string was expected.", (char) arg_type);
- goto finish;
- }
-
+ pa_assert_se(dbus_message_iter_next(&dict_entry_iter));
dbus_message_iter_get_basic(&dict_entry_iter, &value);
- dbus_message_iter_next(&dict_iter);
-
escaped_value = pa_escape(value, "\"");
pa_strbuf_printf(arg_buffer, "%s=\"%s\"", key, escaped_value);
pa_xfree(escaped_value);
+
+ dbus_message_iter_next(&dict_iter);
}
- if (!(module = pa_module_load(c->core, name, pa_strbuf_tostring(arg_buffer)))) {
+ arg_string = pa_strbuf_tostring(arg_buffer);
+
+ if (!(module = pa_module_load(c->core, name, arg_string))) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Failed to load module.");
goto finish;
}
@@ -1519,6 +1461,8 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
finish:
if (arg_buffer)
pa_strbuf_free(arg_buffer);
+
+ pa_xfree(arg_string);
}
static void handle_exit(DBusConnection *conn, DBusMessage *msg, void *userdata) {
@@ -1543,47 +1487,32 @@ static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, voi
const char *signal;
char **objects = NULL;
int n_objects;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error,
- DBUS_TYPE_STRING, &signal,
- DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects,
- DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- goto finish;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL,
+ DBUS_TYPE_STRING, &signal,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects,
+ DBUS_TYPE_INVALID));
pa_dbus_protocol_add_signal_listener(c->dbus_protocol, conn, *signal ? signal : NULL, objects, n_objects);
pa_dbus_send_empty_reply(conn, msg);
-finish:
dbus_free_string_array(objects);
}
static void handle_stop_listening_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_core *c = userdata;
const char *signal;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &signal, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &signal, DBUS_TYPE_INVALID));
pa_dbus_protocol_remove_signal_listener(c->dbus_protocol, conn, *signal ? signal : NULL);
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 8f719bc..2752511 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -43,13 +43,13 @@ static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, voi
static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_has_flat_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_has_convertible_to_decibel_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_base_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_volume_steps(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_has_hardware_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_has_hardware_mute(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_configured_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -60,7 +60,7 @@ static void handle_get_is_network_device(DBusConnection *conn, DBusMessage *msg,
static void handle_get_state(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_ports(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_property_list(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -408,16 +408,18 @@ static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *user
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, volume, d->volume.channels);
}
-static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_device *d = userdata;
- unsigned device_channels = 0;
+ DBusMessageIter array_iter;
+ int device_channels = 0;
dbus_uint32_t *volume = NULL;
- unsigned n_volume_entries = 0;
+ int n_volume_entries = 0;
pa_cvolume new_vol;
- unsigned i = 0;
+ int i = 0;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(d);
pa_cvolume_init(&new_vol);
@@ -426,12 +428,12 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *user
new_vol.channels = device_channels;
- if (pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &volume, &n_volume_entries) < 0)
- return;
+ dbus_message_iter_recurse(iter, &array_iter);
+ dbus_message_iter_get_fixed_array(&array_iter, &volume, &n_volume_entries);
if (n_volume_entries != device_channels) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
- "Expected %u volume entries, got %u.", device_channels, n_volume_entries);
+ "Expected %u volume entries, got %i.", device_channels, n_volume_entries);
return;
}
@@ -515,16 +517,16 @@ static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *us
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &d->is_muted);
}
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_device *d = userdata;
dbus_bool_t is_muted = FALSE;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(d);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &is_muted) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &is_muted);
if (d->type == DEVICE_TYPE_SINK)
pa_sink_set_mute(d->sink, is_muted, TRUE);
@@ -722,7 +724,7 @@ static void handle_get_active_port(DBusConnection *conn, DBusMessage *msg, void
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &active_port);
}
-static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_device *d = userdata;
const char *new_active_path;
pa_dbusiface_device_port *new_active;
@@ -730,11 +732,9 @@ static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, void
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(d);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_OBJECT_PATH, &new_active_path) < 0)
- return;
-
if (!d->active_port) {
pa_assert(pa_hashmap_isempty(d->ports));
@@ -747,8 +747,10 @@ static void handle_set_active_port(DBusConnection *conn, DBusMessage *msg, void
return;
}
+ dbus_message_iter_get_basic(iter, &new_active_path);
+
if (!(new_active = pa_hashmap_get(d->ports, new_active_path))) {
- pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "%s: No such port.", new_active_path);
+ pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such port: %s", new_active_path);
return;
}
@@ -923,19 +925,12 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
static void handle_suspend(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_device *d = userdata;
dbus_bool_t suspend = FALSE;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(d);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_BOOLEAN, &suspend, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_BOOLEAN, &suspend, DBUS_TYPE_INVALID));
if ((d->type == DEVICE_TYPE_SINK) && (pa_sink_suspend(d->sink, suspend, PA_SUSPEND_USER) < 0)) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Internal error in PulseAudio: pa_sink_suspend() failed.");
@@ -950,7 +945,6 @@ static void handle_suspend(DBusConnection *conn, DBusMessage *msg, void *userdat
static void handle_get_port_by_name(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_device *d = userdata;
- DBusError error;
const char *port_name = NULL;
pa_dbusiface_device_port *port = NULL;
const char *port_path = NULL;
@@ -959,13 +953,7 @@ static void handle_get_port_by_name(DBusConnection *conn, DBusMessage *msg, void
pa_assert(msg);
pa_assert(d);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &port_name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &port_name, DBUS_TYPE_INVALID));
if (!(port = pa_hashmap_get(d->ports, port_name))) {
if (d->type == DEVICE_TYPE_SINK)
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
index 7147be1..b0542a6 100644
--- a/src/modules/dbus/iface-sample.c
+++ b/src/modules/dbus/iface-sample.c
@@ -359,14 +359,10 @@ static void handle_play(DBusConnection *conn, DBusMessage *msg, void *userdata)
pa_assert(msg);
pa_assert(s);
- if (!dbus_message_iter_init(msg, &msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
-
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &volume) < 0)
- return;
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &volume);
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
return;
@@ -405,17 +401,13 @@ static void handle_play_to_sink(DBusConnection *conn, DBusMessage *msg, void *us
pa_assert(msg);
pa_assert(s);
- if (!dbus_message_iter_init(msg, &msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
-
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_OBJECT_PATH, &sink_path) < 0)
- return;
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &sink_path);
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_UINT32, &volume) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &volume);
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
if (!(property_list = pa_dbus_get_proplist_arg(conn, msg, &msg_iter)))
return;
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index 183625b..a5f9bb5 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -70,9 +70,9 @@ static void handle_get_sample_format(DBusConnection *conn, DBusMessage *msg, voi
static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_buffer_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_device_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_resample_method(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -343,16 +343,18 @@ static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *user
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_UINT32, volume, s->volume.channels);
}
-static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_stream *s = userdata;
- unsigned stream_channels = 0;
+ DBusMessageIter array_iter;
+ int stream_channels = 0;
dbus_uint32_t *volume = NULL;
- unsigned n_volume_entries = 0;
+ int n_volume_entries = 0;
pa_cvolume new_vol;
- unsigned i = 0;
+ int i = 0;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(s);
if (s->type == STREAM_TYPE_RECORD) {
@@ -366,8 +368,8 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, void *user
new_vol.channels = stream_channels;
- if (pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_UINT32, &volume, &n_volume_entries) < 0)
- return;
+ dbus_message_iter_recurse(iter, &array_iter);
+ dbus_message_iter_get_fixed_array(&array_iter, &volume, &n_volume_entries);
if (n_volume_entries != stream_channels) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
@@ -403,16 +405,16 @@ static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *us
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &s->is_muted);
}
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_stream *s = userdata;
dbus_bool_t is_muted = FALSE;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(s);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &is_muted) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &is_muted);
if (s->type == STREAM_TYPE_RECORD) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Record streams don't have mute.");
@@ -575,19 +577,12 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
static void handle_move(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_stream *s = userdata;
const char *device = NULL;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(s);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &device, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &device, DBUS_TYPE_INVALID));
if (s->type == STREAM_TYPE_PLAYBACK) {
pa_sink *sink = pa_dbusiface_core_get_sink(s->core, device);
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 076b391..d45cf79 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -167,11 +167,11 @@ static void handle_get_entry_by_name(DBusConnection *conn, DBusMessage *msg, voi
static void handle_entry_get_index(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_entry_get_name(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_entry_get_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_entry_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -326,18 +326,20 @@ static void dbus_entry_free(struct dbus_entry *de) {
/* Reads an array [(UInt32, UInt32)] from the iterator. The struct items are
* are a channel position and a volume value, respectively. The result is
- * stored in the map and vol arguments. If the volume can't be read from the
- * iterator, an error reply is sent and a negative number is returned. In case
- * of a failure we make no guarantees about the state of map and vol. In case
- * of an empty array the channels field of both map and vol are set to 0. */
+ * stored in the map and vol arguments. The iterator must point to a "a(uu)"
+ * element. If the data is invalid, an error reply is sent and a negative
+ * number is returned. In case of a failure we make no guarantees about the
+ * state of map and vol. In case of an empty array the channels field of both
+ * map and vol are set to 0. This function calls dbus_message_iter_next(iter)
+ * before returning. */
static int get_volume_arg(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, pa_channel_map *map, pa_cvolume *vol) {
DBusMessageIter array_iter;
DBusMessageIter struct_iter;
- int arg_type;
pa_assert(conn);
pa_assert(msg);
pa_assert(iter);
+ pa_assert(pa_streq(dbus_message_iter_get_signature(iter), "a(uu)"));
pa_assert(map);
pa_assert(vol);
@@ -347,21 +349,6 @@ static int get_volume_arg(DBusConnection *conn, DBusMessage *msg, DBusMessageIte
map->channels = 0;
vol->channels = 0;
- arg_type = dbus_message_iter_get_arg_type(iter);
- if (arg_type != DBUS_TYPE_ARRAY) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array was expected.");
- else
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array was expected.", (char) arg_type);
- return -1;
- }
-
- arg_type = dbus_message_iter_get_element_type(iter);
- if (arg_type != DBUS_TYPE_STRUCT) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A struct was expected.", (char) arg_type);
- return -1;
- }
-
dbus_message_iter_recurse(iter, &array_iter);
while (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_INVALID) {
@@ -370,29 +357,14 @@ static int get_volume_arg(DBusConnection *conn, DBusMessage *msg, DBusMessageIte
dbus_message_iter_recurse(&array_iter, &struct_iter);
- arg_type = dbus_message_iter_get_arg_type(&struct_iter);
- if (arg_type != DBUS_TYPE_UINT32) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong channel position type: '%c'. An unsigned 32-bit integer was expected.", (char) arg_type);
- return -1;
- }
-
dbus_message_iter_get_basic(&struct_iter, &chan_pos);
- dbus_message_iter_next(&struct_iter);
if (chan_pos >= PA_CHANNEL_POSITION_MAX) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid channel position: %u", chan_pos);
return -1;
}
- arg_type = dbus_message_iter_get_arg_type(&struct_iter);
- if (arg_type != DBUS_TYPE_UINT32) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Channel volume missing.");
- else
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Wrong volume value type: '%c'. An unsigned 32-bit integer was expected.", (char) arg_type);
- return -1;
- }
-
+ pa_assert_se(dbus_message_iter_next(&struct_iter));
dbus_message_iter_get_basic(&struct_iter, &chan_vol);
if (chan_vol > PA_VOLUME_MAX) {
@@ -612,40 +584,35 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
static void handle_add_entry(DBusConnection *conn, DBusMessage *msg, void *userdata) {
struct userdata *u = userdata;
DBusMessageIter msg_iter;
- const char *name;
- const char *device;
+ const char *name = NULL;
+ const char *device = NULL;
pa_channel_map map;
pa_cvolume vol;
- dbus_bool_t muted;
- dbus_bool_t apply_immediately;
+ dbus_bool_t muted = FALSE;
+ dbus_bool_t apply_immediately = FALSE;
pa_datum key;
pa_datum value;
- struct dbus_entry *dbus_entry;
- struct entry *e;
+ struct dbus_entry *dbus_entry = NULL;
+ struct entry *e = NULL;
pa_assert(conn);
pa_assert(msg);
pa_assert(u);
- if (!dbus_message_iter_init(msg, &msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
+ pa_assert_se(dbus_message_iter_init(msg, &msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &name);
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &name) < 0)
- return;
-
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_STRING, &device) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &device);
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
if (get_volume_arg(conn, msg, &msg_iter, &map, &vol) < 0)
return;
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_BOOLEAN, &muted) < 0)
- return;
+ dbus_message_iter_get_basic(&msg_iter, &muted);
- if (pa_dbus_get_basic_arg(conn, msg, &msg_iter, DBUS_TYPE_BOOLEAN, &apply_immediately) < 0)
- return;
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &apply_immediately);
if (!*name) {
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "An empty string was given as the entry name.");
@@ -714,19 +681,12 @@ static void handle_get_entry_by_name(DBusConnection *conn, DBusMessage *msg, voi
struct userdata *u = userdata;
const char *name;
struct dbus_entry *de;
- DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(u);
- dbus_error_init(&error);
-
- if (!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
- dbus_error_free(&error);
- return;
- }
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID));
if (!(de = pa_hashmap_get(u->dbus_entries, name))) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NOT_FOUND, "No such stream restore entry.");
@@ -774,7 +734,7 @@ static void handle_entry_get_device(DBusConnection *conn, DBusMessage *msg, void
pa_xfree(e);
}
-static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
struct dbus_entry *de = userdata;
const char *device;
struct entry *e;
@@ -782,10 +742,10 @@ static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, void
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(de);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_STRING, &device) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &device);
pa_assert_se(e = read_entry(de->userdata, de->entry_name));
@@ -835,25 +795,19 @@ static void handle_entry_get_volume(DBusConnection *conn, DBusMessage *msg, void
pa_xfree(e);
}
-static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
struct dbus_entry *de = userdata;
- DBusMessageIter msg_iter;
pa_channel_map map;
pa_cvolume vol;
- struct entry *e;
- pa_bool_t updated;
+ struct entry *e = NULL;
+ pa_bool_t updated = FALSE;
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(de);
- /* Skip the interface and property name arguments. */
- if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return;
- }
-
- if (get_volume_arg(conn, msg, &msg_iter, &map, &vol) < 0)
+ if (get_volume_arg(conn, msg, iter, &map, &vol) < 0)
return;
pa_assert_se(e = read_entry(de->userdata, de->entry_name));
@@ -901,7 +855,7 @@ static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, vo
pa_xfree(e);
}
-static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
struct dbus_entry *de = userdata;
pa_bool_t muted;
struct entry *e;
@@ -909,10 +863,10 @@ static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, vo
pa_assert(conn);
pa_assert(msg);
+ pa_assert(iter);
pa_assert(de);
- if (pa_dbus_get_basic_set_property_arg(conn, msg, DBUS_TYPE_BOOLEAN, &muted) < 0)
- return;
+ dbus_message_iter_get_basic(iter, &muted);
pa_assert_se(e = read_entry(de->userdata, de->entry_name));
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index b45e6a6..e3700ea 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -291,7 +291,10 @@ pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, pa_bool
return pconn;
}
-pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *m, pa_bool_t use_rtclock, DBusConnection *conn) {
+pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(
+ pa_mainloop_api *m,
+ pa_bool_t use_rtclock,
+ DBusConnection *conn) {
pa_dbus_wrap_connection *pconn;
pa_assert(m);
@@ -522,7 +525,10 @@ void pa_dbus_send_basic_variant_reply(DBusConnection *c, DBusMessage *in_reply_t
pa_assert_se((reply = dbus_message_new_method_return(in_reply_to)));
dbus_message_iter_init_append(reply, &msg_iter);
- pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_VARIANT, signature_from_basic_type(type), &variant_iter));
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter,
+ DBUS_TYPE_VARIANT,
+ signature_from_basic_type(type),
+ &variant_iter));
pa_assert_se(dbus_message_iter_append_basic(&variant_iter, type, data));
pa_assert_se(dbus_message_iter_close_container(&msg_iter, &variant_iter));
pa_assert_se(dbus_connection_send(c, reply, NULL));
@@ -548,7 +554,12 @@ static unsigned basic_type_size(int type) {
}
}
-void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int item_type, void *array, unsigned n) {
+void pa_dbus_send_basic_array_variant_reply(
+ DBusConnection *c,
+ DBusMessage *in_reply_to,
+ int item_type,
+ void *array,
+ unsigned n) {
DBusMessage *reply = NULL;
DBusMessageIter msg_iter;
@@ -641,7 +652,12 @@ void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const c
pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
}
-void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n) {
+void pa_dbus_append_basic_array_variant_dict_entry(
+ DBusMessageIter *dict_iter,
+ const char *key,
+ int item_type,
+ const void *array,
+ unsigned n) {
DBusMessageIter dict_entry_iter;
pa_assert(dict_iter);
@@ -711,156 +727,18 @@ void pa_dbus_append_proplist_variant_dict_entry(DBusMessageIter *dict_iter, cons
pa_assert_se(dbus_message_iter_close_container(dict_iter, &dict_entry_iter));
}
-int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data) {
- DBusMessageIter msg_iter;
- DBusMessageIter variant_iter;
-
- pa_assert(c);
- pa_assert(msg);
- pa_assert(dbus_type_is_basic(type));
- pa_assert(data);
-
- /* Skip the interface and property name arguments. */
- if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return -1;
- }
-
- if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
- return -1;
- }
-
- dbus_message_iter_recurse(&msg_iter, &variant_iter);
-
- if (pa_dbus_get_basic_arg(c, msg, &variant_iter, type, data) < 0)
- return -1;
-
- return 0;
-}
-
-int pa_dbus_get_fixed_array_set_property_arg(DBusConnection *c, DBusMessage *msg, int item_type, void *data, unsigned *n) {
- DBusMessageIter msg_iter;
- DBusMessageIter variant_iter;
-
- pa_assert(c);
- pa_assert(msg);
- pa_assert(dbus_type_is_fixed(item_type));
- pa_assert(data);
- pa_assert(n);
-
- /* Skip the interface and property name arguments. */
- if (!dbus_message_iter_init(msg, &msg_iter) || !dbus_message_iter_next(&msg_iter) || !dbus_message_iter_next(&msg_iter)) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments.");
- return -1;
- }
-
- if (dbus_message_iter_get_arg_type(&msg_iter) != DBUS_TYPE_VARIANT) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Message argument isn't a variant.");
- return -1;
- }
-
- dbus_message_iter_recurse(&msg_iter, &variant_iter);
-
- if (pa_dbus_get_fixed_array_arg(c, msg, &variant_iter, item_type, data, n) < 0)
- return -1;
-
- return 0;
-}
-
-int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data) {
- int arg_type;
-
- pa_assert(c);
- pa_assert(msg);
- pa_assert(iter);
- pa_assert(dbus_type_is_basic(type));
- pa_assert(data);
-
- arg_type = dbus_message_iter_get_arg_type(iter);
- if (arg_type != type) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. D-Bus type '%c' expected.", (char) type);
- else
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. Expected type '%c'.", (char) arg_type, (char) type);
- return -1;
- }
-
- dbus_message_iter_get_basic(iter, data);
-
- dbus_message_iter_next(iter);
-
- return 0;
-}
-
-int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n) {
- DBusMessageIter array_iter;
- int signed_n;
- int arg_type;
- int element_type;
-
- pa_assert(c);
- pa_assert(msg);
- pa_assert(iter);
- pa_assert(dbus_type_is_fixed(item_type));
- pa_assert(array);
- pa_assert(n);
-
- arg_type = dbus_message_iter_get_arg_type(iter);
- if (arg_type != DBUS_TYPE_ARRAY) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array of type '%c' was expected.", (char) item_type);
- else
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array of type '%c' was expected.", (char) arg_type, (char) item_type);
- return -1;
- }
-
- element_type = dbus_message_iter_get_element_type(iter);
- if (element_type != item_type) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. Element type '%c' was expected.", (char) element_type, (char) item_type);
- return -1;
- }
-
- dbus_message_iter_recurse(iter, &array_iter);
-
- dbus_message_iter_get_fixed_array(&array_iter, array, &signed_n);
-
- dbus_message_iter_next(iter);
-
- pa_assert(signed_n >= 0);
-
- *n = signed_n;
-
- return 0;
-}
-
pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter) {
DBusMessageIter dict_iter;
DBusMessageIter dict_entry_iter;
- int arg_type;
pa_proplist *proplist = NULL;
- const char *key;
- const uint8_t *value;
- int value_length;
+ const char *key = NULL;
+ const uint8_t *value = NULL;
+ int value_length = 0;
pa_assert(c);
pa_assert(msg);
pa_assert(iter);
-
- arg_type = dbus_message_iter_get_arg_type(iter);
- if (arg_type != DBUS_TYPE_ARRAY) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Too few arguments. An array was expected.");
- else
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong argument type: '%c'. An array was expected.", (char) arg_type);
- return NULL;
- }
-
- arg_type = dbus_message_iter_get_element_type(iter);
- if (arg_type != DBUS_TYPE_DICT_ENTRY) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong array element type: '%c'. A dictionary entry was expected.", (char) arg_type);
- return NULL;
- }
+ pa_assert(pa_streq(dbus_message_iter_get_signature(iter), "a{say}"));
proplist = pa_proplist_new();
@@ -869,32 +747,11 @@ pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusM
while (dbus_message_iter_get_arg_type(&dict_iter) != DBUS_TYPE_INVALID) {
dbus_message_iter_recurse(&dict_iter, &dict_entry_iter);
- arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
- if (arg_type != DBUS_TYPE_STRING) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict key type: '%c'. A string was expected.", (char) arg_type);
- goto fail;
- }
-
dbus_message_iter_get_basic(&dict_entry_iter, &key);
dbus_message_iter_next(&dict_entry_iter);
if (strlen(key) <= 0 || !pa_ascii_valid(key)) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Invalid property list key.");
- goto fail;
- }
-
- arg_type = dbus_message_iter_get_arg_type(&dict_entry_iter);
- if (arg_type != DBUS_TYPE_ARRAY) {
- if (arg_type == DBUS_TYPE_INVALID)
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Dict value missing.");
- else
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value type: '%c'. An array was expected.", (char) arg_type);
- goto fail;
- }
-
- arg_type = dbus_message_iter_get_element_type(&dict_entry_iter);
- if (arg_type != DBUS_TYPE_BYTE) {
- pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Wrong dict value item type: '%c'. A byte was expected.", (char) arg_type);
+ pa_dbus_send_error(c, msg, DBUS_ERROR_INVALID_ARGS, "Invalid property list key: '%s'.", key);
goto fail;
}
diff --git a/src/pulsecore/dbus-util.h b/src/pulsecore/dbus-util.h
index 9cee293..f35e66c 100644
--- a/src/pulsecore/dbus-util.h
+++ b/src/pulsecore/dbus-util.h
@@ -32,7 +32,10 @@
typedef struct pa_dbus_wrap_connection pa_dbus_wrap_connection;
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *mainloop, pa_bool_t use_rtclock, DBusBusType type, DBusError *error);
-pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(pa_mainloop_api *mainloop, pa_bool_t use_rtclock, DBusConnection *conn);
+pa_dbus_wrap_connection* pa_dbus_wrap_connection_new_from_existing(
+ pa_mainloop_api *mainloop,
+ pa_bool_t use_rtclock,
+ DBusConnection *conn);
void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* conn);
DBusConnection* pa_dbus_wrap_connection_get(pa_dbus_wrap_connection *conn);
@@ -63,36 +66,41 @@ void pa_dbus_sync_pending_list(pa_dbus_pending **p);
void pa_dbus_free_pending_list(pa_dbus_pending **p);
/* Sends an error message as the reply to the given message. */
-void pa_dbus_send_error(DBusConnection *c, DBusMessage *in_reply_to, const char *name, const char *format, ...) PA_GCC_PRINTF_ATTR(4, 5);
+void pa_dbus_send_error(
+ DBusConnection *c,
+ DBusMessage *in_reply_to,
+ const char *name,
+ const char *format, ...) PA_GCC_PRINTF_ATTR(4, 5);
void pa_dbus_send_empty_reply(DBusConnection *c, DBusMessage *in_reply_to);
void pa_dbus_send_basic_value_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
void pa_dbus_send_basic_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int type, void *data);
-void pa_dbus_send_basic_array_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, int item_type, void *array, unsigned n);
+void pa_dbus_send_basic_array_variant_reply(
+ DBusConnection *c,
+ DBusMessage *in_reply_to,
+ int item_type,
+ void *array,
+ unsigned n);
void pa_dbus_send_proplist_variant_reply(DBusConnection *c, DBusMessage *in_reply_to, pa_proplist *proplist);
void pa_dbus_append_basic_array(DBusMessageIter *iter, int item_type, const void *array, unsigned n);
void pa_dbus_append_basic_array_variant(DBusMessageIter *iter, int item_type, const void *array, unsigned n);
void pa_dbus_append_basic_variant(DBusMessageIter *iter, int type, void *data);
void pa_dbus_append_basic_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int type, void *data);
-void pa_dbus_append_basic_array_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, int item_type, const void *array, unsigned n);
+void pa_dbus_append_basic_array_variant_dict_entry(
+ DBusMessageIter *dict_iter,
+ const char *key,
+ int item_type,
+ const void *array,
+ unsigned n);
void pa_dbus_append_proplist(DBusMessageIter *iter, pa_proplist *proplist);
void pa_dbus_append_proplist_variant(DBusMessageIter *iter, pa_proplist *proplist);
void pa_dbus_append_proplist_variant_dict_entry(DBusMessageIter *dict_iter, const char *key, pa_proplist *proplist);
-/* Helper functions for extracting the value argument of a Set call. If the
- * message is invalid, an error reply is sent and a negative number is
- * returned. */
-int pa_dbus_get_basic_set_property_arg(DBusConnection *c, DBusMessage *msg, int type, void *data);
-int pa_dbus_get_fixed_array_set_property_arg(DBusConnection *c, DBusMessage *msg, int item_type, void *data, unsigned *n);
-
-/* If the arguments can't be read from the iterator, an error reply is sent and
- * a negative number is returned. */
-int pa_dbus_get_basic_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int type, void *data);
-int pa_dbus_get_fixed_array_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter, int item_type, void *array, unsigned *n);
-
-/* Returns a new proplist that the caller has to free. If the proplist can't be
- * read from the iterator, an error reply is sent and NULL is returned. */
+/* Returns a new proplist that the caller has to free. If the proplist contains
+ * invalid keys, an error reply is sent and NULL is returned. The iterator must
+ * point to "a{say}" element. This function calls dbus_message_iter_next(iter)
+ * before returning. */
pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter);
#endif
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index d1e19ff..9102251 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -257,37 +257,90 @@ static void update_introspection(struct object_entry *oe) {
oe->introspection = pa_strbuf_tostring_free(buf);
}
+/* Return value of find_handler() and its subfunctions. */
enum find_result_t {
- FOUND_METHOD,
+ /* The received message is a valid .Get call. */
FOUND_GET_PROPERTY,
+
+ /* The received message is a valid .Set call. */
FOUND_SET_PROPERTY,
+
+ /* The received message is a valid .GetAll call. */
FOUND_GET_ALL,
+
+ /* The received message is a valid method call. */
+ FOUND_METHOD,
+
+ /* The interface of the received message hasn't been registered for the
+ * destination object. */
+ NO_SUCH_INTERFACE,
+
+ /* No property handler was found for the received .Get or .Set call. */
+ NO_SUCH_PROPERTY,
+
+ /* The interface argument of a property call didn't match any registered
+ * interface. */
+ NO_SUCH_PROPERTY_INTERFACE,
+
+ /* The received message called .Get or .Set for a property whose access
+ * mode doesn't match the call. */
PROPERTY_ACCESS_DENIED,
+
+ /* The new value signature of a .Set call didn't match the expexted
+ * signature. */
+ INVALID_PROPERTY_SIG,
+
+ /* No method handler was found for the received message. */
NO_SUCH_METHOD,
- NO_SUCH_PROPERTY,
- INVALID_MESSAGE_ARGUMENTS
+
+ /* The signature of the received message didn't match the expected
+ * signature. Despite the name, this can also be returned for a property
+ * call if its message signature is invalid. */
+ INVALID_METHOD_SIG
};
-static enum find_result_t find_handler_by_property(struct object_entry *obj_entry,
- DBusMessage *msg,
- const char *property,
- struct interface_entry **iface_entry,
- pa_dbus_property_handler **property_handler) {
+/* Data for resolving the correct reaction to a received message. */
+struct call_info {
+ DBusMessage *message; /* The received message. */
+ struct object_entry *obj_entry;
+ const char *interface; /* Destination interface name (extracted from the message). */
+ struct interface_entry *iface_entry;
+
+ const char *property; /* Property name (extracted from the message). */
+ const char *property_interface; /* The interface argument of a property call is stored here. */
+ pa_dbus_property_handler *property_handler;
+ const char *expected_property_sig; /* Property signature from the introspection data. */
+ const char *property_sig; /* The signature of the new value in the received .Set message. */
+ DBusMessageIter variant_iter; /* Iterator pointing to the beginning of the new value variant of a .Set call. */
+
+ const char *method; /* Method name (extracted from the message). */
+ pa_dbus_method_handler *method_handler;
+ const char *expected_method_sig; /* Method signature from the introspection data. */
+ const char *method_sig; /* The signature of the received message. */
+};
+
+/* Called when call_info->property has been set and the property interface has
+ * not been given. In case of a Set call, call_info->property_sig is also set,
+ * which is checked against the expected value in this function. */
+static enum find_result_t find_handler_by_property(struct call_info *call_info) {
void *state = NULL;
- pa_assert(obj_entry);
- pa_assert(msg);
- pa_assert(property);
- pa_assert(iface_entry);
- pa_assert(property_handler);
-
- PA_HASHMAP_FOREACH(*iface_entry, obj_entry->interfaces, state) {
- if ((*property_handler = pa_hashmap_get((*iface_entry)->property_handlers, property))) {
- if (dbus_message_has_member(msg, "Get"))
- return (*property_handler)->get_cb ? FOUND_GET_PROPERTY : PROPERTY_ACCESS_DENIED;
- else if (dbus_message_has_member(msg, "Set"))
- return (*property_handler)->set_cb ? FOUND_SET_PROPERTY : PROPERTY_ACCESS_DENIED;
- else
+ pa_assert(call_info);
+
+ PA_HASHMAP_FOREACH(call_info->iface_entry, call_info->obj_entry->interfaces, state) {
+ if ((call_info->property_handler = pa_hashmap_get(call_info->iface_entry->property_handlers, call_info->property))) {
+ if (pa_streq(call_info->method, "Get"))
+ return call_info->property_handler->get_cb ? FOUND_GET_PROPERTY : PROPERTY_ACCESS_DENIED;
+
+ else if (pa_streq(call_info->method, "Set")) {
+ call_info->expected_property_sig = call_info->property_handler->type;
+
+ if (pa_streq(call_info->property_sig, call_info->expected_property_sig))
+ return call_info->property_handler->set_cb ? FOUND_SET_PROPERTY : PROPERTY_ACCESS_DENIED;
+ else
+ return INVALID_PROPERTY_SIG;
+
+ } else
pa_assert_not_reached();
}
}
@@ -295,120 +348,138 @@ static enum find_result_t find_handler_by_property(struct object_entry *obj_entr
return NO_SUCH_PROPERTY;
}
-static enum find_result_t find_handler_by_method(struct object_entry *obj_entry,
- const char *method,
- struct interface_entry **iface_entry,
- pa_dbus_method_handler **method_handler) {
+static enum find_result_t find_handler_by_method(struct call_info *call_info) {
void *state = NULL;
- pa_assert(obj_entry);
- pa_assert(method);
- pa_assert(iface_entry);
- pa_assert(method_handler);
+ pa_assert(call_info);
- PA_HASHMAP_FOREACH(*iface_entry, obj_entry->interfaces, state) {
- if ((*method_handler = pa_hashmap_get((*iface_entry)->method_handlers, method)))
+ PA_HASHMAP_FOREACH(call_info->iface_entry, call_info->obj_entry->interfaces, state) {
+ if ((call_info->method_handler = pa_hashmap_get(call_info->iface_entry->method_handlers, call_info->method)))
return FOUND_METHOD;
}
return NO_SUCH_METHOD;
}
-static enum find_result_t find_handler_from_properties_call(struct object_entry *obj_entry,
- DBusMessage *msg,
- struct interface_entry **iface_entry,
- pa_dbus_property_handler **property_handler,
- const char **attempted_property) {
- const char *interface;
+static enum find_result_t find_handler_from_properties_call(struct call_info *call_info) {
+ pa_assert(call_info);
- pa_assert(obj_entry);
- pa_assert(msg);
- pa_assert(iface_entry);
+ if (pa_streq(call_info->method, "GetAll")) {
+ call_info->expected_method_sig = "s";
+ if (!pa_streq(call_info->method_sig, call_info->expected_method_sig))
+ return INVALID_METHOD_SIG;
- if (dbus_message_has_member(msg, "GetAll")) {
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID))
- return INVALID_MESSAGE_ARGUMENTS;
+ pa_assert_se(dbus_message_get_args(call_info->message, NULL,
+ DBUS_TYPE_STRING, &call_info->property_interface,
+ DBUS_TYPE_INVALID));
- if (*interface) {
- if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)))
+ if (*call_info->property_interface) {
+ if ((call_info->iface_entry = pa_hashmap_get(call_info->obj_entry->interfaces, call_info->property_interface)))
return FOUND_GET_ALL;
- else {
- return NO_SUCH_METHOD; /* XXX: NO_SUCH_INTERFACE or something like that might be more accurate. */
- }
+ else
+ return NO_SUCH_PROPERTY_INTERFACE;
+
} else {
- pa_assert_se((*iface_entry = pa_hashmap_first(obj_entry->interfaces)));
+ pa_assert_se(call_info->iface_entry = pa_hashmap_first(call_info->obj_entry->interfaces));
return FOUND_GET_ALL;
}
- } else {
- if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &interface, DBUS_TYPE_STRING, attempted_property, DBUS_TYPE_INVALID))
- return INVALID_MESSAGE_ARGUMENTS;
-
- if (*interface) {
- if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)) &&
- (*property_handler = pa_hashmap_get((*iface_entry)->property_handlers, *attempted_property))) {
- if (dbus_message_has_member(msg, "Get"))
- return (*property_handler)->get_cb ? FOUND_GET_PROPERTY : PROPERTY_ACCESS_DENIED;
- else if (dbus_message_has_member(msg, "Set"))
- return (*property_handler)->set_cb ? FOUND_SET_PROPERTY : PROPERTY_ACCESS_DENIED;
+
+ } else if (pa_streq(call_info->method, "Get")) {
+ call_info->expected_method_sig = "ss";
+ if (!pa_streq(call_info->method_sig, call_info->expected_method_sig))
+ return INVALID_METHOD_SIG;
+
+ pa_assert_se(dbus_message_get_args(call_info->message, NULL,
+ DBUS_TYPE_STRING, &call_info->property_interface,
+ DBUS_TYPE_STRING, &call_info->property,
+ DBUS_TYPE_INVALID));
+
+ if (*call_info->property_interface) {
+ if (!(call_info->iface_entry = pa_hashmap_get(call_info->obj_entry->interfaces, call_info->property_interface)))
+ return NO_SUCH_PROPERTY_INTERFACE;
+ else if ((call_info->property_handler =
+ pa_hashmap_get(call_info->iface_entry->property_handlers, call_info->property)))
+ return FOUND_GET_PROPERTY;
+ else
+ return NO_SUCH_PROPERTY;
+
+ } else
+ return find_handler_by_property(call_info);
+
+ } else if (pa_streq(call_info->method, "Set")) {
+ DBusMessageIter msg_iter;
+
+ call_info->expected_method_sig = "ssv";
+ if (!pa_streq(call_info->method_sig, call_info->expected_method_sig))
+ return INVALID_METHOD_SIG;
+
+ pa_assert_se(dbus_message_iter_init(call_info->message, &msg_iter));
+
+ dbus_message_iter_get_basic(&msg_iter, &call_info->property_interface);
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+ dbus_message_iter_get_basic(&msg_iter, &call_info->property);
+ pa_assert_se(dbus_message_iter_next(&msg_iter));
+
+ dbus_message_iter_recurse(&msg_iter, &call_info->variant_iter);
+
+ call_info->property_sig = dbus_message_iter_get_signature(&call_info->variant_iter);
+
+ if (*call_info->property_interface) {
+ if (!(call_info->iface_entry = pa_hashmap_get(call_info->obj_entry->interfaces, call_info->property_interface)))
+ return NO_SUCH_PROPERTY_INTERFACE;
+
+ else if ((call_info->property_handler =
+ pa_hashmap_get(call_info->iface_entry->property_handlers, call_info->property))) {
+ call_info->expected_property_sig = call_info->property_handler->type;
+
+ if (pa_streq(call_info->property_sig, call_info->expected_property_sig))
+ return FOUND_SET_PROPERTY;
else
- pa_assert_not_reached();
+ return INVALID_PROPERTY_SIG;
+
} else
return NO_SUCH_PROPERTY;
+
} else
- return find_handler_by_property(obj_entry, msg, *attempted_property, iface_entry, property_handler);
- }
-}
+ return find_handler_by_property(call_info);
-static enum find_result_t find_handler(struct object_entry *obj_entry,
- DBusMessage *msg,
- struct interface_entry **iface_entry,
- pa_dbus_method_handler **method_handler,
- pa_dbus_property_handler **property_handler,
- const char **attempted_property) {
- const char *interface;
+ } else
+ pa_assert_not_reached();
+}
- pa_assert(obj_entry);
- pa_assert(msg);
- pa_assert(iface_entry);
- pa_assert(method_handler);
- pa_assert(property_handler);
- pa_assert(attempted_property);
+static enum find_result_t find_handler(struct call_info *call_info) {
+ pa_assert(call_info);
- *iface_entry = NULL;
- *method_handler = NULL;
+ if (call_info->interface) {
+ if (pa_streq(call_info->interface, DBUS_INTERFACE_PROPERTIES))
+ return find_handler_from_properties_call(call_info);
- if (dbus_message_has_interface(msg, DBUS_INTERFACE_PROPERTIES))
- return find_handler_from_properties_call(obj_entry, msg, iface_entry, property_handler, attempted_property);
+ else if (!(call_info->iface_entry = pa_hashmap_get(call_info->obj_entry->interfaces, call_info->interface)))
+ return NO_SUCH_INTERFACE;
- else if ((interface = dbus_message_get_interface(msg))) {
- if ((*iface_entry = pa_hashmap_get(obj_entry->interfaces, interface)) &&
- (*method_handler = pa_hashmap_get((*iface_entry)->method_handlers, dbus_message_get_member(msg))))
+ else if ((call_info->method_handler = pa_hashmap_get(call_info->iface_entry->method_handlers, call_info->method)))
return FOUND_METHOD;
- else {
- pa_log("Message has unknown interface or there's no method handler.");
+
+ else
return NO_SUCH_METHOD;
- }
} else { /* The method call doesn't contain an interface. */
- if (dbus_message_has_member(msg, "Get") || dbus_message_has_member(msg, "Set") || dbus_message_has_member(msg, "GetAll")) {
- if (find_handler_by_method(obj_entry, dbus_message_get_member(msg), iface_entry, method_handler) == FOUND_METHOD)
- return FOUND_METHOD; /* The object has a method named Get, Set or GetAll in some other interface than .Properties. */
+ if (pa_streq(call_info->method, "Get") || pa_streq(call_info->method, "Set") || pa_streq(call_info->method, "GetAll")) {
+ if (find_handler_by_method(call_info) == FOUND_METHOD)
+ /* The object has a method named Get, Set or GetAll in some other interface than .Properties. */
+ return FOUND_METHOD;
else
/* Assume this is a .Properties call. */
- return find_handler_from_properties_call(obj_entry, msg, iface_entry, property_handler, attempted_property);
+ return find_handler_from_properties_call(call_info);
} else /* This is not a .Properties call. */
- return find_handler_by_method(obj_entry, dbus_message_get_member(msg), iface_entry, method_handler);
+ return find_handler_by_method(call_info);
}
}
static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessage *message, void *user_data) {
pa_dbus_protocol *p = user_data;
- struct object_entry *obj_entry = NULL;
- struct interface_entry *iface_entry = NULL;
- pa_dbus_method_handler *method_handler = NULL;
- pa_dbus_property_handler *property_handler = NULL;
- const char *attempted_property = NULL;
+ struct call_info call_info;
pa_assert(connection);
pa_assert(message);
@@ -423,49 +494,72 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
dbus_message_get_interface(message),
dbus_message_get_member(message));
- pa_assert_se((obj_entry = pa_hashmap_get(p->objects, dbus_message_get_path(message))));
+ call_info.message = message;
+ pa_assert_se(call_info.obj_entry = pa_hashmap_get(p->objects, dbus_message_get_path(message)));
+ call_info.interface = dbus_message_get_interface(message);
+ pa_assert_se(call_info.method = dbus_message_get_member(message));
+ pa_assert_se(call_info.method_sig = dbus_message_get_signature(message));
if (dbus_message_is_method_call(message, "org.freedesktop.DBus.Introspectable", "Introspect") ||
(!dbus_message_get_interface(message) && dbus_message_has_member(message, "Introspect"))) {
- pa_dbus_send_basic_value_reply(connection, message, DBUS_TYPE_STRING, &obj_entry->introspection);
+ pa_dbus_send_basic_value_reply(connection, message, DBUS_TYPE_STRING, &call_info.obj_entry->introspection);
goto finish;
}
- switch (find_handler(obj_entry, message, &iface_entry, &method_handler, &property_handler, &attempted_property)) {
- case FOUND_METHOD:
- method_handler->receive_cb(connection, message, iface_entry->userdata);
- break;
-
+ switch (find_handler(&call_info)) {
case FOUND_GET_PROPERTY:
- property_handler->get_cb(connection, message, iface_entry->userdata);
+ call_info.property_handler->get_cb(connection, message, call_info.iface_entry->userdata);
break;
case FOUND_SET_PROPERTY:
- property_handler->set_cb(connection, message, iface_entry->userdata);
+ call_info.property_handler->set_cb(connection, message, &call_info.variant_iter, call_info.iface_entry->userdata);
+ break;
+
+ case FOUND_METHOD:
+ call_info.method_handler->receive_cb(connection, message, call_info.iface_entry->userdata);
break;
case FOUND_GET_ALL:
- if (iface_entry->get_all_properties_cb)
- iface_entry->get_all_properties_cb(connection, message, iface_entry->userdata);
- /* TODO: Write an else branch where a dummy response is sent. */
+ if (call_info.iface_entry->get_all_properties_cb)
+ call_info.iface_entry->get_all_properties_cb(connection, message, call_info.iface_entry->userdata);
+ else {
+ DBusMessage *dummy_reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusMessageIter dict_iter;
+
+ pa_assert_se(dummy_reply = dbus_message_new_method_return(message));
+ dbus_message_iter_init_append(dummy_reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(connection, dummy_reply, NULL));
+ dbus_message_unref(dummy_reply);
+ }
break;
case PROPERTY_ACCESS_DENIED:
- pa_dbus_send_error(connection, message, DBUS_ERROR_ACCESS_DENIED, "%s access denied for property %s", dbus_message_get_member(message), attempted_property);
+ pa_dbus_send_error(connection, message, DBUS_ERROR_ACCESS_DENIED,
+ "%s access denied for property %s", call_info.method, call_info.property);
break;
case NO_SUCH_METHOD:
- pa_dbus_send_error(connection, message, DBUS_ERROR_UNKNOWN_METHOD, "%s: No such method", dbus_message_get_member(message));
+ pa_dbus_send_error(connection, message, DBUS_ERROR_UNKNOWN_METHOD, "No such method: %s", call_info.method);
break;
case NO_SUCH_PROPERTY:
- pa_dbus_send_error(connection, message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "%s: No such property", attempted_property);
+ pa_dbus_send_error(connection, message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "No such property: %s", call_info.property);
break;
- case INVALID_MESSAGE_ARGUMENTS:
- pa_dbus_send_error(connection, message, DBUS_ERROR_INVALID_ARGS, "Invalid arguments for %s", dbus_message_get_member(message));
+ case INVALID_METHOD_SIG:
+ pa_dbus_send_error(connection, message, DBUS_ERROR_INVALID_ARGS,
+ "Invalid signature for method %s: '%s'. Expected '%s'.",
+ call_info.method, call_info.method_sig, call_info.expected_method_sig);
break;
+ case INVALID_PROPERTY_SIG:
+ pa_dbus_send_error(connection, message, DBUS_ERROR_INVALID_ARGS,
+ "Invalid signature for property %s: '%s'. Expected '%s'.",
+ call_info.property, call_info.property_sig, call_info.expected_property_sig);
+
default:
pa_assert_not_reached();
}
@@ -821,7 +915,12 @@ pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn
return conn_entry->client;
}
-void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal, char **objects, unsigned n_objects) {
+void pa_dbus_protocol_add_signal_listener(
+ pa_dbus_protocol *p,
+ DBusConnection *conn,
+ const char *signal,
+ char **objects,
+ unsigned n_objects) {
struct connection_entry *conn_entry;
pa_idxset *object_set;
char *object_path;
@@ -981,7 +1080,12 @@ int pa_dbus_protocol_unregister_extension(pa_dbus_protocol *p, const char *name)
return 0;
}
-pa_hook_slot *pa_dbus_protocol_hook_connect(pa_dbus_protocol *p, pa_dbus_protocol_hook_t hook, pa_hook_priority_t prio, pa_hook_cb_t cb, void *data) {
+pa_hook_slot *pa_dbus_protocol_hook_connect(
+ pa_dbus_protocol *p,
+ pa_dbus_protocol_hook_t hook,
+ pa_hook_priority_t prio,
+ pa_hook_cb_t cb,
+ void *data) {
pa_assert(p);
pa_assert(hook < PA_DBUS_PROTOCOL_HOOK_MAX);
pa_assert(cb);
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
index d771b4f..6d100f7 100644
--- a/src/pulsecore/protocol-dbus.h
+++ b/src/pulsecore/protocol-dbus.h
@@ -56,9 +56,19 @@ void pa_dbus_protocol_unref(pa_dbus_protocol *p);
* message isn't a good idea; if you can't handle the message, reply with an
* error.
*
+ * The message signature is already checked against the introspection data, so
+ * you don't have to do that yourself.
+ *
* All messages are method calls. */
typedef void (*pa_dbus_receive_cb_t)(DBusConnection *conn, DBusMessage *msg, void *userdata);
+/* A specialized version of pa_dbus_receive_cb_t: the additional iterator
+ * argument points to the element inside the new value variant.
+ *
+ * The new value signature is checked against the introspection data, so you
+ * don't have to do that yourself. */
+typedef void (*pa_dbus_set_property_cb_t)(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
+
typedef struct pa_dbus_arg_info {
const char *name;
const char *type;
@@ -85,7 +95,7 @@ typedef struct pa_dbus_property_handler {
/* The access mode for the property is determined by checking whether
* get_cb or set_cb is NULL. */
pa_dbus_receive_cb_t get_cb;
- pa_dbus_receive_cb_t set_cb;
+ pa_dbus_set_property_cb_t set_cb;
} pa_dbus_property_handler;
typedef struct pa_dbus_interface_info {
@@ -140,7 +150,12 @@ pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn
* only signals from the given objects are delivered. If this function is
* called multiple time for the same connection and signal, the latest call
* always replaces the previous object list. */
-void pa_dbus_protocol_add_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal, char **objects, unsigned n_objects);
+void pa_dbus_protocol_add_signal_listener(
+ pa_dbus_protocol *p,
+ DBusConnection *conn,
+ const char *signal,
+ char **objects,
+ unsigned n_objects);
/* Disables the delivery of the signal for the given connection. The connection
* must have been registered. If signal is NULL, all signals are disabled. If
@@ -192,6 +207,11 @@ typedef enum pa_dbus_protocol_hook {
PA_DBUS_PROTOCOL_HOOK_MAX
} pa_dbus_protocol_hook_t;
-pa_hook_slot *pa_dbus_protocol_hook_connect(pa_dbus_protocol *p, pa_dbus_protocol_hook_t hook, pa_hook_priority_t prio, pa_hook_cb_t cb, void *data);
+pa_hook_slot *pa_dbus_protocol_hook_connect(
+ pa_dbus_protocol *p,
+ pa_dbus_protocol_hook_t hook,
+ pa_hook_priority_t prio,
+ pa_hook_cb_t cb,
+ void *data);
#endif
commit 0ad2d55cbe86d13d5cd355f2b5d59360d681ccc2
Merge: 0e09663 8bf2e3f
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sun Aug 30 20:07:31 2009 +0300
Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work
Conflicts:
src/modules/module-stream-restore.c
diff --cc src/modules/module-stream-restore.c
index d45cf79,d6e3c15..8389be6
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@@ -1834,40 -934,13 +1834,44 @@@ static int extension_cb(pa_native_proto
data.data = &entry;
data.size = sizeof(entry);
+ pa_log_debug("Client %s changes entry %s.",
+ pa_strnull(pa_proplist_gets(pa_native_connection_get_client(c)->proplist, PA_PROP_APPLICATION_PROCESS_BINARY)),
+ name);
+
- if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0)
+ if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0) {
+#ifdef HAVE_DBUS
+ struct dbus_entry *de;
+
+ if (old) {
+ pa_assert_se((de = pa_hashmap_get(u->dbus_entries, name)));
+
+ if ((old->device_valid != entry.device_valid)
+ || (entry.device_valid && !pa_streq(entry.device, old->device)))
+ send_device_updated_signal(de, &entry);
+
+ if ((old->volume_valid != entry.volume_valid)
- || (entry.volume_valid
- && (!pa_cvolume_equal(&entry.volume, &old->volume) || !pa_channel_map_equal(&entry.channel_map, &old->channel_map))))
++ || (entry.volume_valid && (!pa_cvolume_equal(&entry.volume, &old->volume)
++ || !pa_channel_map_equal(&entry.channel_map, &old->channel_map))))
+ send_volume_updated_signal(de, &entry);
+
+ if (!old->muted_valid || (entry.muted != old->muted))
+ send_mute_updated_signal(de, &entry);
+
+ } else {
+ de = dbus_entry_new(u, name);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de));
+ send_new_entry_signal(de);
+ }
+#endif
+
if (apply_immediately)
apply_entry(u, name, &entry);
+ }
+
+#ifdef HAVE_DBUS
+ if (old)
+ pa_xfree(old);
+#endif
}
trigger_save(u);
commit 411feaed15edcef685e88582d76eddc5acfd965e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 31 09:14:50 2009 +0300
dbusiface-core: Add signals FallbackSinkUnset and FallbackSourceUnset.
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 0507ac9..169e8e5 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -247,9 +247,11 @@ enum signal_index {
SIGNAL_NEW_SINK,
SIGNAL_SINK_REMOVED,
SIGNAL_FALLBACK_SINK_UPDATED,
+ SIGNAL_FALLBACK_SINK_UNSET,
SIGNAL_NEW_SOURCE,
SIGNAL_SOURCE_REMOVED,
SIGNAL_FALLBACK_SOURCE_UPDATED,
+ SIGNAL_FALLBACK_SOURCE_UNSET,
SIGNAL_NEW_PLAYBACK_STREAM,
SIGNAL_PLAYBACK_STREAM_REMOVED,
SIGNAL_NEW_RECORD_STREAM,
@@ -292,9 +294,11 @@ static pa_dbus_signal_info signals[SIGNAL_MAX] = {
[SIGNAL_NEW_SINK] = { .name = "NewSink", .arguments = new_sink_args, .n_arguments = 1 },
[SIGNAL_SINK_REMOVED] = { .name = "SinkRemoved", .arguments = sink_removed_args, .n_arguments = 1 },
[SIGNAL_FALLBACK_SINK_UPDATED] = { .name = "FallbackSinkUpdated", .arguments = fallback_sink_updated_args, .n_arguments = 1 },
+ [SIGNAL_FALLBACK_SINK_UNSET] = { .name = "FallbackSinkUnset", .arguments = NULL, .n_arguments = 0 },
[SIGNAL_NEW_SOURCE] = { .name = "NewSource", .arguments = new_source_args, .n_arguments = 1 },
[SIGNAL_SOURCE_REMOVED] = { .name = "SourceRemoved", .arguments = source_removed_args, .n_arguments = 1 },
[SIGNAL_FALLBACK_SOURCE_UPDATED] = { .name = "FallbackSourceUpdated", .arguments = fallback_source_updated_args, .n_arguments = 1 },
+ [SIGNAL_FALLBACK_SOURCE_UNSET] = { .name = "FallbackSourceUnset", .arguments = NULL, .n_arguments = 0 },
[SIGNAL_NEW_PLAYBACK_STREAM] = { .name = "NewPlaybackStream", .arguments = new_playback_stream_args, .n_arguments = 1 },
[SIGNAL_PLAYBACK_STREAM_REMOVED] = { .name = "PlaybackStreamRemoved", .arguments = playback_stream_removed_args, .n_arguments = 1 },
[SIGNAL_NEW_RECORD_STREAM] = { .name = "NewRecordStream", .arguments = new_record_stream_args, .n_arguments = 1 },
@@ -1555,6 +1559,14 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
signal = NULL;
+
+ } else if (!new_fallback_sink) {
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SINK_UNSET].name)));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
}
}
@@ -1574,6 +1586,14 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
dbus_message_unref(signal);
signal = NULL;
+
+ } else if (!new_fallback_source) {
+ pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SOURCE_UNSET].name)));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
+ dbus_message_unref(signal);
+ signal = NULL;
}
}
break;
commit 8a28e5de941cece0fccaac1c2babc502e2b2d46f
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 31 17:17:09 2009 +0300
dbus: Change IsMuted property names to Mute.
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 2752511..3a747a4 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -48,8 +48,8 @@ static void handle_get_has_flat_volume(DBusConnection *conn, DBusMessage *msg, v
static void handle_get_has_convertible_to_decibel_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_base_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_volume_steps(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
+static void handle_get_mute(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_mute(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_has_hardware_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_has_hardware_mute(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_configured_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -91,7 +91,7 @@ struct pa_dbusiface_device {
enum device_type type;
char *path;
pa_cvolume volume;
- pa_bool_t is_muted;
+ dbus_bool_t mute;
union {
pa_sink_state_t sink_state;
pa_source_state_t source_state;
@@ -119,7 +119,7 @@ enum property_handler_index {
PROPERTY_HANDLER_HAS_CONVERTIBLE_TO_DECIBEL_VOLUME,
PROPERTY_HANDLER_BASE_VOLUME,
PROPERTY_HANDLER_VOLUME_STEPS,
- PROPERTY_HANDLER_IS_MUTED,
+ PROPERTY_HANDLER_MUTE,
PROPERTY_HANDLER_HAS_HARDWARE_VOLUME,
PROPERTY_HANDLER_HAS_HARDWARE_MUTE,
PROPERTY_HANDLER_CONFIGURED_LATENCY,
@@ -158,7 +158,7 @@ static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
[PROPERTY_HANDLER_HAS_CONVERTIBLE_TO_DECIBEL_VOLUME] = { .property_name = "HasConvertibleToDecibelVolume", .type = "b", .get_cb = handle_get_has_convertible_to_decibel_volume, .set_cb = NULL },
[PROPERTY_HANDLER_BASE_VOLUME] = { .property_name = "BaseVolume", .type = "u", .get_cb = handle_get_base_volume, .set_cb = NULL },
[PROPERTY_HANDLER_VOLUME_STEPS] = { .property_name = "VolumeSteps", .type = "u", .get_cb = handle_get_volume_steps, .set_cb = NULL },
- [PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_get_is_muted, .set_cb = handle_set_is_muted },
+ [PROPERTY_HANDLER_MUTE] = { .property_name = "Mute", .type = "b", .get_cb = handle_get_mute, .set_cb = handle_set_mute },
[PROPERTY_HANDLER_HAS_HARDWARE_VOLUME] = { .property_name = "HasHardwareVolume", .type = "b", .get_cb = handle_get_has_hardware_volume, .set_cb = NULL },
[PROPERTY_HANDLER_HAS_HARDWARE_MUTE] = { .property_name = "HasHardwareMute", .type = "b", .get_cb = handle_get_has_hardware_mute, .set_cb = NULL },
[PROPERTY_HANDLER_CONFIGURED_LATENCY] = { .property_name = "ConfiguredLatency", .type = "t", .get_cb = handle_get_configured_latency, .set_cb = NULL },
@@ -507,31 +507,31 @@ static void handle_get_volume_steps(DBusConnection *conn, DBusMessage *msg, void
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &volume_steps);
}
-static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_get_mute(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_device *d = userdata;
pa_assert(conn);
pa_assert(msg);
pa_assert(d);
- pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &d->is_muted);
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &d->mute);
}
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
+static void handle_set_mute(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_device *d = userdata;
- dbus_bool_t is_muted = FALSE;
+ dbus_bool_t mute = FALSE;
pa_assert(conn);
pa_assert(msg);
pa_assert(iter);
pa_assert(d);
- dbus_message_iter_get_basic(iter, &is_muted);
+ dbus_message_iter_get_basic(iter, &mute);
if (d->type == DEVICE_TYPE_SINK)
- pa_sink_set_mute(d->sink, is_muted, TRUE);
+ pa_sink_set_mute(d->sink, mute, TRUE);
else
- pa_source_set_mute(d->source, is_muted, TRUE);
+ pa_source_set_mute(d->source, mute, TRUE);
pa_dbus_send_empty_reply(conn, msg);
}
@@ -897,7 +897,7 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_CONVERTIBLE_TO_DECIBEL_VOLUME].property_name, DBUS_TYPE_BOOLEAN, &has_convertible_to_decibel_volume);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_BASE_VOLUME].property_name, DBUS_TYPE_UINT32, &base_volume);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VOLUME_STEPS].property_name, DBUS_TYPE_UINT32, &volume_steps);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &d->is_muted);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_MUTE].property_name, DBUS_TYPE_BOOLEAN, &d->mute);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_HARDWARE_VOLUME].property_name, DBUS_TYPE_BOOLEAN, &has_hardware_volume);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_HAS_HARDWARE_MUTE].property_name, DBUS_TYPE_BOOLEAN, &has_hardware_mute);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_CONFIGURED_LATENCY].property_name, DBUS_TYPE_UINT64, &configured_latency);
@@ -1065,7 +1065,7 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
pa_dbusiface_device *d = userdata;
DBusMessage *signal = NULL;
const pa_cvolume *new_volume = NULL;
- pa_bool_t new_muted = FALSE;
+ pa_bool_t new_mute = FALSE;
pa_sink_state_t new_sink_state = 0;
pa_source_state_t new_source_state = 0;
pa_device_port *new_active_port = NULL;
@@ -1111,15 +1111,15 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
signal = NULL;
}
- new_muted = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_mute(d->sink, FALSE) : pa_source_get_mute(d->source, FALSE);
+ new_mute = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_mute(d->sink, FALSE) : pa_source_get_mute(d->source, FALSE);
- if (d->is_muted != new_muted) {
- d->is_muted = new_muted;
+ if (d->mute != new_mute) {
+ d->mute = new_mute;
pa_assert_se(signal = dbus_message_new_signal(d->path,
PA_DBUSIFACE_DEVICE_INTERFACE,
signals[SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &d->is_muted, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &d->mute, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -1201,7 +1201,7 @@ pa_dbusiface_device *pa_dbusiface_device_new_sink(pa_dbusiface_core *core, pa_si
d->type = DEVICE_TYPE_SINK;
d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SINK_OBJECT_NAME, sink->index);
d->volume = *pa_sink_get_volume(sink, FALSE);
- d->is_muted = pa_sink_get_mute(sink, FALSE);
+ d->mute = pa_sink_get_mute(sink, FALSE);
d->sink_state = pa_sink_get_state(sink);
d->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
d->next_port_index = 0;
@@ -1239,7 +1239,7 @@ pa_dbusiface_device *pa_dbusiface_device_new_source(pa_dbusiface_core *core, pa_
d->type = DEVICE_TYPE_SOURCE;
d->path = pa_sprintf_malloc("%s/%s%u", PA_DBUS_CORE_OBJECT_PATH, SOURCE_OBJECT_NAME, source->index);
d->volume = *pa_source_get_volume(source, FALSE);
- d->is_muted = pa_source_get_mute(source, FALSE);
+ d->mute = pa_source_get_mute(source, FALSE);
d->source_state = pa_source_get_state(source);
d->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
d->next_port_index = 0;
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index a5f9bb5..04a45e6 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -53,7 +53,7 @@ struct pa_dbusiface_stream {
};
uint32_t sample_rate;
pa_cvolume volume;
- pa_bool_t is_muted;
+ dbus_bool_t mute;
pa_proplist *proplist;
pa_dbus_protocol *dbus_protocol;
@@ -71,8 +71,8 @@ static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void
static void handle_get_channels(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
-static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
+static void handle_get_mute(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_mute(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_get_buffer_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_device_latency(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_resample_method(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -93,7 +93,7 @@ enum property_handler_index {
PROPERTY_HANDLER_SAMPLE_RATE,
PROPERTY_HANDLER_CHANNELS,
PROPERTY_HANDLER_VOLUME,
- PROPERTY_HANDLER_IS_MUTED,
+ PROPERTY_HANDLER_MUTE,
PROPERTY_HANDLER_BUFFER_LATENCY,
PROPERTY_HANDLER_DEVICE_LATENCY,
PROPERTY_HANDLER_RESAMPLE_METHOD,
@@ -111,7 +111,7 @@ static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX] = {
[PROPERTY_HANDLER_SAMPLE_RATE] = { .property_name = "SampleRate", .type = "u", .get_cb = handle_get_sample_rate, .set_cb = NULL },
[PROPERTY_HANDLER_CHANNELS] = { .property_name = "Channels", .type = "au", .get_cb = handle_get_channels, .set_cb = NULL },
[PROPERTY_HANDLER_VOLUME] = { .property_name = "Volume", .type = "au", .get_cb = handle_get_volume, .set_cb = handle_set_volume },
- [PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_get_is_muted, .set_cb = handle_set_is_muted },
+ [PROPERTY_HANDLER_MUTE] = { .property_name = "Mute", .type = "b", .get_cb = handle_get_mute, .set_cb = handle_set_mute },
[PROPERTY_HANDLER_BUFFER_LATENCY] = { .property_name = "BufferLatency", .type = "t", .get_cb = handle_get_buffer_latency, .set_cb = NULL },
[PROPERTY_HANDLER_DEVICE_LATENCY] = { .property_name = "DeviceLatency", .type = "t", .get_cb = handle_get_device_latency, .set_cb = NULL },
[PROPERTY_HANDLER_RESAMPLE_METHOD] = { .property_name = "ResampleMethod", .type = "s", .get_cb = handle_get_resample_method, .set_cb = NULL },
@@ -390,7 +390,7 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessag
pa_dbus_send_empty_reply(conn, msg);
}
-static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_get_mute(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_stream *s = userdata;
pa_assert(conn);
@@ -402,26 +402,26 @@ static void handle_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *us
return;
}
- pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &s->is_muted);
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &s->mute);
}
-static void handle_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
+static void handle_set_mute(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
pa_dbusiface_stream *s = userdata;
- dbus_bool_t is_muted = FALSE;
+ dbus_bool_t mute = FALSE;
pa_assert(conn);
pa_assert(msg);
pa_assert(iter);
pa_assert(s);
- dbus_message_iter_get_basic(iter, &is_muted);
+ dbus_message_iter_get_basic(iter, &mute);
if (s->type == STREAM_TYPE_RECORD) {
pa_dbus_send_error(conn, msg, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "Record streams don't have mute.");
return;
}
- pa_sink_input_set_mute(s->sink_input, is_muted, TRUE);
+ pa_sink_input_set_mute(s->sink_input, mute, TRUE);
pa_dbus_send_empty_reply(conn, msg);
};
@@ -561,7 +561,7 @@ static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *userdat
if (s->type == STREAM_TYPE_PLAYBACK) {
pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_VOLUME].property_name, DBUS_TYPE_UINT32, volume, s->volume.channels);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &s->is_muted);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_MUTE].property_name, DBUS_TYPE_BOOLEAN, &s->mute);
}
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_BUFFER_LATENCY].property_name, DBUS_TYPE_UINT64, &buffer_latency);
@@ -708,7 +708,7 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
if (s->type == STREAM_TYPE_PLAYBACK) {
pa_cvolume new_volume;
- pa_bool_t new_muted = FALSE;
+ pa_bool_t new_mute = FALSE;
pa_sink_input_get_volume(s->sink_input, &new_volume, TRUE);
@@ -733,15 +733,15 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
signal = NULL;
}
- new_muted = pa_sink_input_get_mute(s->sink_input);
+ new_mute = pa_sink_input_get_mute(s->sink_input);
- if (s->is_muted != new_muted) {
- s->is_muted = new_muted;
+ if (s->mute != new_mute) {
+ s->mute = new_mute;
pa_assert_se(signal = dbus_message_new_signal(s->path,
PA_DBUSIFACE_STREAM_INTERFACE,
signals[SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &s->is_muted, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &s->mute, DBUS_TYPE_INVALID));
pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
dbus_message_unref(signal);
@@ -823,7 +823,7 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_playback(pa_dbusiface_core *core, p
s->sink = pa_sink_ref(sink_input->sink);
s->sample_rate = sink_input->sample_spec.rate;
pa_sink_input_get_volume(sink_input, &s->volume, TRUE);
- s->is_muted = pa_sink_input_get_mute(sink_input);
+ s->mute = pa_sink_input_get_mute(sink_input);
s->proplist = pa_proplist_copy(sink_input->proplist);
s->dbus_protocol = pa_dbus_protocol_get(sink_input->core);
s->subscription = pa_subscription_new(sink_input->core, PA_SUBSCRIPTION_MASK_SINK_INPUT, subscription_cb, s);
@@ -851,7 +851,7 @@ pa_dbusiface_stream *pa_dbusiface_stream_new_record(pa_dbusiface_core *core, pa_
s->source = pa_source_ref(source_output->source);
s->sample_rate = source_output->sample_spec.rate;
pa_cvolume_init(&s->volume);
- s->is_muted = FALSE;
+ s->mute = FALSE;
s->proplist = pa_proplist_copy(source_output->proplist);
s->dbus_protocol = pa_dbus_protocol_get(source_output->core);
s->subscription = pa_subscription_new(source_output->core, PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT, subscription_cb, s);
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 8389be6..5a6c8a3 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -170,8 +170,8 @@ static void handle_entry_get_device(DBusConnection *conn, DBusMessage *msg, void
static void handle_entry_set_device(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_entry_get_volume(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
-static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata);
-static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
+static void handle_entry_get_mute(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_entry_set_mute(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata);
static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *userdata);
@@ -188,7 +188,7 @@ enum entry_property_handler_index {
ENTRY_PROPERTY_HANDLER_NAME,
ENTRY_PROPERTY_HANDLER_DEVICE,
ENTRY_PROPERTY_HANDLER_VOLUME,
- ENTRY_PROPERTY_HANDLER_IS_MUTED,
+ ENTRY_PROPERTY_HANDLER_MUTE,
ENTRY_PROPERTY_HANDLER_MAX
};
@@ -202,7 +202,7 @@ static pa_dbus_property_handler entry_property_handlers[ENTRY_PROPERTY_HANDLER_M
[ENTRY_PROPERTY_HANDLER_NAME] = { .property_name = "Name", .type = "s", .get_cb = handle_entry_get_name, .set_cb = NULL },
[ENTRY_PROPERTY_HANDLER_DEVICE] = { .property_name = "Device", .type = "s", .get_cb = handle_entry_get_device, .set_cb = handle_entry_set_device },
[ENTRY_PROPERTY_HANDLER_VOLUME] = { .property_name = "Volume", .type = "a(uu)", .get_cb = handle_entry_get_volume, .set_cb = handle_entry_set_volume },
- [ENTRY_PROPERTY_HANDLER_IS_MUTED] = { .property_name = "IsMuted", .type = "b", .get_cb = handle_entry_get_is_muted, .set_cb = handle_entry_set_is_muted }
+ [ENTRY_PROPERTY_HANDLER_MUTE] = { .property_name = "Mute", .type = "b", .get_cb = handle_entry_get_mute, .set_cb = handle_entry_set_mute }
};
enum method_handler_index {
@@ -216,11 +216,11 @@ enum entry_method_handler_index {
ENTRY_METHOD_HANDLER_MAX
};
-static pa_dbus_arg_info add_entry_args[] = { { "name", "s", "in" },
- { "device", "s", "in" },
- { "volume", "a(uu)", "in" },
- { "is_muted", "b", "in" },
- { "entry", "o", "out" } };
+static pa_dbus_arg_info add_entry_args[] = { { "name", "s", "in" },
+ { "device", "s", "in" },
+ { "volume", "a(uu)", "in" },
+ { "mute", "b", "in" },
+ { "entry", "o", "out" } };
static pa_dbus_arg_info get_entry_by_name_args[] = { { "name", "s", "in" }, { "entry", "o", "out" } };
static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
@@ -837,10 +837,10 @@ static void handle_entry_set_volume(DBusConnection *conn, DBusMessage *msg, DBus
pa_xfree(e);
}
-static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+static void handle_entry_get_mute(DBusConnection *conn, DBusMessage *msg, void *userdata) {
struct dbus_entry *de = userdata;
struct entry *e;
- dbus_bool_t muted;
+ dbus_bool_t mute;
pa_assert(conn);
pa_assert(msg);
@@ -848,16 +848,16 @@ static void handle_entry_get_is_muted(DBusConnection *conn, DBusMessage *msg, vo
pa_assert_se(e = read_entry(de->userdata, de->entry_name));
- muted = e->muted_valid ? e->muted : FALSE;
+ mute = e->muted_valid ? e->muted : FALSE;
- pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &muted);
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_BOOLEAN, &mute);
pa_xfree(e);
}
-static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
+static void handle_entry_set_mute(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, void *userdata) {
struct dbus_entry *de = userdata;
- pa_bool_t muted;
+ dbus_bool_t mute;
struct entry *e;
pa_bool_t updated;
@@ -866,17 +866,17 @@ static void handle_entry_set_is_muted(DBusConnection *conn, DBusMessage *msg, DB
pa_assert(iter);
pa_assert(de);
- dbus_message_iter_get_basic(iter, &muted);
+ dbus_message_iter_get_basic(iter, &mute);
pa_assert_se(e = read_entry(de->userdata, de->entry_name));
- updated = !e->muted_valid || e->muted != muted;
+ updated = !e->muted_valid || e->muted != mute;
if (updated) {
pa_datum key;
pa_datum value;
- e->muted = muted;
+ e->muted = mute;
e->muted_valid = TRUE;
key.data = de->entry_name;
@@ -902,7 +902,7 @@ static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *u
DBusMessageIter dict_iter;
DBusMessageIter dict_entry_iter;
const char *device;
- dbus_bool_t muted;
+ dbus_bool_t mute;
pa_assert(conn);
pa_assert(msg);
@@ -911,7 +911,7 @@ static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *u
pa_assert_se(e = read_entry(de->userdata, de->entry_name));
device = e->device_valid ? e->device : "";
- muted = e->muted_valid ? e->muted : FALSE;
+ mute = e->muted_valid ? e->muted : FALSE;
pa_assert_se((reply = dbus_message_new_method_return(msg)));
@@ -929,7 +929,7 @@ static void handle_entry_get_all(DBusConnection *conn, DBusMessage *msg, void *u
pa_assert_se(dbus_message_iter_close_container(&dict_iter, &dict_entry_iter));
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, entry_property_handlers[ENTRY_PROPERTY_HANDLER_IS_MUTED].property_name, DBUS_TYPE_BOOLEAN, &muted);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, entry_property_handlers[ENTRY_PROPERTY_HANDLER_MUTE].property_name, DBUS_TYPE_BOOLEAN, &mute);
pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
commit 587131917f9129c8347c789febb7e755dfb091de
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Mon Aug 31 18:12:55 2009 +0300
dbus-protocol: Implement argument type checking for normal methods.
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index 54550d2..546370f 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -101,7 +101,7 @@ static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
[METHOD_HANDLER_REMOVE_PROPERTIES] = {
.method_name = "RemoveProperties",
.arguments = remove_properties_args,
- .n_arguments = sizeof(update_properties_args) / sizeof(pa_dbus_arg_info),
+ .n_arguments = sizeof(remove_properties_args) / sizeof(pa_dbus_arg_info),
.receive_cb = handle_remove_properties }
};
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 9102251..5c1127b 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -72,6 +72,7 @@ struct connection_entry {
struct interface_entry {
char *name;
pa_hashmap *method_handlers;
+ pa_hashmap *method_signatures; /* Derived from method_handlers. Contains only "in" arguments. */
pa_hashmap *property_handlers;
pa_dbus_receive_cb_t get_all_properties_cb;
pa_dbus_signal_info *signals;
@@ -354,8 +355,14 @@ static enum find_result_t find_handler_by_method(struct call_info *call_info) {
pa_assert(call_info);
PA_HASHMAP_FOREACH(call_info->iface_entry, call_info->obj_entry->interfaces, state) {
- if ((call_info->method_handler = pa_hashmap_get(call_info->iface_entry->method_handlers, call_info->method)))
- return FOUND_METHOD;
+ if ((call_info->method_handler = pa_hashmap_get(call_info->iface_entry->method_handlers, call_info->method))) {
+ call_info->expected_method_sig = pa_hashmap_get(call_info->iface_entry->method_signatures, call_info->method);
+
+ if (pa_streq(call_info->method_sig, call_info->expected_method_sig))
+ return FOUND_METHOD;
+ else
+ return INVALID_METHOD_SIG;
+ }
}
return NO_SUCH_METHOD;
@@ -630,6 +637,31 @@ static pa_hashmap *create_method_handlers(const pa_dbus_interface_info *info) {
return handlers;
}
+static pa_hashmap *extract_method_signatures(pa_hashmap *method_handlers) {
+ pa_hashmap *signatures = NULL;
+ pa_dbus_method_handler *handler = NULL;
+ void *state = NULL;
+ pa_strbuf *sig_buf = NULL;
+ unsigned i = 0;
+
+ pa_assert(method_handlers);
+
+ signatures = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+
+ PA_HASHMAP_FOREACH(handler, method_handlers, state) {
+ sig_buf = pa_strbuf_new();
+
+ for (i = 0; i < handler->n_arguments; ++i) {
+ if (pa_streq(handler->arguments[i].direction, "in"))
+ pa_strbuf_puts(sig_buf, handler->arguments[i].type);
+ }
+
+ pa_hashmap_put(signatures, handler->method_name, pa_strbuf_tostring_free(sig_buf));
+ }
+
+ return signatures;
+}
+
static pa_hashmap *create_property_handlers(const pa_dbus_interface_info *info) {
pa_hashmap *handlers;
unsigned i = 0;
@@ -707,6 +739,7 @@ int pa_dbus_protocol_add_interface(pa_dbus_protocol *p,
iface_entry = pa_xnew(struct interface_entry, 1);
iface_entry->name = pa_xstrdup(info->name);
iface_entry->method_handlers = create_method_handlers(info);
+ iface_entry->method_signatures = extract_method_signatures(iface_entry->method_handlers);
iface_entry->property_handlers = create_property_handlers(info);
iface_entry->get_all_properties_cb = info->get_all_properties_cb;
iface_entry->signals = copy_signals(info);
@@ -760,6 +793,12 @@ static void method_handler_free_cb(void *p, void *userdata) {
pa_xfree((pa_dbus_arg_info *) h->arguments);
}
+static void method_signature_free_cb(void *p, void *userdata) {
+ pa_assert(p);
+
+ pa_xfree(p);
+}
+
static void property_handler_free_cb(void *p, void *userdata) {
pa_dbus_property_handler *h = p;
@@ -792,6 +831,7 @@ int pa_dbus_protocol_remove_interface(pa_dbus_protocol *p, const char* path, con
pa_xfree(iface_entry->name);
pa_hashmap_free(iface_entry->method_handlers, method_handler_free_cb, NULL);
+ pa_hashmap_free(iface_entry->method_signatures, method_signature_free_cb, NULL);
pa_hashmap_free(iface_entry->property_handlers, property_handler_free_cb, NULL);
for (i = 0; i < iface_entry->n_signals; ++i) {
commit bebaa491650c48697b861ec5e76816e9af1a8803
Merge: c6d330e 180ef1e
Author: Daniel Mack <daniel at caiaq.de>
Date: Mon Sep 14 16:25:35 2009 +0800
Merge branch 'master' of git://0pointer.de/pulseaudio
commit c1e59f7d762fb147bc5250ebddb9cf5639aba522
Merge: bebaa49 12f2111
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Sep 15 11:46:19 2009 +0800
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 94aa9097f4ded68623160d754a4bf2632b8efc79
Merge: c1e59f7 c194db7
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Sep 22 11:30:30 2009 +0800
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 431555030ead3aabad83028f359849314e95065e
Author: Jason Newton <jason at arcuid.wyred.org>
Date: Mon Jun 22 00:36:14 2009 -0700
module-equalizer-sink added
src/Makefile.am: added module-equalizer-sink
diff --git a/src/Makefile.am b/src/Makefile.am
index 6544e2a..10f9a79 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1006,6 +1006,7 @@ modlibexec_LTLIBRARIES += \
module-combine.la \
module-remap-sink.la \
module-ladspa-sink.la \
+ module-equalizer-sink.la \
module-esound-sink.la \
module-tunnel-sink.la \
module-tunnel-source.la \
@@ -1200,6 +1201,7 @@ SYMDEF_FILES = \
modules/module-combine-symdef.h \
modules/module-remap-sink-symdef.h \
modules/module-ladspa-sink-symdef.h \
+ modules/module-equalizer-sink-symdef.h \
modules/module-esound-compat-spawnfd-symdef.h \
modules/module-esound-compat-spawnpid-symdef.h \
modules/module-match-symdef.h \
@@ -1380,6 +1382,11 @@ module_ladspa_sink_la_CFLAGS = -DLADSPA_PATH=\"$(libdir)/ladspa:/usr/local/lib/l
module_ladspa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
module_ladspa_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_equalizer_sink_la_SOURCES = modules/module-equalizer-sink.c
+module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS) $(LIBOIL_CFLAGS)
+module_equalizer_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
+module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) $(LIBOIL_LIBS) -lfftw3f libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
module_match_la_SOURCES = modules/module-match.c
module_match_la_LDFLAGS = $(MODULE_LDFLAGS)
module_match_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
new file mode 100755
index 0000000..8b34fa0
--- /dev/null
+++ b/src/modules/module-equalizer-sink.c
@@ -0,0 +1,850 @@
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <math.h>
+#include <fftw3.h>
+#include <float.h>
+
+
+#include <pulse/xmalloc.h>
+#include <pulse/i18n.h>
+
+#include <pulsecore/core-error.h>
+#include <pulsecore/namereg.h>
+#include <pulsecore/sink.h>
+#include <pulsecore/module.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/thread.h>
+#include <pulsecore/thread-mq.h>
+#include <pulsecore/rtpoll.h>
+#include <pulsecore/sample-util.h>
+#include <pulsecore/ltdl-helper.h>
+#include <liboil/liboilfuncs.h>
+#include <liboil/liboil.h>
+
+
+#include <stdint.h>
+#include <time.h>
+
+
+#include "module-equalizer-sink-symdef.h"
+
+PA_MODULE_AUTHOR("Jason Newton");
+PA_MODULE_DESCRIPTION(_("General Purpose Equalizer"));
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(FALSE);
+PA_MODULE_USAGE(_("sink=<sink to connect to> "));
+
+#define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+
+struct userdata {
+ pa_core *core;
+ pa_module *module;
+ pa_sink *sink, *master;
+ pa_sink_input *sink_input;
+
+ size_t channels;
+ size_t fft_size; //length (res) of fft
+ size_t window_size;//even!
+ size_t overlap_size;
+ size_t samples_gathered;
+ size_t n_buffered_output;
+ size_t max_output;
+ float *H;//frequency response filter (magnitude based)
+ float *W;//windowing function (time domain)
+ float *work_buffer,**input,**overlap_accum,**output_buffer;
+ fftwf_complex *output_window;
+ fftwf_plan forward_plan,inverse_plan;
+
+ pa_memblockq *memblockq;
+};
+
+static const char* const valid_modargs[] = {
+ "sink_name",
+ "sink_properties",
+ "master",
+ "format",
+ "rate",
+ "channels",
+ "channel_map",
+ NULL
+};
+
+uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
+{
+ return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -
+ ((timeB_p->tv_sec * 1000000000) + timeB_p->tv_nsec);
+}
+
+void hanning_normalized_window(float *W,size_t window_size){
+ //h = sqrt(2)/2 * (1+cos(t*pi)) ./ sqrt( 1+cos(t*pi).^2 )
+ float c;
+ for(size_t i=0;i<window_size;++i){
+ c=cos(M_PI*i/(window_size-1));
+ W[i]=sqrt(2.0)/2.0*(1.0+c) / sqrt(1.0+c*c);
+ }
+}
+void hanning_window(float *W,size_t window_size){
+ //h=.5*(1-cos(2*pi*j/(window_size+1)), COLA for R=(M+1)/2
+ for(size_t i=0;i<window_size;++i){
+ W[i]=.5*(1-cos(2*M_PI*i/(window_size+1)));
+ }
+}
+void hamming_window(float *W,size_t window_size){
+ //h=.54-.46*cos(2*pi*j/(window_size-1))
+ //COLA for R=(M-1)/2,(M-1)/4 etc when endpoints are divided by 2
+ //or one endpoint is zeroed
+ float m;
+ for(size_t i=0;i<window_size;++i){
+ m=i;
+ m/=(window_size-1);
+ W[i]=.54-.46*cos(2*M_PI*m);
+ }
+ W[0]/=2;
+ W[window_size-1]/=2;
+}
+void blackman_window(float *W,size_t window_size){
+ //h=.42-.5*cos(2*pi*m)+.08*cos(4*pi*m), m=(0:W-1)/(W-1)
+ //COLA for R=(M-1)/3 when M is odd and R is an integer
+ //R=M/3 when M is even and R is an integer
+ float m;
+ for(size_t i=0;i<window_size;++i){
+ m=i;
+ m/=(window_size-1);
+ W[i]=.42-.5*cos(2*M_PI*m)+.08*cos(4*M_PI*m);
+ }
+}
+
+
+void sin_window(float *W,size_t window_size){
+ //h = (cos(t*pi)+1)/2 .* float(abs(t)<1);
+ for(size_t i=0;i<window_size;++i){
+ W[i]=sin(M_PI*i/(window_size-1));
+ }
+}
+
+
+void array_out(const char *name,float *a,size_t length){
+ FILE *p=fopen(name,"w");
+ for(size_t i=0;i<length;++i){
+ fprintf(p,"%e,",a[i]);
+ //if(i%1000==0){
+ // fprintf(p,"\n");
+ //}
+ }
+ fprintf(p,"\n");
+ fclose(p);
+}
+
+
+/* Called from I/O thread context */
+static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+ struct userdata *u = PA_SINK(o)->userdata;
+
+ switch (code) {
+
+ case PA_SINK_MESSAGE_GET_LATENCY: {
+ pa_usec_t usec = 0;
+ pa_sample_spec *ss=&u->sink->sample_spec;
+
+ /* Get the latency of the master sink */
+ if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
+ usec = 0;
+
+ usec+=pa_bytes_to_usec(u->n_buffered_output*pa_frame_size(ss),ss);
+ /* Add the latency internal to our sink input on top */
+ usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
+ *((pa_usec_t*) data) = usec;
+ return 0;
+ }
+ }
+
+ return pa_sink_process_msg(o, code, data, offset, chunk);
+}
+
+
+/* Called from main context */
+static int sink_set_state(pa_sink *s, pa_sink_state_t state) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (PA_SINK_IS_LINKED(state) &&
+ u->sink_input &&
+ PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+
+ pa_sink_input_cork(u->sink_input, state == PA_SINK_SUSPENDED);
+
+ return 0;
+}
+
+/* Called from I/O thread context */
+static void sink_request_rewind(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ /* Just hand this one over to the master sink */
+ pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes + pa_memblockq_get_length(u->memblockq), TRUE, FALSE, FALSE);
+}
+
+/* Called from I/O thread context */
+static void sink_update_requested_latency(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ /* Just hand this one over to the master sink */
+ pa_sink_input_set_requested_latency_within_thread(
+ u->sink_input,
+ pa_sink_get_requested_latency_within_thread(s));
+}
+
+/* Called from I/O thread context */
+static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
+ struct userdata *u;
+ float *src, *dst;
+ size_t c;
+ pa_memchunk tchunk;
+ pa_sink_input_assert_ref(i);
+ pa_assert(chunk);
+ pa_assert_se(u = i->userdata);
+ size_t fs = pa_frame_size(&u->sink->sample_spec);
+ size_t ss=pa_sample_size(&u->sink->sample_spec);
+ size_t fe = fs/ss;
+
+ if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
+ return -1;
+
+ //output any buffered outputs first
+ if(u->n_buffered_output>0){
+ //pa_log("outputing %ld buffered samples",u->n_buffered_output);
+ chunk->index = 0;
+ size_t n_outputable=PA_MIN(u->n_buffered_output,nbytes/fs);
+ chunk->length = n_outputable*fs;
+ chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
+ pa_memblockq_drop(u->memblockq, chunk->length);
+ dst = (float*) pa_memblock_acquire(chunk->memblock);
+ for(size_t j=0;j<u->channels;++j){
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+j, fs, u->output_buffer[j], sizeof(float),n_outputable);
+ memmove(u->output_buffer[j],u->output_buffer[j]+n_outputable,(u->n_buffered_output-n_outputable)*sizeof(float));
+ }
+ u->n_buffered_output-=n_outputable;
+ pa_memblock_release(chunk->memblock);
+ return 0;
+ }
+ pa_assert_se(u->n_buffered_output==0);
+
+ //collect the minimum number of samples
+ while(u->samples_gathered < (u->window_size-u->overlap_size)){
+ //render some new fragments to our memblockq
+ //size_t desired_samples=PA_MIN(u->min_input-samples_gathered,u->max_output);
+ size_t desired_samples=PA_MIN((u->window_size-u->overlap_size)-u->samples_gathered,u->max_output);
+ while (pa_memblockq_peek(u->memblockq, &tchunk) < 0) {
+ pa_memchunk nchunk;
+
+ pa_sink_render(u->sink, desired_samples*fs, &nchunk);
+ pa_memblockq_push(u->memblockq, &nchunk);
+ pa_memblock_unref(nchunk.memblock);
+ }
+ if(tchunk.length/fs!=desired_samples){
+ pa_log("got %ld samples, asked for %ld",tchunk.length/fs,desired_samples);
+ }
+ size_t n_samples=PA_MIN(tchunk.length/fs,u->window_size-u->overlap_size-u->samples_gathered);
+ //TODO: figure out what to do with rest of the samples when there's too many (rare?)
+ src = (float*) ((uint8_t*) pa_memblock_acquire(tchunk.memblock) + tchunk.index);
+ for (size_t c=0;c<u->channels;c++) {
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+u->overlap_size+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
+ }
+
+ u->samples_gathered+=n_samples;
+ pa_memblock_release(tchunk.memblock);
+ pa_memblock_unref(tchunk.memblock);
+ }
+ //IT should be this guy if we're buffering like how its supposed to
+ //size_t n_outputable=PA_MIN(u->window_size-u->overlap_size,nbytes/fs);
+ //This one takes into account the actual data gathered but then the dsp
+ //stuff is wrong when the buffer "underruns"
+ size_t n_outputable=PA_MIN(u->samples_gathered,nbytes/fs);
+ /*
+ //debugging: tests if immediate release of freshly buffered data
+ //plays ok and prevents any other processing
+ chunk->index=0;
+ chunk->length=n_outputable*fs;
+ chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
+ pa_memblockq_drop(u->memblockq, chunk->length);
+ dst = (float*) pa_memblock_acquire(chunk->memblock);;
+ for (size_t c=0;c<u->channels;c++) {
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->input[c]+u->overlap_size, sizeof(float),n_outputable);
+ }
+ u->samples_gathered=0;
+ pa_memblock_release(chunk->memblock);
+ return 0;
+ */
+
+ //pa_log("%ld dequed samples",u->samples_gathered);
+
+ chunk->index=0;
+ chunk->length=n_outputable*fs;
+ chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
+ pa_memblockq_drop(u->memblockq, chunk->length);
+ dst = (float*) pa_memblock_acquire(chunk->memblock);
+ //pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input, sizeof(float), src+c, fs, samples);
+ //pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c,fs, u->input, sizeof(float), samples);
+
+ /*
+ struct timespec start, end;
+ uint64_t elapsed;
+ clock_gettime(CLOCK_MONOTONIC, &start);
+ */
+ //use a zero-phase sliding dft and overlap-add method
+
+ pa_assert_se(u->fft_size>=u->window_size);
+ //pa_assert_se(u->window_size%2==0);
+ pa_assert_se(u->overlap_size<u->window_size);
+ pa_assert_se(u->samples_gathered>=u->window_size-u->overlap_size);
+ size_t sample_rem=u->window_size-u->overlap_size-n_outputable;
+ //size_t w_mid=u->window_size/2;
+ //pa_log("hello world a");
+ for (c=0;c<u->channels;c++) {
+ //center the data for zero phase
+ //zero-pad TODO: optimization if sure these zeros aren't overwritten
+ //memset(u->work_buffer+w_mid,0,(u->fft_size-u->window_size)*sizeof(float));
+ //memset(u->work_buffer,0,u->fft_size*sizeof(float));
+ /*
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->W[j]*u->input[c][j];
+ u->work_buffer[j]=u->input[c][j];
+ }
+ */
+ //zero padd the data, don't worry about zerophase, shouldn't really matter
+ memset(u->work_buffer+u->overlap_size,0,(u->fft_size-u->overlap_size)*sizeof(float));
+ //window the data
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->W[j]*u->input[c][j];
+ }
+ /*
+ //recenter for zero phase
+ for(size_t j=0;j<w_mid;++j){
+ float tmp=u->work_buffer[j];
+ u->work_buffer[j]=u->input[c][j+w_mid];
+ u->work_buffer[j+u->fft_size-w_mid]=tmp;
+ }
+ */
+ //pa_log("hello world b");
+
+ /*
+ //window and zero phase shift
+ for(size_t j=0;j<w_mid;++j){
+ //u->work_buffer[j]=u->input[c][j+w_mid];
+ //u->work_buffer[j+u->fft_size-w_mid]=u->input[c][j];
+ u->work_buffer[j]=u->W[j+w_mid]*u->input[c][j+w_mid];
+ u->work_buffer[j+u->fft_size-w_mid]=u->W[j]*u->input[c][j];
+ }*/
+ //Processing is done here!
+ //do fft
+ fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
+ //perform filtering
+ for(size_t j=0;j<u->fft_size/2+1;++j){
+ ////identity transform (fft size)
+ //u->output_window[j][0]/=u->fft_size;
+ //u->output_window[j][1]/=u->fft_size;
+ ////identity transform (window size)
+ //u->output_window[j][0]/=u->window_size;
+ //u->output_window[j][1]/=u->window_size;
+ //filtered
+ u->output_window[j][0]*=u->H[j];
+ u->output_window[j][1]*=u->H[j];
+ }
+ //inverse fft
+ fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
+
+ /*
+ //uncenter the data
+ for(size_t j=0;j<w_mid;++j){
+ const float tmp=u->work_buffer[j];
+ u->work_buffer[j]=u->work_buffer[j+u->fft_size-w_mid];
+ u->work_buffer[j+w_mid]=tmp;
+ }
+ */
+ /*
+ //divide out fft gain (more stable here?)
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]/=u->fft_size;
+ }
+ */
+ /*
+ //debug: tests overlaping add
+ //and negates ALL PREVIOUS processing
+ //yields a perfect reconstruction if COLA is held
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->W[j]*u->input[c][j];
+ }
+ */
+ /*
+ //debug: tests if basic buffering works
+ //shouldn't modify the signal AT ALL
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->input[c][j];
+ }
+ */
+
+ /*
+ //overlap add and preserve overlap component from this window (zero phase)
+ for(size_t j=0;j<u->overlap_size;++j){
+ u->work_buffer[j]+=u->overlap_accum[c][j];
+ u->overlap_accum[c][j]=u->work_buffer[u->window_size-u->overlap_size+j];
+ }
+ */
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j=0;j<u->overlap_size;++j){
+ u->work_buffer[j]+=u->overlap_accum[c][j];
+ u->overlap_accum[c][j]=u->work_buffer[u->window_size-u->overlap_size+j];
+ }
+
+ //preseve the needed input for the next windows overlap
+ memmove(u->input[c],u->input[c]+u->overlap_size,(u->window_size-u->overlap_size)*sizeof(float));
+ //output the samples that are outputable now
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->work_buffer, sizeof(float),n_outputable);
+ //buffer the rest of them
+ memcpy(u->output_buffer[c]+u->n_buffered_output,u->work_buffer+n_outputable,sample_rem*sizeof(float));
+ }
+ /*
+ clock_gettime(CLOCK_MONOTONIC, &end);
+ elapsed=time_diff(&end, &start);
+ pa_log("processed: %ld, time: %ld",u->samples_gathered,elapsed);
+ */
+ u->n_buffered_output+=sample_rem;
+ u->samples_gathered=0;
+
+
+ //pa_log("%ld samples queued",u->n_buffered_output);
+
+ pa_memblock_release(chunk->memblock);
+
+
+ return 0;
+}
+
+/* Called from I/O thread context */
+static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
+ struct userdata *u;
+ size_t amount = 0;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
+ return;
+
+ if (u->sink->thread_info.rewind_nbytes > 0) {
+ size_t max_rewrite;
+
+ max_rewrite = nbytes + pa_memblockq_get_length(u->memblockq);
+ amount = PA_MIN(u->sink->thread_info.rewind_nbytes, max_rewrite);
+ u->sink->thread_info.rewind_nbytes = 0;
+
+ if (amount > 0) {
+ pa_memblockq_seek(u->memblockq, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
+ pa_log_debug("Resetting equalizer");
+ }
+ }
+
+ pa_sink_process_rewind(u->sink, amount);
+ pa_memblockq_rewind(u->memblockq, nbytes);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
+ return;
+
+ pa_memblockq_set_maxrewind(u->memblockq, nbytes);
+ pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
+ return;
+
+ pa_sink_set_max_request_within_thread(u->sink, nbytes);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
+ return;
+
+ pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
+}
+
+/* Called from I/O thread context */
+static void sink_input_detach_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
+ return;
+
+ pa_sink_detach_within_thread(u->sink);
+ pa_sink_set_asyncmsgq(u->sink, NULL);
+ pa_sink_set_rtpoll(u->sink, NULL);
+}
+
+/* Called from I/O thread context */
+static void sink_input_attach_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
+ return;
+
+ pa_sink_set_asyncmsgq(u->sink, i->sink->asyncmsgq);
+ pa_sink_set_rtpoll(u->sink, i->sink->rtpoll);
+ pa_sink_attach_within_thread(u->sink);
+
+ pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+}
+
+/* Called from main context */
+static void sink_input_kill_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_unlink(u->sink);
+ pa_sink_input_unlink(u->sink_input);
+
+ pa_sink_unref(u->sink);
+ u->sink = NULL;
+ pa_sink_input_unref(u->sink_input);
+ u->sink_input = NULL;
+
+ pa_module_unload_request(u->module, TRUE);
+}
+
+/* Called from IO thread context */
+static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ /* If we are added for the first time, ask for a rewinding so that
+ * we are heard right-away. */
+ if (PA_SINK_INPUT_IS_LINKED(state) &&
+ i->thread_info.state == PA_SINK_INPUT_INIT) {
+ pa_log_debug("Requesting rewind due to state change.");
+ pa_sink_input_request_rewind(i, 0, FALSE, TRUE, TRUE);
+ }
+}
+
+/* Called from main context */
+static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ return u->sink != dest;
+}
+
+int pa__init(pa_module*m) {
+ struct userdata *u;
+ pa_sample_spec ss;
+ pa_channel_map map;
+ pa_modargs *ma;
+ const char *z;
+ pa_sink *master;
+ pa_sink_input_new_data sink_input_data;
+ pa_sink_new_data sink_data;
+ pa_bool_t *use_default = NULL;
+ size_t fs;
+
+ pa_assert(m);
+
+ if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
+ pa_log("Failed to parse module arguments.");
+ goto fail;
+ }
+
+ if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SINK))) {
+ pa_log("Master sink not found");
+ goto fail;
+ }
+
+ ss = master->sample_spec;
+ ss.format = PA_SAMPLE_FLOAT32;
+ map = master->channel_map;
+ if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
+ pa_log("Invalid sample format specification or channel map");
+ goto fail;
+ }
+ fs=pa_frame_size(&ss);
+
+ u = pa_xnew0(struct userdata, 1);
+ u->core = m->core;
+ u->module = m;
+ m->userdata = u;
+ u->master = master;
+ u->sink = NULL;
+ u->sink_input = NULL;
+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
+
+ //u->fft_size=44100;
+ //u->fft_size=48000;
+ //u->fft_size=1024;
+ u->channels=ss.channels;
+ u->fft_size=pow(2,ceil(log(ss.rate)/log(2)));
+ //u->fft_size=ss.rate;
+ //u->fft_size=65536;
+ pa_log("fft size: %ld",u->fft_size);
+ u->window_size=8001;
+ u->overlap_size=(u->window_size+1)/2;
+ //u->overlap_size=u->window_size/2;
+ //u->overlap_size=0;
+ u->samples_gathered=0;
+ u->n_buffered_output=0;
+ u->max_output=pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
+ u->H=(float*) fftwf_malloc((u->fft_size/2+1)*sizeof(float));
+ u->W=(float*) fftwf_malloc((u->window_size)*sizeof(float));
+ u->work_buffer=(float*) fftwf_malloc(u->fft_size*sizeof(float));
+ u->input=(float **)malloc(sizeof(float *)*u->channels);
+ u->overlap_accum=(float **)malloc(sizeof(float *)*u->channels);
+ u->output_buffer=(float **)malloc(sizeof(float *)*u->channels);
+ for(size_t c=0;c<u->channels;++c){
+ u->input[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
+ memset(u->input[c],0,u->window_size*sizeof(float));
+ u->overlap_accum[c]=(float*) fftwf_malloc(u->overlap_size*sizeof(float));
+ memset(u->overlap_accum[c],0,u->overlap_size*sizeof(float));
+ u->output_buffer[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
+ }
+ u->output_window = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * (u->fft_size/2+1));
+ u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
+ u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
+
+ /*
+ //rectangular window
+ for(size_t j=0;j<u->window_size;++j){
+ u->W[j]=1.0;
+ }
+ */
+ //hanning_normalized_window(u->W,u->window_size);
+ hanning_window(u->W,u->window_size);
+ //sin_window(u->W,u->window_size);
+ array_out("/home/jason/window.txt",u->W,u->window_size);
+ //u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->input, u->output_window, FFTW_ESTIMATE);
+ //u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
+ //u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->input, u->output, FFTW_MEASURE);
+ //u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output, u->input, FFTW_MEASURE);
+ const int freqs[]={0,25,50,100,200,300,400,800,1500,
+ 2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
+ 13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
+ const float coefficients[]={1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+ const size_t ncoefficients=sizeof(coefficients)/sizeof(float);
+ pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
+ float *freq_translated=(float *) malloc(sizeof(float)*(ncoefficients));
+ freq_translated[0]=1;
+ //Translate the frequencies in their natural sampling rate to the new sampling rate frequencies
+ for(size_t i=1;i<ncoefficients-1;++i){
+ freq_translated[i]=((float)freqs[i]*u->fft_size)/ss.rate;
+ //pa_log("i: %ld: %d , %g",i,freqs[i],freq_translated[i]);
+ pa_assert_se(freq_translated[i]>=freq_translated[i-1]);
+ }
+ freq_translated[ncoefficients-1]=DBL_MAX;
+ //Interpolate the specified frequency band values
+ u->H[0]=1;
+ for(size_t i=1,j=0;i<(u->fft_size/2+1);++i){
+ pa_assert_se(j<ncoefficients);
+ //max frequency range passed, consider the rest as one band
+ if(freq_translated[j+1]>=DBL_MAX){
+ for(;i<(u->fft_size/2+1);++i){
+ u->H[i]=coefficients[j];
+ }
+ break;
+ }
+ //pa_log("i: %d, j: %d, freq: %f",i,j,freq_translated[j]);
+ //pa_log("interp: %0.4f %0.4f",freq_translated[j],freq_translated[j+1]);
+ pa_assert_se(freq_translated[j]<freq_translated[j+1]);
+ pa_assert_se(i>=freq_translated[j]);
+ pa_assert_se(i<=freq_translated[j+1]);
+ //bilinear-inerpolation of coefficients specified
+ float c0=(i-freq_translated[j])/(freq_translated[j+1]-freq_translated[j]);
+ pa_assert_se(c0>=0&&c0<=1.0);
+ u->H[i]=((1.0f-c0)*coefficients[j]+c0*coefficients[j+1]);
+ pa_assert_se(u->H[i]>0);
+ while(i>=floor(freq_translated[j+1])){
+ j++;
+ }
+ }
+ array_out("/home/jason/coffs.txt",u->H,u->fft_size/2+1);
+ //divide out the fft gain
+ for(int i=0;i<(u->fft_size/2+1);++i){
+ u->H[i]/=u->fft_size;
+ }
+ free(freq_translated);
+
+ /* Create sink */
+ pa_sink_new_data_init(&sink_data);
+ sink_data.driver = __FILE__;
+ sink_data.module = m;
+ if (!(sink_data.name = pa_xstrdup(pa_modargs_get_value(ma, "sink_name", NULL))))
+ sink_data.name = pa_sprintf_malloc("%s.equalizer", master->name);
+ sink_data.namereg_fail = FALSE;
+ pa_sink_new_data_set_sample_spec(&sink_data, &ss);
+ pa_sink_new_data_set_channel_map(&sink_data, &map);
+ z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "FFT based equalizer");
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS, "filter");
+
+ if (pa_modargs_get_proplist(ma, "sink_properties", sink_data.proplist, PA_UPDATE_REPLACE) < 0) {
+ pa_log("Invalid properties");
+ pa_sink_new_data_done(&sink_data);
+ goto fail;
+ }
+
+ u->sink = pa_sink_new(m->core, &sink_data, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY);
+ pa_sink_new_data_done(&sink_data);
+
+ if (!u->sink) {
+ pa_log("Failed to create sink.");
+ goto fail;
+ }
+
+ u->sink->parent.process_msg = sink_process_msg;
+ u->sink->set_state = sink_set_state;
+ u->sink->update_requested_latency = sink_update_requested_latency;
+ u->sink->request_rewind = sink_request_rewind;
+ u->sink->userdata = u;
+
+ pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
+ pa_sink_set_rtpoll(u->sink, master->rtpoll);
+
+ /* Create sink input */
+ pa_sink_input_new_data_init(&sink_input_data);
+ sink_input_data.driver = __FILE__;
+ sink_input_data.module = m;
+ sink_input_data.sink = u->master;
+ pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_NAME, "Equalized Stream");
+ pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
+ pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
+ pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
+
+ pa_sink_input_new(&u->sink_input, m->core, &sink_input_data, PA_SINK_INPUT_DONT_MOVE);
+ pa_sink_input_new_data_done(&sink_input_data);
+
+ if (!u->sink_input)
+ goto fail;
+
+ u->sink_input->pop = sink_input_pop_cb;
+ u->sink_input->process_rewind = sink_input_process_rewind_cb;
+ u->sink_input->update_max_rewind = sink_input_update_max_rewind_cb;
+ u->sink_input->update_max_request = sink_input_update_max_request_cb;
+ u->sink_input->update_sink_latency_range = sink_input_update_sink_latency_range_cb;
+ u->sink_input->kill = sink_input_kill_cb;
+ u->sink_input->attach = sink_input_attach_cb;
+ u->sink_input->detach = sink_input_detach_cb;
+ u->sink_input->state_change = sink_input_state_change_cb;
+ u->sink_input->may_move_to = sink_input_may_move_to_cb;
+ u->sink_input->userdata = u;
+
+ pa_sink_put(u->sink);
+ pa_sink_input_put(u->sink_input);
+
+ pa_modargs_free(ma);
+
+ pa_xfree(use_default);
+
+ return 0;
+
+fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa_xfree(use_default);
+
+ pa__done(m);
+
+ return -1;
+}
+
+int pa__get_n_used(pa_module *m) {
+ struct userdata *u;
+
+ pa_assert(m);
+ pa_assert_se(u = m->userdata);
+
+ return pa_sink_linked_by(u->sink);
+}
+
+void pa__done(pa_module*m) {
+ struct userdata *u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ if (u->sink) {
+ pa_sink_unlink(u->sink);
+ pa_sink_unref(u->sink);
+ }
+
+ if (u->sink_input) {
+ pa_sink_input_unlink(u->sink_input);
+ pa_sink_input_unref(u->sink_input);
+ }
+
+ if (u->memblockq)
+ pa_memblockq_free(u->memblockq);
+
+ fftwf_destroy_plan(u->inverse_plan);
+ fftwf_destroy_plan(u->forward_plan);
+ fftwf_free(u->output_window);
+ for(size_t c=0;c<u->channels;++c){
+ fftwf_free(u->output_buffer[c]);
+ fftwf_free(u->overlap_accum[c]);
+ fftwf_free(u->input[c]);
+ }
+ free(u->output_buffer);
+ free(u->overlap_accum);
+ free(u->input);
+ fftwf_free(u->work_buffer);
+ fftwf_free(u->W);
+ fftwf_free(u->H);
+
+ pa_xfree(u);
+}
commit 2e119060cb6b61fa59976b636300eea913c20827
Author: Jason Newton <jason at arcuid.wyred.org>
Date: Wed Jul 15 06:57:33 2009 -0700
module-equalizer-sink:
added temporary debugging output to track filter output
removed dead code
only a small amount of crackling remains
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 8b34fa0..cabb0dc 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -1,4 +1,29 @@
+/***
+This file is part of PulseAudio.
+This module is based off Lennart Poettering's LADSPA sink and swaps out
+LADSPA functionality for a STFT OLA based digital equalizer. All new work
+is published under Pulseaudio's original license.
+Copyright 2009 Jason Newton <nevion at gmail.com>
+
+Original Author:
+Copyright 2004-2008 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.1 of the License,
+or (at your option) any later version.
+
+PulseAudio is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+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>
@@ -25,9 +50,6 @@
#include <pulsecore/rtpoll.h>
#include <pulsecore/sample-util.h>
#include <pulsecore/ltdl-helper.h>
-#include <liboil/liboilfuncs.h>
-#include <liboil/liboil.h>
-
#include <stdint.h>
#include <time.h>
@@ -50,9 +72,15 @@ struct userdata {
pa_sink_input *sink_input;
size_t channels;
- size_t fft_size; //length (res) of fft
- size_t window_size;//even!
- size_t overlap_size;
+ size_t fft_size;//length (res) of fft
+ size_t window_size;/*
+ *sliding window size
+ *effectively chooses R
+ */
+ size_t R;/* the hop size between overlapping windows
+ * the latency of the filter, calculated from window_size
+ * based on constraints of COLA and window function
+ */
size_t samples_gathered;
size_t n_buffered_output;
size_t max_output;
@@ -61,6 +89,7 @@ struct userdata {
float *work_buffer,**input,**overlap_accum,**output_buffer;
fftwf_complex *output_window;
fftwf_plan forward_plan,inverse_plan;
+ //size_t samplings;
pa_memblockq *memblockq;
};
@@ -106,8 +135,9 @@ void hamming_window(float *W,size_t window_size){
m/=(window_size-1);
W[i]=.54-.46*cos(2*M_PI*m);
}
- W[0]/=2;
- W[window_size-1]/=2;
+ W[window_size-1]=0;
+ //W[0]/=2;
+ //W[window_size-1]/=2;
}
void blackman_window(float *W,size_t window_size){
//h=.42-.5*cos(2*pi*m)+.08*cos(4*pi*m), m=(0:W-1)/(W-1)
@@ -132,6 +162,10 @@ void sin_window(float *W,size_t window_size){
void array_out(const char *name,float *a,size_t length){
FILE *p=fopen(name,"w");
+ if(!p){
+ pa_log("opening %s failed!",name);
+ return;
+ }
for(size_t i=0;i<length;++i){
fprintf(p,"%e,",a[i]);
//if(i%1000==0){
@@ -213,7 +247,6 @@ static void sink_update_requested_latency(pa_sink *s) {
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
float *src, *dst;
- size_t c;
pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
pa_assert(chunk);
@@ -229,7 +262,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
if(u->n_buffered_output>0){
//pa_log("outputing %ld buffered samples",u->n_buffered_output);
chunk->index = 0;
- size_t n_outputable=PA_MIN(u->n_buffered_output,nbytes/fs);
+ size_t n_outputable=PA_MIN(u->n_buffered_output,u->max_output);
chunk->length = n_outputable*fs;
chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
pa_memblockq_drop(u->memblockq, chunk->length);
@@ -245,10 +278,11 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert_se(u->n_buffered_output==0);
//collect the minimum number of samples
- while(u->samples_gathered < (u->window_size-u->overlap_size)){
+ //TODO figure out a better way of buffering the needed
+ //number of samples, this doesn't seem to work correctly
+ while(u->samples_gathered < u->R){
//render some new fragments to our memblockq
- //size_t desired_samples=PA_MIN(u->min_input-samples_gathered,u->max_output);
- size_t desired_samples=PA_MIN((u->window_size-u->overlap_size)-u->samples_gathered,u->max_output);
+ size_t desired_samples=PA_MIN(u->R-u->samples_gathered,u->max_output);
while (pa_memblockq_peek(u->memblockq, &tchunk) < 0) {
pa_memchunk nchunk;
@@ -259,137 +293,80 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
if(tchunk.length/fs!=desired_samples){
pa_log("got %ld samples, asked for %ld",tchunk.length/fs,desired_samples);
}
- size_t n_samples=PA_MIN(tchunk.length/fs,u->window_size-u->overlap_size-u->samples_gathered);
+ size_t n_samples=PA_MIN(tchunk.length/fs,u->R-u->samples_gathered);
//TODO: figure out what to do with rest of the samples when there's too many (rare?)
src = (float*) ((uint8_t*) pa_memblock_acquire(tchunk.memblock) + tchunk.index);
for (size_t c=0;c<u->channels;c++) {
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+u->overlap_size+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+(u->window_size-u->R)+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
}
-
u->samples_gathered+=n_samples;
pa_memblock_release(tchunk.memblock);
pa_memblock_unref(tchunk.memblock);
}
//IT should be this guy if we're buffering like how its supposed to
- //size_t n_outputable=PA_MIN(u->window_size-u->overlap_size,nbytes/fs);
+ //size_t n_outputable=PA_MIN(u->window_size-u->R,u->max_output);
//This one takes into account the actual data gathered but then the dsp
//stuff is wrong when the buffer "underruns"
- size_t n_outputable=PA_MIN(u->samples_gathered,nbytes/fs);
- /*
- //debugging: tests if immediate release of freshly buffered data
- //plays ok and prevents any other processing
- chunk->index=0;
- chunk->length=n_outputable*fs;
- chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
- pa_memblockq_drop(u->memblockq, chunk->length);
- dst = (float*) pa_memblock_acquire(chunk->memblock);;
- for (size_t c=0;c<u->channels;c++) {
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->input[c]+u->overlap_size, sizeof(float),n_outputable);
- }
- u->samples_gathered=0;
- pa_memblock_release(chunk->memblock);
- return 0;
- */
+ size_t n_outputable=PA_MIN(u->R,u->max_output);
- //pa_log("%ld dequed samples",u->samples_gathered);
chunk->index=0;
chunk->length=n_outputable*fs;
chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
pa_memblockq_drop(u->memblockq, chunk->length);
dst = (float*) pa_memblock_acquire(chunk->memblock);
- //pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input, sizeof(float), src+c, fs, samples);
- //pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c,fs, u->input, sizeof(float), samples);
-
- /*
- struct timespec start, end;
- uint64_t elapsed;
- clock_gettime(CLOCK_MONOTONIC, &start);
- */
- //use a zero-phase sliding dft and overlap-add method
pa_assert_se(u->fft_size>=u->window_size);
- //pa_assert_se(u->window_size%2==0);
- pa_assert_se(u->overlap_size<u->window_size);
- pa_assert_se(u->samples_gathered>=u->window_size-u->overlap_size);
- size_t sample_rem=u->window_size-u->overlap_size-n_outputable;
- //size_t w_mid=u->window_size/2;
- //pa_log("hello world a");
- for (c=0;c<u->channels;c++) {
- //center the data for zero phase
- //zero-pad TODO: optimization if sure these zeros aren't overwritten
- //memset(u->work_buffer+w_mid,0,(u->fft_size-u->window_size)*sizeof(float));
+ pa_assert_se(u->R<u->window_size);
+ pa_assert_se(u->samples_gathered>=u->R);
+ size_t sample_rem=u->R-n_outputable;
+ //use a linear-phase sliding STFT and overlap-add method (for each channel)
+ for (size_t c=0;c<u->channels;c++) {
+ ////zero padd the data
//memset(u->work_buffer,0,u->fft_size*sizeof(float));
- /*
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->W[j]*u->input[c][j];
- u->work_buffer[j]=u->input[c][j];
- }
- */
- //zero padd the data, don't worry about zerophase, shouldn't really matter
- memset(u->work_buffer+u->overlap_size,0,(u->fft_size-u->overlap_size)*sizeof(float));
- //window the data
+ memset(u->work_buffer+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
+ ////window the data
for(size_t j=0;j<u->window_size;++j){
u->work_buffer[j]=u->W[j]*u->input[c][j];
}
- /*
- //recenter for zero phase
- for(size_t j=0;j<w_mid;++j){
- float tmp=u->work_buffer[j];
- u->work_buffer[j]=u->input[c][j+w_mid];
- u->work_buffer[j+u->fft_size-w_mid]=tmp;
- }
- */
- //pa_log("hello world b");
-
- /*
- //window and zero phase shift
- for(size_t j=0;j<w_mid;++j){
- //u->work_buffer[j]=u->input[c][j+w_mid];
- //u->work_buffer[j+u->fft_size-w_mid]=u->input[c][j];
- u->work_buffer[j]=u->W[j+w_mid]*u->input[c][j+w_mid];
- u->work_buffer[j+u->fft_size-w_mid]=u->W[j]*u->input[c][j];
- }*/
//Processing is done here!
//do fft
+ //char fname[1024];
+ //if(u->samplings==200){
+ // pa_assert_se(0);
+ //}
+
+ //this iterations input
+ //sprintf(fname,"/home/jason/input%ld-%ld.txt",u->samplings+1,c);
+ //array_out(fname,u->input[c]+(u->window_size-u->R),u->R);
+
fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
//perform filtering
for(size_t j=0;j<u->fft_size/2+1;++j){
- ////identity transform (fft size)
- //u->output_window[j][0]/=u->fft_size;
- //u->output_window[j][1]/=u->fft_size;
- ////identity transform (window size)
- //u->output_window[j][0]/=u->window_size;
- //u->output_window[j][1]/=u->window_size;
- //filtered
u->output_window[j][0]*=u->H[j];
u->output_window[j][1]*=u->H[j];
}
- //inverse fft
+ ////inverse fft
fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
+ //the output for the previous iteration's input
+ //sprintf(fname,"/home/jason/output%ld-%ld.txt",u->samplings,c);
+ //array_out(fname,u->work_buffer,u->window_size);
- /*
- //uncenter the data
- for(size_t j=0;j<w_mid;++j){
- const float tmp=u->work_buffer[j];
- u->work_buffer[j]=u->work_buffer[j+u->fft_size-w_mid];
- u->work_buffer[j+w_mid]=tmp;
- }
- */
- /*
- //divide out fft gain (more stable here?)
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]/=u->fft_size;
- }
- */
- /*
- //debug: tests overlaping add
- //and negates ALL PREVIOUS processing
- //yields a perfect reconstruction if COLA is held
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->W[j]*u->input[c][j];
+
+ ////debug: tests overlaping add
+ ////and negates ALL PREVIOUS processing
+ ////yields a perfect reconstruction if COLA is held
+ //for(size_t j=0;j<u->window_size;++j){
+ // u->work_buffer[j]=u->W[j]*u->input[c][j];
+ //}
+
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j=0;j<u->R;++j){
+ u->work_buffer[j]+=u->overlap_accum[c][j];
+ u->overlap_accum[c][j]=u->work_buffer[u->window_size-u->R+j];
}
- */
+
+
/*
//debug: tests if basic buffering works
//shouldn't modify the signal AT ALL
@@ -398,40 +375,20 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
}
*/
- /*
- //overlap add and preserve overlap component from this window (zero phase)
- for(size_t j=0;j<u->overlap_size;++j){
- u->work_buffer[j]+=u->overlap_accum[c][j];
- u->overlap_accum[c][j]=u->work_buffer[u->window_size-u->overlap_size+j];
- }
- */
- //overlap add and preserve overlap component from this window (linear phase)
- for(size_t j=0;j<u->overlap_size;++j){
- u->work_buffer[j]+=u->overlap_accum[c][j];
- u->overlap_accum[c][j]=u->work_buffer[u->window_size-u->overlap_size+j];
- }
-
//preseve the needed input for the next windows overlap
- memmove(u->input[c],u->input[c]+u->overlap_size,(u->window_size-u->overlap_size)*sizeof(float));
+ memmove(u->input[c],u->input[c]+u->R,
+ (u->window_size-u->R)*sizeof(float)
+ );
//output the samples that are outputable now
pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->work_buffer, sizeof(float),n_outputable);
//buffer the rest of them
memcpy(u->output_buffer[c]+u->n_buffered_output,u->work_buffer+n_outputable,sample_rem*sizeof(float));
+
}
- /*
- clock_gettime(CLOCK_MONOTONIC, &end);
- elapsed=time_diff(&end, &start);
- pa_log("processed: %ld, time: %ld",u->samples_gathered,elapsed);
- */
+ //u->samplings++;
u->n_buffered_output+=sample_rem;
u->samples_gathered=0;
-
-
- //pa_log("%ld samples queued",u->n_buffered_output);
-
pa_memblock_release(chunk->memblock);
-
-
return 0;
}
@@ -456,6 +413,8 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
if (amount > 0) {
pa_memblockq_seek(u->memblockq, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log_debug("Resetting equalizer");
+ u->n_buffered_output=0;
+ u->samples_gathered=0;
}
}
@@ -621,18 +580,12 @@ int pa__init(pa_module*m) {
u->sink_input = NULL;
u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
- //u->fft_size=44100;
- //u->fft_size=48000;
- //u->fft_size=1024;
+ //u->samplings=0;
u->channels=ss.channels;
u->fft_size=pow(2,ceil(log(ss.rate)/log(2)));
- //u->fft_size=ss.rate;
- //u->fft_size=65536;
pa_log("fft size: %ld",u->fft_size);
- u->window_size=8001;
- u->overlap_size=(u->window_size+1)/2;
- //u->overlap_size=u->window_size/2;
- //u->overlap_size=0;
+ u->window_size=7999;
+ u->R=(u->window_size+1)/2;
u->samples_gathered=0;
u->n_buffered_output=0;
u->max_output=pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
@@ -645,34 +598,26 @@ int pa__init(pa_module*m) {
for(size_t c=0;c<u->channels;++c){
u->input[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
memset(u->input[c],0,u->window_size*sizeof(float));
- u->overlap_accum[c]=(float*) fftwf_malloc(u->overlap_size*sizeof(float));
- memset(u->overlap_accum[c],0,u->overlap_size*sizeof(float));
+ u->overlap_accum[c]=(float*) fftwf_malloc(u->R*sizeof(float));
+ memset(u->overlap_accum[c],0,u->R*sizeof(float));
u->output_buffer[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
}
u->output_window = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * (u->fft_size/2+1));
u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
-
/*
- //rectangular window
for(size_t j=0;j<u->window_size;++j){
- u->W[j]=1.0;
+ u->W[j]=.5;
}
*/
- //hanning_normalized_window(u->W,u->window_size);
hanning_window(u->W,u->window_size);
- //sin_window(u->W,u->window_size);
- array_out("/home/jason/window.txt",u->W,u->window_size);
- //u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->input, u->output_window, FFTW_ESTIMATE);
- //u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
- //u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->input, u->output, FFTW_MEASURE);
- //u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output, u->input, FFTW_MEASURE);
+
const int freqs[]={0,25,50,100,200,300,400,800,1500,
2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
- const float coefficients[]={1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+ const float coefficients[]={.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,
+ .1,.1,.1,.1,.1,.1,.1,.1,
+ .1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1};
const size_t ncoefficients=sizeof(coefficients)/sizeof(float);
pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
float *freq_translated=(float *) malloc(sizeof(float)*(ncoefficients));
@@ -683,13 +628,13 @@ int pa__init(pa_module*m) {
//pa_log("i: %ld: %d , %g",i,freqs[i],freq_translated[i]);
pa_assert_se(freq_translated[i]>=freq_translated[i-1]);
}
- freq_translated[ncoefficients-1]=DBL_MAX;
+ freq_translated[ncoefficients-1]=FLT_MAX;
//Interpolate the specified frequency band values
u->H[0]=1;
for(size_t i=1,j=0;i<(u->fft_size/2+1);++i){
pa_assert_se(j<ncoefficients);
//max frequency range passed, consider the rest as one band
- if(freq_translated[j+1]>=DBL_MAX){
+ if(freq_translated[j+1]>=FLT_MAX){
for(;i<(u->fft_size/2+1);++i){
u->H[i]=coefficients[j];
}
@@ -709,9 +654,8 @@ int pa__init(pa_module*m) {
j++;
}
}
- array_out("/home/jason/coffs.txt",u->H,u->fft_size/2+1);
//divide out the fft gain
- for(int i=0;i<(u->fft_size/2+1);++i){
+ for(size_t i=0;i<(u->fft_size/2+1);++i){
u->H[i]/=u->fft_size;
}
free(freq_translated);
commit 182c9c7dcb3c7e6b8d273ab85e6f3e67070a4694
Author: Jason Newton <jason at arcuid.wyred.org>
Date: Thu Jul 16 18:18:14 2009 -0700
module-equalizer-sink: added more assertions to aid in debugging
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index cabb0dc..d4cec3c 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -251,8 +251,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_sink_input_assert_ref(i);
pa_assert(chunk);
pa_assert_se(u = i->userdata);
- size_t fs = pa_frame_size(&u->sink->sample_spec);
- size_t ss=pa_sample_size(&u->sink->sample_spec);
+ pa_assert_se(u->sink);
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ size_t ss=pa_sample_size(&(u->sink->sample_spec));
size_t fe = fs/ss;
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
@@ -597,10 +598,14 @@ int pa__init(pa_module*m) {
u->output_buffer=(float **)malloc(sizeof(float *)*u->channels);
for(size_t c=0;c<u->channels;++c){
u->input[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
+ pa_assert_se(u->input[c]);
memset(u->input[c],0,u->window_size*sizeof(float));
+ pa_assert_se(u->input[c]);
u->overlap_accum[c]=(float*) fftwf_malloc(u->R*sizeof(float));
+ pa_assert_se(u->overlap_accum[c]);
memset(u->overlap_accum[c],0,u->R*sizeof(float));
u->output_buffer[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
+ pa_assert_se(u->output_buffer[c]);
}
u->output_window = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * (u->fft_size/2+1));
u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
@@ -615,9 +620,9 @@ int pa__init(pa_module*m) {
const int freqs[]={0,25,50,100,200,300,400,800,1500,
2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
- const float coefficients[]={.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,
- .1,.1,.1,.1,.1,.1,.1,.1,
- .1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1};
+ const float coefficients[]={1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
const size_t ncoefficients=sizeof(coefficients)/sizeof(float);
pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
float *freq_translated=(float *) malloc(sizeof(float)*(ncoefficients));
commit d4fe5bfce988765fd51d291c61217ffef9df7698
Author: Jason Newton <jason at arcuid.wyred.org>
Date: Thu Jul 16 22:00:38 2009 -0700
module-equalizer-sink: attempt different buffering strategy
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index d4cec3c..d6e28f3 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -259,29 +259,11 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
- //output any buffered outputs first
- if(u->n_buffered_output>0){
- //pa_log("outputing %ld buffered samples",u->n_buffered_output);
- chunk->index = 0;
- size_t n_outputable=PA_MIN(u->n_buffered_output,u->max_output);
- chunk->length = n_outputable*fs;
- chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
- pa_memblockq_drop(u->memblockq, chunk->length);
- dst = (float*) pa_memblock_acquire(chunk->memblock);
- for(size_t j=0;j<u->channels;++j){
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+j, fs, u->output_buffer[j], sizeof(float),n_outputable);
- memmove(u->output_buffer[j],u->output_buffer[j]+n_outputable,(u->n_buffered_output-n_outputable)*sizeof(float));
- }
- u->n_buffered_output-=n_outputable;
- pa_memblock_release(chunk->memblock);
- return 0;
- }
- pa_assert_se(u->n_buffered_output==0);
-
//collect the minimum number of samples
//TODO figure out a better way of buffering the needed
//number of samples, this doesn't seem to work correctly
- while(u->samples_gathered < u->R){
+ //most of the itme
+ if(u->samples_gathered < u->R){
//render some new fragments to our memblockq
size_t desired_samples=PA_MIN(u->R-u->samples_gathered,u->max_output);
while (pa_memblockq_peek(u->memblockq, &tchunk) < 0) {
@@ -295,7 +277,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_log("got %ld samples, asked for %ld",tchunk.length/fs,desired_samples);
}
size_t n_samples=PA_MIN(tchunk.length/fs,u->R-u->samples_gathered);
- //TODO: figure out what to do with rest of the samples when there's too many (rare?)
+ pa_assert_se(n_samples<=u->R-u->samples_gathered);
src = (float*) ((uint8_t*) pa_memblock_acquire(tchunk.memblock) + tchunk.index);
for (size_t c=0;c<u->channels;c++) {
pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+(u->window_size-u->R)+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
@@ -304,12 +286,33 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_memblock_release(tchunk.memblock);
pa_memblock_unref(tchunk.memblock);
}
+ //output any buffered outputs first
+ if(u->n_buffered_output>0){
+ //pa_log("outputing %ld buffered samples",u->n_buffered_output);
+ chunk->index = 0;
+ size_t n_outputable=PA_MIN(u->n_buffered_output,u->max_output);
+ chunk->length = n_outputable*fs;
+ chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
+ pa_memblockq_drop(u->memblockq, chunk->length);
+ dst = (float*) pa_memblock_acquire(chunk->memblock);
+ for(size_t j=0;j<u->channels;++j){
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+j, fs, u->output_buffer[j], sizeof(float),n_outputable);
+ memmove(u->output_buffer[j],u->output_buffer[j]+n_outputable,(u->n_buffered_output-n_outputable)*sizeof(float));
+ }
+ u->n_buffered_output-=n_outputable;
+ pa_memblock_release(chunk->memblock);
+ return 0;
+ }
+ pa_assert_se(u->n_buffered_output==0);
+
+ if(u->samples_gathered<u->R){
+ return -1;
+ }
//IT should be this guy if we're buffering like how its supposed to
//size_t n_outputable=PA_MIN(u->window_size-u->R,u->max_output);
//This one takes into account the actual data gathered but then the dsp
//stuff is wrong when the buffer "underruns"
- size_t n_outputable=PA_MIN(u->R,u->max_output);
-
+ size_t n_outputable=PA_MIN(u->R,u->max_output)*(u->R==u->samples_gathered);
chunk->index=0;
chunk->length=n_outputable*fs;
@@ -319,7 +322,6 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert_se(u->fft_size>=u->window_size);
pa_assert_se(u->R<u->window_size);
- pa_assert_se(u->samples_gathered>=u->R);
size_t sample_rem=u->R-n_outputable;
//use a linear-phase sliding STFT and overlap-add method (for each channel)
for (size_t c=0;c<u->channels;c++) {
@@ -389,6 +391,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//u->samplings++;
u->n_buffered_output+=sample_rem;
u->samples_gathered=0;
+end:
pa_memblock_release(chunk->memblock);
return 0;
}
commit cf8331a0da9df5e4eff6105a002f4912be673d0a
Author: Jason Newton <jason at arcuid.wyred.org>
Date: Sat Jul 18 01:00:35 2009 -0700
module-equalizer-sink: trying new buffering strategies
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index d6e28f3..1d4a423 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -81,9 +81,10 @@ struct userdata {
* the latency of the filter, calculated from window_size
* based on constraints of COLA and window function
*/
+ size_t overlap_size;//window_size-R
size_t samples_gathered;
- size_t n_buffered_output;
size_t max_output;
+ size_t target_samples;
float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
float *work_buffer,**input,**overlap_accum,**output_buffer;
@@ -91,7 +92,8 @@ struct userdata {
fftwf_plan forward_plan,inverse_plan;
//size_t samplings;
- pa_memblockq *memblockq;
+ pa_memchunk conv_buffer;
+ pa_memblockq *rendered_q;
};
static const char* const valid_modargs[] = {
@@ -186,12 +188,14 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
case PA_SINK_MESSAGE_GET_LATENCY: {
pa_usec_t usec = 0;
pa_sample_spec *ss=&u->sink->sample_spec;
+ size_t fs=pa_frame_size(ss);
/* Get the latency of the master sink */
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- usec+=pa_bytes_to_usec(u->n_buffered_output*pa_frame_size(ss),ss);
+ usec+=pa_bytes_to_usec(u->samples_gathered*fs,ss);
+ usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
/* Add the latency internal to our sink input on top */
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
*((pa_usec_t*) data) = usec;
@@ -227,7 +231,7 @@ static void sink_request_rewind(pa_sink *s) {
pa_assert_se(u = s->userdata);
/* Just hand this one over to the master sink */
- pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes + pa_memblockq_get_length(u->memblockq), TRUE, FALSE, FALSE);
+ pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes + pa_memblockq_get_length(u->rendered_q), TRUE, FALSE, FALSE);
}
/* Called from I/O thread context */
@@ -246,153 +250,159 @@ static void sink_update_requested_latency(pa_sink *s) {
/* Called from I/O thread context */
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
- float *src, *dst;
- pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
pa_assert(chunk);
pa_assert_se(u = i->userdata);
pa_assert_se(u->sink);
- size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
size_t ss=pa_sample_size(&(u->sink->sample_spec));
size_t fe = fs/ss;
+ size_t samples_requested=nbytes/fs;
+ pa_memchunk tchunk;
+ chunk->memblock=NULL;
+ size_t buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
- //collect the minimum number of samples
- //TODO figure out a better way of buffering the needed
- //number of samples, this doesn't seem to work correctly
- //most of the itme
- if(u->samples_gathered < u->R){
- //render some new fragments to our memblockq
- size_t desired_samples=PA_MIN(u->R-u->samples_gathered,u->max_output);
- while (pa_memblockq_peek(u->memblockq, &tchunk) < 0) {
- pa_memchunk nchunk;
-
- pa_sink_render(u->sink, desired_samples*fs, &nchunk);
- pa_memblockq_push(u->memblockq, &nchunk);
- pa_memblock_unref(nchunk.memblock);
- }
- if(tchunk.length/fs!=desired_samples){
- pa_log("got %ld samples, asked for %ld",tchunk.length/fs,desired_samples);
+ pa_log("start output-buffered %ld, input-buffered %ld",buffered_samples,u->samples_gathered);
+ //collect samples
+ size_t buffered_remaining=pa_memblockq_get_length(u->rendered_q)/fs;
+ size_t buffer_missing=pa_memblockq_missing(u->rendered_q)/fs;
+ size_t desired_samples=(buffer_missing>=u->R)*PA_MIN(u->target_samples-u->samples_gathered,buffer_missing);
+ if(desired_samples>0){
+ u->conv_buffer.index=0;
+ //if we still had buffered output,
+ //or can gather any more in the buffer
+ //politely request (optimistic)
+ if(buffered_samples>=samples_requested ||
+ (u->samples_gathered/u->R)*u->R>=samples_requested){
+ u->conv_buffer.length=desired_samples*fs;
+ pa_log("trying to buffer %ld samples",desired_samples);
+ pa_sink_render_into(u->sink, &u->conv_buffer);
+ }else{//we need it now! force it
+ //TODO: minimum amount or the whole buffer better?
+ desired_samples=u->R-u->samples_gathered%u->R;
+ u->conv_buffer.length=desired_samples*fs;
+ pa_log("force-buffer %ld samples",desired_samples);
+ pa_sink_render_into_full(u->sink, &u->conv_buffer);
+ pa_assert_se(u->conv_buffer.length==desired_samples*fs);
}
- size_t n_samples=PA_MIN(tchunk.length/fs,u->R-u->samples_gathered);
- pa_assert_se(n_samples<=u->R-u->samples_gathered);
- src = (float*) ((uint8_t*) pa_memblock_acquire(tchunk.memblock) + tchunk.index);
+ size_t n_samples=u->conv_buffer.length/fs;
+ float *src;
+ pa_log("received %ld samples",n_samples);
+
+ pa_assert_se(n_samples<=u->target_samples-u->samples_gathered);
+ src = (float*) ((uint8_t*) pa_memblock_acquire(u->conv_buffer.memblock) + u->conv_buffer.index);
for (size_t c=0;c<u->channels;c++) {
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+(u->window_size-u->R)+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
+ //buffer with an offset after the overlap from previous
+ //iterations
+ pa_assert_se(
+ u->input[c]+u->overlap_size+u->samples_gathered+n_samples<=u->input[c]+u->target_samples+u->overlap_size
+ );
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+u->overlap_size+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
}
u->samples_gathered+=n_samples;
- pa_memblock_release(tchunk.memblock);
- pa_memblock_unref(tchunk.memblock);
- }
- //output any buffered outputs first
- if(u->n_buffered_output>0){
- //pa_log("outputing %ld buffered samples",u->n_buffered_output);
- chunk->index = 0;
- size_t n_outputable=PA_MIN(u->n_buffered_output,u->max_output);
- chunk->length = n_outputable*fs;
- chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
- pa_memblockq_drop(u->memblockq, chunk->length);
- dst = (float*) pa_memblock_acquire(chunk->memblock);
- for(size_t j=0;j<u->channels;++j){
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+j, fs, u->output_buffer[j], sizeof(float),n_outputable);
- memmove(u->output_buffer[j],u->output_buffer[j]+n_outputable,(u->n_buffered_output-n_outputable)*sizeof(float));
- }
- u->n_buffered_output-=n_outputable;
- pa_memblock_release(chunk->memblock);
- return 0;
- }
- pa_assert_se(u->n_buffered_output==0);
-
- if(u->samples_gathered<u->R){
- return -1;
+ pa_memblock_release(u->conv_buffer.memblock);
}
- //IT should be this guy if we're buffering like how its supposed to
- //size_t n_outputable=PA_MIN(u->window_size-u->R,u->max_output);
- //This one takes into account the actual data gathered but then the dsp
- //stuff is wrong when the buffer "underruns"
- size_t n_outputable=PA_MIN(u->R,u->max_output)*(u->R==u->samples_gathered);
-
- chunk->index=0;
- chunk->length=n_outputable*fs;
- chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
- pa_memblockq_drop(u->memblockq, chunk->length);
- dst = (float*) pa_memblock_acquire(chunk->memblock);
-
+ //pa_assert_se(u->samples_gathered>=u->R);
pa_assert_se(u->fft_size>=u->window_size);
pa_assert_se(u->R<u->window_size);
- size_t sample_rem=u->R-n_outputable;
- //use a linear-phase sliding STFT and overlap-add method (for each channel)
- for (size_t c=0;c<u->channels;c++) {
- ////zero padd the data
- //memset(u->work_buffer,0,u->fft_size*sizeof(float));
- memset(u->work_buffer+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
- ////window the data
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->W[j]*u->input[c][j];
- }
- //Processing is done here!
- //do fft
- //char fname[1024];
- //if(u->samplings==200){
- // pa_assert_se(0);
- //}
-
- //this iterations input
- //sprintf(fname,"/home/jason/input%ld-%ld.txt",u->samplings+1,c);
- //array_out(fname,u->input[c]+(u->window_size-u->R),u->R);
-
- fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
- //perform filtering
- for(size_t j=0;j<u->fft_size/2+1;++j){
- u->output_window[j][0]*=u->H[j];
- u->output_window[j][1]*=u->H[j];
- }
- ////inverse fft
- fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
- //the output for the previous iteration's input
- //sprintf(fname,"/home/jason/output%ld-%ld.txt",u->samplings,c);
- //array_out(fname,u->work_buffer,u->window_size);
-
-
- ////debug: tests overlaping add
- ////and negates ALL PREVIOUS processing
- ////yields a perfect reconstruction if COLA is held
- //for(size_t j=0;j<u->window_size;++j){
- // u->work_buffer[j]=u->W[j]*u->input[c][j];
- //}
-
- //overlap add and preserve overlap component from this window (linear phase)
- for(size_t j=0;j<u->R;++j){
- u->work_buffer[j]+=u->overlap_accum[c][j];
- u->overlap_accum[c][j]=u->work_buffer[u->window_size-u->R+j];
- }
-
-
- /*
- //debug: tests if basic buffering works
- //shouldn't modify the signal AT ALL
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->input[c][j];
+ //process every complete block on hand
+ while(u->samples_gathered>=u->R&&buffer_missing>=u->R){
+ float *dst;
+ //pa_log("iter gathered: %ld",u->samples_gathered);
+ tchunk.index=0;
+ tchunk.length=u->R*fs;
+ tchunk.memblock=pa_memblock_new(u->core->mempool,tchunk.length);
+ //pa_memblockq_drop(u->rendered_q, tchunk.length);
+ pa_assert_se(tchunk.length==u->R*fs);
+ dst=(float*)pa_memblock_acquire(tchunk.memblock);
+ //use a linear-phase sliding STFT and overlap-add method (for each channel)
+ for (size_t c=0;c<u->channels;c++) {
+ //zero padd the data
+ memset(u->work_buffer+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
+ //window the data
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->W[j]*u->input[c][j];
+ }
+ //Processing is done here!
+ //do fft
+ fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
+ //perform filtering
+ for(size_t j=0;j<u->fft_size/2+1;++j){
+ u->output_window[j][0]*=u->H[j];
+ u->output_window[j][1]*=u->H[j];
+ }
+ //inverse fft
+ fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
+ ////debug: tests overlaping add
+ ////and negates ALL PREVIOUS processing
+ ////yields a perfect reconstruction if COLA is held
+ //for(size_t j=0;j<u->window_size;++j){
+ // u->work_buffer[j]=u->W[j]*u->input[c][j];
+ //}
+
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j=0;j<u->R;++j){
+ u->work_buffer[j]+=u->overlap_accum[c][j];
+ u->overlap_accum[c][j]=u->work_buffer[u->overlap_size+j];
+ }
+
+ //debug: tests if basic buffering works
+ //shouldn't modify the signal AT ALL (beyond roundoff)
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->input[c][j];
+ }
+
+ //preseve the needed input for the next window's overlap
+ memmove(u->input[c],u->input[c]+u->R,
+ (u->samples_gathered+u->overlap_size-u->R)*sizeof(float)
+ );
+ //output the samples that are outputable now
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->work_buffer, sizeof(float),u->R);
}
- */
-
- //preseve the needed input for the next windows overlap
- memmove(u->input[c],u->input[c]+u->R,
- (u->window_size-u->R)*sizeof(float)
- );
- //output the samples that are outputable now
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->work_buffer, sizeof(float),n_outputable);
- //buffer the rest of them
- memcpy(u->output_buffer[c]+u->n_buffered_output,u->work_buffer+n_outputable,sample_rem*sizeof(float));
-
+ pa_memblock_release(tchunk.memblock);
+ pa_memblockq_push(u->rendered_q, &tchunk);
+ pa_memblock_unref(tchunk.memblock);
+ u->samples_gathered-=u->R;
+ buffer_missing-=u->R;
}
- //u->samplings++;
- u->n_buffered_output+=sample_rem;
- u->samples_gathered=0;
-end:
- pa_memblock_release(chunk->memblock);
+ //deque from renderq and output
+ //pa_memblockq_set_prebuf(u->rendered_q,samples_requested*fs);
+ pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)>=0);
+ if(tchunk.length>=nbytes){
+ *chunk=tchunk;
+ chunk->length=samples_requested*fs;
+ pa_memblock_ref(chunk->memblock);
+ pa_memblock_unref(tchunk.memblock);
+ pa_memblockq_drop(u->rendered_q, chunk->length);
+ }else{
+ size_t copied=0;
+ chunk->length=nbytes;
+ chunk->memblock=pa_memblock_new(u->core->mempool,chunk->length);
+ uint8_t *dst=(uint8_t*)pa_memblock_acquire(chunk->memblock);
+ do{
+ size_t l=PA_MIN(tchunk.length-tchunk.index,nbytes-copied);
+ uint8_t *src=(((uint8_t*)pa_memblock_acquire(tchunk.memblock))+tchunk.index);
+ memmove(dst+copied,src,l);
+ copied+=l;
+ pa_memblock_release(tchunk.memblock);
+ pa_memblock_unref(tchunk.memblock);
+ pa_memblockq_drop(u->rendered_q,l);
+ if(copied<nbytes){
+ if(pa_memblockq_get_length(u->rendered_q)==0){
+ chunk->length=copied;
+ break;
+ }
+ pa_memblockq_peek(u->rendered_q,&tchunk);
+ }
+ }while(copied<nbytes);
+ pa_memblock_release(chunk->memblock);
+ }
+ pa_assert_se(chunk->memblock);
+ pa_log("output requested %ld, gave %ld",nbytes/fs,chunk->length/fs);
+ //pa_log("end pop");
return 0;
}
@@ -410,20 +420,19 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
if (u->sink->thread_info.rewind_nbytes > 0) {
size_t max_rewrite;
- max_rewrite = nbytes + pa_memblockq_get_length(u->memblockq);
+ max_rewrite = nbytes + pa_memblockq_get_length(u->rendered_q);
amount = PA_MIN(u->sink->thread_info.rewind_nbytes, max_rewrite);
u->sink->thread_info.rewind_nbytes = 0;
if (amount > 0) {
- pa_memblockq_seek(u->memblockq, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
+ pa_memblockq_seek(u->rendered_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log_debug("Resetting equalizer");
- u->n_buffered_output=0;
u->samples_gathered=0;
}
}
pa_sink_process_rewind(u->sink, amount);
- pa_memblockq_rewind(u->memblockq, nbytes);
+ pa_memblockq_rewind(u->rendered_q, nbytes);
}
/* Called from I/O thread context */
@@ -436,7 +445,7 @@ static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- pa_memblockq_set_maxrewind(u->memblockq, nbytes);
+ pa_memblockq_set_maxrewind(u->rendered_q, nbytes);
pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
}
@@ -582,17 +591,20 @@ int pa__init(pa_module*m) {
u->master = master;
u->sink = NULL;
u->sink_input = NULL;
- u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
- //u->samplings=0;
u->channels=ss.channels;
u->fft_size=pow(2,ceil(log(ss.rate)/log(2)));
pa_log("fft size: %ld",u->fft_size);
u->window_size=7999;
u->R=(u->window_size+1)/2;
+ u->overlap_size=u->window_size-u->R;
+ u->target_samples=5*u->R;
u->samples_gathered=0;
- u->n_buffered_output=0;
u->max_output=pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
+ u->rendered_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH,u->target_samples*fs, fs, fs, 0, 0, NULL);
+ u->conv_buffer.memblock=pa_memblock_new(u->core->mempool,u->target_samples*fs);
+
+
u->H=(float*) fftwf_malloc((u->fft_size/2+1)*sizeof(float));
u->W=(float*) fftwf_malloc((u->window_size)*sizeof(float));
u->work_buffer=(float*) fftwf_malloc(u->fft_size*sizeof(float));
@@ -600,9 +612,9 @@ int pa__init(pa_module*m) {
u->overlap_accum=(float **)malloc(sizeof(float *)*u->channels);
u->output_buffer=(float **)malloc(sizeof(float *)*u->channels);
for(size_t c=0;c<u->channels;++c){
- u->input[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
+ u->input[c]=(float*) fftwf_malloc((u->target_samples+u->overlap_size)*sizeof(float));
pa_assert_se(u->input[c]);
- memset(u->input[c],0,u->window_size*sizeof(float));
+ memset(u->input[c],0,(u->target_samples+u->overlap_size)*sizeof(float));
pa_assert_se(u->input[c]);
u->overlap_accum[c]=(float*) fftwf_malloc(u->R*sizeof(float));
pa_assert_se(u->overlap_accum[c]);
@@ -780,8 +792,11 @@ void pa__done(pa_module*m) {
pa_sink_input_unref(u->sink_input);
}
- if (u->memblockq)
- pa_memblockq_free(u->memblockq);
+ if(u->conv_buffer.memblock)
+ pa_memblock_unref(u->conv_buffer.memblock);
+
+ if (u->rendered_q)
+ pa_memblockq_free(u->rendered_q);
fftwf_destroy_plan(u->inverse_plan);
fftwf_destroy_plan(u->forward_plan);
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index f38b17c..eac4a59 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -54,7 +54,7 @@
* stored in SHM and our OS does not commit the memory before we use
* it for the first time. */
#define PA_MEMPOOL_SLOTS_MAX 1024
-#define PA_MEMPOOL_SLOT_SIZE (64*1024)
+#define PA_MEMPOOL_SLOT_SIZE (128*1024)
#define PA_MEMEXPORT_SLOTS_MAX 128
commit 09d9096069360d1eecd30b11df7b4c7d2c39ac35
Author: Jason Newton <jason at arcuid.wyred.org>
Date: Tue Jul 21 03:24:57 2009 -0700
module-equalizer-sink: simplified sink_input pop callback and introduced new variables that simplify different strategies.
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 1d4a423..970b20d 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -65,6 +65,7 @@ PA_MODULE_USAGE(_("sink=<sink to connect to> "));
#define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+
struct userdata {
pa_core *core;
pa_module *module;
@@ -107,6 +108,21 @@ static const char* const valid_modargs[] = {
NULL
};
+uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
+void hanning_normalized_window(float *W,size_t window_size);
+void hanning_window(float *W,size_t window_size);
+void hamming_window(float *W,size_t window_size);
+void blackman_window(float *W,size_t window_size);
+void sin_window(float *W,size_t window_size);
+void array_out(const char *name,float *a,size_t length);
+
+static void dsp_logic(float *dst,struct userdata *u);
+static void process_samples(struct userdata *u);
+void input_buffer(struct userdata *u,pa_memchunk *in);
+
+#define gettime(x) clock_gettime(CLOCK_MONOTONIC,&x)
+#define tdiff(x,y) time_diff(&x,&y)
+
uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
{
return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -
@@ -188,13 +204,14 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
case PA_SINK_MESSAGE_GET_LATENCY: {
pa_usec_t usec = 0;
pa_sample_spec *ss=&u->sink->sample_spec;
- size_t fs=pa_frame_size(ss);
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
/* Get the latency of the master sink */
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- usec+=pa_bytes_to_usec(u->samples_gathered*fs,ss);
+ usec+=pa_bytes_to_usec(u->R*fs,ss);
+ //usec+=pa_bytes_to_usec(u->samples_gathered*fs,ss);
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
/* Add the latency internal to our sink input on top */
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
@@ -247,6 +264,90 @@ static void sink_update_requested_latency(pa_sink *s) {
pa_sink_get_requested_latency_within_thread(s));
}
+static void process_samples(struct userdata *u){
+ pa_memchunk tchunk;
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ while(u->samples_gathered>=u->R){
+ float *dst;
+ //pa_log("iter gathered: %ld",u->samples_gathered);
+ //pa_memblockq_drop(u->rendered_q, tchunk.length);
+ tchunk.index=0;
+ tchunk.length=u->R*fs;
+ tchunk.memblock=pa_memblock_new(u->core->mempool,tchunk.length);
+ dst=((float*)pa_memblock_acquire(tchunk.memblock));
+ dsp_logic(dst,u);
+ pa_memblock_release(tchunk.memblock);
+ pa_memblockq_push(u->rendered_q, &tchunk);
+ pa_memblock_unref(tchunk.memblock);
+ u->samples_gathered-=u->R;
+ }
+}
+
+static void dsp_logic(float *dst,struct userdata *u){
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ //use a linear-phase sliding STFT and overlap-add method (for each channel)
+ for (size_t c=0;c<u->channels;c++) {
+ //zero padd the data
+ memset(u->work_buffer+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
+ //window the data
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->W[j]*u->input[c][j];
+ }
+ //Processing is done here!
+ //do fft
+ fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
+ //perform filtering
+ for(size_t j=0;j<u->fft_size/2+1;++j){
+ u->output_window[j][0]*=u->H[j];
+ u->output_window[j][1]*=u->H[j];
+ }
+ //inverse fft
+ fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
+ ////debug: tests overlaping add
+ ////and negates ALL PREVIOUS processing
+ ////yields a perfect reconstruction if COLA is held
+ //for(size_t j=0;j<u->window_size;++j){
+ // u->work_buffer[j]=u->W[j]*u->input[c][j];
+ //}
+
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j=0;j<u->R;++j){
+ u->work_buffer[j]+=u->overlap_accum[c][j];
+ u->overlap_accum[c][j]=u->work_buffer[u->overlap_size+j];
+ }
+
+ //debug: tests if basic buffering works
+ //shouldn't modify the signal AT ALL (beyond roundoff)
+ for(size_t j=0;j<u->window_size;++j){
+ u->work_buffer[j]=u->input[c][j];
+ }
+
+ //preseve the needed input for the next window's overlap
+ memmove(u->input[c],u->input[c]+u->R,
+ (u->samples_gathered+u->overlap_size-u->R)*sizeof(float)
+ );
+ //output the samples that are outputable now
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,dst+c,fs,u->work_buffer,sizeof(float),u->R);
+ }
+}
+
+void input_buffer(struct userdata *u,pa_memchunk *in){
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ size_t samples=in->length/fs;
+ pa_assert_se(samples<=u->target_samples-u->samples_gathered);
+ float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
+ for (size_t c=0;c<u->channels;c++) {
+ //buffer with an offset after the overlap from previous
+ //iterations
+ pa_assert_se(
+ u->input[c]+u->overlap_size+u->samples_gathered+samples<=u->input[c]+u->target_samples+u->overlap_size
+ );
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+u->overlap_size+u->samples_gathered,sizeof(float),src+c,fs,samples);
+ }
+ u->samples_gathered+=samples;
+ pa_memblock_release(in->memblock);
+}
+
/* Called from I/O thread context */
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
@@ -255,153 +356,98 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert_se(u = i->userdata);
pa_assert_se(u->sink);
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- size_t ss=pa_sample_size(&(u->sink->sample_spec));
- size_t fe = fs/ss;
size_t samples_requested=nbytes/fs;
+ size_t buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
pa_memchunk tchunk;
chunk->memblock=NULL;
- size_t buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
-
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
- pa_log("start output-buffered %ld, input-buffered %ld",buffered_samples,u->samples_gathered);
- //collect samples
- size_t buffered_remaining=pa_memblockq_get_length(u->rendered_q)/fs;
- size_t buffer_missing=pa_memblockq_missing(u->rendered_q)/fs;
- size_t desired_samples=(buffer_missing>=u->R)*PA_MIN(u->target_samples-u->samples_gathered,buffer_missing);
- if(desired_samples>0){
- u->conv_buffer.index=0;
- //if we still had buffered output,
- //or can gather any more in the buffer
- //politely request (optimistic)
- if(buffered_samples>=samples_requested ||
- (u->samples_gathered/u->R)*u->R>=samples_requested){
- u->conv_buffer.length=desired_samples*fs;
- pa_log("trying to buffer %ld samples",desired_samples);
- pa_sink_render_into(u->sink, &u->conv_buffer);
- }else{//we need it now! force it
- //TODO: minimum amount or the whole buffer better?
- desired_samples=u->R-u->samples_gathered%u->R;
- u->conv_buffer.length=desired_samples*fs;
- pa_log("force-buffer %ld samples",desired_samples);
- pa_sink_render_into_full(u->sink, &u->conv_buffer);
- pa_assert_se(u->conv_buffer.length==desired_samples*fs);
- }
- size_t n_samples=u->conv_buffer.length/fs;
- float *src;
- pa_log("received %ld samples",n_samples);
-
- pa_assert_se(n_samples<=u->target_samples-u->samples_gathered);
- src = (float*) ((uint8_t*) pa_memblock_acquire(u->conv_buffer.memblock) + u->conv_buffer.index);
- for (size_t c=0;c<u->channels;c++) {
- //buffer with an offset after the overlap from previous
- //iterations
- pa_assert_se(
- u->input[c]+u->overlap_size+u->samples_gathered+n_samples<=u->input[c]+u->target_samples+u->overlap_size
- );
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+u->overlap_size+u->samples_gathered,sizeof(float), src+c, fs, n_samples);
- }
- u->samples_gathered+=n_samples;
- pa_memblock_release(u->conv_buffer.memblock);
- }
- //pa_assert_se(u->samples_gathered>=u->R);
- pa_assert_se(u->fft_size>=u->window_size);
- pa_assert_se(u->R<u->window_size);
- //process every complete block on hand
- while(u->samples_gathered>=u->R&&buffer_missing>=u->R){
- float *dst;
- //pa_log("iter gathered: %ld",u->samples_gathered);
- tchunk.index=0;
- tchunk.length=u->R*fs;
- tchunk.memblock=pa_memblock_new(u->core->mempool,tchunk.length);
- //pa_memblockq_drop(u->rendered_q, tchunk.length);
- pa_assert_se(tchunk.length==u->R*fs);
- dst=(float*)pa_memblock_acquire(tchunk.memblock);
- //use a linear-phase sliding STFT and overlap-add method (for each channel)
- for (size_t c=0;c<u->channels;c++) {
- //zero padd the data
- memset(u->work_buffer+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
- //window the data
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->W[j]*u->input[c][j];
- }
- //Processing is done here!
- //do fft
- fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
- //perform filtering
- for(size_t j=0;j<u->fft_size/2+1;++j){
- u->output_window[j][0]*=u->H[j];
- u->output_window[j][1]*=u->H[j];
- }
- //inverse fft
- fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
- ////debug: tests overlaping add
- ////and negates ALL PREVIOUS processing
- ////yields a perfect reconstruction if COLA is held
- //for(size_t j=0;j<u->window_size;++j){
- // u->work_buffer[j]=u->W[j]*u->input[c][j];
- //}
-
- //overlap add and preserve overlap component from this window (linear phase)
- for(size_t j=0;j<u->R;++j){
- u->work_buffer[j]+=u->overlap_accum[c][j];
- u->overlap_accum[c][j]=u->work_buffer[u->overlap_size+j];
- }
-
- //debug: tests if basic buffering works
- //shouldn't modify the signal AT ALL (beyond roundoff)
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->input[c][j];
- }
-
- //preseve the needed input for the next window's overlap
- memmove(u->input[c],u->input[c]+u->R,
- (u->samples_gathered+u->overlap_size-u->R)*sizeof(float)
- );
- //output the samples that are outputable now
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst+c, fs, u->work_buffer, sizeof(float),u->R);
- }
- pa_memblock_release(tchunk.memblock);
- pa_memblockq_push(u->rendered_q, &tchunk);
- pa_memblock_unref(tchunk.memblock);
- u->samples_gathered-=u->R;
- buffer_missing-=u->R;
- }
- //deque from renderq and output
- //pa_memblockq_set_prebuf(u->rendered_q,samples_requested*fs);
- pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)>=0);
- if(tchunk.length>=nbytes){
+ pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
+ struct timespec start,end;
+
+ if(pa_memblockq_peek(u->rendered_q,&tchunk)==0){
*chunk=tchunk;
- chunk->length=samples_requested*fs;
- pa_memblock_ref(chunk->memblock);
- pa_memblock_unref(tchunk.memblock);
pa_memblockq_drop(u->rendered_q, chunk->length);
- }else{
- size_t copied=0;
- chunk->length=nbytes;
- chunk->memblock=pa_memblock_new(u->core->mempool,chunk->length);
- uint8_t *dst=(uint8_t*)pa_memblock_acquire(chunk->memblock);
- do{
- size_t l=PA_MIN(tchunk.length-tchunk.index,nbytes-copied);
- uint8_t *src=(((uint8_t*)pa_memblock_acquire(tchunk.memblock))+tchunk.index);
- memmove(dst+copied,src,l);
- copied+=l;
- pa_memblock_release(tchunk.memblock);
- pa_memblock_unref(tchunk.memblock);
- pa_memblockq_drop(u->rendered_q,l);
- if(copied<nbytes){
- if(pa_memblockq_get_length(u->rendered_q)==0){
- chunk->length=copied;
- break;
- }
- pa_memblockq_peek(u->rendered_q,&tchunk);
- }
- }while(copied<nbytes);
- pa_memblock_release(chunk->memblock);
+ return 0;
}
+ do{
+ pa_memchunk *buffer;
+ size_t input_remaining=u->target_samples-u->samples_gathered;
+ pa_assert(input_remaining>0);
+ //collect samples
+
+ //buffer=&u->conv_buffer;
+ //buffer->length=input_remaining*fs;
+ //buffer->index=0;
+ //pa_memblock_ref(buffer);
+ //pa_sink_render_into(u->sink,buffer);
+
+ if(u->sink->thread_info.rewind_requested)
+ sink_request_rewind(u->sink);
+
+ pa_memchunk p;
+ buffer=&p;
+ pa_sink_render(u->sink,u->R*fs,buffer);
+ buffer->length=PA_MIN(input_remaining*fs,buffer->length);
+
+ //debug block
+ //pa_memblockq_push(u->rendered_q,buffer);
+ //pa_memblock_unref(buffer->memblock);
+ //goto END;
+
+ pa_log("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
+ //copy new input
+ gettime(start);
+ input_buffer(u,buffer);
+ gettime(end);
+ pa_log("Took %0.5f seconds to setup",tdiff(end,start)*1e-9);
+
+ pa_memblock_unref(buffer->memblock);
+
+ pa_assert_se(u->fft_size>=u->window_size);
+ pa_assert_se(u->R<u->window_size);
+ //process every complete block on hand
+
+ gettime(start);
+ process_samples(u);
+ gettime(end);
+ pa_log("Took %0.5f seconds to process",tdiff(end,start)*1e-9);
+
+ buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
+ }while(buffered_samples<u->R);
+
+ //deque from rendered_q and output
+ pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)==0);
+ *chunk=tchunk;
+ pa_memblockq_drop(u->rendered_q, chunk->length);
+ //if(tchunk.length>=nbytes){
+ //chunk->length=PA_MIN(tchunk.length,nbytes);
+ //}else{
+ // size_t copied=0;
+ // chunk->index=0;
+ // chunk->length=PA_MIN(nbytes,pa_memblockq_get_length(u->rendered_q));
+ // chunk->memblock=pa_memblock_new(u->core->mempool,chunk->length);
+ // uint8_t *dst=(uint8_t*)pa_memblock_acquire(chunk->memblock);
+ // for(;;){
+ // size_t l=PA_MIN(tchunk.length,nbytes-copied);
+ // pa_assert_se(l>0);
+ // uint8_t *src=(((uint8_t*)pa_memblock_acquire(tchunk.memblock))+tchunk.index);
+ // memmove(dst+copied,src,l);
+ // copied+=l;
+ // pa_memblock_release(tchunk.memblock);
+ // pa_memblock_unref(tchunk.memblock);
+ // pa_memblockq_drop(u->rendered_q,l);
+ // if(copied<chunk->length){
+ // pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)==0);
+ // }else{
+ // break;
+ // }
+ // }
+ // pa_memblock_release(chunk->memblock);
+ //}
pa_assert_se(chunk->memblock);
- pa_log("output requested %ld, gave %ld",nbytes/fs,chunk->length/fs);
+ pa_log("gave %ld",chunk->length/fs);
//pa_log("end pop");
return 0;
}
@@ -411,6 +457,7 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
struct userdata *u;
size_t amount = 0;
+ pa_log_debug("Rewind callback!");
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
@@ -425,6 +472,7 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
u->sink->thread_info.rewind_nbytes = 0;
if (amount > 0) {
+ //pa_sample_spec *ss=&u->sink->sample_spec;
pa_memblockq_seek(u->rendered_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log_debug("Resetting equalizer");
u->samples_gathered=0;
@@ -459,7 +507,8 @@ static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- pa_sink_set_max_request_within_thread(u->sink, nbytes);
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
}
/* Called from I/O thread context */
@@ -472,7 +521,9 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ pa_sink_set_latency_range_within_thread(u->sink,u->R*fs ,u->R*fs );
+ //pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
/* Called from I/O thread context */
@@ -504,7 +555,9 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_rtpoll(u->sink, i->sink->rtpoll);
pa_sink_attach_within_thread(u->sink);
- pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ pa_sink_set_latency_range_within_thread(u->sink, u->R*fs, u->R*fs);
+ //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
}
/* Called from main context */
@@ -598,7 +651,7 @@ int pa__init(pa_module*m) {
u->window_size=7999;
u->R=(u->window_size+1)/2;
u->overlap_size=u->window_size-u->R;
- u->target_samples=5*u->R;
+ u->target_samples=1*u->R;
u->samples_gathered=0;
u->max_output=pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
u->rendered_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH,u->target_samples*fs, fs, fs, 0, 0, NULL);
@@ -716,6 +769,8 @@ int pa__init(pa_module*m) {
pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
pa_sink_set_rtpoll(u->sink, master->rtpoll);
+ pa_sink_set_max_request(u->sink,u->R*fs);
+ //pa_sink_set_fixed_latency(u->sink,pa_bytes_to_usec(u->R*fs,&ss));
/* Create sink input */
pa_sink_input_new_data_init(&sink_input_data);
commit 702480a8836eefb95cb41d7d4a05d4065d6560dc
Author: Jason Newton <nevion at gmail.com>
Date: Thu Jul 23 03:26:35 2009 -0700
module-equalizer-sink:
first commit of a working state (cpu speed dependant)
added noop processing for filter debugability
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 970b20d..4d595e1 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -82,6 +82,7 @@ struct userdata {
* the latency of the filter, calculated from window_size
* based on constraints of COLA and window function
*/
+ size_t latency;
size_t overlap_size;//window_size-R
size_t samples_gathered;
size_t max_output;
@@ -210,9 +211,9 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- usec+=pa_bytes_to_usec(u->R*fs,ss);
+ usec+=pa_bytes_to_usec(u->latency*fs,ss);
//usec+=pa_bytes_to_usec(u->samples_gathered*fs,ss);
- usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
+ //usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
/* Add the latency internal to our sink input on top */
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
*((pa_usec_t*) data) = usec;
@@ -316,11 +317,11 @@ static void dsp_logic(float *dst,struct userdata *u){
u->overlap_accum[c][j]=u->work_buffer[u->overlap_size+j];
}
- //debug: tests if basic buffering works
- //shouldn't modify the signal AT ALL (beyond roundoff)
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->input[c][j];
- }
+ ////debug: tests if basic buffering works
+ ////shouldn't modify the signal AT ALL (beyond roundoff)
+ //for(size_t j=0;j<u->window_size;++j){
+ // u->work_buffer[j]=u->input[c][j];
+ //}
//preseve the needed input for the next window's overlap
memmove(u->input[c],u->input[c]+u->R,
@@ -363,7 +364,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
- pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
+ //pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
struct timespec start,end;
if(pa_memblockq_peek(u->rendered_q,&tchunk)==0){
@@ -377,31 +378,31 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(input_remaining>0);
//collect samples
- //buffer=&u->conv_buffer;
- //buffer->length=input_remaining*fs;
- //buffer->index=0;
- //pa_memblock_ref(buffer);
- //pa_sink_render_into(u->sink,buffer);
+ buffer=&u->conv_buffer;
+ buffer->length=input_remaining*fs;
+ buffer->index=0;
+ pa_memblock_ref(buffer->memblock);
+ pa_sink_render_into(u->sink,buffer);
- if(u->sink->thread_info.rewind_requested)
- sink_request_rewind(u->sink);
+ //if(u->sink->thread_info.rewind_requested)
+ // sink_request_rewind(u->sink);
- pa_memchunk p;
- buffer=&p;
- pa_sink_render(u->sink,u->R*fs,buffer);
- buffer->length=PA_MIN(input_remaining*fs,buffer->length);
+ //pa_memchunk p;
+ //buffer=&p;
+ //pa_sink_render(u->sink,u->R*fs,buffer);
+ //buffer->length=PA_MIN(input_remaining*fs,buffer->length);
//debug block
//pa_memblockq_push(u->rendered_q,buffer);
//pa_memblock_unref(buffer->memblock);
//goto END;
- pa_log("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
+ //pa_log("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
//copy new input
gettime(start);
input_buffer(u,buffer);
gettime(end);
- pa_log("Took %0.5f seconds to setup",tdiff(end,start)*1e-9);
+ //pa_log("Took %0.5f seconds to setup",tdiff(end,start)*1e-9);
pa_memblock_unref(buffer->memblock);
@@ -412,7 +413,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
gettime(start);
process_samples(u);
gettime(end);
- pa_log("Took %0.5f seconds to process",tdiff(end,start)*1e-9);
+ //pa_log("Took %0.5f seconds to process",tdiff(end,start)*1e-9);
buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
}while(buffered_samples<u->R);
@@ -447,7 +448,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
// pa_memblock_release(chunk->memblock);
//}
pa_assert_se(chunk->memblock);
- pa_log("gave %ld",chunk->length/fs);
+ //pa_log("gave %ld",chunk->length/fs);
//pa_log("end pop");
return 0;
}
@@ -522,7 +523,7 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
return;
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_latency_range_within_thread(u->sink,u->R*fs ,u->R*fs );
+ pa_sink_set_latency_range_within_thread(u->sink,u->latency*fs ,u->latency*fs );
//pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
@@ -556,7 +557,7 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_attach_within_thread(u->sink);
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_latency_range_within_thread(u->sink, u->R*fs, u->R*fs);
+ pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
}
@@ -656,6 +657,7 @@ int pa__init(pa_module*m) {
u->max_output=pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
u->rendered_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH,u->target_samples*fs, fs, fs, 0, 0, NULL);
u->conv_buffer.memblock=pa_memblock_new(u->core->mempool,u->target_samples*fs);
+ u->latency=u->R;
u->H=(float*) fftwf_malloc((u->fft_size/2+1)*sizeof(float));
@@ -676,8 +678,8 @@ int pa__init(pa_module*m) {
pa_assert_se(u->output_buffer[c]);
}
u->output_window = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * (u->fft_size/2+1));
- u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
- u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
+ u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_MEASURE);
+ u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_MEASURE);
/*
for(size_t j=0;j<u->window_size;++j){
u->W[j]=.5;
commit c7fcc9cc01c807c30b6c96f9995ef2c596c74146
Author: Jason Newton <nevion at gmail.com>
Date: Mon Jul 27 01:22:26 2009 -0700
module-equalizer-sink:
removed liboil
added sse2 optimized dsp logic implementation
cleaned up a bit
diff --git a/src/Makefile.am b/src/Makefile.am
index 10f9a79..281bdf1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1383,9 +1383,9 @@ module_ladspa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
module_ladspa_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_equalizer_sink_la_SOURCES = modules/module-equalizer-sink.c
-module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS) $(LIBOIL_CFLAGS)
+module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS)
module_equalizer_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
-module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) $(LIBOIL_LIBS) -lfftw3f libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) -lfftw3f libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_match_la_SOURCES = modules/module-match.c
module_match_la_LDFLAGS = $(MODULE_LDFLAGS)
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 4d595e1..e20e07f 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -29,11 +29,13 @@ USA.
#include <config.h>
#endif
+#include <stdlib.h>
#include <stdio.h>
+#include <float.h>
#include <math.h>
#include <fftw3.h>
-#include <float.h>
-
+#include <string.h>
+#include <malloc.h>
#include <pulse/xmalloc.h>
#include <pulse/i18n.h>
@@ -55,6 +57,14 @@ USA.
#include <time.h>
+//#undef __SSE2__
+#ifdef __SSE2__
+#include <xmmintrin.h>
+#include <emmintrin.h>
+#endif
+
+
+
#include "module-equalizer-sink-symdef.h"
PA_MODULE_AUTHOR("Jason Newton");
@@ -82,10 +92,12 @@ struct userdata {
* the latency of the filter, calculated from window_size
* based on constraints of COLA and window function
*/
- size_t latency;
+ size_t latency;//Really just R but made into it's own variable
+ //for twiddling with pulseaudio
size_t overlap_size;//window_size-R
size_t samples_gathered;
- size_t max_output;
+ size_t max_output;//max amount of samples outputable in a single
+ //message
size_t target_samples;
float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
@@ -109,76 +121,39 @@ static const char* const valid_modargs[] = {
NULL
};
-uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
-void hanning_normalized_window(float *W,size_t window_size);
-void hanning_window(float *W,size_t window_size);
-void hamming_window(float *W,size_t window_size);
-void blackman_window(float *W,size_t window_size);
-void sin_window(float *W,size_t window_size);
-void array_out(const char *name,float *a,size_t length);
-
-static void dsp_logic(float *dst,struct userdata *u);
+static uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
+static void hanning_window(float *W,size_t window_size);
+static void array_out(const char *name,float *a,size_t length);
static void process_samples(struct userdata *u);
-void input_buffer(struct userdata *u,pa_memchunk *in);
-
+static void input_buffer(struct userdata *u,pa_memchunk *in);
+
+void dsp_logic(
+ float * __restrict__ dst,
+ float * __restrict__ src,
+ float * __restrict__ overlap,
+ const float * __restrict__ H,
+ const float * __restrict__ W,
+ fftwf_complex * __restrict__ output_window,
+ struct userdata *u);
+
+#define v_size 4
#define gettime(x) clock_gettime(CLOCK_MONOTONIC,&x)
#define tdiff(x,y) time_diff(&x,&y)
+#define mround(x,y) (x%y==0?x:(x/y+1)*y)
uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
{
- return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -
- ((timeB_p->tv_sec * 1000000000) + timeB_p->tv_nsec);
+ return ((timeA_p->tv_sec * 1000000000ULL) + timeA_p->tv_nsec) -
+ ((timeB_p->tv_sec * 1000000000ULL) + timeB_p->tv_nsec);
}
-void hanning_normalized_window(float *W,size_t window_size){
- //h = sqrt(2)/2 * (1+cos(t*pi)) ./ sqrt( 1+cos(t*pi).^2 )
- float c;
- for(size_t i=0;i<window_size;++i){
- c=cos(M_PI*i/(window_size-1));
- W[i]=sqrt(2.0)/2.0*(1.0+c) / sqrt(1.0+c*c);
- }
-}
void hanning_window(float *W,size_t window_size){
//h=.5*(1-cos(2*pi*j/(window_size+1)), COLA for R=(M+1)/2
for(size_t i=0;i<window_size;++i){
- W[i]=.5*(1-cos(2*M_PI*i/(window_size+1)));
- }
-}
-void hamming_window(float *W,size_t window_size){
- //h=.54-.46*cos(2*pi*j/(window_size-1))
- //COLA for R=(M-1)/2,(M-1)/4 etc when endpoints are divided by 2
- //or one endpoint is zeroed
- float m;
- for(size_t i=0;i<window_size;++i){
- m=i;
- m/=(window_size-1);
- W[i]=.54-.46*cos(2*M_PI*m);
- }
- W[window_size-1]=0;
- //W[0]/=2;
- //W[window_size-1]/=2;
-}
-void blackman_window(float *W,size_t window_size){
- //h=.42-.5*cos(2*pi*m)+.08*cos(4*pi*m), m=(0:W-1)/(W-1)
- //COLA for R=(M-1)/3 when M is odd and R is an integer
- //R=M/3 when M is even and R is an integer
- float m;
- for(size_t i=0;i<window_size;++i){
- m=i;
- m/=(window_size-1);
- W[i]=.42-.5*cos(2*M_PI*m)+.08*cos(4*M_PI*m);
- }
-}
-
-
-void sin_window(float *W,size_t window_size){
- //h = (cos(t*pi)+1)/2 .* float(abs(t)<1);
- for(size_t i=0;i<window_size;++i){
- W[i]=sin(M_PI*i/(window_size-1));
+ W[i]=(float).5*(1-cos(2*M_PI*i/(window_size+1)));
}
}
-
void array_out(const char *name,float *a,size_t length){
FILE *p=fopen(name,"w");
if(!p){
@@ -211,9 +186,9 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- usec+=pa_bytes_to_usec(u->latency*fs,ss);
+ //usec+=pa_bytes_to_usec(u->latency*fs,ss);
//usec+=pa_bytes_to_usec(u->samples_gathered*fs,ss);
- //usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
+ usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
/* Add the latency internal to our sink input on top */
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
*((pa_usec_t*) data) = usec;
@@ -276,7 +251,18 @@ static void process_samples(struct userdata *u){
tchunk.length=u->R*fs;
tchunk.memblock=pa_memblock_new(u->core->mempool,tchunk.length);
dst=((float*)pa_memblock_acquire(tchunk.memblock));
- dsp_logic(dst,u);
+ for (size_t c=0;c<u->channels;c++) {
+ dsp_logic(
+ u->work_buffer,
+ u->input[c],
+ u->overlap_accum[c],
+ u->H,
+ u->W,
+ u->output_window,
+ u
+ );
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,dst+c,fs,u->work_buffer,sizeof(float),u->R);
+ }
pa_memblock_release(tchunk.memblock);
pa_memblockq_push(u->rendered_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
@@ -284,54 +270,166 @@ static void process_samples(struct userdata *u){
}
}
-static void dsp_logic(float *dst,struct userdata *u){
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
- //use a linear-phase sliding STFT and overlap-add method (for each channel)
- for (size_t c=0;c<u->channels;c++) {
- //zero padd the data
- memset(u->work_buffer+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
- //window the data
- for(size_t j=0;j<u->window_size;++j){
- u->work_buffer[j]=u->W[j]*u->input[c][j];
- }
- //Processing is done here!
- //do fft
- fftwf_execute_dft_r2c(u->forward_plan,u->work_buffer,u->output_window);
- //perform filtering
- for(size_t j=0;j<u->fft_size/2+1;++j){
- u->output_window[j][0]*=u->H[j];
- u->output_window[j][1]*=u->H[j];
- }
- //inverse fft
- fftwf_execute_dft_c2r(u->inverse_plan,u->output_window,u->work_buffer);
- ////debug: tests overlaping add
- ////and negates ALL PREVIOUS processing
- ////yields a perfect reconstruction if COLA is held
- //for(size_t j=0;j<u->window_size;++j){
- // u->work_buffer[j]=u->W[j]*u->input[c][j];
- //}
+typedef float v4sf __attribute__ ((__aligned__(v_size*sizeof(float))));
+typedef union float_vector {
+ float f[v_size];
+ v4sf v;
+#ifdef __SSE2__
+ __m128 m;
+#endif
+} float_vector_t;
+
+////reference implementation
+//void dsp_logic(
+// float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
+// float * __restrict__ src,/*input data w/ overlap at start,
+// *automatically cycled in routine
+// */
+// float * __restrict__ overlap,//The size of the overlap
+// const float * __restrict__ H,//The freq. magnitude scalers filter
+// const float * __restrict__ W,//The windowing function
+// fftwf_complex * __restrict__ output_window,//The transformed window'd src
+// struct userdata *u){
+// //use a linear-phase sliding STFT and overlap-add method (for each channel)
+// //zero padd the data
+// memset(dst+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
+// //window the data
+// for(size_t j=0;j<u->window_size;++j){
+// dst[j]=W[j]*src[j];
+// }
+// //Processing is done here!
+// //do fft
+// fftwf_execute_dft_r2c(u->forward_plan,dst,output_window);
+// //perform filtering
+// for(size_t j=0;j<u->fft_size/2+1;++j){
+// u->output_window[j][0]*=u->H[j];
+// u->output_window[j][1]*=u->H[j];
+// }
+// //inverse fft
+// fftwf_execute_dft_c2r(u->inverse_plan,output_window,dst);
+// ////debug: tests overlaping add
+// ////and negates ALL PREVIOUS processing
+// ////yields a perfect reconstruction if COLA is held
+// //for(size_t j=0;j<u->window_size;++j){
+// // u->work_buffer[j]=u->W[j]*u->input[c][j];
+// //}
+//
+// //overlap add and preserve overlap component from this window (linear phase)
+// for(size_t j=0;j<u->overlap_size;++j){
+// u->work_buffer[j]+=overlap[j];
+// overlap[j]=dst[u->R+j];
+// }
+// ////debug: tests if basic buffering works
+// ////shouldn't modify the signal AT ALL (beyond roundoff)
+// //for(size_t j=0;j<u->window_size;++j){
+// // u->work_buffer[j]=u->input[c][j];
+// //}
+//
+// //preseve the needed input for the next window's overlap
+// memmove(src,src+u->R,
+// (u->samples_gathered+u->overlap_size-u->R)*sizeof(float)
+// );
+//}
+
+//regardless of sse enabled, the loops in here assume
+//16 byte aligned addresses and memory allocations divisible by v_size
+void dsp_logic(
+ float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
+ float * __restrict__ src,/*input data w/ overlap at start,
+ *automatically cycled in routine
+ */
+ float * __restrict__ overlap,//The size of the overlap
+ const float * __restrict__ H,//The freq. magnitude scalers filter
+ const float * __restrict__ W,//The windowing function
+ fftwf_complex * __restrict__ output_window,//The transformed window'd src
+ struct userdata *u){//Collection of constants
+
+ const size_t window_size=mround(u->window_size,v_size);
+ const size_t fft_h=mround(u->fft_size/2+1,v_size/2);
+ const size_t R=mround(u->R,v_size);
+ const size_t overlap_size=mround(u->overlap_size,v_size);
+
+ //assert(u->samples_gathered>=u->R);
+ //zero out the bit beyond the real overlap so we don't add garbage
+ for(size_t j=overlap_size;j>u->overlap_size;--j){
+ overlap[j-1]=0;
+ }
+ //use a linear-phase sliding STFT and overlap-add method
+ //zero padd the data
+ memset(dst+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
+ //window the data
+ for(size_t j=0;j<window_size;j+=v_size){
+ //dst[j]=W[j]*src[j];
+ float_vector_t *d=(float_vector_t*)(dst+j);
+ float_vector_t *w=(float_vector_t*)(W+j);
+ float_vector_t *s=(float_vector_t*)(src+j);
+#if __SSE2__
+ d->m=_mm_mul_ps(w->m,s->m);
+#else
+ d->v=w->v*s->v;
+#endif
+ }
+ //Processing is done here!
+ //do fft
+ fftwf_execute_dft_r2c(u->forward_plan,dst,output_window);
+
+
+ //perform filtering - purely magnitude based
+ for(size_t j=0;j<fft_h;j+=v_size/2){
+ //output_window[j][0]*=H[j];
+ //output_window[j][1]*=H[j];
+ float_vector_t *d=(float_vector_t*)(output_window+j);
+ float_vector_t h;
+ h.f[0]=h.f[1]=H[j];
+ h.f[2]=h.f[3]=H[j+1];
+#if __SSE2__
+ d->m=_mm_mul_ps(d->m,h.m);
+#else
+ d->v=d->v*h->v;
+#endif
+ }
- //overlap add and preserve overlap component from this window (linear phase)
- for(size_t j=0;j<u->R;++j){
- u->work_buffer[j]+=u->overlap_accum[c][j];
- u->overlap_accum[c][j]=u->work_buffer[u->overlap_size+j];
- }
- ////debug: tests if basic buffering works
- ////shouldn't modify the signal AT ALL (beyond roundoff)
- //for(size_t j=0;j<u->window_size;++j){
- // u->work_buffer[j]=u->input[c][j];
- //}
+ //inverse fft
+ fftwf_execute_dft_c2r(u->inverse_plan,output_window,dst);
- //preseve the needed input for the next window's overlap
- memmove(u->input[c],u->input[c]+u->R,
- (u->samples_gathered+u->overlap_size-u->R)*sizeof(float)
- );
- //output the samples that are outputable now
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE,dst+c,fs,u->work_buffer,sizeof(float),u->R);
+ ////debug: tests overlaping add
+ ////and negates ALL PREVIOUS processing
+ ////yields a perfect reconstruction if COLA is held
+ //for(size_t j=0;j<u->window_size;++j){
+ // dst[j]=W[j]*src[j];
+ //}
+
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j=0;j<overlap_size;j+=v_size){
+ //dst[j]+=overlap[j];
+ //overlap[j]+=dst[j+R];
+ float_vector_t *d=(float_vector_t*)(dst+j);
+ float_vector_t *o=(float_vector_t*)(overlap+j);
+#if __SSE2__
+ d->m=_mm_add_ps(d->m,o->m);
+ o->m=((float_vector_t*)(dst+u->R+j))->m;
+#else
+ d->v=d->v+o->v;
+ o->v=((float_vector_t*)(dst+u->R+j))->v;
+#endif
}
+ //memcpy(overlap,dst+u->R,u->overlap_size*sizeof(float));
+
+ //////debug: tests if basic buffering works
+ //////shouldn't modify the signal AT ALL (beyond roundoff)
+ //for(size_t j=0;j<u->window_size;++j){
+ // dst[j]=src[j];
+ //}
+
+ //preseve the needed input for the next window's overlap
+ memmove(src,src+u->R,
+ (u->overlap_size+u->samples_gathered-u->R)*sizeof(float)
+ );
}
+
+
void input_buffer(struct userdata *u,pa_memchunk *in){
size_t fs=pa_frame_size(&(u->sink->sample_spec));
size_t samples=in->length/fs;
@@ -422,31 +520,6 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)==0);
*chunk=tchunk;
pa_memblockq_drop(u->rendered_q, chunk->length);
- //if(tchunk.length>=nbytes){
- //chunk->length=PA_MIN(tchunk.length,nbytes);
- //}else{
- // size_t copied=0;
- // chunk->index=0;
- // chunk->length=PA_MIN(nbytes,pa_memblockq_get_length(u->rendered_q));
- // chunk->memblock=pa_memblock_new(u->core->mempool,chunk->length);
- // uint8_t *dst=(uint8_t*)pa_memblock_acquire(chunk->memblock);
- // for(;;){
- // size_t l=PA_MIN(tchunk.length,nbytes-copied);
- // pa_assert_se(l>0);
- // uint8_t *src=(((uint8_t*)pa_memblock_acquire(tchunk.memblock))+tchunk.index);
- // memmove(dst+copied,src,l);
- // copied+=l;
- // pa_memblock_release(tchunk.memblock);
- // pa_memblock_unref(tchunk.memblock);
- // pa_memblockq_drop(u->rendered_q,l);
- // if(copied<chunk->length){
- // pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)==0);
- // }else{
- // break;
- // }
- // }
- // pa_memblock_release(chunk->memblock);
- //}
pa_assert_se(chunk->memblock);
//pa_log("gave %ld",chunk->length/fs);
//pa_log("end pop");
@@ -509,7 +582,8 @@ static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
return;
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
+ pa_sink_set_max_request_within_thread(u->sink, nbytes);
+ //pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
}
/* Called from I/O thread context */
@@ -523,7 +597,8 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
return;
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_latency_range_within_thread(u->sink,u->latency*fs ,u->latency*fs );
+ pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
+ //pa_sink_set_latency_range_within_thread(u->sink,u->latency*fs ,u->latency*fs );
//pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
@@ -557,7 +632,12 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_attach_within_thread(u->sink);
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
+ //pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
+ //pa_sink_set_latency_range_within_thread(u->sink,u->latency*fs, u->master->thread_info.max_latency);
+ //TODO: setting this guy minimizes drop outs but doesn't get rid
+ //of them completely, figure out why
+ pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
+ //TODO: this guy causes dropouts constantly+rewinds, it's unusable
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
}
@@ -605,6 +685,16 @@ static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
return u->sink != dest;
}
+
+//ensure's memory allocated is a multiple of v_size
+//and aligned
+static void * alloc(size_t x,size_t s){
+ size_t f=mround(x*s,sizeof(float)*v_size);
+ //printf("requested %ld floats=%ld bytes, rem=%ld\n",x,x*sizeof(float),x*sizeof(float)%16);
+ //printf("giving %ld floats=%ld bytes, rem=%ld\n",f,f*sizeof(float),f*sizeof(float)%16);
+ return fftwf_malloc(f*s);
+}
+
int pa__init(pa_module*m) {
struct userdata *u;
pa_sample_spec ss;
@@ -649,7 +739,7 @@ int pa__init(pa_module*m) {
u->channels=ss.channels;
u->fft_size=pow(2,ceil(log(ss.rate)/log(2)));
pa_log("fft size: %ld",u->fft_size);
- u->window_size=7999;
+ u->window_size=15999;
u->R=(u->window_size+1)/2;
u->overlap_size=u->window_size-u->R;
u->target_samples=1*u->R;
@@ -659,32 +749,28 @@ int pa__init(pa_module*m) {
u->conv_buffer.memblock=pa_memblock_new(u->core->mempool,u->target_samples*fs);
u->latency=u->R;
-
- u->H=(float*) fftwf_malloc((u->fft_size/2+1)*sizeof(float));
- u->W=(float*) fftwf_malloc((u->window_size)*sizeof(float));
- u->work_buffer=(float*) fftwf_malloc(u->fft_size*sizeof(float));
+ u->H=alloc((u->fft_size/2+1),sizeof(fftwf_complex));
+ u->W=alloc(u->window_size,sizeof(float));
+ u->work_buffer=alloc(u->fft_size,sizeof(float));
+ memset(u->work_buffer,0,u->fft_size*sizeof(float));
u->input=(float **)malloc(sizeof(float *)*u->channels);
u->overlap_accum=(float **)malloc(sizeof(float *)*u->channels);
u->output_buffer=(float **)malloc(sizeof(float *)*u->channels);
for(size_t c=0;c<u->channels;++c){
- u->input[c]=(float*) fftwf_malloc((u->target_samples+u->overlap_size)*sizeof(float));
+ u->input[c]=alloc(u->target_samples+u->overlap_size,sizeof(float));
pa_assert_se(u->input[c]);
memset(u->input[c],0,(u->target_samples+u->overlap_size)*sizeof(float));
pa_assert_se(u->input[c]);
- u->overlap_accum[c]=(float*) fftwf_malloc(u->R*sizeof(float));
+ u->overlap_accum[c]=alloc(u->overlap_size,sizeof(float));
pa_assert_se(u->overlap_accum[c]);
- memset(u->overlap_accum[c],0,u->R*sizeof(float));
- u->output_buffer[c]=(float*) fftwf_malloc(u->window_size*sizeof(float));
+ memset(u->overlap_accum[c],0,u->overlap_size*sizeof(float));
+ u->output_buffer[c]=alloc(u->window_size,sizeof(float));
pa_assert_se(u->output_buffer[c]);
}
- u->output_window = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * (u->fft_size/2+1));
+ u->output_window=alloc((u->fft_size/2+1),sizeof(fftwf_complex));
u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_MEASURE);
u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_MEASURE);
- /*
- for(size_t j=0;j<u->window_size;++j){
- u->W[j]=.5;
- }
- */
+
hanning_window(u->W,u->window_size);
const int freqs[]={0,25,50,100,200,300,400,800,1500,
@@ -735,6 +821,7 @@ int pa__init(pa_module*m) {
}
free(freq_translated);
+
/* Create sink */
pa_sink_new_data_init(&sink_data);
sink_data.driver = __FILE__;
@@ -857,18 +944,18 @@ void pa__done(pa_module*m) {
fftwf_destroy_plan(u->inverse_plan);
fftwf_destroy_plan(u->forward_plan);
- fftwf_free(u->output_window);
+ free(u->output_window);
for(size_t c=0;c<u->channels;++c){
- fftwf_free(u->output_buffer[c]);
- fftwf_free(u->overlap_accum[c]);
- fftwf_free(u->input[c]);
+ free(u->output_buffer[c]);
+ free(u->overlap_accum[c]);
+ free(u->input[c]);
}
free(u->output_buffer);
free(u->overlap_accum);
free(u->input);
- fftwf_free(u->work_buffer);
- fftwf_free(u->W);
- fftwf_free(u->H);
+ free(u->work_buffer);
+ free(u->W);
+ free(u->H);
pa_xfree(u);
}
commit 8934c314f6401b953b871bbf5b6810b5fe05a9ac
Author: Jason Newton <nevion at gmail.com>
Date: Fri Jul 31 18:10:11 2009 -0700
module-equalizer-sink:
added dbus support
removed cruft from inherited from ladspa module and improved clarity
switched dsp processing to reference implementation until project is more mature
tsched=0 seems to help with the micro-dropouts/crackling! oh my!
reformatting/spaces
diff --git a/configure.ac b/configure.ac
index 78234fc..ebfdc2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1199,6 +1199,7 @@ if test "x${dbus}" != xno || test "x${bluez}" != xno || test "x${hal}" != xno ;
HAVE_DBUS=1
saved_LIBS="$LIBS"
LIBS="$LIBS $DBUS_LIBS"
+ CFLAGS="$CFLAGS $DBUS_CFLAGS"
AC_CHECK_FUNCS(dbus_watch_get_unix_fd)
LIBS="$saved_LIBS"
AC_DEFINE([HAVE_DBUS], 1, [Have D-Bus.])
diff --git a/src/Makefile.am b/src/Makefile.am
index 281bdf1..82bc2f9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1385,7 +1385,7 @@ module_ladspa_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) libpulsecore- at PA_MAJORMIN
module_equalizer_sink_la_SOURCES = modules/module-equalizer-sink.c
module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS)
module_equalizer_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
-module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) -lfftw3f libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) -lfftw3f libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_match_la_SOURCES = modules/module-match.c
module_match_la_LDFLAGS = $(MODULE_LDFLAGS)
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index e20e07f..d8eb5f3 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -35,7 +35,6 @@ USA.
#include <math.h>
#include <fftw3.h>
#include <string.h>
-#include <malloc.h>
#include <pulse/xmalloc.h>
#include <pulse/i18n.h>
@@ -52,6 +51,8 @@ USA.
#include <pulsecore/rtpoll.h>
#include <pulsecore/sample-util.h>
#include <pulsecore/ltdl-helper.h>
+#include <pulsecore/protocol-dbus.h>
+#include <pulsecore/dbus-util.h>
#include <stdint.h>
#include <time.h>
@@ -101,13 +102,18 @@ struct userdata {
size_t target_samples;
float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
- float *work_buffer,**input,**overlap_accum,**output_buffer;
+ float *work_buffer, **input, **overlap_accum;
fftwf_complex *output_window;
- fftwf_plan forward_plan,inverse_plan;
+ fftwf_plan forward_plan, inverse_plan;
//size_t samplings;
+ float *Hs[2];//thread updatable copies
+ pa_aupdate *a_H;
pa_memchunk conv_buffer;
pa_memblockq *rendered_q;
+
+ pa_dbus_protocol *dbus_protocol;
+ char *dbus_path;
};
static const char* const valid_modargs[] = {
@@ -122,10 +128,10 @@ static const char* const valid_modargs[] = {
};
static uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
-static void hanning_window(float *W,size_t window_size);
-static void array_out(const char *name,float *a,size_t length);
+static void hanning_window(float *W, size_t window_size);
+static void array_out(const char *name, float *a, size_t length);
static void process_samples(struct userdata *u);
-static void input_buffer(struct userdata *u,pa_memchunk *in);
+static void input_buffer(struct userdata *u, pa_memchunk *in);
void dsp_logic(
float * __restrict__ dst,
@@ -136,10 +142,17 @@ void dsp_logic(
fftwf_complex * __restrict__ output_window,
struct userdata *u);
+static void dbus_init(struct userdata *u);
+static void dbus_done(struct userdata *u);
+static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+
#define v_size 4
-#define gettime(x) clock_gettime(CLOCK_MONOTONIC,&x)
-#define tdiff(x,y) time_diff(&x,&y)
-#define mround(x,y) (x%y==0?x:(x/y+1)*y)
+#define gettime(x) clock_gettime(CLOCK_MONOTONIC, &x)
+#define tdiff(x, y) time_diff(&x, &y)
+#define mround(x, y) (x % y == 0 ? x : ( x / y + 1) * y)
uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
{
@@ -147,26 +160,33 @@ uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
((timeB_p->tv_sec * 1000000000ULL) + timeB_p->tv_nsec);
}
-void hanning_window(float *W,size_t window_size){
+static void hanning_window(float *W, size_t window_size){
//h=.5*(1-cos(2*pi*j/(window_size+1)), COLA for R=(M+1)/2
- for(size_t i=0;i<window_size;++i){
- W[i]=(float).5*(1-cos(2*M_PI*i/(window_size+1)));
+ for(size_t i=0; i < window_size;++i){
+ W[i] = (float).5*(1-cos(2*M_PI*i/(window_size+1)));
}
}
-void array_out(const char *name,float *a,size_t length){
- FILE *p=fopen(name,"w");
+static void fix_filter(float *H, size_t fft_size){
+ //divide out the fft gain
+ for(size_t i = 0; i < (fft_size / 2 + 1); ++i){
+ H[i] /= fft_size;
+ }
+}
+
+void array_out(const char *name, float *a, size_t length){
+ FILE *p=fopen(name, "w");
if(!p){
- pa_log("opening %s failed!",name);
+ pa_log("opening %s failed!", name);
return;
}
- for(size_t i=0;i<length;++i){
- fprintf(p,"%e,",a[i]);
+ for(size_t i = 0; i < length; ++i){
+ fprintf(p, "%e,", a[i]);
//if(i%1000==0){
- // fprintf(p,"\n");
+ // fprintf(p, "\n");
//}
}
- fprintf(p,"\n");
+ fprintf(p, "\n");
fclose(p);
}
@@ -180,14 +200,14 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
case PA_SINK_MESSAGE_GET_LATENCY: {
pa_usec_t usec = 0;
pa_sample_spec *ss=&u->sink->sample_spec;
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ //size_t fs=pa_frame_size(&(u->sink->sample_spec));
/* Get the latency of the master sink */
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- //usec+=pa_bytes_to_usec(u->latency*fs,ss);
- //usec+=pa_bytes_to_usec(u->samples_gathered*fs,ss);
+ //usec+=pa_bytes_to_usec(u->latency * fs, ss);
+ //usec+=pa_bytes_to_usec(u->samples_gathered * fs, ss);
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
/* Add the latency internal to our sink input on top */
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
@@ -243,15 +263,15 @@ static void sink_update_requested_latency(pa_sink *s) {
static void process_samples(struct userdata *u){
pa_memchunk tchunk;
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- while(u->samples_gathered>=u->R){
+ while(u->samples_gathered >= u->R){
float *dst;
- //pa_log("iter gathered: %ld",u->samples_gathered);
+ //pa_log("iter gathered: %ld", u->samples_gathered);
//pa_memblockq_drop(u->rendered_q, tchunk.length);
tchunk.index=0;
tchunk.length=u->R*fs;
- tchunk.memblock=pa_memblock_new(u->core->mempool,tchunk.length);
+ tchunk.memblock=pa_memblock_new(u->core->mempool, tchunk.length);
dst=((float*)pa_memblock_acquire(tchunk.memblock));
- for (size_t c=0;c<u->channels;c++) {
+ for(size_t c=0;c < u->channels; c++) {
dsp_logic(
u->work_buffer,
u->input[c],
@@ -261,7 +281,7 @@ static void process_samples(struct userdata *u){
u->output_window,
u
);
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE,dst+c,fs,u->work_buffer,sizeof(float),u->R);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
}
pa_memblock_release(tchunk.memblock);
pa_memblockq_push(u->rendered_q, &tchunk);
@@ -279,60 +299,7 @@ typedef union float_vector {
#endif
} float_vector_t;
-////reference implementation
-//void dsp_logic(
-// float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
-// float * __restrict__ src,/*input data w/ overlap at start,
-// *automatically cycled in routine
-// */
-// float * __restrict__ overlap,//The size of the overlap
-// const float * __restrict__ H,//The freq. magnitude scalers filter
-// const float * __restrict__ W,//The windowing function
-// fftwf_complex * __restrict__ output_window,//The transformed window'd src
-// struct userdata *u){
-// //use a linear-phase sliding STFT and overlap-add method (for each channel)
-// //zero padd the data
-// memset(dst+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
-// //window the data
-// for(size_t j=0;j<u->window_size;++j){
-// dst[j]=W[j]*src[j];
-// }
-// //Processing is done here!
-// //do fft
-// fftwf_execute_dft_r2c(u->forward_plan,dst,output_window);
-// //perform filtering
-// for(size_t j=0;j<u->fft_size/2+1;++j){
-// u->output_window[j][0]*=u->H[j];
-// u->output_window[j][1]*=u->H[j];
-// }
-// //inverse fft
-// fftwf_execute_dft_c2r(u->inverse_plan,output_window,dst);
-// ////debug: tests overlaping add
-// ////and negates ALL PREVIOUS processing
-// ////yields a perfect reconstruction if COLA is held
-// //for(size_t j=0;j<u->window_size;++j){
-// // u->work_buffer[j]=u->W[j]*u->input[c][j];
-// //}
-//
-// //overlap add and preserve overlap component from this window (linear phase)
-// for(size_t j=0;j<u->overlap_size;++j){
-// u->work_buffer[j]+=overlap[j];
-// overlap[j]=dst[u->R+j];
-// }
-// ////debug: tests if basic buffering works
-// ////shouldn't modify the signal AT ALL (beyond roundoff)
-// //for(size_t j=0;j<u->window_size;++j){
-// // u->work_buffer[j]=u->input[c][j];
-// //}
-//
-// //preseve the needed input for the next window's overlap
-// memmove(src,src+u->R,
-// (u->samples_gathered+u->overlap_size-u->R)*sizeof(float)
-// );
-//}
-
-//regardless of sse enabled, the loops in here assume
-//16 byte aligned addresses and memory allocations divisible by v_size
+//reference implementation
void dsp_logic(
float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
float * __restrict__ src,/*input data w/ overlap at start,
@@ -342,106 +309,159 @@ void dsp_logic(
const float * __restrict__ H,//The freq. magnitude scalers filter
const float * __restrict__ W,//The windowing function
fftwf_complex * __restrict__ output_window,//The transformed window'd src
- struct userdata *u){//Collection of constants
-
- const size_t window_size=mround(u->window_size,v_size);
- const size_t fft_h=mround(u->fft_size/2+1,v_size/2);
- const size_t R=mround(u->R,v_size);
- const size_t overlap_size=mround(u->overlap_size,v_size);
-
- //assert(u->samples_gathered>=u->R);
- //zero out the bit beyond the real overlap so we don't add garbage
- for(size_t j=overlap_size;j>u->overlap_size;--j){
- overlap[j-1]=0;
- }
- //use a linear-phase sliding STFT and overlap-add method
+ struct userdata *u){
+ //use a linear-phase sliding STFT and overlap-add method (for each channel)
//zero padd the data
- memset(dst+u->window_size,0,(u->fft_size-u->window_size)*sizeof(float));
+ memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//window the data
- for(size_t j=0;j<window_size;j+=v_size){
- //dst[j]=W[j]*src[j];
- float_vector_t *d=(float_vector_t*)(dst+j);
- float_vector_t *w=(float_vector_t*)(W+j);
- float_vector_t *s=(float_vector_t*)(src+j);
-#if __SSE2__
- d->m=_mm_mul_ps(w->m,s->m);
-#else
- d->v=w->v*s->v;
-#endif
+ for(size_t j = 0;j < u->window_size; ++j){
+ dst[j] = W[j] * src[j];
}
//Processing is done here!
//do fft
- fftwf_execute_dft_r2c(u->forward_plan,dst,output_window);
-
-
- //perform filtering - purely magnitude based
- for(size_t j=0;j<fft_h;j+=v_size/2){
- //output_window[j][0]*=H[j];
- //output_window[j][1]*=H[j];
- float_vector_t *d=(float_vector_t*)(output_window+j);
- float_vector_t h;
- h.f[0]=h.f[1]=H[j];
- h.f[2]=h.f[3]=H[j+1];
-#if __SSE2__
- d->m=_mm_mul_ps(d->m,h.m);
-#else
- d->v=d->v*h->v;
-#endif
+ fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
+ //perform filtering
+ for(size_t j = 0;j < u->fft_size / 2 + 1; ++j){
+ u->output_window[j][0] *= u->H[j];
+ u->output_window[j][1] *= u->H[j];
}
-
-
//inverse fft
- fftwf_execute_dft_c2r(u->inverse_plan,output_window,dst);
-
+ fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
////debug: tests overlaping add
////and negates ALL PREVIOUS processing
////yields a perfect reconstruction if COLA is held
- //for(size_t j=0;j<u->window_size;++j){
- // dst[j]=W[j]*src[j];
+ //for(size_t j = 0; j < u->window_size; ++j){
+ // u->work_buffer[j] = u->W[j] * u->input[c][j];
//}
//overlap add and preserve overlap component from this window (linear phase)
- for(size_t j=0;j<overlap_size;j+=v_size){
- //dst[j]+=overlap[j];
- //overlap[j]+=dst[j+R];
- float_vector_t *d=(float_vector_t*)(dst+j);
- float_vector_t *o=(float_vector_t*)(overlap+j);
-#if __SSE2__
- d->m=_mm_add_ps(d->m,o->m);
- o->m=((float_vector_t*)(dst+u->R+j))->m;
-#else
- d->v=d->v+o->v;
- o->v=((float_vector_t*)(dst+u->R+j))->v;
-#endif
+ for(size_t j = 0;j < u->overlap_size; ++j){
+ u->work_buffer[j] += overlap[j];
+ overlap[j] = dst[u->R+j];
}
- //memcpy(overlap,dst+u->R,u->overlap_size*sizeof(float));
-
- //////debug: tests if basic buffering works
- //////shouldn't modify the signal AT ALL (beyond roundoff)
- //for(size_t j=0;j<u->window_size;++j){
- // dst[j]=src[j];
+ ////debug: tests if basic buffering works
+ ////shouldn't modify the signal AT ALL (beyond roundoff)
+ //for(size_t j = 0; j < u->window_size;++j){
+ // u->work_buffer[j] = u->input[c][j];
//}
//preseve the needed input for the next window's overlap
- memmove(src,src+u->R,
- (u->overlap_size+u->samples_gathered-u->R)*sizeof(float)
+ memmove(src, src+u->R,
+ ((u->overlap_size + u->samples_gathered) - u->R)*sizeof(float)
);
}
+////regardless of sse enabled, the loops in here assume
+////16 byte aligned addresses and memory allocations divisible by v_size
+//void dsp_logic(
+// float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
+// float * __restrict__ src,/*input data w/ overlap at start,
+// *automatically cycled in routine
+// */
+// float * __restrict__ overlap,//The size of the overlap
+// const float * __restrict__ H,//The freq. magnitude scalers filter
+// const float * __restrict__ W,//The windowing function
+// fftwf_complex * __restrict__ output_window,//The transformed window'd src
+// struct userdata *u){//Collection of constants
+//
+// const size_t window_size = mround(u->window_size,v_size);
+// const size_t fft_h = mround(u->fft_size / 2 + 1, v_size / 2);
+// //const size_t R = mround(u->R, v_size);
+// const size_t overlap_size = mround(u->overlap_size, v_size);
+//
+// //assert(u->samples_gathered >= u->R);
+// //zero out the bit beyond the real overlap so we don't add garbage
+// for(size_t j = overlap_size; j > u->overlap_size; --j){
+// overlap[j-1] = 0;
+// }
+// //use a linear-phase sliding STFT and overlap-add method
+// //zero padd the data
+// memset(dst + u->window_size, 0, (u->fft_size - u->window_size)*sizeof(float));
+// //window the data
+// for(size_t j = 0; j < window_size; j += v_size){
+// //dst[j] = W[j]*src[j];
+// float_vector_t *d = (float_vector_t*) (dst+j);
+// float_vector_t *w = (float_vector_t*) (W+j);
+// float_vector_t *s = (float_vector_t*) (src+j);
+//#if __SSE2__
+// d->m = _mm_mul_ps(w->m, s->m);
+//#else
+// d->v = w->v * s->v;
+//#endif
+// }
+// //Processing is done here!
+// //do fft
+// fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
+//
+//
+// //perform filtering - purely magnitude based
+// for(size_t j = 0;j < fft_h; j+=v_size/2){
+// //output_window[j][0]*=H[j];
+// //output_window[j][1]*=H[j];
+// float_vector_t *d = (float_vector_t*)(output_window+j);
+// float_vector_t h;
+// h.f[0] = h.f[1] = H[j];
+// h.f[2] = h.f[3] = H[j+1];
+//#if __SSE2__
+// d->m = _mm_mul_ps(d->m, h.m);
+//#else
+// d->v = d->v*h->v;
+//#endif
+// }
+//
+//
+// //inverse fft
+// fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
+//
+// ////debug: tests overlaping add
+// ////and negates ALL PREVIOUS processing
+// ////yields a perfect reconstruction if COLA is held
+// //for(size_t j = 0; j < u->window_size; ++j){
+// // dst[j] = W[j]*src[j];
+// //}
+//
+// //overlap add and preserve overlap component from this window (linear phase)
+// for(size_t j = 0; j < overlap_size; j+=v_size){
+// //dst[j]+=overlap[j];
+// //overlap[j]+=dst[j+R];
+// float_vector_t *d = (float_vector_t*)(dst+j);
+// float_vector_t *o = (float_vector_t*)(overlap+j);
+//#if __SSE2__
+// d->m = _mm_add_ps(d->m, o->m);
+// o->m = ((float_vector_t*)(dst+u->R+j))->m;
+//#else
+// d->v = d->v+o->v;
+// o->v = ((float_vector_t*)(dst+u->R+j))->v;
+//#endif
+// }
+// //memcpy(overlap, dst+u->R, u->overlap_size*sizeof(float));
+//
+// //////debug: tests if basic buffering works
+// //////shouldn't modify the signal AT ALL (beyond roundoff)
+// //for(size_t j = 0; j < u->window_size; ++j){
+// // dst[j] = src[j];
+// //}
+//
+// //preseve the needed input for the next window's overlap
+// memmove(src, src+u->R,
+// ((u->overlap_size+u->samples_gathered)+-u->R)*sizeof(float)
+// );
+//}
-void input_buffer(struct userdata *u,pa_memchunk *in){
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
- size_t samples=in->length/fs;
- pa_assert_se(samples<=u->target_samples-u->samples_gathered);
+
+void input_buffer(struct userdata *u, pa_memchunk *in){
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ size_t samples = in->length/fs;
+ pa_assert_se(samples <= u->target_samples-u->samples_gathered);
float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
- for (size_t c=0;c<u->channels;c++) {
+ for(size_t c = 0; c < u->channels; c++) {
//buffer with an offset after the overlap from previous
//iterations
pa_assert_se(
- u->input[c]+u->overlap_size+u->samples_gathered+samples<=u->input[c]+u->target_samples+u->overlap_size
+ u->input[c]+u->overlap_size+u->samples_gathered+samples <= u->input[c]+u->overlap_size+u->target_samples
);
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE,u->input[c]+u->overlap_size+u->samples_gathered,sizeof(float),src+c,fs,samples);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->overlap_size+u->samples_gathered, sizeof(float), src + c, fs, samples);
}
u->samples_gathered+=samples;
pa_memblock_release(in->memblock);
@@ -454,74 +474,81 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(chunk);
pa_assert_se(u = i->userdata);
pa_assert_se(u->sink);
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
- size_t samples_requested=nbytes/fs;
- size_t buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ //size_t samples_requested = nbytes/fs;
+ size_t buffered_samples = pa_memblockq_get_length(u->rendered_q)/fs;
pa_memchunk tchunk;
- chunk->memblock=NULL;
+ chunk->memblock = NULL;
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
//pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
- struct timespec start,end;
+ struct timespec start, end;
- if(pa_memblockq_peek(u->rendered_q,&tchunk)==0){
- *chunk=tchunk;
+ if(pa_memblockq_peek(u->rendered_q, &tchunk)==0){
+ *chunk = tchunk;
pa_memblockq_drop(u->rendered_q, chunk->length);
return 0;
}
+
+ /*
+ Set the H filter
+ */
+ unsigned H_i = pa_aupdate_read_begin(u->a_H);
+ u->H = u->Hs[H_i];
+
do{
pa_memchunk *buffer;
- size_t input_remaining=u->target_samples-u->samples_gathered;
+ size_t input_remaining = u->target_samples-u->samples_gathered;
pa_assert(input_remaining>0);
//collect samples
- buffer=&u->conv_buffer;
- buffer->length=input_remaining*fs;
- buffer->index=0;
+ buffer = &u->conv_buffer;
+ buffer->length = input_remaining*fs;
+ buffer->index = 0;
pa_memblock_ref(buffer->memblock);
- pa_sink_render_into(u->sink,buffer);
+ pa_sink_render_into(u->sink, buffer);
//if(u->sink->thread_info.rewind_requested)
// sink_request_rewind(u->sink);
//pa_memchunk p;
- //buffer=&p;
- //pa_sink_render(u->sink,u->R*fs,buffer);
- //buffer->length=PA_MIN(input_remaining*fs,buffer->length);
+ //buffer = &p;
+ //pa_sink_render(u->sink, u->R*fs, buffer);
+ //buffer->length = PA_MIN(input_remaining*fs, buffer->length);
//debug block
- //pa_memblockq_push(u->rendered_q,buffer);
+ //pa_memblockq_push(u->rendered_q, buffer);
//pa_memblock_unref(buffer->memblock);
//goto END;
//pa_log("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
//copy new input
gettime(start);
- input_buffer(u,buffer);
+ input_buffer(u, buffer);
gettime(end);
- //pa_log("Took %0.5f seconds to setup",tdiff(end,start)*1e-9);
+ //pa_log("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
pa_memblock_unref(buffer->memblock);
- pa_assert_se(u->fft_size>=u->window_size);
- pa_assert_se(u->R<u->window_size);
+ pa_assert_se(u->fft_size >= u->window_size);
+ pa_assert_se(u->R < u->window_size);
//process every complete block on hand
gettime(start);
process_samples(u);
gettime(end);
- //pa_log("Took %0.5f seconds to process",tdiff(end,start)*1e-9);
+ //pa_log("Took %0.5f seconds to process", tdiff(end, start)*1e-9);
- buffered_samples=pa_memblockq_get_length(u->rendered_q)/fs;
- }while(buffered_samples<u->R);
+ buffered_samples = pa_memblockq_get_length(u->rendered_q)/fs;
+ }while(buffered_samples < u->R);
//deque from rendered_q and output
- pa_assert_se(pa_memblockq_peek(u->rendered_q,&tchunk)==0);
- *chunk=tchunk;
+ pa_assert_se(pa_memblockq_peek(u->rendered_q, &tchunk)==0);
+ *chunk = tchunk;
pa_memblockq_drop(u->rendered_q, chunk->length);
pa_assert_se(chunk->memblock);
- //pa_log("gave %ld",chunk->length/fs);
+ //pa_log("gave %ld", chunk->length/fs);
//pa_log("end pop");
return 0;
}
@@ -546,10 +573,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
u->sink->thread_info.rewind_nbytes = 0;
if (amount > 0) {
- //pa_sample_spec *ss=&u->sink->sample_spec;
+ //pa_sample_spec *ss = &u->sink->sample_spec;
pa_memblockq_seek(u->rendered_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log_debug("Resetting equalizer");
- u->samples_gathered=0;
+ u->samples_gathered = 0;
}
}
@@ -581,9 +608,9 @@ static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_max_request_within_thread(u->sink, nbytes);
- //pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ //pa_sink_set_max_request_within_thread(u->sink, nbytes);
+ pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
}
/* Called from I/O thread context */
@@ -596,9 +623,9 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
- //pa_sink_set_latency_range_within_thread(u->sink,u->latency*fs ,u->latency*fs );
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
+ pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs );
//pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
@@ -631,9 +658,9 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_rtpoll(u->sink, i->sink->rtpoll);
pa_sink_attach_within_thread(u->sink);
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
- //pa_sink_set_latency_range_within_thread(u->sink,u->latency*fs, u->master->thread_info.max_latency);
+ //pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->master->thread_info.max_latency);
//TODO: setting this guy minimizes drop outs but doesn't get rid
//of them completely, figure out why
pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
@@ -689,10 +716,13 @@ static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
//ensure's memory allocated is a multiple of v_size
//and aligned
static void * alloc(size_t x,size_t s){
- size_t f=mround(x*s,sizeof(float)*v_size);
- //printf("requested %ld floats=%ld bytes, rem=%ld\n",x,x*sizeof(float),x*sizeof(float)%16);
- //printf("giving %ld floats=%ld bytes, rem=%ld\n",f,f*sizeof(float),f*sizeof(float)%16);
- return fftwf_malloc(f*s);
+ size_t f = mround(x*s, sizeof(float)*v_size);
+ pa_assert_se(f >= x*s);
+ //printf("requested %ld floats=%ld bytes, rem=%ld\n", x, x*sizeof(float), x*sizeof(float)%16);
+ //printf("giving %ld floats=%ld bytes, rem=%ld\n", f, f*sizeof(float), f*sizeof(float)%16);
+ float *t = fftwf_malloc(f);
+ memset(t, 0, f);
+ return t;
}
int pa__init(pa_module*m) {
@@ -726,7 +756,7 @@ int pa__init(pa_module*m) {
pa_log("Invalid sample format specification or channel map");
goto fail;
}
- fs=pa_frame_size(&ss);
+ fs = pa_frame_size(&ss);
u = pa_xnew0(struct userdata, 1);
u->core = m->core;
@@ -736,90 +766,96 @@ int pa__init(pa_module*m) {
u->sink = NULL;
u->sink_input = NULL;
- u->channels=ss.channels;
- u->fft_size=pow(2,ceil(log(ss.rate)/log(2)));
- pa_log("fft size: %ld",u->fft_size);
- u->window_size=15999;
- u->R=(u->window_size+1)/2;
- u->overlap_size=u->window_size-u->R;
- u->target_samples=1*u->R;
- u->samples_gathered=0;
- u->max_output=pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
- u->rendered_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH,u->target_samples*fs, fs, fs, 0, 0, NULL);
- u->conv_buffer.memblock=pa_memblock_new(u->core->mempool,u->target_samples*fs);
- u->latency=u->R;
-
- u->H=alloc((u->fft_size/2+1),sizeof(fftwf_complex));
- u->W=alloc(u->window_size,sizeof(float));
- u->work_buffer=alloc(u->fft_size,sizeof(float));
- memset(u->work_buffer,0,u->fft_size*sizeof(float));
- u->input=(float **)malloc(sizeof(float *)*u->channels);
- u->overlap_accum=(float **)malloc(sizeof(float *)*u->channels);
- u->output_buffer=(float **)malloc(sizeof(float *)*u->channels);
- for(size_t c=0;c<u->channels;++c){
- u->input[c]=alloc(u->target_samples+u->overlap_size,sizeof(float));
+ u->channels = ss.channels;
+ u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
+ pa_log("fft size: %ld", u->fft_size);
+ u->window_size = 7999;
+ u->R = (u->window_size+1)/2;
+ u->overlap_size = u->window_size-u->R;
+ u->target_samples = 1*u->R;
+ u->samples_gathered = 0;
+ u->max_output = pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
+ u->rendered_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, u->target_samples*fs, fs, fs, 0, 0, NULL);
+ u->a_H = pa_aupdate_new();
+ u->conv_buffer.memblock = pa_memblock_new(u->core->mempool, u->target_samples*fs);
+ u->latency = u->R;
+ for(size_t i = 0; i < 2; ++i){
+ u->Hs[i] = alloc((u->fft_size / 2 + 1), sizeof(float));
+ }
+ u->W = alloc(u->window_size, sizeof(float));
+ u->work_buffer = alloc(u->fft_size, sizeof(float));
+ memset(u->work_buffer, 0, u->fft_size*sizeof(float));
+ u->input = (float **)pa_xmalloc0(sizeof(float *)*u->channels);
+ u->overlap_accum = (float **)pa_xmalloc0(sizeof(float *)*u->channels);
+ for(size_t c = 0; c < u->channels; ++c){
+ u->input[c] = alloc(u->overlap_size+u->target_samples, sizeof(float));
pa_assert_se(u->input[c]);
- memset(u->input[c],0,(u->target_samples+u->overlap_size)*sizeof(float));
+ memset(u->input[c], 0, (u->overlap_size+u->target_samples)*sizeof(float));
pa_assert_se(u->input[c]);
- u->overlap_accum[c]=alloc(u->overlap_size,sizeof(float));
+ u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
pa_assert_se(u->overlap_accum[c]);
- memset(u->overlap_accum[c],0,u->overlap_size*sizeof(float));
- u->output_buffer[c]=alloc(u->window_size,sizeof(float));
- pa_assert_se(u->output_buffer[c]);
- }
- u->output_window=alloc((u->fft_size/2+1),sizeof(fftwf_complex));
- u->forward_plan=fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_MEASURE);
- u->inverse_plan=fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_MEASURE);
-
- hanning_window(u->W,u->window_size);
-
- const int freqs[]={0,25,50,100,200,300,400,800,1500,
- 2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
- 13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
- const float coefficients[]={1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
- const size_t ncoefficients=sizeof(coefficients)/sizeof(float);
- pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
- float *freq_translated=(float *) malloc(sizeof(float)*(ncoefficients));
- freq_translated[0]=1;
- //Translate the frequencies in their natural sampling rate to the new sampling rate frequencies
- for(size_t i=1;i<ncoefficients-1;++i){
- freq_translated[i]=((float)freqs[i]*u->fft_size)/ss.rate;
- //pa_log("i: %ld: %d , %g",i,freqs[i],freq_translated[i]);
- pa_assert_se(freq_translated[i]>=freq_translated[i-1]);
+ memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
- freq_translated[ncoefficients-1]=FLT_MAX;
- //Interpolate the specified frequency band values
- u->H[0]=1;
- for(size_t i=1,j=0;i<(u->fft_size/2+1);++i){
- pa_assert_se(j<ncoefficients);
- //max frequency range passed, consider the rest as one band
- if(freq_translated[j+1]>=FLT_MAX){
- for(;i<(u->fft_size/2+1);++i){
- u->H[i]=coefficients[j];
- }
- break;
- }
- //pa_log("i: %d, j: %d, freq: %f",i,j,freq_translated[j]);
- //pa_log("interp: %0.4f %0.4f",freq_translated[j],freq_translated[j+1]);
- pa_assert_se(freq_translated[j]<freq_translated[j+1]);
- pa_assert_se(i>=freq_translated[j]);
- pa_assert_se(i<=freq_translated[j+1]);
- //bilinear-inerpolation of coefficients specified
- float c0=(i-freq_translated[j])/(freq_translated[j+1]-freq_translated[j]);
- pa_assert_se(c0>=0&&c0<=1.0);
- u->H[i]=((1.0f-c0)*coefficients[j]+c0*coefficients[j+1]);
- pa_assert_se(u->H[i]>0);
- while(i>=floor(freq_translated[j+1])){
- j++;
- }
- }
- //divide out the fft gain
- for(size_t i=0;i<(u->fft_size/2+1);++i){
- u->H[i]/=u->fft_size;
+ u->output_window = alloc((u->fft_size / 2 + 1), sizeof(fftwf_complex));
+ u->forward_plan = fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_MEASURE);
+ u->inverse_plan = fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_MEASURE);
+
+ hanning_window(u->W, u->window_size);
+
+ unsigned H_i = pa_aupdate_write_begin(u->a_H);
+ u->H = u->Hs[H_i];
+ for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
+ u->H[i] = 1.0;
}
- free(freq_translated);
+
+ //TODO cut this out and leave it for the client side
+ //const int freqs[] = {0,25,50,100,200,300,400,800,1500,
+ // 2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
+ // 13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
+ //const float coefficients[] = {1,1,1,1,1,1,1,1,1,1,
+ // 1,1,1,1,1,1,1,1,
+ // 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+ //const size_t ncoefficients = sizeof(coefficients)/sizeof(float);
+ //pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
+ //float *freq_translated = (float *) pa_xmalloc0(sizeof(float)*(ncoefficients));
+ //freq_translated[0] = 1;
+ ////Translate the frequencies in their natural sampling rate to the new sampling rate frequencies
+ //for(size_t i = 1; i < ncoefficients-1; ++i){
+ // freq_translated[i] = ((float)freqs[i]*u->fft_size)/ss.rate;
+ // //pa_log("i: %ld: %d , %g",i, freqs[i], freq_translated[i]);
+ // pa_assert_se(freq_translated[i] >= freq_translated[i-1]);
+ //}
+ //freq_translated[ncoefficients-1] = FLT_MAX;
+ //
+ ////Interpolate the specified frequency band values
+ //u->H[0] = 1;
+ //for(size_t i = 1, j = 0; i < (u->fft_size / 2 + 1); ++i){
+ // pa_assert_se(j < ncoefficients);
+ // //max frequency range passed, consider the rest as one band
+ // if(freq_translated[j+1] >= FLT_MAX){
+ // for(; i < (u->fft_size / 2 + 1); ++i){
+ // u->H[i] = coefficients[j];
+ // }
+ // break;
+ // }
+ // //pa_log("i: %d, j: %d, freq: %f", i, j, freq_translated[j]);
+ // //pa_log("interp: %0.4f %0.4f", freq_translated[j], freq_translated[j+1]);
+ // pa_assert_se(freq_translated[j] < freq_translated[j+1]);
+ // pa_assert_se(i >= freq_translated[j]);
+ // pa_assert_se(i <= freq_translated[j+1]);
+ // //bilinear-inerpolation of coefficients specified
+ // float c0 = (i-freq_translated[j])/(freq_translated[j+1]-freq_translated[j]);
+ // pa_assert_se(c0 >= 0&&c0 <= 1.0);
+ // u->H[i] = ((1.0f-c0)*coefficients[j]+c0*coefficients[j+1]);
+ // pa_assert_se(u->H[i]>0);
+ // while(i >= floor(freq_translated[j+1])){
+ // j++;
+ // }
+ //}
+ //pa_xfree(freq_translated);
+ fix_filter(u->H, u->fft_size);
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
/* Create sink */
@@ -858,8 +894,8 @@ int pa__init(pa_module*m) {
pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
pa_sink_set_rtpoll(u->sink, master->rtpoll);
- pa_sink_set_max_request(u->sink,u->R*fs);
- //pa_sink_set_fixed_latency(u->sink,pa_bytes_to_usec(u->R*fs,&ss));
+ pa_sink_set_max_request(u->sink, u->R*fs);
+ //pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->R*fs, &ss));
/* Create sink input */
pa_sink_input_new_data_init(&sink_input_data);
@@ -896,6 +932,8 @@ int pa__init(pa_module*m) {
pa_xfree(use_default);
+ dbus_init(u);
+
return 0;
fail:
@@ -925,6 +963,7 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
+ dbus_done(u);
if (u->sink) {
pa_sink_unlink(u->sink);
@@ -944,18 +983,152 @@ void pa__done(pa_module*m) {
fftwf_destroy_plan(u->inverse_plan);
fftwf_destroy_plan(u->forward_plan);
- free(u->output_window);
- for(size_t c=0;c<u->channels;++c){
- free(u->output_buffer[c]);
- free(u->overlap_accum[c]);
- free(u->input[c]);
+ pa_xfree(u->output_window);
+ for(size_t c=0; c < u->channels; ++c){
+ pa_xfree(u->overlap_accum[c]);
+ pa_xfree(u->input[c]);
+ }
+ pa_xfree(u->overlap_accum);
+ pa_xfree(u->input);
+ pa_xfree(u->work_buffer);
+ pa_xfree(u->W);
+ for(size_t i = 0; i < 2; ++i){
+ pa_xfree(u->Hs[i]);
}
- free(u->output_buffer);
- free(u->overlap_accum);
- free(u->input);
- free(u->work_buffer);
- free(u->W);
- free(u->H);
pa_xfree(u);
}
+
+enum property_handler_index {
+ PROPERTY_HANDLER_N_COEFS,
+ PROPERTY_HANDLER_COEFS,
+ PROPERTY_HANDLER_MAX
+};
+
+static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX]={
+ [PROPERTY_HANDLER_N_COEFS]{.property_name="n_filter_coefficients",.type="u",.get_cb=get_n_coefs,.set_cb=NULL},
+ [PROPERTY_HANDLER_COEFS]{.property_name="filter_coefficients",.type="ai",.get_cb=get_filter,.set_cb=set_filter}
+};
+
+//static pa_dbus_arg_info new_equalizer_args[] = { { "path","o",NULL} };
+//static pa_dbus_signal_info signals[SIGNAL_MAX] = {
+// [SIGNAL_NEW_EQUALIZER]={.name="NewEqualizer",.arguments=new_equalizer_args,.n_arguments=1}
+//};
+
+#define EXTNAME "org.PulseAudio.Ext.Equalizing1"
+
+static pa_dbus_interface_info interface_info={
+ .name=EXTNAME ".Equalizer",
+ .method_handlers=NULL,
+ .n_method_handlers=0,
+ .property_handlers=property_handlers,
+ .n_property_handlers=PROPERTY_HANDLER_MAX,
+ .get_all_properties_cb=handle_get_all,
+ .signals=NULL,
+ .n_signals=0
+};
+
+
+void dbus_init(struct userdata *u){
+ u->dbus_protocol=pa_dbus_protocol_get(u->core);
+ u->dbus_path=pa_sprintf_malloc("/org/pulseaudio/core1/sink%d", u->sink->index);
+
+ pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &interface_info, u);
+ pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
+}
+
+void dbus_done(struct userdata *u){
+ pa_dbus_protocol_unregister_extension(u->dbus_protocol, EXTNAME);
+ pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, EXTNAME);
+
+ pa_xfree(u->dbus_path);
+ pa_dbus_protocol_unref(u->dbus_protocol);
+}
+
+void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u=(struct userdata *)_u;
+
+ uint32_t n_coefs=(uint32_t)(u->fft_size / 2 + 1);
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &n_coefs);
+}
+
+void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u=(struct userdata *)_u;
+
+ unsigned n_coefs=(unsigned)(u->fft_size / 2 + 1);
+ double *H_=(double *)pa_xmalloc0(n_coefs*sizeof(double));
+
+ unsigned H_i=pa_aupdate_read_begin(u->a_H);
+ float *H=u->Hs[H_i];
+ for(size_t i = 0;i < u->fft_size / 2 + 1; ++i){
+ H_[i]=H[i];
+ }
+ pa_aupdate_read_end(u->a_H);
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, &H_, n_coefs);
+ pa_xfree(H_);
+}
+
+void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u=(struct userdata *)_u;
+ double *H_;
+ unsigned _n_coefs;
+ pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H_, &_n_coefs);
+ if(_n_coefs!=u->fft_size / 2 + 1){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", u->fft_size / 2 + 1, _n_coefs);
+ return;
+ }
+ unsigned H_i = pa_aupdate_write_begin(u->a_H);
+ float *H = u->Hs[H_i];
+ for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
+ H[i] = (float)H_[i];
+ }
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u = (struct userdata *)_u;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter, dict_iter;
+
+ int n_coefs=(unsigned)(u->fft_size / 2 + 1);
+ double *H_=(double *)pa_xmalloc0(n_coefs*sizeof(double));
+
+ unsigned H_i=pa_aupdate_read_begin(u->a_H);
+ float *H=u->Hs[H_i];
+ for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
+ H_[i] = H[i];
+ }
+ pa_aupdate_read_end(u->a_H);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_COEFS].property_name, DBUS_TYPE_DOUBLE, H_, n_coefs);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+
+ pa_xfree(H_);
+}
commit 66a6cc693bcf441d86ed56a3b15be948008e9de7
Author: Jason Newton <nevion at gmail.com>
Date: Sat Aug 1 20:23:49 2009 -0700
module-equalizer-sink:
added support for suspend/resume of filter coefficients
unregister the correct dbus interface.
made equalizer state file sink index dependent
expanded dbus properties
whitespace
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index d8eb5f3..6ea5951 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -50,7 +50,7 @@ USA.
#include <pulsecore/thread-mq.h>
#include <pulsecore/rtpoll.h>
#include <pulsecore/sample-util.h>
-#include <pulsecore/ltdl-helper.h>
+#include <pulsecore/database.h>
#include <pulsecore/protocol-dbus.h>
#include <pulsecore/dbus-util.h>
@@ -114,6 +114,8 @@ struct userdata {
pa_dbus_protocol *dbus_protocol;
char *dbus_path;
+
+ pa_database *database;
};
static const char* const valid_modargs[] = {
@@ -145,14 +147,18 @@ void dsp_logic(
static void dbus_init(struct userdata *u);
static void dbus_done(struct userdata *u);
static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
+void get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
+void get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
static void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
static void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
static void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void save_state(struct userdata *u);
#define v_size 4
#define gettime(x) clock_gettime(CLOCK_MONOTONIC, &x)
#define tdiff(x, y) time_diff(&x, &y)
#define mround(x, y) (x % y == 0 ? x : ( x / y + 1) * y)
+#define COEFKEY "coefficients"
uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
{
@@ -321,7 +327,7 @@ void dsp_logic(
//do fft
fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
//perform filtering
- for(size_t j = 0;j < u->fft_size / 2 + 1; ++j){
+ for(size_t j = 0; j < u->fft_size / 2 + 1; ++j){
u->output_window[j][0] *= u->H[j];
u->output_window[j][1] *= u->H[j];
}
@@ -702,6 +708,22 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
}
}
+void save_state(struct userdata *u){
+ const float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ float *H_n = pa_xmalloc((u->fft_size / 2 + 1) * sizeof(float));
+ for(size_t i = 0 ; i <= u->fft_size / 2 + 1; ++i){
+ H_n[i] = H[i] * u->fft_size;
+ }
+ pa_aupdate_read_end(u->a_H);
+ pa_datum key, data;
+ key.data = (char *) COEFKEY;
+ key.size = strlen(key.data);
+ data.data = H_n;
+ data.size = (u->fft_size / 2 + 1) * sizeof(float);
+ pa_database_set(u->database, &key, &data, TRUE);
+ pa_database_sync(u->database);
+}
+
/* Called from main context */
static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
struct userdata *u;
@@ -802,62 +824,6 @@ int pa__init(pa_module*m) {
hanning_window(u->W, u->window_size);
- unsigned H_i = pa_aupdate_write_begin(u->a_H);
- u->H = u->Hs[H_i];
- for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- u->H[i] = 1.0;
- }
-
- //TODO cut this out and leave it for the client side
- //const int freqs[] = {0,25,50,100,200,300,400,800,1500,
- // 2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
- // 13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
- //const float coefficients[] = {1,1,1,1,1,1,1,1,1,1,
- // 1,1,1,1,1,1,1,1,
- // 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
- //const size_t ncoefficients = sizeof(coefficients)/sizeof(float);
- //pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
- //float *freq_translated = (float *) pa_xmalloc0(sizeof(float)*(ncoefficients));
- //freq_translated[0] = 1;
- ////Translate the frequencies in their natural sampling rate to the new sampling rate frequencies
- //for(size_t i = 1; i < ncoefficients-1; ++i){
- // freq_translated[i] = ((float)freqs[i]*u->fft_size)/ss.rate;
- // //pa_log("i: %ld: %d , %g",i, freqs[i], freq_translated[i]);
- // pa_assert_se(freq_translated[i] >= freq_translated[i-1]);
- //}
- //freq_translated[ncoefficients-1] = FLT_MAX;
- //
- ////Interpolate the specified frequency band values
- //u->H[0] = 1;
- //for(size_t i = 1, j = 0; i < (u->fft_size / 2 + 1); ++i){
- // pa_assert_se(j < ncoefficients);
- // //max frequency range passed, consider the rest as one band
- // if(freq_translated[j+1] >= FLT_MAX){
- // for(; i < (u->fft_size / 2 + 1); ++i){
- // u->H[i] = coefficients[j];
- // }
- // break;
- // }
- // //pa_log("i: %d, j: %d, freq: %f", i, j, freq_translated[j]);
- // //pa_log("interp: %0.4f %0.4f", freq_translated[j], freq_translated[j+1]);
- // pa_assert_se(freq_translated[j] < freq_translated[j+1]);
- // pa_assert_se(i >= freq_translated[j]);
- // pa_assert_se(i <= freq_translated[j+1]);
- // //bilinear-inerpolation of coefficients specified
- // float c0 = (i-freq_translated[j])/(freq_translated[j+1]-freq_translated[j]);
- // pa_assert_se(c0 >= 0&&c0 <= 1.0);
- // u->H[i] = ((1.0f-c0)*coefficients[j]+c0*coefficients[j+1]);
- // pa_assert_se(u->H[i]>0);
- // while(i >= floor(freq_translated[j+1])){
- // j++;
- // }
- //}
- //pa_xfree(freq_translated);
- fix_filter(u->H, u->fft_size);
- pa_aupdate_write_swap(u->a_H);
- pa_aupdate_write_end(u->a_H);
-
-
/* Create sink */
pa_sink_new_data_init(&sink_data);
sink_data.driver = __FILE__;
@@ -932,6 +898,82 @@ int pa__init(pa_module*m) {
pa_xfree(use_default);
+ char *dbname;
+ char *pref = pa_sprintf_malloc("equalizer-%s-state", u->sink->name);
+ pa_assert_se(dbname = pa_state_path(pref, TRUE));
+ pa_xfree(pref);
+ pa_assert_se(u->database = pa_database_open(dbname, TRUE));
+ pa_xfree(dbname);
+
+ unsigned H_i = pa_aupdate_write_begin(u->a_H);
+ u->H = u->Hs[H_i];
+ for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
+ u->H[i] = 1.0;
+ }
+
+ //TODO cut this out and leave it for the client side
+ //const int freqs[] = {0,25,50,100,200,300,400,800,1500,
+ // 2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
+ // 13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
+ //const float coefficients[] = {1,1,1,1,1,1,1,1,1,1,
+ // 1,1,1,1,1,1,1,1,
+ // 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
+ //const size_t ncoefficients = sizeof(coefficients)/sizeof(float);
+ //pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
+ //float *freq_translated = (float *) pa_xmalloc0(sizeof(float)*(ncoefficients));
+ //freq_translated[0] = 1;
+ ////Translate the frequencies in their natural sampling rate to the new sampling rate frequencies
+ //for(size_t i = 1; i < ncoefficients-1; ++i){
+ // freq_translated[i] = ((float)freqs[i]*u->fft_size)/ss.rate;
+ // //pa_log("i: %ld: %d , %g",i, freqs[i], freq_translated[i]);
+ // pa_assert_se(freq_translated[i] >= freq_translated[i-1]);
+ //}
+ //freq_translated[ncoefficients-1] = FLT_MAX;
+ //
+ ////Interpolate the specified frequency band values
+ //u->H[0] = 1;
+ //for(size_t i = 1, j = 0; i < (u->fft_size / 2 + 1); ++i){
+ // pa_assert_se(j < ncoefficients);
+ // //max frequency range passed, consider the rest as one band
+ // if(freq_translated[j+1] >= FLT_MAX){
+ // for(; i < (u->fft_size / 2 + 1); ++i){
+ // u->H[i] = coefficients[j];
+ // }
+ // break;
+ // }
+ // //pa_log("i: %d, j: %d, freq: %f", i, j, freq_translated[j]);
+ // //pa_log("interp: %0.4f %0.4f", freq_translated[j], freq_translated[j+1]);
+ // pa_assert_se(freq_translated[j] < freq_translated[j+1]);
+ // pa_assert_se(i >= freq_translated[j]);
+ // pa_assert_se(i <= freq_translated[j+1]);
+ // //bilinear-inerpolation of coefficients specified
+ // float c0 = (i-freq_translated[j])/(freq_translated[j+1]-freq_translated[j]);
+ // pa_assert_se(c0 >= 0&&c0 <= 1.0);
+ // u->H[i] = ((1.0f-c0)*coefficients[j]+c0*coefficients[j+1]);
+ // pa_assert_se(u->H[i]>0);
+ // while(i >= floor(freq_translated[j+1])){
+ // j++;
+ // }
+ //}
+ //pa_xfree(freq_translated);
+
+ //load old parameters
+ pa_datum key,value;
+ key.data = (char *) COEFKEY;
+ key.size = strlen(key.data);
+ if (pa_database_get(u->database, &key, &value) != NULL){
+ if(value.size == (u->fft_size / 2 + 1) * sizeof(float)){
+ memcpy(u->H, value.data, (u->fft_size / 2 + 1) * sizeof(float));
+ }
+ pa_datum_free(&value);
+ }
+
+ fix_filter(u->H, u->fft_size);
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
+
+
+
dbus_init(u);
return 0;
@@ -963,6 +1005,10 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
+
+ save_state(u);
+ pa_database_close(u->database);
+
dbus_done(u);
if (u->sink) {
@@ -1000,14 +1046,18 @@ void pa__done(pa_module*m) {
}
enum property_handler_index {
+ PROPERTY_HANDLER_SAMPLERATE,
+ PROPERTY_HANDLER_FILTERSAMPLERATE,
PROPERTY_HANDLER_N_COEFS,
PROPERTY_HANDLER_COEFS,
PROPERTY_HANDLER_MAX
};
static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX]={
- [PROPERTY_HANDLER_N_COEFS]{.property_name="n_filter_coefficients",.type="u",.get_cb=get_n_coefs,.set_cb=NULL},
- [PROPERTY_HANDLER_COEFS]{.property_name="filter_coefficients",.type="ai",.get_cb=get_filter,.set_cb=set_filter}
+ [PROPERTY_HANDLER_SAMPLERATE]{.property_name="SampleRate",.type="u",.get_cb=get_sample_rate,.set_cb=NULL},
+ [PROPERTY_HANDLER_FILTERSAMPLERATE]{.property_name="FilterSampleRate",.type="u",.get_cb=get_filter_rate,.set_cb=NULL},
+ [PROPERTY_HANDLER_N_COEFS]{.property_name="NFilterCoefficients",.type="u",.get_cb=get_n_coefs,.set_cb=NULL},
+ [PROPERTY_HANDLER_COEFS]{.property_name="FilterCoefficients",.type="ai",.get_cb=get_filter,.set_cb=set_filter}
};
//static pa_dbus_arg_info new_equalizer_args[] = { { "path","o",NULL} };
@@ -1039,7 +1089,7 @@ void dbus_init(struct userdata *u){
void dbus_done(struct userdata *u){
pa_dbus_protocol_unregister_extension(u->dbus_protocol, EXTNAME);
- pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, EXTNAME);
+ pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, interface_info.name);
pa_xfree(u->dbus_path);
pa_dbus_protocol_unref(u->dbus_protocol);
@@ -1056,23 +1106,41 @@ void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &n_coefs);
}
+void get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u=(struct userdata *) _u;
+ uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &rate);
+}
+void get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u=(struct userdata *) _u;
+ uint32_t fft_size=(uint32_t) u->fft_size;
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &fft_size);
+}
+
void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
- struct userdata *u=(struct userdata *)_u;
+ struct userdata *u = (struct userdata *)_u;
- unsigned n_coefs=(unsigned)(u->fft_size / 2 + 1);
- double *H_=(double *)pa_xmalloc0(n_coefs*sizeof(double));
+ unsigned n_coefs = (unsigned) (u->fft_size / 2 + 1);
+ double *H_ = (double *) pa_xmalloc0(n_coefs * sizeof(double));
- unsigned H_i=pa_aupdate_read_begin(u->a_H);
- float *H=u->Hs[H_i];
+ float *H=u->Hs[pa_aupdate_read_begin(u->a_H)];
for(size_t i = 0;i < u->fft_size / 2 + 1; ++i){
- H_[i]=H[i];
+ H_[i] = H[i] * u->fft_size;
}
pa_aupdate_read_end(u->a_H);
- pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, &H_, n_coefs);
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, H_, n_coefs);
pa_xfree(H_);
}
@@ -1089,14 +1157,17 @@ void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", u->fft_size / 2 + 1, _n_coefs);
return;
}
- unsigned H_i = pa_aupdate_write_begin(u->a_H);
- float *H = u->Hs[H_i];
+ float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- H[i] = (float)H_[i];
+ H[i] = (float) H_[i];
}
+ fix_filter(H, u->fft_size);
pa_aupdate_write_swap(u->a_H);
pa_aupdate_write_end(u->a_H);
+ //Stupid for IO reasons? Add a save signal to dbus instead
+ save_state(u);
+
pa_dbus_send_empty_reply(conn, msg);
}
@@ -1109,7 +1180,9 @@ void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
DBusMessage *reply = NULL;
DBusMessageIter msg_iter, dict_iter;
- int n_coefs=(unsigned)(u->fft_size / 2 + 1);
+ uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
+ uint32_t fft_size=(uint32_t) u->fft_size;
+ uint32_t n_coefs=(uint32_t)(u->fft_size / 2 + 1);
double *H_=(double *)pa_xmalloc0(n_coefs*sizeof(double));
unsigned H_i=pa_aupdate_read_begin(u->a_H);
@@ -1123,6 +1196,8 @@ void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
dbus_message_iter_init_append(reply, &msg_iter);
pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_COEFS].property_name, DBUS_TYPE_DOUBLE, H_, n_coefs);
commit 144f1c4f31fe3cde73a0d9ea08d2ae34cc24bdf6
Author: Jason Newton <nevion at gmail.com>
Date: Wed Aug 5 00:52:16 2009 -0700
module-equalizer-sink:
dbus properties and manager so that multiple sinks can be loaded and mixers can be equalizer-sink aware
functionality to seed new filters quickly (rteq guis)
profile support
extra checking in client->server dbus messages
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 6ea5951..285fddb 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -50,6 +50,8 @@ USA.
#include <pulsecore/thread-mq.h>
#include <pulsecore/rtpoll.h>
#include <pulsecore/sample-util.h>
+#include <pulsecore/shared.h>
+#include <pulsecore/idxset.h>
#include <pulsecore/database.h>
#include <pulsecore/protocol-dbus.h>
#include <pulsecore/dbus-util.h>
@@ -82,6 +84,7 @@ struct userdata {
pa_module *module;
pa_sink *sink, *master;
pa_sink_input *sink_input;
+ char *name;
size_t channels;
size_t fft_size;//length (res) of fft
@@ -131,9 +134,17 @@ static const char* const valid_modargs[] = {
static uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
static void hanning_window(float *W, size_t window_size);
+void fix_filter(float *H, size_t fft_size);
+void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points);
static void array_out(const char *name, float *a, size_t length);
+static int is_monotonic(uint32_t *xs, size_t length);
static void process_samples(struct userdata *u);
static void input_buffer(struct userdata *u, pa_memchunk *in);
+static void save_profile(struct userdata *u,char *name);
+static void save_state(struct userdata *u);
+static void remove_profile(pa_core *u,char *name);
+static const char * load_profile(struct userdata *u,char *name);
+static void load_state(struct userdata *u);
void dsp_logic(
float * __restrict__ dst,
@@ -144,21 +155,37 @@ void dsp_logic(
fftwf_complex * __restrict__ output_window,
struct userdata *u);
+
+/*
+ * DBus Routines and Callbacks
+ */
+#define EXTNAME "org.PulseAudio.Ext.Equalizing1"
+#define MANAGER_PATH "/org/pulseaudio/equalizing1"
static void dbus_init(struct userdata *u);
static void dbus_done(struct userdata *u);
-static void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
-void get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
-void get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void save_state(struct userdata *u);
+static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
#define v_size 4
#define gettime(x) clock_gettime(CLOCK_MONOTONIC, &x)
#define tdiff(x, y) time_diff(&x, &y)
#define mround(x, y) (x % y == 0 ? x : ( x / y + 1) * y)
-#define COEFKEY "coefficients"
+#define SINKLIST "equalized_sinklist"
+#define EQDB "equalizer_db"
uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
{
@@ -166,20 +193,43 @@ uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
((timeB_p->tv_sec * 1000000000ULL) + timeB_p->tv_nsec);
}
-static void hanning_window(float *W, size_t window_size){
+void hanning_window(float *W, size_t window_size){
//h=.5*(1-cos(2*pi*j/(window_size+1)), COLA for R=(M+1)/2
for(size_t i=0; i < window_size;++i){
W[i] = (float).5*(1-cos(2*M_PI*i/(window_size+1)));
}
}
-static void fix_filter(float *H, size_t fft_size){
+void fix_filter(float *H, size_t fft_size){
//divide out the fft gain
- for(size_t i = 0; i < (fft_size / 2 + 1); ++i){
+ for(size_t i = 0; i < fft_size / 2 + 1; ++i){
H[i] /= fft_size;
}
}
+void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points){
+ //Note that xs must be monotonically increasing!
+ pa_assert_se(n_points>=2);
+ pa_assert_se(xs[0] == 0);
+ pa_assert_se(xs[n_points - 1] == length - 1);
+ for(size_t x = 0, x_range_lower_i = 0; x < length-1; ++x){
+ pa_assert(x_range_lower_i < n_points-1);
+ float x_range_lower = (float) (xs[x_range_lower_i]);
+ float x_range_upper = (float) (xs[x_range_lower_i+1]);
+ pa_assert_se(x_range_lower < x_range_upper);
+ pa_assert_se(x >= x_range_lower);
+ pa_assert_se(x <= x_range_upper);
+ //bilinear-interpolation of coefficients specified
+ float c0 = (x-x_range_lower)/(x_range_upper-x_range_lower);
+ pa_assert_se(c0 >= 0&&c0 <= 1.0);
+ signal[x] = ((1.0f - c0) * ys[x_range_lower_i] + c0 * ys[x_range_lower_i + 1]);
+ while(x >= xs[x_range_lower_i + 1]){
+ x_range_lower_i++;
+ }
+ }
+ signal[length-1]=ys[n_points-1];
+}
+
void array_out(const char *name, float *a, size_t length){
FILE *p=fopen(name, "w");
if(!p){
@@ -195,6 +245,17 @@ void array_out(const char *name, float *a, size_t length){
fprintf(p, "\n");
fclose(p);
}
+static int is_monotonic(uint32_t *xs,size_t length){
+ if(length<2){
+ return 1;
+ }
+ for(size_t i = 1; i < length; ++i){
+ if(xs[i]<=xs[i-1]){
+ return 0;
+ }
+ }
+ return 1;
+}
/* Called from I/O thread context */
@@ -708,15 +769,16 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
}
}
-void save_state(struct userdata *u){
- const float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+void save_profile(struct userdata *u, char *name){
float *H_n = pa_xmalloc((u->fft_size / 2 + 1) * sizeof(float));
+ const float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
for(size_t i = 0 ; i <= u->fft_size / 2 + 1; ++i){
- H_n[i] = H[i] * u->fft_size;
+ //H_n[i] = H[i] * u->fft_size;
+ H_n[i] = H[i];
}
pa_aupdate_read_end(u->a_H);
pa_datum key, data;
- key.data = (char *) COEFKEY;
+ key.data=name;
key.size = strlen(key.data);
data.data = H_n;
data.size = (u->fft_size / 2 + 1) * sizeof(float);
@@ -724,6 +786,49 @@ void save_state(struct userdata *u){
pa_database_sync(u->database);
}
+void save_state(struct userdata *u){
+ char *state_name = pa_sprintf_malloc("%s-previous-state", u->name);
+ save_profile(u, state_name);
+ pa_xfree(state_name);
+}
+
+void remove_profile(pa_core *c,char *name){
+ pa_datum key;
+ key.data = name;
+ key.size = strlen(key.data);
+ pa_database *database;
+ pa_assert_se(database = pa_shared_get(c,EQDB));
+ pa_database_unset(database,&key);
+ pa_database_sync(database);
+}
+
+const char* load_profile(struct userdata *u,char *name){
+ pa_datum key,value;
+ key.data = name;
+ key.size = strlen(key.data);
+ if(pa_database_get(u->database, &key, &value) != NULL){
+ if(value.size == (u->fft_size / 2 + 1) * sizeof(float)){
+ float *H=u->Hs[pa_aupdate_write_begin(u->a_H)];
+ memcpy(H, value.data, value.size);
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
+ }else{
+ return "incompatible size";
+ }
+ pa_datum_free(&value);
+ }else{
+ return "profile doesn't exist";
+ }
+ return NULL;
+ //fix_filter(u->H, u->fft_size);
+}
+void load_state(struct userdata *u){
+ char *state_name=pa_sprintf_malloc("%s-previous-state", u->name);
+ load_profile(u,state_name);
+ pa_xfree(state_name);
+}
+
+
/* Called from main context */
static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
struct userdata *u;
@@ -791,7 +896,7 @@ int pa__init(pa_module*m) {
u->channels = ss.channels;
u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
pa_log("fft size: %ld", u->fft_size);
- u->window_size = 7999;
+ u->window_size = 15999;
u->R = (u->window_size+1)/2;
u->overlap_size = u->window_size-u->R;
u->target_samples = 1*u->R;
@@ -851,7 +956,7 @@ int pa__init(pa_module*m) {
pa_log("Failed to create sink.");
goto fail;
}
-
+ u->name=pa_xstrdup(u->sink->name);
u->sink->parent.process_msg = sink_process_msg;
u->sink->set_state = sink_set_state;
u->sink->update_requested_latency = sink_update_requested_latency;
@@ -898,83 +1003,14 @@ int pa__init(pa_module*m) {
pa_xfree(use_default);
- char *dbname;
- char *pref = pa_sprintf_malloc("equalizer-%s-state", u->sink->name);
- pa_assert_se(dbname = pa_state_path(pref, TRUE));
- pa_xfree(pref);
- pa_assert_se(u->database = pa_database_open(dbname, TRUE));
- pa_xfree(dbname);
+ dbus_init(u);
- unsigned H_i = pa_aupdate_write_begin(u->a_H);
- u->H = u->Hs[H_i];
+ //default filter to these
for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- u->H[i] = 1.0;
+ u->Hs[1][i]=u->Hs[0][i] = 1.0;
}
-
- //TODO cut this out and leave it for the client side
- //const int freqs[] = {0,25,50,100,200,300,400,800,1500,
- // 2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,
- // 13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23000,24000,INT_MAX};
- //const float coefficients[] = {1,1,1,1,1,1,1,1,1,1,
- // 1,1,1,1,1,1,1,1,
- // 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
- //const size_t ncoefficients = sizeof(coefficients)/sizeof(float);
- //pa_assert_se(sizeof(freqs)/sizeof(int)==sizeof(coefficients)/sizeof(float));
- //float *freq_translated = (float *) pa_xmalloc0(sizeof(float)*(ncoefficients));
- //freq_translated[0] = 1;
- ////Translate the frequencies in their natural sampling rate to the new sampling rate frequencies
- //for(size_t i = 1; i < ncoefficients-1; ++i){
- // freq_translated[i] = ((float)freqs[i]*u->fft_size)/ss.rate;
- // //pa_log("i: %ld: %d , %g",i, freqs[i], freq_translated[i]);
- // pa_assert_se(freq_translated[i] >= freq_translated[i-1]);
- //}
- //freq_translated[ncoefficients-1] = FLT_MAX;
- //
- ////Interpolate the specified frequency band values
- //u->H[0] = 1;
- //for(size_t i = 1, j = 0; i < (u->fft_size / 2 + 1); ++i){
- // pa_assert_se(j < ncoefficients);
- // //max frequency range passed, consider the rest as one band
- // if(freq_translated[j+1] >= FLT_MAX){
- // for(; i < (u->fft_size / 2 + 1); ++i){
- // u->H[i] = coefficients[j];
- // }
- // break;
- // }
- // //pa_log("i: %d, j: %d, freq: %f", i, j, freq_translated[j]);
- // //pa_log("interp: %0.4f %0.4f", freq_translated[j], freq_translated[j+1]);
- // pa_assert_se(freq_translated[j] < freq_translated[j+1]);
- // pa_assert_se(i >= freq_translated[j]);
- // pa_assert_se(i <= freq_translated[j+1]);
- // //bilinear-inerpolation of coefficients specified
- // float c0 = (i-freq_translated[j])/(freq_translated[j+1]-freq_translated[j]);
- // pa_assert_se(c0 >= 0&&c0 <= 1.0);
- // u->H[i] = ((1.0f-c0)*coefficients[j]+c0*coefficients[j+1]);
- // pa_assert_se(u->H[i]>0);
- // while(i >= floor(freq_translated[j+1])){
- // j++;
- // }
- //}
- //pa_xfree(freq_translated);
-
//load old parameters
- pa_datum key,value;
- key.data = (char *) COEFKEY;
- key.size = strlen(key.data);
- if (pa_database_get(u->database, &key, &value) != NULL){
- if(value.size == (u->fft_size / 2 + 1) * sizeof(float)){
- memcpy(u->H, value.data, (u->fft_size / 2 + 1) * sizeof(float));
- }
- pa_datum_free(&value);
- }
-
- fix_filter(u->H, u->fft_size);
- pa_aupdate_write_swap(u->a_H);
- pa_aupdate_write_end(u->a_H);
-
-
-
- dbus_init(u);
+ load_state(u);
return 0;
@@ -1007,7 +1043,6 @@ void pa__done(pa_module*m) {
return;
save_state(u);
- pa_database_close(u->database);
dbus_done(u);
@@ -1042,22 +1077,130 @@ void pa__done(pa_module*m) {
pa_xfree(u->Hs[i]);
}
+ pa_xfree(u->name);
+
pa_xfree(u);
}
-enum property_handler_index {
- PROPERTY_HANDLER_SAMPLERATE,
- PROPERTY_HANDLER_FILTERSAMPLERATE,
- PROPERTY_HANDLER_N_COEFS,
- PROPERTY_HANDLER_COEFS,
- PROPERTY_HANDLER_MAX
+enum manager_method_index {
+ MANAGER_METHOD_REMOVE_PROFILE,
+ MANAGER_METHOD_MAX
+};
+
+pa_dbus_arg_info remove_profile_args[]={
+ {"name", "s","in"},
+};
+
+static pa_dbus_method_handler manager_methods[MANAGER_METHOD_MAX]={
+ [MANAGER_METHOD_REMOVE_PROFILE]{
+ .method_name="RemoveProfile",
+ .arguments=remove_profile_args,
+ .n_arguments=sizeof(remove_profile_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=manager_handle_remove_profile}
+};
+
+enum manager_handler_index {
+ MANAGER_HANDLER_REVISION,
+ MANAGER_HANDLER_EQUALIZED_SINKS,
+ MANAGER_HANDLER_PROFILES,
+ MANAGER_HANDLER_MAX
+};
+
+static pa_dbus_property_handler manager_handlers[MANAGER_HANDLER_MAX]={
+ [MANAGER_HANDLER_REVISION]={.property_name="InterfaceRevision",.type="u",.get_cb=manager_get_revision,.set_cb=NULL},
+ [MANAGER_HANDLER_EQUALIZED_SINKS]={.property_name="EqualizedSinks",.type="ao",.get_cb=manager_get_sinks,.set_cb=NULL},
+ [MANAGER_HANDLER_PROFILES]={.property_name="Profiles",.type="as",.get_cb=manager_get_profiles,.set_cb=NULL}
+};
+
+static pa_dbus_interface_info manager_info={
+ .name=EXTNAME ".Manager",
+ .method_handlers=manager_methods,
+ .n_method_handlers=MANAGER_METHOD_MAX,
+ .property_handlers=manager_handlers,
+ .n_property_handlers=MANAGER_HANDLER_MAX,
+ .get_all_properties_cb=manager_get_all,
+ .signals=NULL,
+ .n_signals=0
+};
+
+
+enum equalizer_method_index {
+ EQUALIZER_METHOD_FILTER_POINTS,
+ EQUALIZER_METHOD_SEED_FILTER,
+ EQUALIZER_METHOD_SAVE_PROFILE,
+ EQUALIZER_METHOD_LOAD_PROFILE,
+ EQUALIZER_METHOD_SET_FILTER,
+ EQUALIZER_METHOD_GET_FILTER,
+ EQUALIZER_METHOD_MAX
+};
+
+enum equalizer_handler_index {
+ EQUALIZER_HANDLER_REVISION,
+ EQUALIZER_HANDLER_SAMPLERATE,
+ EQUALIZER_HANDLER_FILTERSAMPLERATE,
+ EQUALIZER_HANDLER_N_COEFS,
+ EQUALIZER_HANDLER_MAX
+};
+
+pa_dbus_arg_info filter_points_args[]={
+ {"xs", "au","in"},
+ {"ys", "ad","out"},
+};
+pa_dbus_arg_info seed_filter_args[]={
+ {"xs", "au","in"},
+ {"ys", "ad","in"},
+};
+pa_dbus_arg_info save_profile_args[]={
+ {"name", "s","in"},
+};
+pa_dbus_arg_info load_profile_args[]={
+ {"name", "s","in"},
+};
+pa_dbus_arg_info set_filter_args[]={
+ {"coefficients", "ad","in"},
+};
+pa_dbus_arg_info get_filter_args[]={
+ {"coefficients", "ad","out"},
+};
+
+static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
+ [EQUALIZER_METHOD_SEED_FILTER]{
+ .method_name="SeedFilter",
+ .arguments=seed_filter_args,
+ .n_arguments=sizeof(seed_filter_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_seed_filter},
+ [EQUALIZER_METHOD_FILTER_POINTS]{
+ .method_name="FilterAtPoints",
+ .arguments=filter_points_args,
+ .n_arguments=sizeof(filter_points_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_get_filter_points},
+ [EQUALIZER_METHOD_SAVE_PROFILE]{
+ .method_name="SaveProfile",
+ .arguments=save_profile_args,
+ .n_arguments=sizeof(save_profile_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_save_profile},
+ [EQUALIZER_METHOD_LOAD_PROFILE]{
+ .method_name="LoadProfile",
+ .arguments=load_profile_args,
+ .n_arguments=sizeof(load_profile_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_load_profile},
+ [EQUALIZER_METHOD_SET_FILTER]{
+ .method_name="SetFilterCoefficients",
+ .arguments=set_filter_args,
+ .n_arguments=sizeof(set_filter_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_set_filter},
+ [EQUALIZER_METHOD_GET_FILTER]{
+ .method_name="GetFilterCoefficients",
+ .arguments=get_filter_args,
+ .n_arguments=sizeof(get_filter_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_get_filter}
};
-static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX]={
- [PROPERTY_HANDLER_SAMPLERATE]{.property_name="SampleRate",.type="u",.get_cb=get_sample_rate,.set_cb=NULL},
- [PROPERTY_HANDLER_FILTERSAMPLERATE]{.property_name="FilterSampleRate",.type="u",.get_cb=get_filter_rate,.set_cb=NULL},
- [PROPERTY_HANDLER_N_COEFS]{.property_name="NFilterCoefficients",.type="u",.get_cb=get_n_coefs,.set_cb=NULL},
- [PROPERTY_HANDLER_COEFS]{.property_name="FilterCoefficients",.type="ai",.get_cb=get_filter,.set_cb=set_filter}
+static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
+ [EQUALIZER_HANDLER_REVISION]={.property_name="InterfaceRevision",.type="u",.get_cb=equalizer_get_revision,.set_cb=NULL},
+ [EQUALIZER_HANDLER_SAMPLERATE]{.property_name="SampleRate",.type="u",.get_cb=equalizer_get_sample_rate,.set_cb=NULL},
+ [EQUALIZER_HANDLER_FILTERSAMPLERATE]{.property_name="FilterSampleRate",.type="u",.get_cb=equalizer_get_filter_rate,.set_cb=NULL},
+ [EQUALIZER_HANDLER_N_COEFS]{.property_name="NFilterCoefficients",.type="u",.get_cb=equalizer_get_n_coefs,.set_cb=NULL},
};
//static pa_dbus_arg_info new_equalizer_args[] = { { "path","o",NULL} };
@@ -1065,37 +1208,354 @@ static pa_dbus_property_handler property_handlers[PROPERTY_HANDLER_MAX]={
// [SIGNAL_NEW_EQUALIZER]={.name="NewEqualizer",.arguments=new_equalizer_args,.n_arguments=1}
//};
-#define EXTNAME "org.PulseAudio.Ext.Equalizing1"
-
-static pa_dbus_interface_info interface_info={
+static pa_dbus_interface_info equalizer_info={
.name=EXTNAME ".Equalizer",
- .method_handlers=NULL,
- .n_method_handlers=0,
- .property_handlers=property_handlers,
- .n_property_handlers=PROPERTY_HANDLER_MAX,
- .get_all_properties_cb=handle_get_all,
+ .method_handlers=equalizer_methods,
+ .n_method_handlers=EQUALIZER_METHOD_MAX,
+ .property_handlers=equalizer_handlers,
+ .n_property_handlers=EQUALIZER_HANDLER_MAX,
+ .get_all_properties_cb=equalizer_get_all,
.signals=NULL,
.n_signals=0
};
-
void dbus_init(struct userdata *u){
u->dbus_protocol=pa_dbus_protocol_get(u->core);
u->dbus_path=pa_sprintf_malloc("/org/pulseaudio/core1/sink%d", u->sink->index);
- pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &interface_info, u);
- pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
+ pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &equalizer_info, u);
+ pa_idxset *sink_list=pa_shared_get(u->core,SINKLIST);
+ u->database=pa_shared_get(u->core,EQDB);
+ if(sink_list==NULL){
+ sink_list=pa_idxset_new(&pa_idxset_trivial_hash_func, &pa_idxset_trivial_compare_func);
+ pa_shared_set(u->core, SINKLIST, sink_list);
+ char *dbname;
+ pa_assert_se(dbname = pa_state_path("equalizers", TRUE));
+ pa_assert_se(u->database = pa_database_open(dbname, TRUE));
+ pa_xfree(dbname);
+ pa_shared_set(u->core,EQDB,u->database);
+ pa_dbus_protocol_add_interface(u->dbus_protocol, MANAGER_PATH, &manager_info, u->core);
+ pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
+ }
+ uint32_t dummy;
+ pa_idxset_put(sink_list,u,&dummy);
}
void dbus_done(struct userdata *u){
- pa_dbus_protocol_unregister_extension(u->dbus_protocol, EXTNAME);
- pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, interface_info.name);
-
+ pa_idxset *sink_list;
+ uint32_t dummy;
+
+ pa_assert_se(sink_list=pa_shared_get(u->core,SINKLIST));
+ pa_idxset_remove_by_data(sink_list,u,&dummy);
+ if(pa_idxset_size(sink_list)==0){
+ pa_dbus_protocol_unregister_extension(u->dbus_protocol, EXTNAME);
+ pa_dbus_protocol_remove_interface(u->dbus_protocol, MANAGER_PATH, manager_info.name);
+ pa_shared_remove(u->core, EQDB);
+ pa_database_close(u->database);
+ pa_shared_remove(u->core, SINKLIST);
+ pa_xfree(sink_list);
+ }
+ pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, equalizer_info.name);
pa_xfree(u->dbus_path);
pa_dbus_protocol_unref(u->dbus_protocol);
}
-void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
+void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ DBusError error;
+ pa_core *c = (pa_core *)_u;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(c);
+ dbus_error_init(&error);
+ char *name;
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ remove_profile(c,name);
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
+ uint32_t rev=1;
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
+}
+
+void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ pa_core *c = (pa_core *)_u;
+ pa_idxset *sink_list;
+ uint32_t dummy;
+
+ pa_assert_se(sink_list = pa_shared_get(c, SINKLIST));
+ unsigned n_sinks = (unsigned) pa_idxset_size(sink_list);
+ char **names = NULL;
+ void *iter = NULL;
+ struct userdata *sink_u = NULL;
+ pa_assert_se(names = pa_xnew0(char *,n_sinks));
+ for(uint32_t i = 0; i < n_sinks; ++i){
+ sink_u=(struct userdata *) pa_idxset_iterate(sink_list, &iter, &dummy);
+ names[i] = sink_u->dbus_path;
+ }
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, names, n_sinks);
+ pa_xfree(names);
+}
+
+void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ pa_core *core=_u;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter, array_iter;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "s", &array_iter));
+
+ char *name;
+ pa_datum key,next_key;
+ int done;
+ pa_database *database;
+ pa_assert_se(database=pa_shared_get(core, EQDB));
+ done = !pa_database_first(database, &key, NULL);
+
+ while(!done){
+ done = !pa_database_next(database, &key, &next_key, NULL);
+ name=pa_xmalloc(key.size + 1);
+ memcpy(name, key.data, key.size);
+ name[key.size] = '\0';
+ pa_datum_free(&key);
+ dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &name);
+ pa_xfree(name);
+ key = next_key;
+ }
+ dbus_message_iter_close_container(&msg_iter, &array_iter);
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ pa_core *u=(pa_core *) _u;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter, dict_iter, sub_iter, array_iter;
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ uint32_t rev=1;
+ pa_idxset *sink_list;
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, manager_handlers[MANAGER_HANDLER_REVISION].property_name, DBUS_TYPE_UINT32, &rev);
+
+ pa_assert_se(sink_list = pa_shared_get(u, SINKLIST));
+ unsigned n_sinks = (unsigned) pa_idxset_size(sink_list);
+ char **names = NULL;
+ void *iter = NULL;
+ struct userdata *sink_u = NULL;
+ pa_assert_se(names = pa_xnew0(char *,n_sinks));
+ for(uint32_t i = 0; i < n_sinks; ++i){
+ unsigned dummy;
+ sink_u=(struct userdata *) pa_idxset_iterate(sink_list, &iter, &dummy);
+ names[i] = sink_u->dbus_path;
+ }
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, manager_handlers[MANAGER_HANDLER_EQUALIZED_SINKS].property_name, DBUS_TYPE_OBJECT_PATH, names, n_sinks);
+ pa_xfree(names);
+
+ pa_database *database;
+ pa_assert_se(database=pa_shared_get(u, EQDB));
+
+ pa_datum key,next_key;
+ char *profile_name;
+ int done;
+ done = !pa_database_first(database, &key, NULL);
+ dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &sub_iter);
+ dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_STRING, &manager_handlers[MANAGER_HANDLER_PROFILES].property_name);
+
+ dbus_message_iter_open_container(&sub_iter, DBUS_TYPE_ARRAY, "s", &array_iter);
+ while(!done){
+ done = !pa_database_next(database, &key, &next_key, NULL);
+ profile_name=pa_xmalloc(key.size + 1);
+ memcpy(profile_name, key.data, key.size);
+ profile_name[key.size] = '\0';
+ pa_datum_free(&key);
+ dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &profile_name);
+ pa_xfree(profile_name);
+ key = next_key;
+ }
+ pa_assert_se(dbus_message_iter_close_container(&sub_iter, &array_iter));
+ pa_assert_se(dbus_message_iter_close_container(&dict_iter, &sub_iter));
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u=(struct userdata *) _u;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+ float *ys;
+ uint32_t *xs;
+ double *_ys;
+ unsigned x_npoints,y_npoints;
+
+ dbus_error_init(&error);
+
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &xs, &x_npoints,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &_ys, &y_npoints,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ int points_good=1;
+ for(size_t i = 0; i < x_npoints; ++i){
+ if(xs[i] >= u->fft_size / 2 + 1){
+ points_good=0;
+ break;
+ }
+ }
+ if(!is_monotonic(xs,x_npoints) || !points_good){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs must be monotonic and 0<x<%ld", u->fft_size / 2);
+ dbus_error_free(&error);
+ return;
+
+ }
+ else if(x_npoints != y_npoints || x_npoints < 2 || x_npoints > u->fft_size / 2 +1 ){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs and ys must be the same length and 2<=l<=%ld!", u->fft_size / 2 + 1);
+ dbus_error_free(&error);
+ return;
+ }
+
+ ys = pa_xmalloc(x_npoints * sizeof(float));
+ for(uint32_t i = 0; i < x_npoints; ++i){
+ ys[i] = (float) _ys[i];
+ }
+
+ float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
+ interpolate(H, u->fft_size / 2 + 1, xs, ys, x_npoints);
+ fix_filter(H, u->fft_size);
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
+ pa_xfree(ys);
+
+ //Stupid for IO reasons? Add a save signal to dbus instead
+ //save_state(u);
+
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u=(struct userdata *) _u;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+ uint32_t *xs;
+ double *ys;
+ unsigned x_npoints;
+
+ dbus_error_init(&error);
+
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &xs, &x_npoints,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ int points_good=1;
+ for(size_t i = 0; i < x_npoints; ++i){
+ if(xs[i] >= u->fft_size / 2 + 1){
+ points_good=0;
+ break;
+ }
+ }
+
+ if(x_npoints > u->fft_size / 2 +1 || !points_good){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs indices/length must be <= %ld!", u->fft_size / 2 + 1);
+ dbus_error_free(&error);
+ return;
+ }
+
+ ys = pa_xmalloc(x_npoints * sizeof(double));
+ float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ for(uint32_t i = 0; i < x_npoints; ++i){
+ ys[i] = H[xs[i]] * u->fft_size;
+ }
+ pa_aupdate_read_end(u->a_H);
+
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, ys, x_npoints);
+ pa_xfree(ys);
+}
+
+void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u=(struct userdata *) _u;
+ DBusError error;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+ dbus_error_init(&error);
+ char *name;
+
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ save_profile(u,name);
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u=(struct userdata *) _u;
+ DBusError error;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+ dbus_error_init(&error);
+ char *name;
+
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ const char *err_msg=load_profile(u,name);
+ if(err_msg!=NULL){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "error loading profile %s: %s", name,err_msg);
+ dbus_error_free(&error);
+ return;
+ }
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
+void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
+ uint32_t rev=1;
+ pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
+}
+
+void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
@@ -1106,7 +1566,7 @@ void get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &n_coefs);
}
-void get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
@@ -1115,7 +1575,8 @@ void get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &rate);
}
-void get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+
+void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
@@ -1125,7 +1586,34 @@ void get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &fft_size);
}
-void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ struct userdata *u=(struct userdata *) _u;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter, dict_iter;
+ uint32_t rev=1;
+ uint32_t n_coefs=(uint32_t)(u->fft_size / 2 + 1);
+ uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
+ uint32_t fft_size=(uint32_t) u->fft_size;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_REVISION].property_name, DBUS_TYPE_UINT32, &rev);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
@@ -1144,7 +1632,7 @@ void get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_xfree(H_);
}
-void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
@@ -1152,7 +1640,9 @@ void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u=(struct userdata *)_u;
double *H_;
unsigned _n_coefs;
- pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H_, &_n_coefs);
+ if(pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H_, &_n_coefs)){
+ return;
+ }
if(_n_coefs!=u->fft_size / 2 + 1){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", u->fft_size / 2 + 1, _n_coefs);
return;
@@ -1166,44 +1656,7 @@ void set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_aupdate_write_end(u->a_H);
//Stupid for IO reasons? Add a save signal to dbus instead
- save_state(u);
+ //save_state(u);
pa_dbus_send_empty_reply(conn, msg);
}
-
-void handle_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(_u);
-
- struct userdata *u = (struct userdata *)_u;
- DBusMessage *reply = NULL;
- DBusMessageIter msg_iter, dict_iter;
-
- uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
- uint32_t fft_size=(uint32_t) u->fft_size;
- uint32_t n_coefs=(uint32_t)(u->fft_size / 2 + 1);
- double *H_=(double *)pa_xmalloc0(n_coefs*sizeof(double));
-
- unsigned H_i=pa_aupdate_read_begin(u->a_H);
- float *H=u->Hs[H_i];
- for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- H_[i] = H[i];
- }
- pa_aupdate_read_end(u->a_H);
-
- pa_assert_se((reply = dbus_message_new_method_return(msg)));
- dbus_message_iter_init_append(reply, &msg_iter);
- pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
-
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
- pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, property_handlers[PROPERTY_HANDLER_COEFS].property_name, DBUS_TYPE_DOUBLE, H_, n_coefs);
-
- pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
- pa_assert_se(dbus_connection_send(conn, reply, NULL));
- dbus_message_unref(reply);
-
- pa_xfree(H_);
-}
commit 857eea062129b4b9e04950a9187ebc47fc84899f
Author: Jason Newton <nevion at gmail.com>
Date: Fri Aug 7 15:08:57 2009 -0700
module-equalizer-sink:
add lennard's fix for piggy-back sinks in pop_cb
fixed some tsched issues
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 285fddb..eb9d6ef 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -549,6 +549,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
+ /* Hmm, process any reweind request that might be queued up */
+ pa_sink_process_rewind(u->sink, 0);
+
//pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
struct timespec start, end;
@@ -559,11 +562,11 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
}
/*
- Set the H filter
- */
+ * Set the H filter
+ */
unsigned H_i = pa_aupdate_read_begin(u->a_H);
u->H = u->Hs[H_i];
-
+
do{
pa_memchunk *buffer;
size_t input_remaining = u->target_samples-u->samples_gathered;
@@ -641,14 +644,14 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
if (amount > 0) {
//pa_sample_spec *ss = &u->sink->sample_spec;
- pa_memblockq_seek(u->rendered_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
+ //pa_memblockq_seek(u->rendered_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log_debug("Resetting equalizer");
u->samples_gathered = 0;
}
}
pa_sink_process_rewind(u->sink, amount);
- pa_memblockq_rewind(u->rendered_q, nbytes);
+ //pa_memblockq_rewind(u->rendered_q, nbytes);
}
/* Called from I/O thread context */
@@ -677,7 +680,8 @@ static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_max_request_within_thread(u->sink, nbytes);
- pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
+ //pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
+ pa_sink_set_max_request_within_thread(u->sink, ((nbytes+u->R*fs-1)/(u->R*fs))*(u->R*fs));
}
/* Called from I/O thread context */
@@ -692,8 +696,8 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
- pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs );
- //pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
+ //pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs );
+ pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
/* Called from I/O thread context */
@@ -924,8 +928,8 @@ int pa__init(pa_module*m) {
memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
u->output_window = alloc((u->fft_size / 2 + 1), sizeof(fftwf_complex));
- u->forward_plan = fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_MEASURE);
- u->inverse_plan = fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_MEASURE);
+ u->forward_plan = fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
+ u->inverse_plan = fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
hanning_window(u->W, u->window_size);
@@ -965,7 +969,9 @@ int pa__init(pa_module*m) {
pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
pa_sink_set_rtpoll(u->sink, master->rtpoll);
- pa_sink_set_max_request(u->sink, u->R*fs);
+ pa_sink_set_max_request(u->sink,
+ ((pa_sink_get_max_request(u->sink)+u->R*fs-1)/(u->R*fs))*(u->R*fs)
+ );
//pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->R*fs, &ss));
/* Create sink input */
commit 4231ac444fc1492bab58fe12d439c4479ef1f648
Author: Jason Newton <nevion at gmail.com>
Date: Sat Aug 8 00:53:40 2009 -0700
module-equalizer-sink: reverted buffering logic back to how the ladspa sink did it
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index eb9d6ef..6311181 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -113,7 +113,7 @@ struct userdata {
float *Hs[2];//thread updatable copies
pa_aupdate *a_H;
pa_memchunk conv_buffer;
- pa_memblockq *rendered_q;
+ pa_memblockq *input_q;
pa_dbus_protocol *dbus_protocol;
char *dbus_path;
@@ -138,7 +138,7 @@ void fix_filter(float *H, size_t fft_size);
void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points);
static void array_out(const char *name, float *a, size_t length);
static int is_monotonic(uint32_t *xs, size_t length);
-static void process_samples(struct userdata *u);
+static void process_samples(struct userdata *u, pa_memchunk *tchunk);
static void input_buffer(struct userdata *u, pa_memchunk *in);
static void save_profile(struct userdata *u,char *name);
static void save_state(struct userdata *u);
@@ -273,9 +273,9 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- //usec+=pa_bytes_to_usec(u->latency * fs, ss);
- //usec+=pa_bytes_to_usec(u->samples_gathered * fs, ss);
- usec += pa_bytes_to_usec(pa_memblockq_get_length(u->rendered_q), ss);
+ //usec += pa_bytes_to_usec(u->latency * fs, ss);
+ //usec += pa_bytes_to_usec(u->samples_gathered * fs, ss);
+ usec += pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), ss);
/* Add the latency internal to our sink input on top */
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
*((pa_usec_t*) data) = usec;
@@ -310,8 +310,10 @@ static void sink_request_rewind(pa_sink *s) {
pa_sink_assert_ref(s);
pa_assert_se(u = s->userdata);
+ //pa_memblockq_drop(u->input_q,pa_memblockq_get_length(u->input_q));
+
/* Just hand this one over to the master sink */
- pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes + pa_memblockq_get_length(u->rendered_q), TRUE, FALSE, FALSE);
+ pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes+pa_memblockq_get_length(u->input_q), TRUE, FALSE, FALSE);
}
/* Called from I/O thread context */
@@ -327,34 +329,28 @@ static void sink_update_requested_latency(pa_sink *s) {
pa_sink_get_requested_latency_within_thread(s));
}
-static void process_samples(struct userdata *u){
- pa_memchunk tchunk;
+static void process_samples(struct userdata *u, pa_memchunk *tchunk){
size_t fs=pa_frame_size(&(u->sink->sample_spec));
- while(u->samples_gathered >= u->R){
- float *dst;
- //pa_log("iter gathered: %ld", u->samples_gathered);
- //pa_memblockq_drop(u->rendered_q, tchunk.length);
- tchunk.index=0;
- tchunk.length=u->R*fs;
- tchunk.memblock=pa_memblock_new(u->core->mempool, tchunk.length);
- dst=((float*)pa_memblock_acquire(tchunk.memblock));
- for(size_t c=0;c < u->channels; c++) {
- dsp_logic(
- u->work_buffer,
- u->input[c],
- u->overlap_accum[c],
- u->H,
- u->W,
- u->output_window,
- u
- );
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
- }
- pa_memblock_release(tchunk.memblock);
- pa_memblockq_push(u->rendered_q, &tchunk);
- pa_memblock_unref(tchunk.memblock);
- u->samples_gathered-=u->R;
+ pa_assert(u->samples_gathered >= u->R);
+ float *dst;
+ tchunk->index=0;
+ tchunk->length=u->R*fs;
+ tchunk->memblock=pa_memblock_new(u->core->mempool, tchunk->length);
+ dst=((float*)pa_memblock_acquire(tchunk->memblock));
+ for(size_t c=0;c < u->channels; c++) {
+ dsp_logic(
+ u->work_buffer,
+ u->input[c],
+ u->overlap_accum[c],
+ u->H,
+ u->W,
+ u->output_window,
+ u
+ );
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
}
+ pa_memblock_release(tchunk->memblock);
+ u->samples_gathered-=u->R;
}
typedef float v4sf __attribute__ ((__aligned__(v_size*sizeof(float))));
@@ -539,85 +535,59 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
struct userdata *u;
pa_sink_input_assert_ref(i);
pa_assert(chunk);
- pa_assert_se(u = i->userdata);
- pa_assert_se(u->sink);
+ pa_assert(u = i->userdata);
+ pa_assert(u->sink);
size_t fs = pa_frame_size(&(u->sink->sample_spec));
- //size_t samples_requested = nbytes/fs;
- size_t buffered_samples = pa_memblockq_get_length(u->rendered_q)/fs;
pa_memchunk tchunk;
chunk->memblock = NULL;
if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
return -1;
- /* Hmm, process any reweind request that might be queued up */
+ /* Hmm, process any rewind request that might be queued up */
pa_sink_process_rewind(u->sink, 0);
//pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
struct timespec start, end;
- if(pa_memblockq_peek(u->rendered_q, &tchunk)==0){
- *chunk = tchunk;
- pa_memblockq_drop(u->rendered_q, chunk->length);
- return 0;
- }
-
- /*
- * Set the H filter
- */
- unsigned H_i = pa_aupdate_read_begin(u->a_H);
- u->H = u->Hs[H_i];
-
do{
- pa_memchunk *buffer;
size_t input_remaining = u->target_samples-u->samples_gathered;
pa_assert(input_remaining>0);
//collect samples
- buffer = &u->conv_buffer;
- buffer->length = input_remaining*fs;
- buffer->index = 0;
- pa_memblock_ref(buffer->memblock);
- pa_sink_render_into(u->sink, buffer);
-
- //if(u->sink->thread_info.rewind_requested)
- // sink_request_rewind(u->sink);
-
- //pa_memchunk p;
- //buffer = &p;
- //pa_sink_render(u->sink, u->R*fs, buffer);
- //buffer->length = PA_MIN(input_remaining*fs, buffer->length);
-
- //debug block
- //pa_memblockq_push(u->rendered_q, buffer);
- //pa_memblock_unref(buffer->memblock);
- //goto END;
-
+ //buffer = &u->conv_buffer;
+ //buffer->length = input_remaining*fs;
+ //buffer->index = 0;
+ //pa_memblock_ref(buffer->memblock);
+ //pa_sink_render_into(u->sink, buffer);
+ while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
+ pa_sink_render(u->sink, input_remaining*fs, &tchunk);
+ pa_memblockq_push(u->input_q, &tchunk);
+ pa_memblock_unref(tchunk.memblock);
+ }
+ tchunk.length = PA_MIN(input_remaining*fs, tchunk.length);
+ pa_memblockq_drop(u->input_q,tchunk.length);
//pa_log("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
- //copy new input
+ /* copy new input */
gettime(start);
- input_buffer(u, buffer);
+ input_buffer(u, &tchunk);
gettime(end);
//pa_log("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
+ pa_memblock_unref(tchunk.memblock);
+ }while(u->samples_gathered < u->R);
- pa_memblock_unref(buffer->memblock);
-
- pa_assert_se(u->fft_size >= u->window_size);
- pa_assert_se(u->R < u->window_size);
- //process every complete block on hand
-
- gettime(start);
- process_samples(u);
- gettime(end);
- //pa_log("Took %0.5f seconds to process", tdiff(end, start)*1e-9);
-
- buffered_samples = pa_memblockq_get_length(u->rendered_q)/fs;
- }while(buffered_samples < u->R);
+ pa_assert(u->fft_size >= u->window_size);
+ pa_assert(u->R < u->window_size);
+ /* set the H filter */
+ unsigned H_i = pa_aupdate_read_begin(u->a_H);
+ u->H = u->Hs[H_i];
+ gettime(start);
+ /* process a block */
+ process_samples(u,chunk);
+ gettime(end);
+ //pa_log("Took %0.5f seconds to process", tdiff(end, start)*1e-9);
+ pa_aupdate_read_end(u->a_H);
- //deque from rendered_q and output
- pa_assert_se(pa_memblockq_peek(u->rendered_q, &tchunk)==0);
- *chunk = tchunk;
- pa_memblockq_drop(u->rendered_q, chunk->length);
- pa_assert_se(chunk->memblock);
+ pa_assert(chunk->memblock);
//pa_log("gave %ld", chunk->length/fs);
//pa_log("end pop");
return 0;
@@ -638,20 +608,25 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
if (u->sink->thread_info.rewind_nbytes > 0) {
size_t max_rewrite;
- max_rewrite = nbytes + pa_memblockq_get_length(u->rendered_q);
+ //max_rewrite = nbytes;
+ max_rewrite = nbytes + pa_memblockq_get_length(u->input_q);
+ //PA_MIN(pa_memblockq_get_length(u->input_q), nbytes);
amount = PA_MIN(u->sink->thread_info.rewind_nbytes, max_rewrite);
u->sink->thread_info.rewind_nbytes = 0;
if (amount > 0) {
//pa_sample_spec *ss = &u->sink->sample_spec;
- //pa_memblockq_seek(u->rendered_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
+ //invalidate the output q
+ pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
+ //pa_memblockq_drop(u->input_q, pa_memblockq_get_length(u->input_q));
+ //pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log_debug("Resetting equalizer");
u->samples_gathered = 0;
}
}
pa_sink_process_rewind(u->sink, amount);
- //pa_memblockq_rewind(u->rendered_q, nbytes);
+ pa_memblockq_rewind(u->input_q, nbytes);
}
/* Called from I/O thread context */
@@ -664,7 +639,7 @@ static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- pa_memblockq_set_maxrewind(u->rendered_q, nbytes);
+ pa_memblockq_set_maxrewind(u->input_q, nbytes);
pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
}
@@ -694,7 +669,6 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
return;
- size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs );
pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
@@ -729,14 +703,14 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_rtpoll(u->sink, i->sink->rtpoll);
pa_sink_attach_within_thread(u->sink);
- size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ //size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->master->thread_info.max_latency);
//TODO: setting this guy minimizes drop outs but doesn't get rid
//of them completely, figure out why
- pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
+ //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
//TODO: this guy causes dropouts constantly+rewinds, it's unusable
- //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+ pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
}
/* Called from main context */
@@ -906,7 +880,7 @@ int pa__init(pa_module*m) {
u->target_samples = 1*u->R;
u->samples_gathered = 0;
u->max_output = pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
- u->rendered_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, u->target_samples*fs, fs, fs, 0, 0, NULL);
+ u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
u->a_H = pa_aupdate_new();
u->conv_buffer.memblock = pa_memblock_new(u->core->mempool, u->target_samples*fs);
u->latency = u->R;
@@ -1062,11 +1036,9 @@ void pa__done(pa_module*m) {
pa_sink_input_unref(u->sink_input);
}
- if(u->conv_buffer.memblock)
- pa_memblock_unref(u->conv_buffer.memblock);
-
- if (u->rendered_q)
- pa_memblockq_free(u->rendered_q);
+ pa_aupdate_free(u->a_H);
+ pa_memblock_unref(u->conv_buffer.memblock);
+ pa_memblockq_free(u->input_q);
fftwf_destroy_plan(u->inverse_plan);
fftwf_destroy_plan(u->forward_plan);
commit 1e3c7d326f4feb2e8dca8626afa58e88bca40fcd
Author: Jason Newton <nevion at gmail.com>
Date: Sat Aug 8 22:20:05 2009 -0700
module-equalizer-sink:
dbus:
eliminated some redundant code in dbus handlers/getall
switched filter back to being a property
signals for changed profiles, added/removed sinks, filter updates and sink reconfigurations
fixed timing routines
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 6311181..88c1074 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -52,6 +52,7 @@ USA.
#include <pulsecore/sample-util.h>
#include <pulsecore/shared.h>
#include <pulsecore/idxset.h>
+#include <pulsecore/strlist.h>
#include <pulsecore/database.h>
#include <pulsecore/protocol-dbus.h>
#include <pulsecore/dbus-util.h>
@@ -161,10 +162,14 @@ void dsp_logic(
*/
#define EXTNAME "org.PulseAudio.Ext.Equalizing1"
#define MANAGER_PATH "/org/pulseaudio/equalizing1"
+#define MANAGER_IFACE EXTNAME ".Manager"
+#define EQUALIZER_IFACE EXTNAME ".Equalizer"
static void dbus_init(struct userdata *u);
static void dbus_done(struct userdata *u);
static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_sinks(pa_core *u, char ***names, unsigned *n_sinks);
static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_profiles(pa_core *u, char ***names, unsigned *n_sinks);
static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u);
static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
@@ -179,6 +184,8 @@ static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg,
static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_filter(struct userdata *u, double **H_);
+static void set_filter(struct userdata *u, double **H_);
#define v_size 4
#define gettime(x) clock_gettime(CLOCK_MONOTONIC, &x)
@@ -471,8 +478,6 @@ void dsp_logic(
// d->v = d->v*h->v;
//#endif
// }
-//
-//
// //inverse fft
// fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
//
@@ -511,8 +516,6 @@ void dsp_logic(
// );
//}
-
-
void input_buffer(struct userdata *u, pa_memchunk *in){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
size_t samples = in->length/fs;
@@ -546,9 +549,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
/* Hmm, process any rewind request that might be queued up */
pa_sink_process_rewind(u->sink, 0);
- //pa_log("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
+ //pa_log_debug("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
struct timespec start, end;
-
+ gettime(start);
do{
size_t input_remaining = u->target_samples-u->samples_gathered;
pa_assert(input_remaining>0);
@@ -565,15 +568,17 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_memblock_unref(tchunk.memblock);
}
tchunk.length = PA_MIN(input_remaining*fs, tchunk.length);
- pa_memblockq_drop(u->input_q,tchunk.length);
- //pa_log("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
+ pa_memblockq_drop(u->input_q, tchunk.length);
+ //pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
- gettime(start);
+ //gettime(start);
input_buffer(u, &tchunk);
- gettime(end);
- //pa_log("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
+ //gettime(end);
+ //pa_log_debug("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
pa_memblock_unref(tchunk.memblock);
}while(u->samples_gathered < u->R);
+ gettime(end);
+ pa_log_debug("Took %0.6f seconds to get data", tdiff(end, start)*1e-9);
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
@@ -584,12 +589,12 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
/* process a block */
process_samples(u,chunk);
gettime(end);
- //pa_log("Took %0.5f seconds to process", tdiff(end, start)*1e-9);
+ pa_log_debug("Took %0.6f seconds to process", tdiff(end, start)*1e-9);
pa_aupdate_read_end(u->a_H);
pa_assert(chunk->memblock);
- //pa_log("gave %ld", chunk->length/fs);
- //pa_log("end pop");
+ //pa_log_debug("gave %ld", chunk->length/fs);
+ //pa_log_debug("end pop");
return 0;
}
@@ -1090,25 +1095,39 @@ static pa_dbus_property_handler manager_handlers[MANAGER_HANDLER_MAX]={
[MANAGER_HANDLER_PROFILES]={.property_name="Profiles",.type="as",.get_cb=manager_get_profiles,.set_cb=NULL}
};
+pa_dbus_arg_info sink_args[]={
+ {"sink", "o", NULL}
+};
+
+enum manager_signal_index{
+ MANAGER_SIGNAL_SINK_ADDED,
+ MANAGER_SIGNAL_SINK_REMOVED,
+ MANAGER_SIGNAL_PROFILES_CHANGED,
+ MANAGER_SIGNAL_MAX
+};
+
+static pa_dbus_signal_info manager_signals[MANAGER_SIGNAL_MAX]={
+ [MANAGER_SIGNAL_SINK_ADDED]={.name="SinkAdded", .arguments=sink_args, .n_arguments=sizeof(sink_args)/sizeof(pa_dbus_arg_info)},
+ [MANAGER_SIGNAL_SINK_REMOVED]={.name="SinkRemoved", .arguments=sink_args, .n_arguments=sizeof(sink_args)/sizeof(pa_dbus_arg_info)},
+ [MANAGER_SIGNAL_PROFILES_CHANGED]={.name="ProfilesChanged", .arguments=NULL, .n_arguments=0}
+};
+
static pa_dbus_interface_info manager_info={
- .name=EXTNAME ".Manager",
+ .name=MANAGER_IFACE,
.method_handlers=manager_methods,
.n_method_handlers=MANAGER_METHOD_MAX,
.property_handlers=manager_handlers,
.n_property_handlers=MANAGER_HANDLER_MAX,
.get_all_properties_cb=manager_get_all,
- .signals=NULL,
- .n_signals=0
+ .signals=manager_signals,
+ .n_signals=MANAGER_SIGNAL_MAX
};
-
enum equalizer_method_index {
EQUALIZER_METHOD_FILTER_POINTS,
EQUALIZER_METHOD_SEED_FILTER,
EQUALIZER_METHOD_SAVE_PROFILE,
EQUALIZER_METHOD_LOAD_PROFILE,
- EQUALIZER_METHOD_SET_FILTER,
- EQUALIZER_METHOD_GET_FILTER,
EQUALIZER_METHOD_MAX
};
@@ -1117,6 +1136,7 @@ enum equalizer_handler_index {
EQUALIZER_HANDLER_SAMPLERATE,
EQUALIZER_HANDLER_FILTERSAMPLERATE,
EQUALIZER_HANDLER_N_COEFS,
+ EQUALIZER_HANDLER_FILTER,
EQUALIZER_HANDLER_MAX
};
@@ -1134,12 +1154,6 @@ pa_dbus_arg_info save_profile_args[]={
pa_dbus_arg_info load_profile_args[]={
{"name", "s","in"},
};
-pa_dbus_arg_info set_filter_args[]={
- {"coefficients", "ad","in"},
-};
-pa_dbus_arg_info get_filter_args[]={
- {"coefficients", "ad","out"},
-};
static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
[EQUALIZER_METHOD_SEED_FILTER]{
@@ -1162,16 +1176,6 @@ static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
.arguments=load_profile_args,
.n_arguments=sizeof(load_profile_args)/sizeof(pa_dbus_arg_info),
.receive_cb=equalizer_handle_load_profile},
- [EQUALIZER_METHOD_SET_FILTER]{
- .method_name="SetFilterCoefficients",
- .arguments=set_filter_args,
- .n_arguments=sizeof(set_filter_args)/sizeof(pa_dbus_arg_info),
- .receive_cb=equalizer_set_filter},
- [EQUALIZER_METHOD_GET_FILTER]{
- .method_name="GetFilterCoefficients",
- .arguments=get_filter_args,
- .n_arguments=sizeof(get_filter_args)/sizeof(pa_dbus_arg_info),
- .receive_cb=equalizer_get_filter}
};
static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
@@ -1179,22 +1183,29 @@ static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
[EQUALIZER_HANDLER_SAMPLERATE]{.property_name="SampleRate",.type="u",.get_cb=equalizer_get_sample_rate,.set_cb=NULL},
[EQUALIZER_HANDLER_FILTERSAMPLERATE]{.property_name="FilterSampleRate",.type="u",.get_cb=equalizer_get_filter_rate,.set_cb=NULL},
[EQUALIZER_HANDLER_N_COEFS]{.property_name="NFilterCoefficients",.type="u",.get_cb=equalizer_get_n_coefs,.set_cb=NULL},
+ [EQUALIZER_HANDLER_FILTER]{.property_name="Filter",.type="ad",.get_cb=equalizer_get_filter,.set_cb=equalizer_set_filter},
+};
+
+enum equalizer_signal_index{
+ EQUALIZER_SIGNAL_FILTER_CHANGED,
+ EQUALIZER_SIGNAL_SINK_RECONFIGURED,
+ EQUALIZER_SIGNAL_MAX
};
-//static pa_dbus_arg_info new_equalizer_args[] = { { "path","o",NULL} };
-//static pa_dbus_signal_info signals[SIGNAL_MAX] = {
-// [SIGNAL_NEW_EQUALIZER]={.name="NewEqualizer",.arguments=new_equalizer_args,.n_arguments=1}
-//};
+static pa_dbus_signal_info equalizer_signals[EQUALIZER_SIGNAL_MAX]={
+ [EQUALIZER_SIGNAL_FILTER_CHANGED]={.name="FilterChanged", .arguments=NULL, .n_arguments=0},
+ [EQUALIZER_SIGNAL_SINK_RECONFIGURED]={.name="SinkReconfigured", .arguments=NULL, .n_arguments=0},
+};
static pa_dbus_interface_info equalizer_info={
- .name=EXTNAME ".Equalizer",
+ .name=EQUALIZER_IFACE,
.method_handlers=equalizer_methods,
.n_method_handlers=EQUALIZER_METHOD_MAX,
.property_handlers=equalizer_handlers,
.n_property_handlers=EQUALIZER_HANDLER_MAX,
.get_all_properties_cb=equalizer_get_all,
- .signals=NULL,
- .n_signals=0
+ .signals=equalizer_signals,
+ .n_signals=EQUALIZER_SIGNAL_MAX
};
void dbus_init(struct userdata *u){
@@ -1202,8 +1213,8 @@ void dbus_init(struct userdata *u){
u->dbus_path=pa_sprintf_malloc("/org/pulseaudio/core1/sink%d", u->sink->index);
pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &equalizer_info, u);
- pa_idxset *sink_list=pa_shared_get(u->core,SINKLIST);
- u->database=pa_shared_get(u->core,EQDB);
+ pa_idxset *sink_list=pa_shared_get(u->core, SINKLIST);
+ u->database=pa_shared_get(u->core, EQDB);
if(sink_list==NULL){
sink_list=pa_idxset_new(&pa_idxset_trivial_hash_func, &pa_idxset_trivial_compare_func);
pa_shared_set(u->core, SINKLIST, sink_list);
@@ -1216,13 +1227,25 @@ void dbus_init(struct userdata *u){
pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
}
uint32_t dummy;
- pa_idxset_put(sink_list,u,&dummy);
+ pa_idxset_put(sink_list, u, &dummy);
+
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_SINK_ADDED].name)));
+ dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &u->dbus_path, DBUS_TYPE_INVALID);
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
}
void dbus_done(struct userdata *u){
pa_idxset *sink_list;
uint32_t dummy;
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_SINK_REMOVED].name)));
+ dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &u->dbus_path, DBUS_TYPE_INVALID);
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
+
pa_assert_se(sink_list=pa_shared_get(u->core,SINKLIST));
pa_idxset_remove_by_data(sink_list,u,&dummy);
if(pa_idxset_size(sink_list)==0){
@@ -1255,6 +1278,13 @@ void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void
}
remove_profile(c,name);
pa_dbus_send_empty_reply(conn, msg);
+
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_PROFILES_CHANGED].name)));
+ pa_dbus_protocol *dbus_protocol = pa_dbus_protocol_get(c);
+ pa_dbus_protocol_send_signal(dbus_protocol, signal);
+ pa_dbus_protocol_unref(dbus_protocol);
+ dbus_message_unref(signal);
}
void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
@@ -1262,62 +1292,85 @@ void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
}
-void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(_u);
-
- pa_core *c = (pa_core *)_u;
- pa_idxset *sink_list;
- uint32_t dummy;
+void get_sinks(pa_core *u, char ***names, unsigned *n_sinks){
+ pa_assert(u);
+ pa_assert(names);
+ pa_assert(n_sinks);
- pa_assert_se(sink_list = pa_shared_get(c, SINKLIST));
- unsigned n_sinks = (unsigned) pa_idxset_size(sink_list);
- char **names = NULL;
void *iter = NULL;
struct userdata *sink_u = NULL;
- pa_assert_se(names = pa_xnew0(char *,n_sinks));
- for(uint32_t i = 0; i < n_sinks; ++i){
- sink_u=(struct userdata *) pa_idxset_iterate(sink_list, &iter, &dummy);
- names[i] = sink_u->dbus_path;
+ uint32_t dummy;
+ pa_idxset *sink_list;
+ pa_assert_se(sink_list = pa_shared_get(u, SINKLIST));
+ *n_sinks = (unsigned) pa_idxset_size(sink_list);
+ pa_assert_se(*names = pa_xnew0(char *,*n_sinks));
+ for(uint32_t i = 0; i < *n_sinks; ++i){
+ sink_u = (struct userdata *) pa_idxset_iterate(sink_list, &iter, &dummy);
+ (*names)[i] = pa_xstrdup(sink_u->dbus_path);
}
- pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, names, n_sinks);
- pa_xfree(names);
}
-void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
+void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
- pa_core *core=_u;
- DBusMessage *reply = NULL;
- DBusMessageIter msg_iter, array_iter;
-
- pa_assert_se((reply = dbus_message_new_method_return(msg)));
- dbus_message_iter_init_append(reply, &msg_iter);
- pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "s", &array_iter));
+ unsigned n;
+ char **names = NULL;
+ get_sinks((pa_core *) _u, &names, &n);
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, names, n);
+ for(unsigned i = 0; i < n; ++i){
+ pa_xfree(names[i]);
+ }
+ pa_xfree(names);
+}
+void get_profiles(pa_core *c, char ***names, unsigned *n){
+ pa_assert(c);
+ pa_assert(names);
+ pa_assert(n);
char *name;
- pa_datum key,next_key;
- int done;
pa_database *database;
- pa_assert_se(database=pa_shared_get(core, EQDB));
- done = !pa_database_first(database, &key, NULL);
+ pa_assert_se(database = pa_shared_get(c, EQDB));
+ pa_datum key, next_key;
+ pa_strlist *head=NULL, *iter;
+ int done;
+ done = !pa_database_first(database, &key, NULL);
+ *n = 0;
while(!done){
done = !pa_database_next(database, &key, &next_key, NULL);
name=pa_xmalloc(key.size + 1);
memcpy(name, key.data, key.size);
name[key.size] = '\0';
pa_datum_free(&key);
- dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &name);
+ head = pa_strlist_prepend(head, name);
pa_xfree(name);
key = next_key;
+ (*n)++;
}
- dbus_message_iter_close_container(&msg_iter, &array_iter);
- pa_assert_se(dbus_connection_send(conn, reply, NULL));
- dbus_message_unref(reply);
+ (*names) = pa_xnew0(char *, *n);
+ iter=head;
+ for(unsigned i = 0; i < *n; ++i){
+ (*names)[*n-1-i]=pa_xstrdup(pa_strlist_data(iter));
+ iter=pa_strlist_next(iter);
+ }
+ pa_strlist_free(head);
+}
+
+void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(_u);
+
+ char **names;
+ unsigned n;
+ get_profiles((pa_core *)_u, &names, &n);
+ pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_STRING, names, n);
+ for(unsigned i = 0; i < n; ++i){
+ pa_xfree(names[i]);
+ }
+ pa_xfree(names);
}
void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
@@ -1325,54 +1378,31 @@ void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(msg);
pa_assert(_u);
- pa_core *u=(pa_core *) _u;
+ pa_core *c = (pa_core *)_u;
+ char **names = NULL;
+ unsigned n;
DBusMessage *reply = NULL;
- DBusMessageIter msg_iter, dict_iter, sub_iter, array_iter;
+ DBusMessageIter msg_iter, dict_iter;
pa_assert_se((reply = dbus_message_new_method_return(msg)));
dbus_message_iter_init_append(reply, &msg_iter);
pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
uint32_t rev=1;
- pa_idxset *sink_list;
pa_dbus_append_basic_variant_dict_entry(&dict_iter, manager_handlers[MANAGER_HANDLER_REVISION].property_name, DBUS_TYPE_UINT32, &rev);
- pa_assert_se(sink_list = pa_shared_get(u, SINKLIST));
- unsigned n_sinks = (unsigned) pa_idxset_size(sink_list);
- char **names = NULL;
- void *iter = NULL;
- struct userdata *sink_u = NULL;
- pa_assert_se(names = pa_xnew0(char *,n_sinks));
- for(uint32_t i = 0; i < n_sinks; ++i){
- unsigned dummy;
- sink_u=(struct userdata *) pa_idxset_iterate(sink_list, &iter, &dummy);
- names[i] = sink_u->dbus_path;
+ get_sinks(c, &names, &n);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter,manager_handlers[MANAGER_HANDLER_EQUALIZED_SINKS].property_name, DBUS_TYPE_OBJECT_PATH, names, n);
+ for(unsigned i = 0; i < n; ++i){
+ pa_xfree(names[i]);
}
- pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, manager_handlers[MANAGER_HANDLER_EQUALIZED_SINKS].property_name, DBUS_TYPE_OBJECT_PATH, names, n_sinks);
pa_xfree(names);
- pa_database *database;
- pa_assert_se(database=pa_shared_get(u, EQDB));
-
- pa_datum key,next_key;
- char *profile_name;
- int done;
- done = !pa_database_first(database, &key, NULL);
- dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY, NULL, &sub_iter);
- dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_STRING, &manager_handlers[MANAGER_HANDLER_PROFILES].property_name);
-
- dbus_message_iter_open_container(&sub_iter, DBUS_TYPE_ARRAY, "s", &array_iter);
- while(!done){
- done = !pa_database_next(database, &key, &next_key, NULL);
- profile_name=pa_xmalloc(key.size + 1);
- memcpy(profile_name, key.data, key.size);
- profile_name[key.size] = '\0';
- pa_datum_free(&key);
- dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, &profile_name);
- pa_xfree(profile_name);
- key = next_key;
+ get_profiles(c, &names, &n);
+ pa_dbus_append_basic_array_variant_dict_entry(&dict_iter, manager_handlers[MANAGER_HANDLER_PROFILES].property_name, DBUS_TYPE_STRING, names, n);
+ for(unsigned i = 0; i < n; ++i){
+ pa_xfree(names[i]);
}
- pa_assert_se(dbus_message_iter_close_container(&sub_iter, &array_iter));
- pa_assert_se(dbus_message_iter_close_container(&dict_iter, &sub_iter));
+ pa_xfree(names);
pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
pa_assert_se(dbus_connection_send(conn, reply, NULL));
dbus_message_unref(reply);
@@ -1412,11 +1442,14 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
dbus_error_free(&error);
return;
- }
- else if(x_npoints != y_npoints || x_npoints < 2 || x_npoints > u->fft_size / 2 +1 ){
+ }else if(x_npoints != y_npoints || x_npoints < 2 || x_npoints > u->fft_size / 2 +1 ){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs and ys must be the same length and 2<=l<=%ld!", u->fft_size / 2 + 1);
dbus_error_free(&error);
return;
+ }else if(xs[0] != 0 || xs[x_npoints-1] != u->fft_size / 2){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs[0] must be 0 and xs[-1]=fft_size/2");
+ dbus_error_free(&error);
+ return;
}
ys = pa_xmalloc(x_npoints * sizeof(float));
@@ -1435,6 +1468,11 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
//save_state(u);
pa_dbus_send_empty_reply(conn, msg);
+
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
}
void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
@@ -1500,6 +1538,11 @@ void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void
}
save_profile(u,name);
pa_dbus_send_empty_reply(conn, msg);
+
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_PROFILES_CHANGED].name)));
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
}
void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
@@ -1564,6 +1607,15 @@ void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u)
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &fft_size);
}
+void get_filter(struct userdata *u, double **H_){
+ *H_ = pa_xnew0(double, u->fft_size / 2 + 1);
+ float *H=u->Hs[pa_aupdate_read_begin(u->a_H)];
+ for(size_t i = 0;i < u->fft_size / 2 + 1; ++i){
+ (*H_)[i] = H[i] * u->fft_size;
+ }
+ pa_aupdate_read_end(u->a_H);
+}
+
void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
@@ -1585,6 +1637,10 @@ void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
+ double *H;
+ get_filter(u, &H);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTER].property_name, DBUS_TYPE_UINT32, &H);
+ pa_xfree(H);
pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
pa_assert_se(dbus_connection_send(conn, reply, NULL));
@@ -1597,44 +1653,46 @@ void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(_u);
struct userdata *u = (struct userdata *)_u;
-
- unsigned n_coefs = (unsigned) (u->fft_size / 2 + 1);
- double *H_ = (double *) pa_xmalloc0(n_coefs * sizeof(double));
-
- float *H=u->Hs[pa_aupdate_read_begin(u->a_H)];
- for(size_t i = 0;i < u->fft_size / 2 + 1; ++i){
- H_[i] = H[i] * u->fft_size;
- }
- pa_aupdate_read_end(u->a_H);
+ unsigned n_coefs = u->fft_size / 2 + 1;
+ double *H_;
+ get_filter(u, &H_);
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, H_, n_coefs);
pa_xfree(H_);
}
+void set_filter(struct userdata *u, double **H_){
+ float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
+ for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
+ H[i] = (float) (*H_)[i];
+ }
+ fix_filter(H, u->fft_size);
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
+}
+
void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
struct userdata *u=(struct userdata *)_u;
- double *H_;
+ double *H;
unsigned _n_coefs;
- if(pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H_, &_n_coefs)){
+ if(pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H, &_n_coefs)){
return;
}
if(_n_coefs!=u->fft_size / 2 + 1){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", u->fft_size / 2 + 1, _n_coefs);
return;
}
- float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
- for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- H[i] = (float) H_[i];
- }
- fix_filter(H, u->fft_size);
- pa_aupdate_write_swap(u->a_H);
- pa_aupdate_write_end(u->a_H);
-
+ set_filter(u, &H);
//Stupid for IO reasons? Add a save signal to dbus instead
//save_state(u);
pa_dbus_send_empty_reply(conn, msg);
+
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
}
commit 684ad6ddb7ab0e8ba11bf6df620b3cf9c1facf8a
Author: Jason Newton <nevion at gmail.com>
Date: Mon Aug 10 15:33:55 2009 -0700
module-equalizer-sink:
proper fix for pa_xmalloc(0) given that 0 is illegal
fix coefficients in case there's no resume state
loadprofile now signals filterchanged
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 88c1074..8049a99 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -991,9 +991,13 @@ int pa__init(pa_module*m) {
dbus_init(u);
//default filter to these
+ float *H=u->Hs[pa_aupdate_write_begin(u->a_H)];
for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- u->Hs[1][i]=u->Hs[0][i] = 1.0;
+ H[i] = 1.0 / sqrtf(2.0f);
}
+ fix_filter(H, u->fft_size);
+ pa_aupdate_write_swap(u->a_H);
+ pa_aupdate_write_end(u->a_H);
//load old parameters
load_state(u);
@@ -1303,7 +1307,7 @@ void get_sinks(pa_core *u, char ***names, unsigned *n_sinks){
pa_idxset *sink_list;
pa_assert_se(sink_list = pa_shared_get(u, SINKLIST));
*n_sinks = (unsigned) pa_idxset_size(sink_list);
- pa_assert_se(*names = pa_xnew0(char *,*n_sinks));
+ *names = *n_sinks > 0 ? pa_xnew0(char *,*n_sinks) : NULL;
for(uint32_t i = 0; i < *n_sinks; ++i){
sink_u = (struct userdata *) pa_idxset_iterate(sink_list, &iter, &dummy);
(*names)[i] = pa_xstrdup(sink_u->dbus_path);
@@ -1349,7 +1353,7 @@ void get_profiles(pa_core *c, char ***names, unsigned *n){
key = next_key;
(*n)++;
}
- (*names) = pa_xnew0(char *, *n);
+ (*names) = *n > 0 ? pa_xnew0(char *, *n) : NULL;
iter=head;
for(unsigned i = 0; i < *n; ++i){
(*names)[*n-1-i]=pa_xstrdup(pa_strlist_data(iter));
@@ -1569,6 +1573,11 @@ void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void
return;
}
pa_dbus_send_empty_reply(conn, msg);
+
+ DBusMessage *signal = NULL;
+ pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
}
void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
commit 8c2f9763df96550e06e94d8e985b24a9f6675677
Author: Jason Newton <nevion at gmail.com>
Date: Tue Aug 11 03:00:28 2009 -0700
module-equalizer-sink:
fix for peek returning a null memblock
pa_log -> pa_log_debug for fft size
updated module description
fixed a comment in dbus error for incorrect x positions
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 8049a99..270e73e 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -2,8 +2,8 @@
This file is part of PulseAudio.
This module is based off Lennart Poettering's LADSPA sink and swaps out
-LADSPA functionality for a STFT OLA based digital equalizer. All new work
-is published under Pulseaudio's original license.
+LADSPA functionality for a dbus-aware STFT OLA based digital equalizer.
+All new work is published under Pulseaudio's original license.
Copyright 2009 Jason Newton <nevion at gmail.com>
Original Author:
@@ -562,11 +562,13 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//buffer->index = 0;
//pa_memblock_ref(buffer->memblock);
//pa_sink_render_into(u->sink, buffer);
- while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
+ while(pa_memblockq_peek(u->input_q, &tchunk) < 0 || tchunk.memblock == NULL){
pa_sink_render(u->sink, input_remaining*fs, &tchunk);
+ pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
}
+ pa_assert(tchunk.memblock);
tchunk.length = PA_MIN(input_remaining*fs, tchunk.length);
pa_memblockq_drop(u->input_q, tchunk.length);
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
@@ -878,7 +880,7 @@ int pa__init(pa_module*m) {
u->channels = ss.channels;
u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
- pa_log("fft size: %ld", u->fft_size);
+ pa_log_debug("fft size: %ld", u->fft_size);
u->window_size = 15999;
u->R = (u->window_size+1)/2;
u->overlap_size = u->window_size-u->R;
@@ -1442,7 +1444,7 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
}
}
if(!is_monotonic(xs,x_npoints) || !points_good){
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs must be monotonic and 0<x<%ld", u->fft_size / 2);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs must be monotonic and 0<=x<=%ld", u->fft_size / 2);
dbus_error_free(&error);
return;
commit 38d608ad5a0a3fa0ff7f93007dde46d8661348c3
Author: Jason Newton <nevion at gmail.com>
Date: Sat Aug 15 05:22:29 2009 -0700
module-equalizer-sink:
reworked processing so we don't have input->output delay of R samples
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 270e73e..5f16cd6 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -103,7 +103,6 @@ struct userdata {
size_t samples_gathered;
size_t max_output;//max amount of samples outputable in a single
//message
- size_t target_samples;
float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
float *work_buffer, **input, **overlap_accum;
@@ -115,6 +114,7 @@ struct userdata {
pa_aupdate *a_H;
pa_memchunk conv_buffer;
pa_memblockq *input_q;
+ int first_iteration;
pa_dbus_protocol *dbus_protocol;
char *dbus_path;
@@ -135,11 +135,13 @@ static const char* const valid_modargs[] = {
static uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
static void hanning_window(float *W, size_t window_size);
-void fix_filter(float *H, size_t fft_size);
-void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points);
+static void fix_filter(float *H, size_t fft_size);
+static void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points);
static void array_out(const char *name, float *a, size_t length);
static int is_monotonic(uint32_t *xs, size_t length);
+static void reset_filter(struct userdata *u);
static void process_samples(struct userdata *u, pa_memchunk *tchunk);
+static void initialize_buffer(struct userdata *u, pa_memchunk *in);
static void input_buffer(struct userdata *u, pa_memchunk *in);
static void save_profile(struct userdata *u,char *name);
static void save_state(struct userdata *u);
@@ -274,13 +276,13 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
case PA_SINK_MESSAGE_GET_LATENCY: {
pa_usec_t usec = 0;
pa_sample_spec *ss=&u->sink->sample_spec;
- //size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
/* Get the latency of the master sink */
if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
usec = 0;
- //usec += pa_bytes_to_usec(u->latency * fs, ss);
+ usec += pa_bytes_to_usec(u->latency * fs, ss);
//usec += pa_bytes_to_usec(u->samples_gathered * fs, ss);
usec += pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), ss);
/* Add the latency internal to our sink input on top */
@@ -340,10 +342,10 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
size_t fs=pa_frame_size(&(u->sink->sample_spec));
pa_assert(u->samples_gathered >= u->R);
float *dst;
- tchunk->index=0;
- tchunk->length=u->R*fs;
- tchunk->memblock=pa_memblock_new(u->core->mempool, tchunk->length);
- dst=((float*)pa_memblock_acquire(tchunk->memblock));
+ tchunk->index = 0;
+ tchunk->length = u->R * fs;
+ tchunk->memblock = pa_memblock_new(u->core->mempool, tchunk->length);
+ dst = ((float*)pa_memblock_acquire(tchunk->memblock));
for(size_t c=0;c < u->channels; c++) {
dsp_logic(
u->work_buffer,
@@ -354,13 +356,21 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
u->output_window,
u
);
+ if(u->first_iteration){
+ /* The windowing function will make the audio ramped in, as a cheap fix we can
+ * undo the windowing (for non-zero window values)
+ */
+ for(size_t i = 0;i < u->overlap_size; ++i){
+ u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->W[i] : u->work_buffer[i] / u->W[i];
+ }
+ }
pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
}
pa_memblock_release(tchunk->memblock);
- u->samples_gathered-=u->R;
+ u->samples_gathered-= u->R;
}
-typedef float v4sf __attribute__ ((__aligned__(v_size*sizeof(float))));
+typedef float v4sf __attribute__ ((__aligned__(v_size * sizeof(float))));
typedef union float_vector {
float f[v_size];
v4sf v;
@@ -516,20 +526,34 @@ void dsp_logic(
// );
//}
+void initialize_buffer(struct userdata *u, pa_memchunk *in){
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ size_t samples = in->length/fs;
+ pa_assert_se(u->samples_gathered + samples == u->window_size);
+ float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
+ for(size_t c = 0; c < u->channels; c++) {
+ //buffer with an offset after the overlap from previous
+ //iterations
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->samples_gathered, sizeof(float), src + c, fs, samples);
+ }
+ u->samples_gathered+=samples;
+ pa_memblock_release(in->memblock);
+}
+
void input_buffer(struct userdata *u, pa_memchunk *in){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
size_t samples = in->length/fs;
- pa_assert_se(samples <= u->target_samples-u->samples_gathered);
+ pa_assert_se(samples <= u->window_size - u->samples_gathered);
float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
for(size_t c = 0; c < u->channels; c++) {
//buffer with an offset after the overlap from previous
//iterations
pa_assert_se(
- u->input[c]+u->overlap_size+u->samples_gathered+samples <= u->input[c]+u->overlap_size+u->target_samples
+ u->input[c]+u->overlap_size+u->samples_gathered+samples <= u->input[c]+u->window_size
);
pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->overlap_size+u->samples_gathered, sizeof(float), src + c, fs, samples);
}
- u->samples_gathered+=samples;
+ u->samples_gathered += samples;
pa_memblock_release(in->memblock);
}
@@ -553,8 +577,8 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
struct timespec start, end;
gettime(start);
do{
- size_t input_remaining = u->target_samples-u->samples_gathered;
- pa_assert(input_remaining>0);
+ size_t input_remaining = u->window_size - u->samples_gathered;
+ pa_assert(input_remaining > 0);
//collect samples
//buffer = &u->conv_buffer;
@@ -563,7 +587,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_memblock_ref(buffer->memblock);
//pa_sink_render_into(u->sink, buffer);
while(pa_memblockq_peek(u->input_q, &tchunk) < 0 || tchunk.memblock == NULL){
- pa_sink_render(u->sink, input_remaining*fs, &tchunk);
+ pa_sink_render_full(u->sink, input_remaining*fs, &tchunk);
pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
@@ -574,11 +598,15 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
//gettime(start);
- input_buffer(u, &tchunk);
+ if(u->first_iteration){
+ initialize_buffer(u, &tchunk);
+ }else{
+ input_buffer(u, &tchunk);
+ }
//gettime(end);
//pa_log_debug("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
pa_memblock_unref(tchunk.memblock);
- }while(u->samples_gathered < u->R);
+ }while(u->samples_gathered <= u->window_size);
gettime(end);
pa_log_debug("Took %0.6f seconds to get data", tdiff(end, start)*1e-9);
@@ -597,6 +625,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(chunk->memblock);
//pa_log_debug("gave %ld", chunk->length/fs);
//pa_log_debug("end pop");
+ if(u->first_iteration){
+ u->first_iteration = 0;
+ }
return 0;
}
@@ -627,8 +658,8 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
//pa_memblockq_drop(u->input_q, pa_memblockq_get_length(u->input_q));
//pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
- pa_log_debug("Resetting equalizer");
- u->samples_gathered = 0;
+ pa_log("Resetting filter");
+ reset_filter(u);
}
}
@@ -636,6 +667,14 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
pa_memblockq_rewind(u->input_q, nbytes);
}
+void reset_filter(struct userdata *u){
+ u->samples_gathered = 0;
+ for(size_t i = 0;i < u->channels; ++i){
+ memset(u->overlap_accum[i], 0, u->overlap_size * sizeof(float));
+ }
+ u->first_iteration = 1;
+}
+
/* Called from I/O thread context */
static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
struct userdata *u;
@@ -882,15 +921,13 @@ int pa__init(pa_module*m) {
u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
pa_log_debug("fft size: %ld", u->fft_size);
u->window_size = 15999;
- u->R = (u->window_size+1)/2;
- u->overlap_size = u->window_size-u->R;
- u->target_samples = 1*u->R;
+ u->R = (u->window_size + 1) / 2;
+ u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
- u->max_output = pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss)/pa_frame_size(&ss);
+ u->max_output = pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss) / pa_frame_size(&ss);
u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
u->a_H = pa_aupdate_new();
- u->conv_buffer.memblock = pa_memblock_new(u->core->mempool, u->target_samples*fs);
- u->latency = u->R;
+ u->latency = u->window_size - u->R;
for(size_t i = 0; i < 2; ++i){
u->Hs[i] = alloc((u->fft_size / 2 + 1), sizeof(float));
}
@@ -900,9 +937,9 @@ int pa__init(pa_module*m) {
u->input = (float **)pa_xmalloc0(sizeof(float *)*u->channels);
u->overlap_accum = (float **)pa_xmalloc0(sizeof(float *)*u->channels);
for(size_t c = 0; c < u->channels; ++c){
- u->input[c] = alloc(u->overlap_size+u->target_samples, sizeof(float));
+ u->input[c] = alloc(u->window_size, sizeof(float));
pa_assert_se(u->input[c]);
- memset(u->input[c], 0, (u->overlap_size+u->target_samples)*sizeof(float));
+ memset(u->input[c], 0, (u->window_size)*sizeof(float));
pa_assert_se(u->input[c]);
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
pa_assert_se(u->overlap_accum[c]);
@@ -913,6 +950,7 @@ int pa__init(pa_module*m) {
u->inverse_plan = fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
hanning_window(u->W, u->window_size);
+ u->first_iteration = 1;
/* Create sink */
pa_sink_new_data_init(&sink_data);
@@ -1048,7 +1086,6 @@ void pa__done(pa_module*m) {
}
pa_aupdate_free(u->a_H);
- pa_memblock_unref(u->conv_buffer.memblock);
pa_memblockq_free(u->input_q);
fftwf_destroy_plan(u->inverse_plan);
commit 0e6711ddd0659d62613e8812b33e36d581875ba0
Author: Jason Newton <nevion at gmail.com>
Date: Sat Aug 15 06:17:40 2009 -0700
module-equalizer-sink:
merging in upstream changes
whitespace fix and fix for first iteration un-windowing
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 5f16cd6..944aa7a 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -81,9 +81,8 @@ PA_MODULE_USAGE(_("sink=<sink to connect to> "));
struct userdata {
- pa_core *core;
pa_module *module;
- pa_sink *sink, *master;
+ pa_sink *sink;
pa_sink_input *sink_input;
char *name;
@@ -101,7 +100,6 @@ struct userdata {
//for twiddling with pulseaudio
size_t overlap_size;//window_size-R
size_t samples_gathered;
- size_t max_output;//max amount of samples outputable in a single
//message
float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
@@ -274,20 +272,26 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
switch (code) {
case PA_SINK_MESSAGE_GET_LATENCY: {
- pa_usec_t usec = 0;
- pa_sample_spec *ss=&u->sink->sample_spec;
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
-
- /* Get the latency of the master sink */
- if (PA_MSGOBJECT(u->master)->process_msg(PA_MSGOBJECT(u->master), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
- usec = 0;
-
- usec += pa_bytes_to_usec(u->latency * fs, ss);
- //usec += pa_bytes_to_usec(u->samples_gathered * fs, ss);
- usec += pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), ss);
- /* Add the latency internal to our sink input on top */
- usec += pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->master->sample_spec);
- *((pa_usec_t*) data) = usec;
+ size_t fs=pa_frame_size(&u->sink->sample_spec);
+
+ /* The sink is _put() before the sink input is, so let's
+ * make sure we don't access it in that time. Also, the
+ * sink input is first shut down, the sink second. */
+ if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
+ !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
+ *((pa_usec_t*) data) = 0;
+ return 0;
+ }
+
+ *((pa_usec_t*) data) =
+ /* Get the latency of the master sink */
+ pa_sink_get_latency_within_thread(u->sink_input->sink) +
+
+ /* Add the latency internal to our sink input on top */
+ pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec) +
+ pa_bytes_to_usec(u->samples_gathered * fs, &u->sink->sample_spec);
+ //+ pa_bytes_to_usec(u->latency * fs, ss)
+ //+ pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), ss);
return 0;
}
}
@@ -303,12 +307,11 @@ static int sink_set_state(pa_sink *s, pa_sink_state_t state) {
pa_sink_assert_ref(s);
pa_assert_se(u = s->userdata);
- if (PA_SINK_IS_LINKED(state) &&
- u->sink_input &&
- PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
-
- pa_sink_input_cork(u->sink_input, state == PA_SINK_SUSPENDED);
+ if (!PA_SINK_IS_LINKED(state) ||
+ !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+ return 0;
+ pa_sink_input_cork(u->sink_input, state == PA_SINK_SUSPENDED);
return 0;
}
@@ -319,7 +322,9 @@ static void sink_request_rewind(pa_sink *s) {
pa_sink_assert_ref(s);
pa_assert_se(u = s->userdata);
- //pa_memblockq_drop(u->input_q,pa_memblockq_get_length(u->input_q));
+ if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
+ !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state))
+ return;
/* Just hand this one over to the master sink */
pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes+pa_memblockq_get_length(u->input_q), TRUE, FALSE, FALSE);
@@ -332,6 +337,10 @@ static void sink_update_requested_latency(pa_sink *s) {
pa_sink_assert_ref(s);
pa_assert_se(u = s->userdata);
+ if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
+ !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state))
+ return;
+
/* Just hand this one over to the master sink */
pa_sink_input_set_requested_latency_within_thread(
u->sink_input,
@@ -344,7 +353,7 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
float *dst;
tchunk->index = 0;
tchunk->length = u->R * fs;
- tchunk->memblock = pa_memblock_new(u->core->mempool, tchunk->length);
+ tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
dst = ((float*)pa_memblock_acquire(tchunk->memblock));
for(size_t c=0;c < u->channels; c++) {
dsp_logic(
@@ -361,7 +370,7 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
* undo the windowing (for non-zero window values)
*/
for(size_t i = 0;i < u->overlap_size; ++i){
- u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->W[i] : u->work_buffer[i] / u->W[i];
+ u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->work_buffer[i] : u->work_buffer[i] / u->W[i];
}
}
pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
@@ -529,7 +538,7 @@ void dsp_logic(
void initialize_buffer(struct userdata *u, pa_memchunk *in){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
size_t samples = in->length/fs;
- pa_assert_se(u->samples_gathered + samples == u->window_size);
+ pa_assert_se(u->samples_gathered + samples <= u->window_size);
float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
for(size_t c = 0; c < u->channels; c++) {
//buffer with an offset after the overlap from previous
@@ -549,7 +558,7 @@ void input_buffer(struct userdata *u, pa_memchunk *in){
//buffer with an offset after the overlap from previous
//iterations
pa_assert_se(
- u->input[c]+u->overlap_size+u->samples_gathered+samples <= u->input[c]+u->window_size
+ u->input[c]+u->samples_gathered+samples <= u->input[c]+u->window_size
);
pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->overlap_size+u->samples_gathered, sizeof(float), src + c, fs, samples);
}
@@ -561,14 +570,12 @@ void input_buffer(struct userdata *u, pa_memchunk *in){
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
pa_assert(chunk);
- pa_assert(u = i->userdata);
pa_assert(u->sink);
size_t fs = pa_frame_size(&(u->sink->sample_spec));
pa_memchunk tchunk;
chunk->memblock = NULL;
- if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
- return -1;
/* Hmm, process any rewind request that might be queued up */
pa_sink_process_rewind(u->sink, 0);
@@ -587,13 +594,13 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_memblock_ref(buffer->memblock);
//pa_sink_render_into(u->sink, buffer);
while(pa_memblockq_peek(u->input_q, &tchunk) < 0 || tchunk.memblock == NULL){
- pa_sink_render_full(u->sink, input_remaining*fs, &tchunk);
+ pa_sink_render(u->sink, input_remaining*fs, &tchunk);
pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
}
pa_assert(tchunk.memblock);
- tchunk.length = PA_MIN(input_remaining*fs, tchunk.length);
+ tchunk.length = PA_MIN(input_remaining * fs, tchunk.length);
pa_memblockq_drop(u->input_q, tchunk.length);
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
@@ -606,7 +613,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//gettime(end);
//pa_log_debug("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
pa_memblock_unref(tchunk.memblock);
- }while(u->samples_gathered <= u->window_size);
+ }while(u->samples_gathered < u->window_size);
gettime(end);
pa_log_debug("Took %0.6f seconds to get data", tdiff(end, start)*1e-9);
@@ -617,7 +624,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
u->H = u->Hs[H_i];
gettime(start);
/* process a block */
- process_samples(u,chunk);
+ process_samples(u, chunk);
gettime(end);
pa_log_debug("Took %0.6f seconds to process", tdiff(end, start)*1e-9);
pa_aupdate_read_end(u->a_H);
@@ -640,9 +647,6 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
- return;
-
if (u->sink->thread_info.rewind_nbytes > 0) {
size_t max_rewrite;
@@ -682,9 +686,6 @@ static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
- return;
-
pa_memblockq_set_maxrewind(u->input_q, nbytes);
pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
}
@@ -696,9 +697,6 @@ static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
- return;
-
size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_max_request_within_thread(u->sink, nbytes);
//pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
@@ -712,26 +710,30 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
- return;
-
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs );
pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
/* Called from I/O thread context */
-static void sink_input_detach_cb(pa_sink_input *i) {
+static void sink_input_update_sink_fixed_latency_cb(pa_sink_input *i) {
struct userdata *u;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
- return;
+ pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
+}
+
+/* Called from I/O thread context */
+static void sink_input_detach_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
pa_sink_detach_within_thread(u->sink);
- pa_sink_set_asyncmsgq(u->sink, NULL);
+
pa_sink_set_rtpoll(u->sink, NULL);
}
@@ -742,11 +744,10 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- if (!u->sink || !PA_SINK_IS_LINKED(u->sink->thread_info.state))
- return;
+ pa_sink_set_rtpoll(u->sink, i->sink->thread_info.rtpoll);
+ pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
- pa_sink_set_asyncmsgq(u->sink, i->sink->asyncmsgq);
- pa_sink_set_rtpoll(u->sink, i->sink->rtpoll);
+ pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
pa_sink_attach_within_thread(u->sink);
//size_t fs = pa_frame_size(&(u->sink->sample_spec));
@@ -756,7 +757,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
//of them completely, figure out why
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
//TODO: this guy causes dropouts constantly+rewinds, it's unusable
- pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+ //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+ pa_sink_attach_within_thread(u->sink);
}
/* Called from main context */
@@ -766,14 +768,18 @@ static void sink_input_kill_cb(pa_sink_input *i) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- pa_sink_unlink(u->sink);
+ /* The order here matters! We first kill the sink input, followed
+ * by the sink. That means the sink callbacks must be protected
+ * against an unconnected sink input! */
pa_sink_input_unlink(u->sink_input);
+ pa_sink_unlink(u->sink);
- pa_sink_unref(u->sink);
- u->sink = NULL;
pa_sink_input_unref(u->sink_input);
u->sink_input = NULL;
+ pa_sink_unref(u->sink);
+ u->sink = NULL;
+
pa_module_unload_request(u->module, TRUE);
}
@@ -863,6 +869,16 @@ static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
return u->sink != dest;
}
+/* Called from main context */
+static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
+ pa_sink_update_flags(u->sink, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
+}
//ensure's memory allocated is a multiple of v_size
//and aligned
@@ -910,12 +926,8 @@ int pa__init(pa_module*m) {
fs = pa_frame_size(&ss);
u = pa_xnew0(struct userdata, 1);
- u->core = m->core;
u->module = m;
m->userdata = u;
- u->master = master;
- u->sink = NULL;
- u->sink_input = NULL;
u->channels = ss.channels;
u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
@@ -924,7 +936,6 @@ int pa__init(pa_module*m) {
u->R = (u->window_size + 1) / 2;
u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
- u->max_output = pa_frame_align(pa_mempool_block_size_max(m->core->mempool), &ss) / pa_frame_size(&ss);
u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
u->a_H = pa_aupdate_new();
u->latency = u->window_size - u->R;
@@ -958,11 +969,10 @@ int pa__init(pa_module*m) {
sink_data.module = m;
if (!(sink_data.name = pa_xstrdup(pa_modargs_get_value(ma, "sink_name", NULL))))
sink_data.name = pa_sprintf_malloc("%s.equalizer", master->name);
- sink_data.namereg_fail = FALSE;
pa_sink_new_data_set_sample_spec(&sink_data, &ss);
pa_sink_new_data_set_channel_map(&sink_data, &map);
z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
- pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "FFT based equalizer");
+ pa_proplist_setf(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "FFT based equalizer on %s",z? z: master->name);
pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS, "filter");
@@ -972,7 +982,7 @@ int pa__init(pa_module*m) {
goto fail;
}
- u->sink = pa_sink_new(m->core, &sink_data, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY);
+ u->sink = pa_sink_new(m->core, &sink_data, master->flags & (PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY));
pa_sink_new_data_done(&sink_data);
if (!u->sink) {
@@ -987,7 +997,6 @@ int pa__init(pa_module*m) {
u->sink->userdata = u;
pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
- pa_sink_set_rtpoll(u->sink, master->rtpoll);
pa_sink_set_max_request(u->sink,
((pa_sink_get_max_request(u->sink)+u->R*fs-1)/(u->R*fs))*(u->R*fs)
);
@@ -997,13 +1006,13 @@ int pa__init(pa_module*m) {
pa_sink_input_new_data_init(&sink_input_data);
sink_input_data.driver = __FILE__;
sink_input_data.module = m;
- sink_input_data.sink = u->master;
+ sink_input_data.sink = master;
pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_NAME, "Equalized Stream");
pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
- pa_sink_input_new(&u->sink_input, m->core, &sink_input_data, PA_SINK_INPUT_DONT_MOVE);
+ pa_sink_input_new(&u->sink_input, m->core, &sink_input_data, 0);
pa_sink_input_new_data_done(&sink_input_data);
if (!u->sink_input)
@@ -1014,11 +1023,13 @@ int pa__init(pa_module*m) {
u->sink_input->update_max_rewind = sink_input_update_max_rewind_cb;
u->sink_input->update_max_request = sink_input_update_max_request_cb;
u->sink_input->update_sink_latency_range = sink_input_update_sink_latency_range_cb;
+ u->sink_input->update_sink_fixed_latency = sink_input_update_sink_fixed_latency_cb;
u->sink_input->kill = sink_input_kill_cb;
u->sink_input->attach = sink_input_attach_cb;
u->sink_input->detach = sink_input_detach_cb;
u->sink_input->state_change = sink_input_state_change_cb;
u->sink_input->may_move_to = sink_input_may_move_to_cb;
+ u->sink_input->moving = sink_input_moving_cb;
u->sink_input->userdata = u;
pa_sink_put(u->sink);
@@ -1075,15 +1086,20 @@ void pa__done(pa_module*m) {
dbus_done(u);
- if (u->sink) {
- pa_sink_unlink(u->sink);
- pa_sink_unref(u->sink);
- }
+ /* See comments in sink_input_kill_cb() above regarding
+ * destruction order! */
- if (u->sink_input) {
+ if (u->sink_input)
pa_sink_input_unlink(u->sink_input);
+
+ if (u->sink)
+ pa_sink_unlink(u->sink);
+
+ if (u->sink_input)
pa_sink_input_unref(u->sink_input);
- }
+
+ if (u->sink)
+ pa_sink_unref(u->sink);
pa_aupdate_free(u->a_H);
pa_memblockq_free(u->input_q);
@@ -1252,21 +1268,21 @@ static pa_dbus_interface_info equalizer_info={
};
void dbus_init(struct userdata *u){
- u->dbus_protocol=pa_dbus_protocol_get(u->core);
+ u->dbus_protocol=pa_dbus_protocol_get(u->sink->core);
u->dbus_path=pa_sprintf_malloc("/org/pulseaudio/core1/sink%d", u->sink->index);
pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &equalizer_info, u);
- pa_idxset *sink_list=pa_shared_get(u->core, SINKLIST);
- u->database=pa_shared_get(u->core, EQDB);
+ pa_idxset *sink_list=pa_shared_get(u->sink->core, SINKLIST);
+ u->database=pa_shared_get(u->sink->core, EQDB);
if(sink_list==NULL){
sink_list=pa_idxset_new(&pa_idxset_trivial_hash_func, &pa_idxset_trivial_compare_func);
- pa_shared_set(u->core, SINKLIST, sink_list);
+ pa_shared_set(u->sink->core, SINKLIST, sink_list);
char *dbname;
pa_assert_se(dbname = pa_state_path("equalizers", TRUE));
pa_assert_se(u->database = pa_database_open(dbname, TRUE));
pa_xfree(dbname);
- pa_shared_set(u->core,EQDB,u->database);
- pa_dbus_protocol_add_interface(u->dbus_protocol, MANAGER_PATH, &manager_info, u->core);
+ pa_shared_set(u->sink->core,EQDB,u->database);
+ pa_dbus_protocol_add_interface(u->dbus_protocol, MANAGER_PATH, &manager_info, u->sink->core);
pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
}
uint32_t dummy;
@@ -1289,14 +1305,14 @@ void dbus_done(struct userdata *u){
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
- pa_assert_se(sink_list=pa_shared_get(u->core,SINKLIST));
+ pa_assert_se(sink_list=pa_shared_get(u->sink->core,SINKLIST));
pa_idxset_remove_by_data(sink_list,u,&dummy);
if(pa_idxset_size(sink_list)==0){
pa_dbus_protocol_unregister_extension(u->dbus_protocol, EXTNAME);
pa_dbus_protocol_remove_interface(u->dbus_protocol, MANAGER_PATH, manager_info.name);
- pa_shared_remove(u->core, EQDB);
+ pa_shared_remove(u->sink->core, EQDB);
pa_database_close(u->database);
- pa_shared_remove(u->core, SINKLIST);
+ pa_shared_remove(u->sink->core, SINKLIST);
pa_xfree(sink_list);
}
pa_dbus_protocol_remove_interface(u->dbus_protocol, u->dbus_path, equalizer_info.name);
commit 1c1a812b32897a6aa217bbe381e9e82f3b2728fc
Author: Jason Newton <nevion at gmail.com>
Date: Sun Aug 16 11:38:12 2009 -0700
module-equalizer-sink
exchanged improper usage of memblockq_peek'd memchunk for silence block
dropped unneeded function prototypes
changed mround to be slightly more elegant
__restrict__ -> restrict for c99
removed unneeded pa_aupdate_swap calls
first_iteration -> pa_bool_t
cleaned up some usage of pa_malloc0 where pa_new0 was more appropriate
cruft removal, whitespace fixes and reordering of variables
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 944aa7a..b7f61c6 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -38,7 +38,9 @@ USA.
#include <pulse/xmalloc.h>
#include <pulse/i18n.h>
+#include <pulse/timeval.h>
+#include <pulsecore/aupdate.h>
#include <pulsecore/core-error.h>
#include <pulsecore/namereg.h>
#include <pulsecore/sink.h>
@@ -112,7 +114,7 @@ struct userdata {
pa_aupdate *a_H;
pa_memchunk conv_buffer;
pa_memblockq *input_q;
- int first_iteration;
+ pa_bool_t first_iteration;
pa_dbus_protocol *dbus_protocol;
char *dbus_path;
@@ -131,103 +133,43 @@ static const char* const valid_modargs[] = {
NULL
};
-static uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p);
-static void hanning_window(float *W, size_t window_size);
-static void fix_filter(float *H, size_t fft_size);
-static void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points);
-static void array_out(const char *name, float *a, size_t length);
-static int is_monotonic(uint32_t *xs, size_t length);
-static void reset_filter(struct userdata *u);
-static void process_samples(struct userdata *u, pa_memchunk *tchunk);
-static void initialize_buffer(struct userdata *u, pa_memchunk *in);
-static void input_buffer(struct userdata *u, pa_memchunk *in);
-static void save_profile(struct userdata *u,char *name);
-static void save_state(struct userdata *u);
-static void remove_profile(pa_core *u,char *name);
-static const char * load_profile(struct userdata *u,char *name);
-static void load_state(struct userdata *u);
-
-void dsp_logic(
- float * __restrict__ dst,
- float * __restrict__ src,
- float * __restrict__ overlap,
- const float * __restrict__ H,
- const float * __restrict__ W,
- fftwf_complex * __restrict__ output_window,
- struct userdata *u);
-
-
-/*
- * DBus Routines and Callbacks
- */
-#define EXTNAME "org.PulseAudio.Ext.Equalizing1"
-#define MANAGER_PATH "/org/pulseaudio/equalizing1"
-#define MANAGER_IFACE EXTNAME ".Manager"
-#define EQUALIZER_IFACE EXTNAME ".Equalizer"
-static void dbus_init(struct userdata *u);
-static void dbus_done(struct userdata *u);
-static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_sinks(pa_core *u, char ***names, unsigned *n_sinks);
-static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_profiles(pa_core *u, char ***names, unsigned *n_sinks);
-static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_filter(struct userdata *u, double **H_);
-static void set_filter(struct userdata *u, double **H_);
#define v_size 4
-#define gettime(x) clock_gettime(CLOCK_MONOTONIC, &x)
-#define tdiff(x, y) time_diff(&x, &y)
-#define mround(x, y) (x % y == 0 ? x : ( x / y + 1) * y)
+#define mround(x, y) ((x + y - 1) / y) * y
#define SINKLIST "equalized_sinklist"
#define EQDB "equalizer_db"
+static void dbus_init(struct userdata *u);
+static void dbus_done(struct userdata *u);
-uint64_t time_diff(struct timespec *timeA_p, struct timespec *timeB_p)
-{
- return ((timeA_p->tv_sec * 1000000000ULL) + timeA_p->tv_nsec) -
- ((timeB_p->tv_sec * 1000000000ULL) + timeB_p->tv_nsec);
-}
-
-void hanning_window(float *W, size_t window_size){
+static void hanning_window(float *W, size_t window_size){
//h=.5*(1-cos(2*pi*j/(window_size+1)), COLA for R=(M+1)/2
for(size_t i=0; i < window_size;++i){
W[i] = (float).5*(1-cos(2*M_PI*i/(window_size+1)));
}
}
-void fix_filter(float *H, size_t fft_size){
+static void fix_filter(float *H, size_t fft_size){
//divide out the fft gain
for(size_t i = 0; i < fft_size / 2 + 1; ++i){
H[i] /= fft_size;
}
}
-void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points){
+static void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n_points){
//Note that xs must be monotonically increasing!
+ float x_range_lower, x_range_upper, c0;
pa_assert_se(n_points>=2);
pa_assert_se(xs[0] == 0);
pa_assert_se(xs[n_points - 1] == length - 1);
for(size_t x = 0, x_range_lower_i = 0; x < length-1; ++x){
pa_assert(x_range_lower_i < n_points-1);
- float x_range_lower = (float) (xs[x_range_lower_i]);
- float x_range_upper = (float) (xs[x_range_lower_i+1]);
+ x_range_lower = (float) (xs[x_range_lower_i]);
+ x_range_upper = (float) (xs[x_range_lower_i+1]);
pa_assert_se(x_range_lower < x_range_upper);
pa_assert_se(x >= x_range_lower);
pa_assert_se(x <= x_range_upper);
//bilinear-interpolation of coefficients specified
- float c0 = (x-x_range_lower)/(x_range_upper-x_range_lower);
+ c0 = (x-x_range_lower)/(x_range_upper-x_range_lower);
pa_assert_se(c0 >= 0&&c0 <= 1.0);
signal[x] = ((1.0f - c0) * ys[x_range_lower_i] + c0 * ys[x_range_lower_i + 1]);
while(x >= xs[x_range_lower_i + 1]){
@@ -237,22 +179,7 @@ void interpolate(float *signal, size_t length, uint32_t *xs, float *ys, size_t n
signal[length-1]=ys[n_points-1];
}
-void array_out(const char *name, float *a, size_t length){
- FILE *p=fopen(name, "w");
- if(!p){
- pa_log("opening %s failed!", name);
- return;
- }
- for(size_t i = 0; i < length; ++i){
- fprintf(p, "%e,", a[i]);
- //if(i%1000==0){
- // fprintf(p, "\n");
- //}
- }
- fprintf(p, "\n");
- fclose(p);
-}
-static int is_monotonic(uint32_t *xs,size_t length){
+static int is_monotonic(const uint32_t *xs,size_t length){
if(length<2){
return 1;
}
@@ -347,38 +274,6 @@ static void sink_update_requested_latency(pa_sink *s) {
pa_sink_get_requested_latency_within_thread(s));
}
-static void process_samples(struct userdata *u, pa_memchunk *tchunk){
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
- pa_assert(u->samples_gathered >= u->R);
- float *dst;
- tchunk->index = 0;
- tchunk->length = u->R * fs;
- tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
- dst = ((float*)pa_memblock_acquire(tchunk->memblock));
- for(size_t c=0;c < u->channels; c++) {
- dsp_logic(
- u->work_buffer,
- u->input[c],
- u->overlap_accum[c],
- u->H,
- u->W,
- u->output_window,
- u
- );
- if(u->first_iteration){
- /* The windowing function will make the audio ramped in, as a cheap fix we can
- * undo the windowing (for non-zero window values)
- */
- for(size_t i = 0;i < u->overlap_size; ++i){
- u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->work_buffer[i] : u->work_buffer[i] / u->W[i];
- }
- }
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
- }
- pa_memblock_release(tchunk->memblock);
- u->samples_gathered-= u->R;
-}
-
typedef float v4sf __attribute__ ((__aligned__(v_size * sizeof(float))));
typedef union float_vector {
float f[v_size];
@@ -389,15 +284,15 @@ typedef union float_vector {
} float_vector_t;
//reference implementation
-void dsp_logic(
- float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
- float * __restrict__ src,/*input data w/ overlap at start,
+static void dsp_logic(
+ float * restrict dst,//used as a temp array too, needs to be fft_length!
+ float * restrict src,/*input data w/ overlap at start,
*automatically cycled in routine
*/
- float * __restrict__ overlap,//The size of the overlap
- const float * __restrict__ H,//The freq. magnitude scalers filter
- const float * __restrict__ W,//The windowing function
- fftwf_complex * __restrict__ output_window,//The transformed window'd src
+ float * restrict overlap,//The size of the overlap
+ const float * restrict H,//The freq. magnitude scalers filter
+ const float * restrict W,//The windowing function
+ fftwf_complex * restrict output_window,//The transformed window'd src
struct userdata *u){
//use a linear-phase sliding STFT and overlap-add method (for each channel)
//zero padd the data
@@ -443,14 +338,14 @@ void dsp_logic(
////regardless of sse enabled, the loops in here assume
////16 byte aligned addresses and memory allocations divisible by v_size
//void dsp_logic(
-// float * __restrict__ dst,//used as a temp array too, needs to be fft_length!
-// float * __restrict__ src,/*input data w/ overlap at start,
+// float * restrict dst,//used as a temp array too, needs to be fft_length!
+// float * restrict src,/*input data w/ overlap at start,
// *automatically cycled in routine
// */
-// float * __restrict__ overlap,//The size of the overlap
-// const float * __restrict__ H,//The freq. magnitude scalers filter
-// const float * __restrict__ W,//The windowing function
-// fftwf_complex * __restrict__ output_window,//The transformed window'd src
+// float * restrict overlap,//The size of the overlap
+// const float * restrict H,//The freq. magnitude scalers filter
+// const float * restrict W,//The windowing function
+// fftwf_complex * restrict output_window,//The transformed window'd src
// struct userdata *u){//Collection of constants
//
// const size_t window_size = mround(u->window_size,v_size);
@@ -535,25 +430,57 @@ void dsp_logic(
// );
//}
-void initialize_buffer(struct userdata *u, pa_memchunk *in){
- size_t fs = pa_frame_size(&(u->sink->sample_spec));
- size_t samples = in->length/fs;
- pa_assert_se(u->samples_gathered + samples <= u->window_size);
+static void process_samples(struct userdata *u, pa_memchunk *tchunk){
+ size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ float *dst;
+ pa_assert(u->samples_gathered >= u->R);
+ tchunk->index = 0;
+ tchunk->length = u->R * fs;
+ tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
+ dst = ((float*)pa_memblock_acquire(tchunk->memblock));
+ for(size_t c=0;c < u->channels; c++) {
+ dsp_logic(
+ u->work_buffer,
+ u->input[c],
+ u->overlap_accum[c],
+ u->H,
+ u->W,
+ u->output_window,
+ u
+ );
+ if(u->first_iteration){
+ /* The windowing function will make the audio ramped in, as a cheap fix we can
+ * undo the windowing (for non-zero window values)
+ */
+ for(size_t i = 0;i < u->overlap_size; ++i){
+ u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->work_buffer[i] : u->work_buffer[i] / u->W[i];
+ }
+ }
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
+ }
+ pa_memblock_release(tchunk->memblock);
+ u->samples_gathered -= u->R;
+}
+
+static void initialize_buffer(struct userdata *u, pa_memchunk *in){
+ size_t fs = pa_frame_size(&u->sink->sample_spec);
+ size_t samples = in->length / fs;
float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
+ pa_assert_se(u->samples_gathered + samples <= u->window_size);
for(size_t c = 0; c < u->channels; c++) {
//buffer with an offset after the overlap from previous
//iterations
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->samples_gathered, sizeof(float), src + c, fs, samples);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c] + u->samples_gathered, sizeof(float), src + c, fs, samples);
}
- u->samples_gathered+=samples;
+ u->samples_gathered += samples;
pa_memblock_release(in->memblock);
}
-void input_buffer(struct userdata *u, pa_memchunk *in){
+static void input_buffer(struct userdata *u, pa_memchunk *in){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
size_t samples = in->length/fs;
- pa_assert_se(samples <= u->window_size - u->samples_gathered);
float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
+ pa_assert_se(samples <= u->window_size - u->samples_gathered);
for(size_t c = 0; c < u->channels; c++) {
//buffer with an offset after the overlap from previous
//iterations
@@ -569,20 +496,21 @@ void input_buffer(struct userdata *u, pa_memchunk *in){
/* Called from I/O thread context */
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
+ size_t fs;
+ struct timeval start, end;
+ pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
pa_assert(chunk);
pa_assert(u->sink);
- size_t fs = pa_frame_size(&(u->sink->sample_spec));
- pa_memchunk tchunk;
+ fs = pa_frame_size(&(u->sink->sample_spec));
chunk->memblock = NULL;
/* Hmm, process any rewind request that might be queued up */
pa_sink_process_rewind(u->sink, 0);
//pa_log_debug("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
- struct timespec start, end;
- gettime(start);
+ pa_timeval_load(&start);
do{
size_t input_remaining = u->window_size - u->samples_gathered;
pa_assert(input_remaining > 0);
@@ -593,7 +521,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//buffer->index = 0;
//pa_memblock_ref(buffer->memblock);
//pa_sink_render_into(u->sink, buffer);
- while(pa_memblockq_peek(u->input_q, &tchunk) < 0 || tchunk.memblock == NULL){
+ while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
pa_sink_render(u->sink, input_remaining*fs, &tchunk);
pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
@@ -604,40 +532,47 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_memblockq_drop(u->input_q, tchunk.length);
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
- //gettime(start);
+ //pa_timeval_load(start);
if(u->first_iteration){
initialize_buffer(u, &tchunk);
}else{
input_buffer(u, &tchunk);
}
- //gettime(end);
- //pa_log_debug("Took %0.5f seconds to setup", tdiff(end, start)*1e-9);
+ //pa_timeval_load(&end);
+ //pa_log_debug("Took %0.5f seconds to setup", pa_timeval_diff(end, start) / (double) PA_USEC_PER_SEC);
pa_memblock_unref(tchunk.memblock);
}while(u->samples_gathered < u->window_size);
- gettime(end);
- pa_log_debug("Took %0.6f seconds to get data", tdiff(end, start)*1e-9);
+ pa_timeval_load(&end);
+ pa_log_debug("Took %0.6f seconds to get data", pa_timeval_diff(&end, &start) / (double) PA_USEC_PER_SEC);
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
/* set the H filter */
- unsigned H_i = pa_aupdate_read_begin(u->a_H);
- u->H = u->Hs[H_i];
- gettime(start);
+ u->H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ pa_timeval_load(&start);
/* process a block */
process_samples(u, chunk);
- gettime(end);
- pa_log_debug("Took %0.6f seconds to process", tdiff(end, start)*1e-9);
+ pa_timeval_load(&end);
+ pa_log_debug("Took %0.6f seconds to process", pa_timeval_diff(&end, &start) / (double) PA_USEC_PER_SEC);
pa_aupdate_read_end(u->a_H);
pa_assert(chunk->memblock);
//pa_log_debug("gave %ld", chunk->length/fs);
//pa_log_debug("end pop");
if(u->first_iteration){
- u->first_iteration = 0;
+ u->first_iteration = FALSE;
}
return 0;
}
+static void reset_filter(struct userdata *u){
+ u->samples_gathered = 0;
+ for(size_t i = 0;i < u->channels; ++i){
+ memset(u->overlap_accum[i], 0, u->overlap_size * sizeof(float));
+ }
+ u->first_iteration = TRUE;
+}
+
/* Called from I/O thread context */
static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
struct userdata *u;
@@ -671,14 +606,6 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
pa_memblockq_rewind(u->input_q, nbytes);
}
-void reset_filter(struct userdata *u){
- u->samples_gathered = 0;
- for(size_t i = 0;i < u->channels; ++i){
- memset(u->overlap_accum[i], 0, u->overlap_size * sizeof(float));
- }
- u->first_iteration = 1;
-}
-
/* Called from I/O thread context */
static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
struct userdata *u;
@@ -693,11 +620,11 @@ static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
/* Called from I/O thread context */
static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
struct userdata *u;
-
+ size_t fs;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- size_t fs = pa_frame_size(&(u->sink->sample_spec));
+ fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_max_request_within_thread(u->sink, nbytes);
//pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
pa_sink_set_max_request_within_thread(u->sink, ((nbytes+u->R*fs-1)/(u->R*fs))*(u->R*fs));
@@ -740,7 +667,7 @@ static void sink_input_detach_cb(pa_sink_input *i) {
/* Called from I/O thread context */
static void sink_input_attach_cb(pa_sink_input *i) {
struct userdata *u;
-
+ size_t fs;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
@@ -748,9 +675,10 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
+ fs = pa_frame_size(&(u->sink->sample_spec));
pa_sink_attach_within_thread(u->sink);
+ pa_sink_set_max_request_within_thread(u->sink, mround(pa_sink_get_max_request(i->sink), u->R*fs));
- //size_t fs = pa_frame_size(&(u->sink->sample_spec));
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->master->thread_info.max_latency);
//TODO: setting this guy minimizes drop outs but doesn't get rid
@@ -758,7 +686,6 @@ static void sink_input_attach_cb(pa_sink_input *i) {
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
//TODO: this guy causes dropouts constantly+rewinds, it's unusable
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
- pa_sink_attach_within_thread(u->sink);
}
/* Called from main context */
@@ -799,15 +726,15 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
}
}
-void save_profile(struct userdata *u, char *name){
+static void save_profile(struct userdata *u, char *name){
float *H_n = pa_xmalloc((u->fft_size / 2 + 1) * sizeof(float));
const float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ pa_datum key, data;
for(size_t i = 0 ; i <= u->fft_size / 2 + 1; ++i){
//H_n[i] = H[i] * u->fft_size;
H_n[i] = H[i];
}
pa_aupdate_read_end(u->a_H);
- pa_datum key, data;
key.data=name;
key.size = strlen(key.data);
data.data = H_n;
@@ -816,23 +743,23 @@ void save_profile(struct userdata *u, char *name){
pa_database_sync(u->database);
}
-void save_state(struct userdata *u){
+static void save_state(struct userdata *u){
char *state_name = pa_sprintf_malloc("%s-previous-state", u->name);
save_profile(u, state_name);
pa_xfree(state_name);
}
-void remove_profile(pa_core *c,char *name){
+static void remove_profile(pa_core *c, char *name){
pa_datum key;
+ pa_database *database;
key.data = name;
key.size = strlen(key.data);
- pa_database *database;
- pa_assert_se(database = pa_shared_get(c,EQDB));
- pa_database_unset(database,&key);
+ pa_assert_se(database = pa_shared_get(c, EQDB));
+ pa_database_unset(database, &key);
pa_database_sync(database);
}
-const char* load_profile(struct userdata *u,char *name){
+static const char* load_profile(struct userdata *u, char *name){
pa_datum key,value;
key.data = name;
key.size = strlen(key.data);
@@ -840,7 +767,6 @@ const char* load_profile(struct userdata *u,char *name){
if(value.size == (u->fft_size / 2 + 1) * sizeof(float)){
float *H=u->Hs[pa_aupdate_write_begin(u->a_H)];
memcpy(H, value.data, value.size);
- pa_aupdate_write_swap(u->a_H);
pa_aupdate_write_end(u->a_H);
}else{
return "incompatible size";
@@ -852,13 +778,13 @@ const char* load_profile(struct userdata *u,char *name){
return NULL;
//fix_filter(u->H, u->fft_size);
}
-void load_state(struct userdata *u){
+
+static void load_state(struct userdata *u){
char *state_name=pa_sprintf_malloc("%s-previous-state", u->name);
load_profile(u,state_name);
pa_xfree(state_name);
}
-
/* Called from main context */
static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
struct userdata *u;
@@ -884,10 +810,11 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
//and aligned
static void * alloc(size_t x,size_t s){
size_t f = mround(x*s, sizeof(float)*v_size);
+ float *t;
pa_assert_se(f >= x*s);
//printf("requested %ld floats=%ld bytes, rem=%ld\n", x, x*sizeof(float), x*sizeof(float)%16);
//printf("giving %ld floats=%ld bytes, rem=%ld\n", f, f*sizeof(float), f*sizeof(float)%16);
- float *t = fftwf_malloc(f);
+ t = fftwf_malloc(f);
memset(t, 0, f);
return t;
}
@@ -903,6 +830,7 @@ int pa__init(pa_module*m) {
pa_sink_new_data sink_data;
pa_bool_t *use_default = NULL;
size_t fs;
+ float *H;
pa_assert(m);
@@ -936,7 +864,6 @@ int pa__init(pa_module*m) {
u->R = (u->window_size + 1) / 2;
u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
- u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
u->a_H = pa_aupdate_new();
u->latency = u->window_size - u->R;
for(size_t i = 0; i < 2; ++i){
@@ -945,8 +872,8 @@ int pa__init(pa_module*m) {
u->W = alloc(u->window_size, sizeof(float));
u->work_buffer = alloc(u->fft_size, sizeof(float));
memset(u->work_buffer, 0, u->fft_size*sizeof(float));
- u->input = (float **)pa_xmalloc0(sizeof(float *)*u->channels);
- u->overlap_accum = (float **)pa_xmalloc0(sizeof(float *)*u->channels);
+ u->input = pa_xnew0(float *, u->channels);
+ u->overlap_accum = pa_xnew0(float *, u->channels);
for(size_t c = 0; c < u->channels; ++c){
u->input[c] = alloc(u->window_size, sizeof(float));
pa_assert_se(u->input[c]);
@@ -961,7 +888,7 @@ int pa__init(pa_module*m) {
u->inverse_plan = fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
hanning_window(u->W, u->window_size);
- u->first_iteration = 1;
+ u->first_iteration = TRUE;
/* Create sink */
pa_sink_new_data_init(&sink_data);
@@ -995,11 +922,9 @@ int pa__init(pa_module*m) {
u->sink->update_requested_latency = sink_update_requested_latency;
u->sink->request_rewind = sink_request_rewind;
u->sink->userdata = u;
+ u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, &u->sink->silence);
pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
- pa_sink_set_max_request(u->sink,
- ((pa_sink_get_max_request(u->sink)+u->R*fs-1)/(u->R*fs))*(u->R*fs)
- );
//pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->R*fs, &ss));
/* Create sink input */
@@ -1042,12 +967,11 @@ int pa__init(pa_module*m) {
dbus_init(u);
//default filter to these
- float *H=u->Hs[pa_aupdate_write_begin(u->a_H)];
+ H=u->Hs[pa_aupdate_write_begin(u->a_H)];
for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
H[i] = 1.0 / sqrtf(2.0f);
}
fix_filter(H, u->fft_size);
- pa_aupdate_write_swap(u->a_H);
pa_aupdate_write_end(u->a_H);
//load old parameters
load_state(u);
@@ -1124,6 +1048,33 @@ void pa__done(pa_module*m) {
pa_xfree(u);
}
+/*
+ * DBus Routines and Callbacks
+ */
+#define EXTNAME "org.PulseAudio.Ext.Equalizing1"
+#define MANAGER_PATH "/org/pulseaudio/equalizing1"
+#define MANAGER_IFACE EXTNAME ".Manager"
+#define EQUALIZER_IFACE EXTNAME ".Equalizer"
+static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_sinks(pa_core *u, char ***names, unsigned *n_sinks);
+static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_profiles(pa_core *u, char ***names, unsigned *n_sinks);
+static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void get_filter(struct userdata *u, double **H_);
+static void set_filter(struct userdata *u, double **H_);
enum manager_method_index {
MANAGER_METHOD_REMOVE_PROFILE,
MANAGER_METHOD_MAX
@@ -1267,17 +1218,20 @@ static pa_dbus_interface_info equalizer_info={
.n_signals=EQUALIZER_SIGNAL_MAX
};
-void dbus_init(struct userdata *u){
+static void dbus_init(struct userdata *u){
+ uint32_t dummy;
+ DBusMessage *signal = NULL;
+ pa_idxset *sink_list = NULL;
u->dbus_protocol=pa_dbus_protocol_get(u->sink->core);
u->dbus_path=pa_sprintf_malloc("/org/pulseaudio/core1/sink%d", u->sink->index);
pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &equalizer_info, u);
- pa_idxset *sink_list=pa_shared_get(u->sink->core, SINKLIST);
+ sink_list = pa_shared_get(u->sink->core, SINKLIST);
u->database=pa_shared_get(u->sink->core, EQDB);
if(sink_list==NULL){
+ char *dbname;
sink_list=pa_idxset_new(&pa_idxset_trivial_hash_func, &pa_idxset_trivial_compare_func);
pa_shared_set(u->sink->core, SINKLIST, sink_list);
- char *dbname;
pa_assert_se(dbname = pa_state_path("equalizers", TRUE));
pa_assert_se(u->database = pa_database_open(dbname, TRUE));
pa_xfree(dbname);
@@ -1285,17 +1239,15 @@ void dbus_init(struct userdata *u){
pa_dbus_protocol_add_interface(u->dbus_protocol, MANAGER_PATH, &manager_info, u->sink->core);
pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
}
- uint32_t dummy;
pa_idxset_put(sink_list, u, &dummy);
- DBusMessage *signal = NULL;
pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_SINK_ADDED].name)));
dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &u->dbus_path, DBUS_TYPE_INVALID);
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
}
-void dbus_done(struct userdata *u){
+static void dbus_done(struct userdata *u){
pa_idxset *sink_list;
uint32_t dummy;
@@ -1320,14 +1272,16 @@ void dbus_done(struct userdata *u){
pa_dbus_protocol_unref(u->dbus_protocol);
}
-void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
DBusError error;
pa_core *c = (pa_core *)_u;
+ DBusMessage *signal = NULL;
+ pa_dbus_protocol *dbus_protocol;
+ char *name;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
dbus_error_init(&error);
- char *name;
if(!dbus_message_get_args(msg, &error,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_INVALID)){
@@ -1338,28 +1292,27 @@ void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void
remove_profile(c,name);
pa_dbus_send_empty_reply(conn, msg);
- DBusMessage *signal = NULL;
pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_PROFILES_CHANGED].name)));
- pa_dbus_protocol *dbus_protocol = pa_dbus_protocol_get(c);
+ dbus_protocol = pa_dbus_protocol_get(c);
pa_dbus_protocol_send_signal(dbus_protocol, signal);
pa_dbus_protocol_unref(dbus_protocol);
dbus_message_unref(signal);
}
-void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
uint32_t rev=1;
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
}
-void get_sinks(pa_core *u, char ***names, unsigned *n_sinks){
- pa_assert(u);
- pa_assert(names);
- pa_assert(n_sinks);
-
+static void get_sinks(pa_core *u, char ***names, unsigned *n_sinks){
void *iter = NULL;
struct userdata *sink_u = NULL;
uint32_t dummy;
pa_idxset *sink_list;
+ pa_assert(u);
+ pa_assert(names);
+ pa_assert(n_sinks);
+
pa_assert_se(sink_list = pa_shared_get(u, SINKLIST));
*n_sinks = (unsigned) pa_idxset_size(sink_list);
*names = *n_sinks > 0 ? pa_xnew0(char *,*n_sinks) : NULL;
@@ -1369,13 +1322,13 @@ void get_sinks(pa_core *u, char ***names, unsigned *n_sinks){
}
}
-void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
+ unsigned n;
+ char **names = NULL;
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
- unsigned n;
- char **names = NULL;
get_sinks((pa_core *) _u, &names, &n);
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, names, n);
for(unsigned i = 0; i < n; ++i){
@@ -1384,17 +1337,17 @@ void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_xfree(names);
}
-void get_profiles(pa_core *c, char ***names, unsigned *n){
- pa_assert(c);
- pa_assert(names);
- pa_assert(n);
+static void get_profiles(pa_core *c, char ***names, unsigned *n){
char *name;
pa_database *database;
- pa_assert_se(database = pa_shared_get(c, EQDB));
pa_datum key, next_key;
pa_strlist *head=NULL, *iter;
+ pa_bool_t done;
+ pa_assert_se(database = pa_shared_get(c, EQDB));
- int done;
+ pa_assert(c);
+ pa_assert(names);
+ pa_assert(n);
done = !pa_database_first(database, &key, NULL);
*n = 0;
while(!done){
@@ -1411,19 +1364,19 @@ void get_profiles(pa_core *c, char ***names, unsigned *n){
(*names) = *n > 0 ? pa_xnew0(char *, *n) : NULL;
iter=head;
for(unsigned i = 0; i < *n; ++i){
- (*names)[*n-1-i]=pa_xstrdup(pa_strlist_data(iter));
- iter=pa_strlist_next(iter);
+ (*names)[*n - 1 - i] = pa_xstrdup(pa_strlist_data(iter));
+ iter = pa_strlist_next(iter);
}
pa_strlist_free(head);
}
-void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
+ char **names;
+ unsigned n;
pa_assert(conn);
pa_assert(msg);
pa_assert(_u);
- char **names;
- unsigned n;
get_profiles((pa_core *)_u, &names, &n);
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_STRING, names, n);
for(unsigned i = 0; i < n; ++i){
@@ -1432,21 +1385,22 @@ void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_xfree(names);
}
-void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(_u);
-
- pa_core *c = (pa_core *)_u;
+static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+ pa_core *c;
char **names = NULL;
unsigned n;
DBusMessage *reply = NULL;
DBusMessageIter msg_iter, dict_iter;
+ uint32_t rev;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert_se(c = _u);
+
pa_assert_se((reply = dbus_message_new_method_return(msg)));
dbus_message_iter_init_append(reply, &msg_iter);
pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
- uint32_t rev=1;
+ rev = 1;
pa_dbus_append_basic_variant_dict_entry(&dict_iter, manager_handlers[MANAGER_HANDLER_REVISION].property_name, DBUS_TYPE_UINT32, &rev);
get_sinks(c, &names, &n);
@@ -1467,17 +1421,19 @@ void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
dbus_message_unref(reply);
}
-void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u) {
+static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u=(struct userdata *) _u;
DBusError error;
-
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(u);
+ DBusMessage *signal = NULL;
float *ys;
uint32_t *xs;
double *_ys;
- unsigned x_npoints,y_npoints;
+ unsigned x_npoints, y_npoints;
+ float *H;
+ pa_bool_t points_good = TRUE;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
dbus_error_init(&error);
@@ -1489,14 +1445,13 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
dbus_error_free(&error);
return;
}
- int points_good=1;
for(size_t i = 0; i < x_npoints; ++i){
if(xs[i] >= u->fft_size / 2 + 1){
- points_good=0;
+ points_good = FALSE;
break;
}
}
- if(!is_monotonic(xs,x_npoints) || !points_good){
+ if(!is_monotonic(xs, x_npoints) || !points_good){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs must be monotonic and 0<=x<=%ld", u->fft_size / 2);
dbus_error_free(&error);
return;
@@ -1505,7 +1460,7 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs and ys must be the same length and 2<=l<=%ld!", u->fft_size / 2 + 1);
dbus_error_free(&error);
return;
- }else if(xs[0] != 0 || xs[x_npoints-1] != u->fft_size / 2){
+ }else if(xs[0] != 0 || xs[x_npoints - 1] != u->fft_size / 2){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs[0] must be 0 and xs[-1]=fft_size/2");
dbus_error_free(&error);
return;
@@ -1516,10 +1471,9 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
ys[i] = (float) _ys[i];
}
- float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
+ H = u->Hs[pa_aupdate_write_begin(u->a_H)];
interpolate(H, u->fft_size / 2 + 1, xs, ys, x_npoints);
fix_filter(H, u->fft_size);
- pa_aupdate_write_swap(u->a_H);
pa_aupdate_write_end(u->a_H);
pa_xfree(ys);
@@ -1528,22 +1482,23 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
pa_dbus_send_empty_reply(conn, msg);
- DBusMessage *signal = NULL;
pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
}
-void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
- struct userdata *u=(struct userdata *) _u;
+static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u = (struct userdata *) _u;
DBusError error;
+ uint32_t *xs;
+ double *ys;
+ unsigned x_npoints;
+ float *H;
+ pa_bool_t points_good=TRUE;
pa_assert(conn);
pa_assert(msg);
pa_assert(u);
- uint32_t *xs;
- double *ys;
- unsigned x_npoints;
dbus_error_init(&error);
@@ -1554,10 +1509,9 @@ void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg,
dbus_error_free(&error);
return;
}
- int points_good=1;
for(size_t i = 0; i < x_npoints; ++i){
if(xs[i] >= u->fft_size / 2 + 1){
- points_good=0;
+ points_good=FALSE;
break;
}
}
@@ -1569,7 +1523,7 @@ void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg,
}
ys = pa_xmalloc(x_npoints * sizeof(double));
- float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ H = u->Hs[pa_aupdate_read_begin(u->a_H)];
for(uint32_t i = 0; i < x_npoints; ++i){
ys[i] = H[xs[i]] * u->fft_size;
}
@@ -1579,14 +1533,15 @@ void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg,
pa_xfree(ys);
}
-void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
- struct userdata *u=(struct userdata *) _u;
+static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u = (struct userdata *) _u;
+ char *name;
+ DBusMessage *signal = NULL;
DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(u);
dbus_error_init(&error);
- char *name;
if(!dbus_message_get_args(msg, &error,
DBUS_TYPE_STRING, &name,
@@ -1598,21 +1553,22 @@ void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void
save_profile(u,name);
pa_dbus_send_empty_reply(conn, msg);
- DBusMessage *signal = NULL;
pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_PROFILES_CHANGED].name)));
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
}
-void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u=(struct userdata *) _u;
+ char *name;
DBusError error;
+ const char *err_msg = NULL;
+ DBusMessage *signal = NULL;
pa_assert(conn);
pa_assert(msg);
pa_assert(u);
dbus_error_init(&error);
- char *name;
if(!dbus_message_get_args(msg, &error,
DBUS_TYPE_STRING, &name,
@@ -1621,77 +1577,80 @@ void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void
dbus_error_free(&error);
return;
}
- const char *err_msg=load_profile(u,name);
- if(err_msg!=NULL){
- pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "error loading profile %s: %s", name,err_msg);
+ err_msg = load_profile(u,name);
+ if(err_msg != NULL){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "error loading profile %s: %s", name, err_msg);
dbus_error_free(&error);
return;
}
pa_dbus_send_empty_reply(conn, msg);
- DBusMessage *signal = NULL;
pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
}
-void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
uint32_t rev=1;
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
}
-void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ uint32_t n_coefs;
+ pa_assert_se(u = (struct userdata *) _u);
pa_assert(conn);
pa_assert(msg);
- pa_assert(_u);
-
- struct userdata *u=(struct userdata *)_u;
- uint32_t n_coefs=(uint32_t)(u->fft_size / 2 + 1);
+ n_coefs = (uint32_t) (u->fft_size / 2 + 1);
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &n_coefs);
}
-void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ uint32_t rate;
+ pa_assert_se(u = (struct userdata *) _u);
pa_assert(conn);
pa_assert(msg);
- pa_assert(_u);
- struct userdata *u=(struct userdata *) _u;
- uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
+ rate = (uint32_t) u->sink->sample_spec.rate;
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &rate);
}
-void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ uint32_t fft_size;
+ pa_assert_se(u = (struct userdata *) _u);
pa_assert(conn);
pa_assert(msg);
- pa_assert(_u);
- struct userdata *u=(struct userdata *) _u;
- uint32_t fft_size=(uint32_t) u->fft_size;
+ fft_size = (uint32_t) u->fft_size;
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &fft_size);
}
-void get_filter(struct userdata *u, double **H_){
+static void get_filter(struct userdata *u, double **H_){
+ float *H;
*H_ = pa_xnew0(double, u->fft_size / 2 + 1);
- float *H=u->Hs[pa_aupdate_read_begin(u->a_H)];
+ H = u->Hs[pa_aupdate_read_begin(u->a_H)];
for(size_t i = 0;i < u->fft_size / 2 + 1; ++i){
(*H_)[i] = H[i] * u->fft_size;
}
pa_aupdate_read_end(u->a_H);
}
-void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
- pa_assert(conn);
- pa_assert(msg);
- pa_assert(_u);
-
- struct userdata *u=(struct userdata *) _u;
+static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
DBusMessage *reply = NULL;
DBusMessageIter msg_iter, dict_iter;
- uint32_t rev=1;
- uint32_t n_coefs=(uint32_t)(u->fft_size / 2 + 1);
- uint32_t rate=(uint32_t) u->sink->sample_spec.rate;
- uint32_t fft_size=(uint32_t) u->fft_size;
+ uint32_t rev, n_coefs, rate, fft_size;
+ double *H;
+ pa_assert_se(u = (struct userdata *) _u);
+ pa_assert(msg);
+
+ rev = 1;
+ n_coefs = (uint32_t) (u->fft_size / 2 + 1);
+ rate = (uint32_t) u->sink->sample_spec.rate;
+ fft_size = (uint32_t) u->fft_size;
pa_assert_se((reply = dbus_message_new_method_return(msg)));
dbus_message_iter_init_append(reply, &msg_iter);
@@ -1701,7 +1660,6 @@ void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
- double *H;
get_filter(u, &H);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTER].property_name, DBUS_TYPE_UINT32, &H);
pa_xfree(H);
@@ -1711,37 +1669,38 @@ void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
dbus_message_unref(reply);
}
-void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ unsigned n_coefs;
+ double *H_;
+ pa_assert_se(u = (struct userdata *) _u);
+
+ n_coefs = u->fft_size / 2 + 1;
pa_assert(conn);
pa_assert(msg);
- pa_assert(_u);
-
- struct userdata *u = (struct userdata *)_u;
- unsigned n_coefs = u->fft_size / 2 + 1;
- double *H_;
get_filter(u, &H_);
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, H_, n_coefs);
pa_xfree(H_);
}
-void set_filter(struct userdata *u, double **H_){
+static void set_filter(struct userdata *u, double **H_){
float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
H[i] = (float) (*H_)[i];
}
fix_filter(H, u->fft_size);
- pa_aupdate_write_swap(u->a_H);
pa_aupdate_write_end(u->a_H);
}
-void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ double *H;
+ unsigned _n_coefs;
+ DBusMessage *signal = NULL;
+ pa_assert_se(u = (struct userdata *) _u);
pa_assert(conn);
pa_assert(msg);
- pa_assert(_u);
- struct userdata *u=(struct userdata *)_u;
- double *H;
- unsigned _n_coefs;
if(pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H, &_n_coefs)){
return;
}
@@ -1755,7 +1714,6 @@ void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_empty_reply(conn, msg);
- DBusMessage *signal = NULL;
pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
commit 07cd6a4c3d357e9406bbb0444995c8c21f3a3cab
Author: Jason Newton <nevion at gmail.com>
Date: Sun Aug 16 14:29:21 2009 -0700
module-equalizer-sink.c
i->sink -> i in pa_get_sink_max_request*
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index b7f61c6..d470774 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -677,7 +677,7 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
fs = pa_frame_size(&(u->sink->sample_spec));
pa_sink_attach_within_thread(u->sink);
- pa_sink_set_max_request_within_thread(u->sink, mround(pa_sink_get_max_request(i->sink), u->R*fs));
+ pa_sink_set_max_request_within_thread(u->sink, mround(pa_sink_input_get_max_request(i), u->R*fs));
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->master->thread_info.max_latency);
@@ -811,7 +811,7 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
static void * alloc(size_t x,size_t s){
size_t f = mround(x*s, sizeof(float)*v_size);
float *t;
- pa_assert_se(f >= x*s);
+ pa_assert(f >= x*s);
//printf("requested %ld floats=%ld bytes, rem=%ld\n", x, x*sizeof(float), x*sizeof(float)%16);
//printf("giving %ld floats=%ld bytes, rem=%ld\n", f, f*sizeof(float), f*sizeof(float)%16);
t = fftwf_malloc(f);
@@ -876,11 +876,8 @@ int pa__init(pa_module*m) {
u->overlap_accum = pa_xnew0(float *, u->channels);
for(size_t c = 0; c < u->channels; ++c){
u->input[c] = alloc(u->window_size, sizeof(float));
- pa_assert_se(u->input[c]);
memset(u->input[c], 0, (u->window_size)*sizeof(float));
- pa_assert_se(u->input[c]);
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
- pa_assert_se(u->overlap_accum[c]);
memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
u->output_window = alloc((u->fft_size / 2 + 1), sizeof(fftwf_complex));
commit 7bd7ce6deca125d9061ea8d29f6a17e65ba36116
Author: Jason Newton <nevion at gmail.com>
Date: Sun Aug 16 15:41:40 2009 -0700
module-equalizer-sink.c: swapped order of attach_within_thread and set_max_request within sink_input_attach_cb
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index d470774..9a4740f 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -543,7 +543,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_memblock_unref(tchunk.memblock);
}while(u->samples_gathered < u->window_size);
pa_timeval_load(&end);
- pa_log_debug("Took %0.6f seconds to get data", pa_timeval_diff(&end, &start) / (double) PA_USEC_PER_SEC);
+ pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
@@ -553,7 +553,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
/* process a block */
process_samples(u, chunk);
pa_timeval_load(&end);
- pa_log_debug("Took %0.6f seconds to process", pa_timeval_diff(&end, &start) / (double) PA_USEC_PER_SEC);
+ pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
pa_aupdate_read_end(u->a_H);
pa_assert(chunk->memblock);
@@ -676,7 +676,6 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
fs = pa_frame_size(&(u->sink->sample_spec));
- pa_sink_attach_within_thread(u->sink);
pa_sink_set_max_request_within_thread(u->sink, mround(pa_sink_input_get_max_request(i), u->R*fs));
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
@@ -686,6 +685,7 @@ static void sink_input_attach_cb(pa_sink_input *i) {
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
//TODO: this guy causes dropouts constantly+rewinds, it's unusable
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+ pa_sink_attach_within_thread(u->sink);
}
/* Called from main context */
commit ab0e20ab2c0014e495cadb9c4f8e188df125fa7f
Author: Jason Newton <nevion at gmail.com>
Date: Sun Aug 16 16:14:30 2009 -0700
module-equalizer-sink: fixed timeval initialization
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 9a4740f..a8ccff8 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -40,6 +40,7 @@ USA.
#include <pulse/i18n.h>
#include <pulse/timeval.h>
+#include <pulsecore/core-rtclock.h>
#include <pulsecore/aupdate.h>
#include <pulsecore/core-error.h>
#include <pulsecore/namereg.h>
@@ -510,7 +511,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_sink_process_rewind(u->sink, 0);
//pa_log_debug("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
- pa_timeval_load(&start);
+ pa_rtclock_get(&start);
do{
size_t input_remaining = u->window_size - u->samples_gathered;
pa_assert(input_remaining > 0);
@@ -532,27 +533,27 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_memblockq_drop(u->input_q, tchunk.length);
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
- //pa_timeval_load(start);
+ //pa_rtclock_get(start);
if(u->first_iteration){
initialize_buffer(u, &tchunk);
}else{
input_buffer(u, &tchunk);
}
- //pa_timeval_load(&end);
+ //pa_rtclock_get(&end);
//pa_log_debug("Took %0.5f seconds to setup", pa_timeval_diff(end, start) / (double) PA_USEC_PER_SEC);
pa_memblock_unref(tchunk.memblock);
}while(u->samples_gathered < u->window_size);
- pa_timeval_load(&end);
+ pa_rtclock_get(&end);
pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
/* set the H filter */
u->H = u->Hs[pa_aupdate_read_begin(u->a_H)];
- pa_timeval_load(&start);
+ pa_rtclock_get(&start);
/* process a block */
process_samples(u, chunk);
- pa_timeval_load(&end);
+ pa_rtclock_get(&end);
pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
pa_aupdate_read_end(u->a_H);
commit cd54ecdc8c6b7947bd06a7db69055cfba078f1bf
Author: Jason Newton <nevion at gmail.com>
Date: Mon Aug 17 10:52:43 2009 -0700
module-equalizer-sink: drop old macros for new library based ones
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index a8ccff8..5152b64 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -136,7 +136,6 @@ static const char* const valid_modargs[] = {
#define v_size 4
-#define mround(x, y) ((x + y - 1) / y) * y
#define SINKLIST "equalized_sinklist"
#define EQDB "equalizer_db"
static void dbus_init(struct userdata *u);
@@ -349,10 +348,10 @@ static void dsp_logic(
// fftwf_complex * restrict output_window,//The transformed window'd src
// struct userdata *u){//Collection of constants
//
-// const size_t window_size = mround(u->window_size,v_size);
-// const size_t fft_h = mround(u->fft_size / 2 + 1, v_size / 2);
-// //const size_t R = mround(u->R, v_size);
-// const size_t overlap_size = mround(u->overlap_size, v_size);
+// const size_t window_size = PA_ROUND_UP(u->window_size,v_size);
+// const size_t fft_h = PA_ROUND_UP(u->fft_size / 2 + 1, v_size / 2);
+// //const size_t R = PA_ROUND_UP(u->R, v_size);
+// const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
//
// //assert(u->samples_gathered >= u->R);
// //zero out the bit beyond the real overlap so we don't add garbage
@@ -677,7 +676,7 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
fs = pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_max_request_within_thread(u->sink, mround(pa_sink_input_get_max_request(i), u->R*fs));
+ pa_sink_set_max_request_within_thread(u->sink, PA_ROUND_UP(pa_sink_input_get_max_request(i), u->R*fs));
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
//pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->master->thread_info.max_latency);
@@ -810,7 +809,7 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
//ensure's memory allocated is a multiple of v_size
//and aligned
static void * alloc(size_t x,size_t s){
- size_t f = mround(x*s, sizeof(float)*v_size);
+ size_t f = PA_ROUND_UP(x*s, sizeof(float)*v_size);
float *t;
pa_assert(f >= x*s);
//printf("requested %ld floats=%ld bytes, rem=%ld\n", x, x*sizeof(float), x*sizeof(float)%16);
commit 735c8ab6fbd9b673c05a2506f3f3c1d64d4d3970
Author: Jason Newton <nevion at gmail.com>
Date: Tue Aug 18 22:11:37 2009 -0700
module-equalizer-sink: added support for preamp
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 5152b64..0d82e01 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -104,6 +104,7 @@ struct userdata {
size_t overlap_size;//window_size-R
size_t samples_gathered;
//message
+ float X;
float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
float *work_buffer, **input, **overlap_accum;
@@ -111,6 +112,7 @@ struct userdata {
fftwf_plan forward_plan, inverse_plan;
//size_t samplings;
+ float Xs[2];
float *Hs[2];//thread updatable copies
pa_aupdate *a_H;
pa_memchunk conv_buffer;
@@ -138,6 +140,8 @@ static const char* const valid_modargs[] = {
#define v_size 4
#define SINKLIST "equalized_sinklist"
#define EQDB "equalizer_db"
+#define FILTER_SIZE (u->fft_size / 2 + 1)
+#define PROFILE_SIZE (FILTER_SIZE + 1)
static void dbus_init(struct userdata *u);
static void dbus_done(struct userdata *u);
@@ -199,7 +203,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
switch (code) {
case PA_SINK_MESSAGE_GET_LATENCY: {
- size_t fs=pa_frame_size(&u->sink->sample_spec);
+ //size_t fs=pa_frame_size(&u->sink->sample_spec);
/* The sink is _put() before the sink input is, so let's
* make sure we don't access it in that time. Also, the
@@ -215,8 +219,8 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
pa_sink_get_latency_within_thread(u->sink_input->sink) +
/* Add the latency internal to our sink input on top */
- pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec) +
- pa_bytes_to_usec(u->samples_gathered * fs, &u->sink->sample_spec);
+ pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
+ // pa_bytes_to_usec(u->samples_gathered * fs, &u->sink->sample_spec);
//+ pa_bytes_to_usec(u->latency * fs, ss)
//+ pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), ss);
return 0;
@@ -274,15 +278,6 @@ static void sink_update_requested_latency(pa_sink *s) {
pa_sink_get_requested_latency_within_thread(s));
}
-typedef float v4sf __attribute__ ((__aligned__(v_size * sizeof(float))));
-typedef union float_vector {
- float f[v_size];
- v4sf v;
-#ifdef __SSE2__
- __m128 m;
-#endif
-} float_vector_t;
-
//reference implementation
static void dsp_logic(
float * restrict dst,//used as a temp array too, needs to be fft_length!
@@ -299,13 +294,13 @@ static void dsp_logic(
memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//window the data
for(size_t j = 0;j < u->window_size; ++j){
- dst[j] = W[j] * src[j];
+ dst[j] = u->X * W[j] * src[j];
}
//Processing is done here!
//do fft
fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
//perform filtering
- for(size_t j = 0; j < u->fft_size / 2 + 1; ++j){
+ for(size_t j = 0; j < FILTER_SIZE; ++j){
u->output_window[j][0] *= u->H[j];
u->output_window[j][1] *= u->H[j];
}
@@ -335,6 +330,15 @@ static void dsp_logic(
);
}
+typedef float v4sf __attribute__ ((__aligned__(v_size * sizeof(float))));
+typedef union float_vector {
+ float f[v_size];
+ v4sf v;
+#ifdef __SSE2__
+ __m128 m;
+#endif
+} float_vector_t;
+
////regardless of sse enabled, the loops in here assume
////16 byte aligned addresses and memory allocations divisible by v_size
//void dsp_logic(
@@ -347,11 +351,12 @@ static void dsp_logic(
// const float * restrict W,//The windowing function
// fftwf_complex * restrict output_window,//The transformed window'd src
// struct userdata *u){//Collection of constants
-//
+ //float_vector_t x = {u->X, u->X, u->X, u->X};
// const size_t window_size = PA_ROUND_UP(u->window_size,v_size);
-// const size_t fft_h = PA_ROUND_UP(u->fft_size / 2 + 1, v_size / 2);
+// const size_t fft_h = PA_ROUND_UP(FILTER_SIZE, v_size / 2);
// //const size_t R = PA_ROUND_UP(u->R, v_size);
// const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
+// overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
//
// //assert(u->samples_gathered >= u->R);
// //zero out the bit beyond the real overlap so we don't add garbage
@@ -368,9 +373,9 @@ static void dsp_logic(
// float_vector_t *w = (float_vector_t*) (W+j);
// float_vector_t *s = (float_vector_t*) (src+j);
//#if __SSE2__
-// d->m = _mm_mul_ps(w->m, s->m);
+// d->m = _mm_mul_ps(x->m, _mm_mul_ps(w->m, s->m));
//#else
-// d->v = w->v * s->v;
+// d->v = x->v * w->v * s->v;
//#endif
// }
// //Processing is done here!
@@ -498,6 +503,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
struct userdata *u;
size_t fs;
struct timeval start, end;
+ unsigned a_i;
pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
@@ -548,7 +554,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
/* set the H filter */
- u->H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ a_i = pa_aupdate_read_begin(u->a_H);
+ u->X = u->Xs[a_i];
+ u->H = u->Hs[a_i];
pa_rtclock_get(&start);
/* process a block */
process_samples(u, chunk);
@@ -727,18 +735,25 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
}
static void save_profile(struct userdata *u, char *name){
- float *H_n = pa_xmalloc((u->fft_size / 2 + 1) * sizeof(float));
- const float *H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ unsigned a_i;
+ const size_t profile_size = PROFILE_SIZE * sizeof(float);
+ float *H_n, *profile;
+ const float *H;
pa_datum key, data;
- for(size_t i = 0 ; i <= u->fft_size / 2 + 1; ++i){
+ profile = pa_xnew0(float, profile_size);
+ a_i = pa_aupdate_read_begin(u->a_H);
+ H_n = profile + 1;
+ H = u->Hs[a_i];
+ profile[0] = u->Xs[a_i];
+ for(size_t i = 0 ; i <= FILTER_SIZE; ++i){
//H_n[i] = H[i] * u->fft_size;
H_n[i] = H[i];
}
pa_aupdate_read_end(u->a_H);
key.data=name;
key.size = strlen(key.data);
- data.data = H_n;
- data.size = (u->fft_size / 2 + 1) * sizeof(float);
+ data.data = profile;
+ data.size = profile_size;
pa_database_set(u->database, &key, &data, TRUE);
pa_database_sync(u->database);
}
@@ -760,13 +775,17 @@ static void remove_profile(pa_core *c, char *name){
}
static const char* load_profile(struct userdata *u, char *name){
- pa_datum key,value;
+ unsigned a_i;
+ pa_datum key, value;
+ const size_t profile_size = PROFILE_SIZE * sizeof(float);
key.data = name;
key.size = strlen(key.data);
if(pa_database_get(u->database, &key, &value) != NULL){
- if(value.size == (u->fft_size / 2 + 1) * sizeof(float)){
- float *H=u->Hs[pa_aupdate_write_begin(u->a_H)];
- memcpy(H, value.data, value.size);
+ if(value.size == profile_size){
+ float *H = (float *) value.data;
+ a_i = pa_aupdate_write_begin(u->a_H);
+ u->Xs[a_i] = H[0];
+ memcpy(u->Hs[a_i], H + 1, (FILTER_SIZE) * sizeof(float));
pa_aupdate_write_end(u->a_H);
}else{
return "incompatible size";
@@ -831,6 +850,7 @@ int pa__init(pa_module*m) {
pa_bool_t *use_default = NULL;
size_t fs;
float *H;
+ unsigned a_i;
pa_assert(m);
@@ -867,7 +887,7 @@ int pa__init(pa_module*m) {
u->a_H = pa_aupdate_new();
u->latency = u->window_size - u->R;
for(size_t i = 0; i < 2; ++i){
- u->Hs[i] = alloc((u->fft_size / 2 + 1), sizeof(float));
+ u->Hs[i] = alloc((FILTER_SIZE), sizeof(float));
}
u->W = alloc(u->window_size, sizeof(float));
u->work_buffer = alloc(u->fft_size, sizeof(float));
@@ -880,7 +900,7 @@ int pa__init(pa_module*m) {
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
- u->output_window = alloc((u->fft_size / 2 + 1), sizeof(fftwf_complex));
+ u->output_window = alloc((FILTER_SIZE), sizeof(fftwf_complex));
u->forward_plan = fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
u->inverse_plan = fftwf_plan_dft_c2r_1d(u->fft_size, u->output_window, u->work_buffer, FFTW_ESTIMATE);
@@ -964,8 +984,10 @@ int pa__init(pa_module*m) {
dbus_init(u);
//default filter to these
- H=u->Hs[pa_aupdate_write_begin(u->a_H)];
- for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
+ a_i = pa_aupdate_write_begin(u->a_H);
+ H = u->Hs[a_i];
+ u->Xs[a_i] = 1.0f;
+ for(size_t i = 0; i < FILTER_SIZE; ++i){
H[i] = 1.0 / sqrtf(2.0f);
}
fix_filter(H, u->fft_size);
@@ -1053,9 +1075,7 @@ void pa__done(pa_module*m) {
#define MANAGER_IFACE EXTNAME ".Manager"
#define EQUALIZER_IFACE EXTNAME ".Equalizer"
static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_sinks(pa_core *u, char ***names, unsigned *n_sinks);
static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_profiles(pa_core *u, char ***names, unsigned *n_sinks);
static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u);
static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
@@ -1064,14 +1084,12 @@ static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, vo
static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void get_filter(struct userdata *u, double **H_);
-static void set_filter(struct userdata *u, double **H_);
enum manager_method_index {
MANAGER_METHOD_REMOVE_PROFILE,
MANAGER_METHOD_MAX
@@ -1144,16 +1162,19 @@ enum equalizer_handler_index {
EQUALIZER_HANDLER_FILTERSAMPLERATE,
EQUALIZER_HANDLER_N_COEFS,
EQUALIZER_HANDLER_FILTER,
+ EQUALIZER_HANDLER_PREAMP,
EQUALIZER_HANDLER_MAX
};
pa_dbus_arg_info filter_points_args[]={
{"xs", "au","in"},
{"ys", "ad","out"},
+ {"preamp", "d","out"},
};
pa_dbus_arg_info seed_filter_args[]={
{"xs", "au","in"},
{"ys", "ad","in"},
+ {"preamp", "d","in"},
};
pa_dbus_arg_info save_profile_args[]={
{"name", "s","in"},
@@ -1190,7 +1211,7 @@ static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
[EQUALIZER_HANDLER_SAMPLERATE]{.property_name="SampleRate",.type="u",.get_cb=equalizer_get_sample_rate,.set_cb=NULL},
[EQUALIZER_HANDLER_FILTERSAMPLERATE]{.property_name="FilterSampleRate",.type="u",.get_cb=equalizer_get_filter_rate,.set_cb=NULL},
[EQUALIZER_HANDLER_N_COEFS]{.property_name="NFilterCoefficients",.type="u",.get_cb=equalizer_get_n_coefs,.set_cb=NULL},
- [EQUALIZER_HANDLER_FILTER]{.property_name="Filter",.type="ad",.get_cb=equalizer_get_filter,.set_cb=equalizer_set_filter},
+ [EQUALIZER_HANDLER_FILTER]{.property_name="Filter",.type="ad",.get_cb=equalizer_get_filter,.set_cb=equalizer_set_filter}
};
enum equalizer_signal_index{
@@ -1215,7 +1236,7 @@ static pa_dbus_interface_info equalizer_info={
.n_signals=EQUALIZER_SIGNAL_MAX
};
-static void dbus_init(struct userdata *u){
+void dbus_init(struct userdata *u){
uint32_t dummy;
DBusMessage *signal = NULL;
pa_idxset *sink_list = NULL;
@@ -1244,7 +1265,7 @@ static void dbus_init(struct userdata *u){
dbus_message_unref(signal);
}
-static void dbus_done(struct userdata *u){
+void dbus_done(struct userdata *u){
pa_idxset *sink_list;
uint32_t dummy;
@@ -1269,7 +1290,7 @@ static void dbus_done(struct userdata *u){
pa_dbus_protocol_unref(u->dbus_protocol);
}
-static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
DBusError error;
pa_core *c = (pa_core *)_u;
DBusMessage *signal = NULL;
@@ -1296,7 +1317,7 @@ static void manager_handle_remove_profile(DBusConnection *conn, DBusMessage *msg
dbus_message_unref(signal);
}
-static void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
+void manager_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
uint32_t rev=1;
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
}
@@ -1319,7 +1340,7 @@ static void get_sinks(pa_core *u, char ***names, unsigned *n_sinks){
}
}
-static void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
+void manager_get_sinks(DBusConnection *conn, DBusMessage *msg, void *_u){
unsigned n;
char **names = NULL;
pa_assert(conn);
@@ -1367,7 +1388,7 @@ static void get_profiles(pa_core *c, char ***names, unsigned *n){
pa_strlist_free(head);
}
-static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
+void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_u){
char **names;
unsigned n;
pa_assert(conn);
@@ -1382,7 +1403,7 @@ static void manager_get_profiles(DBusConnection *conn, DBusMessage *msg, void *_
pa_xfree(names);
}
-static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_core *c;
char **names = NULL;
unsigned n;
@@ -1418,14 +1439,14 @@ static void manager_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
dbus_message_unref(reply);
}
-static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u) {
+void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u=(struct userdata *) _u;
DBusError error;
DBusMessage *signal = NULL;
float *ys;
uint32_t *xs;
- double *_ys;
- unsigned x_npoints, y_npoints;
+ double *_ys, preamp;
+ unsigned x_npoints, y_npoints, a_i;
float *H;
pa_bool_t points_good = TRUE;
pa_assert(conn);
@@ -1437,13 +1458,14 @@ static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg,
if(!dbus_message_get_args(msg, &error,
DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &xs, &x_npoints,
DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &_ys, &y_npoints,
+ DBUS_TYPE_DOUBLE, &preamp,
DBUS_TYPE_INVALID)){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
for(size_t i = 0; i < x_npoints; ++i){
- if(xs[i] >= u->fft_size / 2 + 1){
+ if(xs[i] >= FILTER_SIZE){
points_good = FALSE;
break;
}
@@ -1453,8 +1475,8 @@ static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg,
dbus_error_free(&error);
return;
- }else if(x_npoints != y_npoints || x_npoints < 2 || x_npoints > u->fft_size / 2 +1 ){
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs and ys must be the same length and 2<=l<=%ld!", u->fft_size / 2 + 1);
+ }else if(x_npoints != y_npoints || x_npoints < 2 || x_npoints > FILTER_SIZE ){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs and ys must be the same length and 2<=l<=%ld!", FILTER_SIZE);
dbus_error_free(&error);
return;
}else if(xs[0] != 0 || xs[x_npoints - 1] != u->fft_size / 2){
@@ -1467,9 +1489,10 @@ static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg,
for(uint32_t i = 0; i < x_npoints; ++i){
ys[i] = (float) _ys[i];
}
-
- H = u->Hs[pa_aupdate_write_begin(u->a_H)];
- interpolate(H, u->fft_size / 2 + 1, xs, ys, x_npoints);
+ a_i = pa_aupdate_write_begin(u->a_H);
+ H = u->Hs[a_i];
+ u->Xs[a_i] = preamp;
+ interpolate(H, FILTER_SIZE, xs, ys, x_npoints);
fix_filter(H, u->fft_size);
pa_aupdate_write_end(u->a_H);
pa_xfree(ys);
@@ -1484,14 +1507,16 @@ static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg,
dbus_message_unref(signal);
}
-static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
+void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u = (struct userdata *) _u;
DBusError error;
uint32_t *xs;
- double *ys;
- unsigned x_npoints;
+ double *ys, preamp;
+ unsigned x_npoints, a_i;
float *H;
pa_bool_t points_good=TRUE;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
pa_assert(conn);
pa_assert(msg);
@@ -1507,30 +1532,39 @@ static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage
return;
}
for(size_t i = 0; i < x_npoints; ++i){
- if(xs[i] >= u->fft_size / 2 + 1){
+ if(xs[i] >= FILTER_SIZE){
points_good=FALSE;
break;
}
}
- if(x_npoints > u->fft_size / 2 +1 || !points_good){
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs indices/length must be <= %ld!", u->fft_size / 2 + 1);
+ if(x_npoints > FILTER_SIZE || !points_good){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs indices/length must be <= %ld!", FILTER_SIZE);
dbus_error_free(&error);
return;
}
ys = pa_xmalloc(x_npoints * sizeof(double));
- H = u->Hs[pa_aupdate_read_begin(u->a_H)];
+ a_i = pa_aupdate_read_begin(u->a_H);
+ H = u->Hs[a_i];
+ preamp = u->Xs[a_i];
for(uint32_t i = 0; i < x_npoints; ++i){
ys[i] = H[xs[i]] * u->fft_size;
}
pa_aupdate_read_end(u->a_H);
- pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, ys, x_npoints);
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+
+ pa_dbus_append_basic_array(&msg_iter, DBUS_TYPE_DOUBLE, ys, x_npoints);
+ pa_dbus_append_basic_variant(&msg_iter, DBUS_TYPE_DOUBLE, &preamp);
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
pa_xfree(ys);
}
-static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u = (struct userdata *) _u;
char *name;
DBusMessage *signal = NULL;
@@ -1555,7 +1589,7 @@ static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg
dbus_message_unref(signal);
}
-static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
+void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u=(struct userdata *) _u;
char *name;
DBusError error;
@@ -1574,7 +1608,7 @@ static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg
dbus_error_free(&error);
return;
}
- err_msg = load_profile(u,name);
+ err_msg = load_profile(u, name);
if(err_msg != NULL){
pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "error loading profile %s: %s", name, err_msg);
dbus_error_free(&error);
@@ -1587,23 +1621,23 @@ static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg
dbus_message_unref(signal);
}
-static void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
uint32_t rev=1;
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
}
-static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
uint32_t n_coefs;
pa_assert_se(u = (struct userdata *) _u);
pa_assert(conn);
pa_assert(msg);
- n_coefs = (uint32_t) (u->fft_size / 2 + 1);
+ n_coefs = (uint32_t) PROFILE_SIZE;
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &n_coefs);
}
-static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
uint32_t rate;
pa_assert_se(u = (struct userdata *) _u);
@@ -1614,7 +1648,7 @@ static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, vo
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &rate);
}
-static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
uint32_t fft_size;
pa_assert_se(u = (struct userdata *) _u);
@@ -1625,71 +1659,47 @@ static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, vo
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &fft_size);
}
-static void get_filter(struct userdata *u, double **H_){
+static double * get_filter(struct userdata *u){
float *H;
- *H_ = pa_xnew0(double, u->fft_size / 2 + 1);
- H = u->Hs[pa_aupdate_read_begin(u->a_H)];
- for(size_t i = 0;i < u->fft_size / 2 + 1; ++i){
- (*H_)[i] = H[i] * u->fft_size;
+ double *H_;
+ unsigned a_i;
+ H_ = pa_xnew0(double, PROFILE_SIZE);
+ a_i = pa_aupdate_read_begin(u->a_H);
+ H = u->Hs[a_i];
+ H_[0] = u->Xs[a_i];
+ for(size_t i = 0;i < FILTER_SIZE; ++i){
+ H_[i + 1] = H[i] * u->fft_size;
}
pa_aupdate_read_end(u->a_H);
+ return H_;
}
-static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
- struct userdata *u;
- DBusMessage *reply = NULL;
- DBusMessageIter msg_iter, dict_iter;
- uint32_t rev, n_coefs, rate, fft_size;
- double *H;
- pa_assert_se(u = (struct userdata *) _u);
- pa_assert(msg);
-
- rev = 1;
- n_coefs = (uint32_t) (u->fft_size / 2 + 1);
- rate = (uint32_t) u->sink->sample_spec.rate;
- fft_size = (uint32_t) u->fft_size;
-
- pa_assert_se((reply = dbus_message_new_method_return(msg)));
- dbus_message_iter_init_append(reply, &msg_iter);
- pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
-
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_REVISION].property_name, DBUS_TYPE_UINT32, &rev);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
- get_filter(u, &H);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTER].property_name, DBUS_TYPE_UINT32, &H);
- pa_xfree(H);
-
- pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
- pa_assert_se(dbus_connection_send(conn, reply, NULL));
- dbus_message_unref(reply);
-}
-
-static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
unsigned n_coefs;
double *H_;
pa_assert_se(u = (struct userdata *) _u);
- n_coefs = u->fft_size / 2 + 1;
+ n_coefs = PROFILE_SIZE;
pa_assert(conn);
pa_assert(msg);
- get_filter(u, &H_);
+ H_ = get_filter(u);
pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, H_, n_coefs);
pa_xfree(H_);
}
-static void set_filter(struct userdata *u, double **H_){
- float *H = u->Hs[pa_aupdate_write_begin(u->a_H)];
- for(size_t i = 0; i < u->fft_size / 2 + 1; ++i){
- H[i] = (float) (*H_)[i];
+static void set_filter(struct userdata *u, double *H_){
+ unsigned a_i= pa_aupdate_write_begin(u->a_H);
+ float *H = u->Hs[a_i];
+ u->Xs[a_i] = H_[0];
+ for(size_t i = 0; i < FILTER_SIZE; ++i){
+ H[i] = (float) H_[i + 1];
}
- fix_filter(H, u->fft_size);
+ fix_filter(H + 1, u->fft_size);
pa_aupdate_write_end(u->a_H);
}
-static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
double *H;
unsigned _n_coefs;
@@ -1701,13 +1711,11 @@ static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_
if(pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H, &_n_coefs)){
return;
}
- if(_n_coefs!=u->fft_size / 2 + 1){
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", u->fft_size / 2 + 1, _n_coefs);
+ if(_n_coefs != PROFILE_SIZE){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", PROFILE_SIZE, _n_coefs);
return;
}
- set_filter(u, &H);
- //Stupid for IO reasons? Add a save signal to dbus instead
- //save_state(u);
+ set_filter(u, H);
pa_dbus_send_empty_reply(conn, msg);
@@ -1715,3 +1723,34 @@ static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_
pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
dbus_message_unref(signal);
}
+
+void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter, dict_iter;
+ uint32_t rev, n_coefs, rate, fft_size;
+ double *H;
+ pa_assert_se(u = (struct userdata *) _u);
+ pa_assert(msg);
+
+ rev = 1;
+ n_coefs = (uint32_t) PROFILE_SIZE;
+ rate = (uint32_t) u->sink->sample_spec.rate;
+ fft_size = (uint32_t) u->fft_size;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "{sv}", &dict_iter));
+
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_REVISION].property_name, DBUS_TYPE_UINT32, &rev);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
+ H = get_filter(u);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTER].property_name, DBUS_TYPE_UINT32, &H);
+ pa_xfree(H);
+
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
commit 2f6fd32cc5726b47d332ad71c0f04f16614118ba
Author: Jason Newton <nevion at gmail.com>
Date: Wed Aug 19 00:30:07 2009 -0700
module-equalizer-sink: fixed a bug w/ new zero-latency input scheme (that was an interesting/cool bug!)
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 0d82e01..67a3d74 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -104,8 +104,6 @@ struct userdata {
size_t overlap_size;//window_size-R
size_t samples_gathered;
//message
- float X;
- float *H;//frequency response filter (magnitude based)
float *W;//windowing function (time domain)
float *work_buffer, **input, **overlap_accum;
fftwf_complex *output_window;
@@ -113,7 +111,7 @@ struct userdata {
//size_t samplings;
float Xs[2];
- float *Hs[2];//thread updatable copies
+ float *Hs[2];//thread updatable copies of the freq response filters (magintude based)
pa_aupdate *a_H;
pa_memchunk conv_buffer;
pa_memblockq *input_q;
@@ -284,7 +282,8 @@ static void dsp_logic(
float * restrict src,/*input data w/ overlap at start,
*automatically cycled in routine
*/
- float * restrict overlap,//The size of the overlap
+ float * restrict overlap,
+ const float X,//multipliar
const float * restrict H,//The freq. magnitude scalers filter
const float * restrict W,//The windowing function
fftwf_complex * restrict output_window,//The transformed window'd src
@@ -293,16 +292,16 @@ static void dsp_logic(
//zero padd the data
memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//window the data
- for(size_t j = 0;j < u->window_size; ++j){
- dst[j] = u->X * W[j] * src[j];
+ for(size_t j = 0; j < u->window_size; ++j){
+ dst[j] = X * W[j] * src[j];
}
//Processing is done here!
//do fft
fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
//perform filtering
for(size_t j = 0; j < FILTER_SIZE; ++j){
- u->output_window[j][0] *= u->H[j];
- u->output_window[j][1] *= u->H[j];
+ u->output_window[j][0] *= H[j];
+ u->output_window[j][1] *= H[j];
}
//inverse fft
fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
@@ -314,9 +313,9 @@ static void dsp_logic(
//}
//overlap add and preserve overlap component from this window (linear phase)
- for(size_t j = 0;j < u->overlap_size; ++j){
+ for(size_t j = 0; j < u->overlap_size; ++j){
u->work_buffer[j] += overlap[j];
- overlap[j] = dst[u->R+j];
+ overlap[j] = dst[u->R + j];
}
////debug: tests if basic buffering works
////shouldn't modify the signal AT ALL (beyond roundoff)
@@ -325,8 +324,8 @@ static void dsp_logic(
//}
//preseve the needed input for the next window's overlap
- memmove(src, src+u->R,
- ((u->overlap_size + u->samples_gathered) - u->R)*sizeof(float)
+ memmove(src, src + u->R,
+ u->overlap_size * sizeof(float)
);
}
@@ -347,11 +346,12 @@ typedef union float_vector {
// *automatically cycled in routine
// */
// float * restrict overlap,//The size of the overlap
+// const float X,//multipliar
// const float * restrict H,//The freq. magnitude scalers filter
// const float * restrict W,//The windowing function
// fftwf_complex * restrict output_window,//The transformed window'd src
// struct userdata *u){//Collection of constants
- //float_vector_t x = {u->X, u->X, u->X, u->X};
+ //float_vector_t x = {X, X, X, X};
// const size_t window_size = PA_ROUND_UP(u->window_size,v_size);
// const size_t fft_h = PA_ROUND_UP(FILTER_SIZE, v_size / 2);
// //const size_t R = PA_ROUND_UP(u->R, v_size);
@@ -430,25 +430,33 @@ typedef union float_vector {
// //}
//
// //preseve the needed input for the next window's overlap
-// memmove(src, src+u->R,
-// ((u->overlap_size+u->samples_gathered)+-u->R)*sizeof(float)
+// memmove(src, src + u->R,
+// u->overlap_size * sizeof(float)
// );
//}
static void process_samples(struct userdata *u, pa_memchunk *tchunk){
size_t fs=pa_frame_size(&(u->sink->sample_spec));
float *dst;
+ unsigned a_i;
+ float *H, X;
pa_assert(u->samples_gathered >= u->R);
tchunk->index = 0;
tchunk->length = u->R * fs;
tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
dst = ((float*)pa_memblock_acquire(tchunk->memblock));
+ /* set the H filter */
+ a_i = pa_aupdate_read_begin(u->a_H);
+ X = u->Xs[a_i];
+ H = u->Hs[a_i];
+
for(size_t c=0;c < u->channels; c++) {
dsp_logic(
u->work_buffer,
u->input[c],
u->overlap_accum[c],
- u->H,
+ X,
+ H,
u->W,
u->output_window,
u
@@ -465,6 +473,8 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
}
pa_memblock_release(tchunk->memblock);
u->samples_gathered -= u->R;
+
+ pa_aupdate_read_end(u->a_H);
}
static void initialize_buffer(struct userdata *u, pa_memchunk *in){
@@ -492,7 +502,7 @@ static void input_buffer(struct userdata *u, pa_memchunk *in){
pa_assert_se(
u->input[c]+u->samples_gathered+samples <= u->input[c]+u->window_size
);
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->overlap_size+u->samples_gathered, sizeof(float), src + c, fs, samples);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->samples_gathered, sizeof(float), src + c, fs, samples);
}
u->samples_gathered += samples;
pa_memblock_release(in->memblock);
@@ -503,7 +513,6 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
struct userdata *u;
size_t fs;
struct timeval start, end;
- unsigned a_i;
pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
@@ -554,15 +563,11 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
/* set the H filter */
- a_i = pa_aupdate_read_begin(u->a_H);
- u->X = u->Xs[a_i];
- u->H = u->Hs[a_i];
pa_rtclock_get(&start);
/* process a block */
process_samples(u, chunk);
pa_rtclock_get(&end);
pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
- pa_aupdate_read_end(u->a_H);
pa_assert(chunk->memblock);
//pa_log_debug("gave %ld", chunk->length/fs);
@@ -1162,7 +1167,6 @@ enum equalizer_handler_index {
EQUALIZER_HANDLER_FILTERSAMPLERATE,
EQUALIZER_HANDLER_N_COEFS,
EQUALIZER_HANDLER_FILTER,
- EQUALIZER_HANDLER_PREAMP,
EQUALIZER_HANDLER_MAX
};
commit b028e4e917441f138197a5c6a7b86b50b26bc35b
Author: Jason Newton <nevion at gmail.com>
Date: Wed Aug 19 23:22:33 2009 -0700
module-equalizer-sink: per-channel filtering support + profiles, easier default configuration
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 67a3d74..98b6b89 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -110,15 +110,16 @@ struct userdata {
fftwf_plan forward_plan, inverse_plan;
//size_t samplings;
- float Xs[2];
- float *Hs[2];//thread updatable copies of the freq response filters (magintude based)
- pa_aupdate *a_H;
+ float **Xs;
+ float ***Hs;//thread updatable copies of the freq response filters (magintude based)
+ pa_aupdate **a_H;
pa_memchunk conv_buffer;
pa_memblockq *input_q;
pa_bool_t first_iteration;
pa_dbus_protocol *dbus_protocol;
char *dbus_path;
+ pa_bool_t set_default;
pa_database *database;
};
@@ -129,6 +130,7 @@ static const char* const valid_modargs[] = {
"master",
"format",
"rate",
+ "set_default",
"channels",
"channel_map",
NULL
@@ -138,8 +140,10 @@ static const char* const valid_modargs[] = {
#define v_size 4
#define SINKLIST "equalized_sinklist"
#define EQDB "equalizer_db"
+#define EQ_STATE_DB "equalizer-state"
#define FILTER_SIZE (u->fft_size / 2 + 1)
-#define PROFILE_SIZE (FILTER_SIZE + 1)
+#define CHANNEL_PROFILE_SIZE (FILTER_SIZE + 1)
+#define STATE_SIZE (CHANNEL_PROFILE_SIZE * u->channels)
static void dbus_init(struct userdata *u);
static void dbus_done(struct userdata *u);
@@ -445,12 +449,11 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
tchunk->length = u->R * fs;
tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
dst = ((float*)pa_memblock_acquire(tchunk->memblock));
- /* set the H filter */
- a_i = pa_aupdate_read_begin(u->a_H);
- X = u->Xs[a_i];
- H = u->Hs[a_i];
for(size_t c=0;c < u->channels; c++) {
+ a_i = pa_aupdate_read_begin(u->a_H[c]);
+ X = u->Xs[c][a_i];
+ H = u->Hs[c][a_i];
dsp_logic(
u->work_buffer,
u->input[c],
@@ -461,6 +464,7 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
u->output_window,
u
);
+ pa_aupdate_read_end(u->a_H[c]);
if(u->first_iteration){
/* The windowing function will make the audio ramped in, as a cheap fix we can
* undo the windowing (for non-zero window values)
@@ -473,8 +477,6 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
}
pa_memblock_release(tchunk->memblock);
u->samples_gathered -= u->R;
-
- pa_aupdate_read_end(u->a_H);
}
static void initialize_buffer(struct userdata *u, pa_memchunk *in){
@@ -538,6 +540,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_sink_render_into(u->sink, buffer);
while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
pa_sink_render(u->sink, input_remaining*fs, &tchunk);
+ //pa_sink_render_full(u->sink, input_remaining*fs, &tchunk);
pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
@@ -699,6 +702,9 @@ static void sink_input_attach_cb(pa_sink_input *i) {
//TODO: this guy causes dropouts constantly+rewinds, it's unusable
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
pa_sink_attach_within_thread(u->sink);
+ if(u->set_default){
+ pa_namereg_set_default_sink(u->module->core, u->sink);
+ }
}
/* Called from main context */
@@ -739,22 +745,22 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
}
}
-static void save_profile(struct userdata *u, char *name){
+static void save_profile(struct userdata *u, size_t channel, char *name){
unsigned a_i;
- const size_t profile_size = PROFILE_SIZE * sizeof(float);
+ const size_t profile_size = CHANNEL_PROFILE_SIZE * sizeof(float);
float *H_n, *profile;
const float *H;
pa_datum key, data;
profile = pa_xnew0(float, profile_size);
- a_i = pa_aupdate_read_begin(u->a_H);
+ a_i = pa_aupdate_read_begin(u->a_H[channel]);
+ profile[0] = u->Xs[a_i][channel];
+ H = u->Hs[channel][a_i];
H_n = profile + 1;
- H = u->Hs[a_i];
- profile[0] = u->Xs[a_i];
for(size_t i = 0 ; i <= FILTER_SIZE; ++i){
- //H_n[i] = H[i] * u->fft_size;
- H_n[i] = H[i];
+ H_n[i] = H[i] * u->fft_size;
+ //H_n[i] = H[i];
}
- pa_aupdate_read_end(u->a_H);
+ pa_aupdate_read_end(u->a_H[channel]);
key.data=name;
key.size = strlen(key.data);
data.data = profile;
@@ -764,9 +770,38 @@ static void save_profile(struct userdata *u, char *name){
}
static void save_state(struct userdata *u){
- char *state_name = pa_sprintf_malloc("%s-previous-state", u->name);
- save_profile(u, state_name);
- pa_xfree(state_name);
+ unsigned a_i;
+ const size_t state_size = STATE_SIZE * sizeof(float);
+ float *H_n, *state;
+ float *H;
+ pa_datum key, data;
+ pa_database *database;
+ char *dbname;
+ char *state_name = u->name;
+ state = pa_xnew0(float, STATE_SIZE);
+
+ for(size_t c = 0; c < u->channels; ++c){
+ a_i = pa_aupdate_read_begin(u->a_H[c]);
+ state[c * CHANNEL_PROFILE_SIZE] = u->Xs[a_i][c];
+ H = u->Hs[c][a_i];
+ H_n = state + c * CHANNEL_PROFILE_SIZE + 1;
+ memcpy(H_n, H, FILTER_SIZE * sizeof(float));
+ pa_aupdate_read_end(u->a_H[c]);
+ }
+
+ key.data = state_name;
+ key.size = strlen(key.data);
+ data.data = state;
+ data.size = state_size;
+ //thread safety for 0.9.17?
+ pa_assert_se(dbname = pa_state_path(EQ_STATE_DB, TRUE));
+ pa_assert_se(database = pa_database_open(dbname, TRUE));
+ pa_xfree(dbname);
+
+ pa_database_set(database, &key, &data, TRUE);
+ pa_database_sync(database);
+ pa_database_close(database);
+ pa_xfree(state);
}
static void remove_profile(pa_core *c, char *name){
@@ -779,19 +814,20 @@ static void remove_profile(pa_core *c, char *name){
pa_database_sync(database);
}
-static const char* load_profile(struct userdata *u, char *name){
+static const char* load_profile(struct userdata *u, size_t channel, char *name){
unsigned a_i;
pa_datum key, value;
- const size_t profile_size = PROFILE_SIZE * sizeof(float);
+ const size_t profile_size = CHANNEL_PROFILE_SIZE * sizeof(float);
key.data = name;
key.size = strlen(key.data);
if(pa_database_get(u->database, &key, &value) != NULL){
if(value.size == profile_size){
- float *H = (float *) value.data;
- a_i = pa_aupdate_write_begin(u->a_H);
- u->Xs[a_i] = H[0];
- memcpy(u->Hs[a_i], H + 1, (FILTER_SIZE) * sizeof(float));
- pa_aupdate_write_end(u->a_H);
+ float *profile = (float *) value.data;
+ a_i = pa_aupdate_write_begin(u->a_H[channel]);
+ u->Xs[channel][a_i] = profile[0];
+ memcpy(u->Hs[channel][a_i], profile + 1, CHANNEL_PROFILE_SIZE * sizeof(float));
+ fix_filter(u->Hs[channel][a_i], u->fft_size);
+ pa_aupdate_write_end(u->a_H[channel]);
}else{
return "incompatible size";
}
@@ -800,13 +836,39 @@ static const char* load_profile(struct userdata *u, char *name){
return "profile doesn't exist";
}
return NULL;
- //fix_filter(u->H, u->fft_size);
}
static void load_state(struct userdata *u){
- char *state_name=pa_sprintf_malloc("%s-previous-state", u->name);
- load_profile(u,state_name);
- pa_xfree(state_name);
+ unsigned a_i;
+ float *H;
+ pa_datum key, value;
+ pa_database *database;
+ char *dbname;
+ char *state_name = u->name;
+
+ pa_assert_se(dbname = pa_state_path(EQ_STATE_DB, FALSE));
+ database = pa_database_open(dbname, FALSE);
+ pa_xfree(dbname);
+ if(!database){
+ return;
+ }
+
+ key.data = state_name;
+ key.size = strlen(key.data);
+
+ if(pa_database_get(database, &key, &value) != NULL){
+ size_t states = PA_MIN(value.size / (CHANNEL_PROFILE_SIZE * sizeof(float)), u->channels);
+ float *state = (float *) value.data;
+ for(size_t c = 0; c < states; ++c){
+ a_i = pa_aupdate_write_begin(u->a_H[c]);
+ H = state + c * CHANNEL_PROFILE_SIZE + 1;
+ u->Xs[c][a_i] = state[c * CHANNEL_PROFILE_SIZE];
+ memcpy(u->Hs[c][a_i], H, FILTER_SIZE * sizeof(float));
+ pa_aupdate_write_end(u->a_H[c]);
+ }
+ pa_datum_free(&value);
+ }
+ pa_database_close(database);
}
/* Called from main context */
@@ -865,8 +927,12 @@ int pa__init(pa_module*m) {
}
if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SINK))) {
- pa_log("Master sink not found");
- goto fail;
+ pa_log("Master sink not found, trying default");
+ master = pa_namereg_get_default_sink(m->core);
+ if(!master){
+ pa_log("no default sink found!");
+ goto fail;
+ }
}
ss = master->sample_spec;
@@ -882,6 +948,9 @@ int pa__init(pa_module*m) {
u->module = m;
m->userdata = u;
+ u->set_default = TRUE;
+ u->set_default = pa_modargs_get_value_boolean(ma, "set_default", &u->set_default);
+
u->channels = ss.channels;
u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
pa_log_debug("fft size: %ld", u->fft_size);
@@ -889,10 +958,16 @@ int pa__init(pa_module*m) {
u->R = (u->window_size + 1) / 2;
u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
- u->a_H = pa_aupdate_new();
+ u->a_H = pa_xnew0(pa_aupdate *, u->channels);
u->latency = u->window_size - u->R;
- for(size_t i = 0; i < 2; ++i){
- u->Hs[i] = alloc((FILTER_SIZE), sizeof(float));
+ u->Xs = pa_xnew0(float *, u->channels);
+ u->Hs = pa_xnew0(float **, u->channels);
+ for(size_t c = 0; c < u->channels; ++c){
+ u->Xs[c] = pa_xnew0(float, 2);
+ u->Hs[c] = pa_xnew0(float *, 2);
+ for(size_t i = 0; i < 2; ++i){
+ u->Hs[c][i] = alloc((FILTER_SIZE), sizeof(float));
+ }
}
u->W = alloc(u->window_size, sizeof(float));
u->work_buffer = alloc(u->fft_size, sizeof(float));
@@ -900,6 +975,7 @@ int pa__init(pa_module*m) {
u->input = pa_xnew0(float *, u->channels);
u->overlap_accum = pa_xnew0(float *, u->channels);
for(size_t c = 0; c < u->channels; ++c){
+ u->a_H[c] = pa_aupdate_new();
u->input[c] = alloc(u->window_size, sizeof(float));
memset(u->input[c], 0, (u->window_size)*sizeof(float));
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
@@ -989,14 +1065,16 @@ int pa__init(pa_module*m) {
dbus_init(u);
//default filter to these
- a_i = pa_aupdate_write_begin(u->a_H);
- H = u->Hs[a_i];
- u->Xs[a_i] = 1.0f;
- for(size_t i = 0; i < FILTER_SIZE; ++i){
- H[i] = 1.0 / sqrtf(2.0f);
+ for(size_t c = 0; c< u->channels; ++c){
+ a_i = pa_aupdate_write_begin(u->a_H[c]);
+ H = u->Hs[c][a_i];
+ u->Xs[c][a_i] = 1.0f;
+ for(size_t i = 0; i < FILTER_SIZE; ++i){
+ H[i] = 1.0 / sqrtf(2.0f);
+ }
+ fix_filter(H, u->fft_size);
+ pa_aupdate_write_end(u->a_H[c]);
}
- fix_filter(H, u->fft_size);
- pa_aupdate_write_end(u->a_H);
//load old parameters
load_state(u);
@@ -1049,23 +1127,30 @@ void pa__done(pa_module*m) {
if (u->sink)
pa_sink_unref(u->sink);
- pa_aupdate_free(u->a_H);
pa_memblockq_free(u->input_q);
fftwf_destroy_plan(u->inverse_plan);
fftwf_destroy_plan(u->forward_plan);
pa_xfree(u->output_window);
for(size_t c=0; c < u->channels; ++c){
+ pa_aupdate_free(u->a_H[c]);
pa_xfree(u->overlap_accum[c]);
pa_xfree(u->input[c]);
}
+ pa_xfree(u->a_H);
pa_xfree(u->overlap_accum);
pa_xfree(u->input);
pa_xfree(u->work_buffer);
pa_xfree(u->W);
- for(size_t i = 0; i < 2; ++i){
- pa_xfree(u->Hs[i]);
+ for(size_t c = 0; c < u->channels; ++c){
+ pa_xfree(u->Xs[c]);
+ for(size_t i = 0; i < 2; ++i){
+ pa_xfree(u->Hs[c][i]);
+ }
+ pa_xfree(u->Hs[c]);
}
+ pa_xfree(u->Xs);
+ pa_xfree(u->Hs);
pa_xfree(u->name);
@@ -1088,11 +1173,12 @@ static void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void
static void equalizer_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
-static void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_get_n_channels(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
enum manager_method_index {
@@ -1158,6 +1244,8 @@ enum equalizer_method_index {
EQUALIZER_METHOD_SEED_FILTER,
EQUALIZER_METHOD_SAVE_PROFILE,
EQUALIZER_METHOD_LOAD_PROFILE,
+ EQUALIZER_METHOD_SET_FILTER,
+ EQUALIZER_METHOD_GET_FILTER,
EQUALIZER_METHOD_MAX
};
@@ -1166,25 +1254,41 @@ enum equalizer_handler_index {
EQUALIZER_HANDLER_SAMPLERATE,
EQUALIZER_HANDLER_FILTERSAMPLERATE,
EQUALIZER_HANDLER_N_COEFS,
- EQUALIZER_HANDLER_FILTER,
+ EQUALIZER_HANDLER_N_CHANNELS,
EQUALIZER_HANDLER_MAX
};
pa_dbus_arg_info filter_points_args[]={
+ {"channel", "u","in"},
{"xs", "au","in"},
{"ys", "ad","out"},
- {"preamp", "d","out"},
+ {"preamp", "d","out"}
};
pa_dbus_arg_info seed_filter_args[]={
+ {"channel", "u","in"},
{"xs", "au","in"},
{"ys", "ad","in"},
- {"preamp", "d","in"},
+ {"preamp", "d","in"}
+};
+
+pa_dbus_arg_info set_filter_args[]={
+ {"channel", "u","in"},
+ {"ys", "ad","in"},
+ {"preamp", "d","in"}
+};
+pa_dbus_arg_info get_filter_args[]={
+ {"channel", "u","in"},
+ {"ys", "ad","out"},
+ {"preamp", "d","out"}
};
+
pa_dbus_arg_info save_profile_args[]={
- {"name", "s","in"},
+ {"channel", "u","in"},
+ {"name", "s","in"}
};
pa_dbus_arg_info load_profile_args[]={
- {"name", "s","in"},
+ {"channel", "u","in"},
+ {"name", "s","in"}
};
static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
@@ -1198,6 +1302,16 @@ static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
.arguments=filter_points_args,
.n_arguments=sizeof(filter_points_args)/sizeof(pa_dbus_arg_info),
.receive_cb=equalizer_handle_get_filter_points},
+ [EQUALIZER_METHOD_SET_FILTER]{
+ .method_name="SetFilter",
+ .arguments=set_filter_args,
+ .n_arguments=sizeof(set_filter_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_set_filter},
+ [EQUALIZER_METHOD_GET_FILTER]{
+ .method_name="GetFilter",
+ .arguments=get_filter_args,
+ .n_arguments=sizeof(get_filter_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_get_filter},
[EQUALIZER_METHOD_SAVE_PROFILE]{
.method_name="SaveProfile",
.arguments=save_profile_args,
@@ -1207,7 +1321,7 @@ static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
.method_name="LoadProfile",
.arguments=load_profile_args,
.n_arguments=sizeof(load_profile_args)/sizeof(pa_dbus_arg_info),
- .receive_cb=equalizer_handle_load_profile},
+ .receive_cb=equalizer_handle_load_profile}
};
static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
@@ -1215,7 +1329,7 @@ static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
[EQUALIZER_HANDLER_SAMPLERATE]{.property_name="SampleRate",.type="u",.get_cb=equalizer_get_sample_rate,.set_cb=NULL},
[EQUALIZER_HANDLER_FILTERSAMPLERATE]{.property_name="FilterSampleRate",.type="u",.get_cb=equalizer_get_filter_rate,.set_cb=NULL},
[EQUALIZER_HANDLER_N_COEFS]{.property_name="NFilterCoefficients",.type="u",.get_cb=equalizer_get_n_coefs,.set_cb=NULL},
- [EQUALIZER_HANDLER_FILTER]{.property_name="Filter",.type="ad",.get_cb=equalizer_get_filter,.set_cb=equalizer_set_filter}
+ [EQUALIZER_HANDLER_N_CHANNELS]{.property_name="NChannels",.type="u",.get_cb=equalizer_get_n_channels,.set_cb=NULL},
};
enum equalizer_signal_index{
@@ -1249,15 +1363,15 @@ void dbus_init(struct userdata *u){
pa_dbus_protocol_add_interface(u->dbus_protocol, u->dbus_path, &equalizer_info, u);
sink_list = pa_shared_get(u->sink->core, SINKLIST);
- u->database=pa_shared_get(u->sink->core, EQDB);
- if(sink_list==NULL){
+ u->database = pa_shared_get(u->sink->core, EQDB);
+ if(sink_list == NULL){
char *dbname;
sink_list=pa_idxset_new(&pa_idxset_trivial_hash_func, &pa_idxset_trivial_compare_func);
pa_shared_set(u->sink->core, SINKLIST, sink_list);
- pa_assert_se(dbname = pa_state_path("equalizers", TRUE));
+ pa_assert_se(dbname = pa_state_path("equalizer-presets", FALSE));
pa_assert_se(u->database = pa_database_open(dbname, TRUE));
pa_xfree(dbname);
- pa_shared_set(u->sink->core,EQDB,u->database);
+ pa_shared_set(u->sink->core, EQDB, u->database);
pa_dbus_protocol_add_interface(u->dbus_protocol, MANAGER_PATH, &manager_info, u->sink->core);
pa_dbus_protocol_register_extension(u->dbus_protocol, EXTNAME);
}
@@ -1448,7 +1562,7 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
DBusError error;
DBusMessage *signal = NULL;
float *ys;
- uint32_t *xs;
+ uint32_t *xs, channel, r_channel;
double *_ys, preamp;
unsigned x_npoints, y_npoints, a_i;
float *H;
@@ -1460,6 +1574,7 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
dbus_error_init(&error);
if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_UINT32, &channel,
DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &xs, &x_npoints,
DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &_ys, &y_npoints,
DBUS_TYPE_DOUBLE, &preamp,
@@ -1468,6 +1583,11 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
dbus_error_free(&error);
return;
}
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
for(size_t i = 0; i < x_npoints; ++i){
if(xs[i] >= FILTER_SIZE){
points_good = FALSE;
@@ -1478,7 +1598,6 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs must be monotonic and 0<=x<=%ld", u->fft_size / 2);
dbus_error_free(&error);
return;
-
}else if(x_npoints != y_npoints || x_npoints < 2 || x_npoints > FILTER_SIZE ){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "xs and ys must be the same length and 2<=l<=%ld!", FILTER_SIZE);
dbus_error_free(&error);
@@ -1493,14 +1612,25 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
for(uint32_t i = 0; i < x_npoints; ++i){
ys[i] = (float) _ys[i];
}
- a_i = pa_aupdate_write_begin(u->a_H);
- H = u->Hs[a_i];
- u->Xs[a_i] = preamp;
+ r_channel = channel == u->channels ? 0 : channel;
+ a_i = pa_aupdate_write_begin(u->a_H[r_channel]);
+ H = u->Hs[r_channel][a_i];
+ u->Xs[r_channel][a_i] = preamp;
interpolate(H, FILTER_SIZE, xs, ys, x_npoints);
fix_filter(H, u->fft_size);
- pa_aupdate_write_end(u->a_H);
+ if(channel == u->channels){
+ for(size_t c = 1; c < u->channels; ++c){
+ unsigned b_i = pa_aupdate_write_begin(u->a_H[c]);
+ float *H_p = u->Hs[c][b_i];
+ u->Xs[c][b_i] = preamp;
+ memcpy(H_p, H, FILTER_SIZE * sizeof(float));
+ pa_aupdate_write_end(u->a_H[c]);
+ }
+ }
+ pa_aupdate_write_end(u->a_H[r_channel]);
pa_xfree(ys);
+
//Stupid for IO reasons? Add a save signal to dbus instead
//save_state(u);
@@ -1513,28 +1643,34 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u = (struct userdata *) _u;
- DBusError error;
- uint32_t *xs;
+ uint32_t *xs, channel, r_channel;
double *ys, preamp;
unsigned x_npoints, a_i;
float *H;
pa_bool_t points_good=TRUE;
DBusMessage *reply = NULL;
DBusMessageIter msg_iter;
+ DBusError error;
pa_assert(conn);
pa_assert(msg);
pa_assert(u);
dbus_error_init(&error);
-
if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_UINT32, &channel,
DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &xs, &x_npoints,
DBUS_TYPE_INVALID)){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
+
for(size_t i = 0; i < x_npoints; ++i){
if(xs[i] >= FILTER_SIZE){
points_good=FALSE;
@@ -1548,14 +1684,15 @@ void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg,
return;
}
+ r_channel = channel == u->channels ? 0 : channel;
ys = pa_xmalloc(x_npoints * sizeof(double));
- a_i = pa_aupdate_read_begin(u->a_H);
- H = u->Hs[a_i];
- preamp = u->Xs[a_i];
+ a_i = pa_aupdate_read_begin(u->a_H[r_channel]);
+ H = u->Hs[r_channel][a_i];
+ preamp = u->Xs[r_channel][a_i];
for(uint32_t i = 0; i < x_npoints; ++i){
ys[i] = H[xs[i]] * u->fft_size;
}
- pa_aupdate_read_end(u->a_H);
+ pa_aupdate_read_end(u->a_H[r_channel]);
pa_assert_se((reply = dbus_message_new_method_return(msg)));
dbus_message_iter_init_append(reply, &msg_iter);
@@ -1568,9 +1705,128 @@ void equalizer_handle_get_filter_points(DBusConnection *conn, DBusMessage *msg,
pa_xfree(ys);
}
+static void get_filter(struct userdata *u, size_t channel, double **H_, double *preamp){
+ float *H;
+ unsigned a_i;
+ size_t r_channel = channel == u->channels ? 0 : channel;
+ *H_ = pa_xnew0(double, FILTER_SIZE);
+ a_i = pa_aupdate_read_begin(u->a_H[r_channel]);
+ H = u->Hs[r_channel][a_i];
+ for(size_t i = 0;i < FILTER_SIZE; ++i){
+ (*H_)[i] = H[i] * u->fft_size;
+ }
+ *preamp = u->Xs[r_channel][a_i];
+
+ pa_aupdate_read_end(u->a_H[r_channel]);
+}
+
+void equalizer_handle_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ unsigned n_coefs;
+ uint32_t channel;
+ double *H_, preamp;
+ DBusMessage *reply = NULL;
+ DBusMessageIter msg_iter;
+ DBusError error;
+ pa_assert_se(u = (struct userdata *) _u);
+ pa_assert(conn);
+ pa_assert(msg);
+
+ dbus_error_init(&error);
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_UINT32, &channel,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
+
+ n_coefs = CHANNEL_PROFILE_SIZE;
+ pa_assert(conn);
+ pa_assert(msg);
+ get_filter(u, channel, &H_, &preamp);
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dbus_message_iter_init_append(reply, &msg_iter);
+
+ pa_dbus_append_basic_array(&msg_iter, DBUS_TYPE_DOUBLE, H_, n_coefs);
+ pa_dbus_append_basic_variant(&msg_iter, DBUS_TYPE_DOUBLE, &preamp);
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+ pa_xfree(H_);
+}
+
+static void set_filter(struct userdata *u, size_t channel, double *H_, double preamp){
+ unsigned a_i;
+ size_t r_channel = channel == u->channels ? 0 : channel;
+ float *H;
+ //all channels
+ a_i = pa_aupdate_write_begin(u->a_H[r_channel]);
+ u->Xs[r_channel][a_i] = (float) preamp;
+ H = u->Hs[r_channel][a_i];
+ for(size_t i = 0; i < FILTER_SIZE; ++i){
+ H[i] = (float) H_[i];
+ }
+ fix_filter(H, u->fft_size);
+ if(channel == u->channels){
+ for(size_t c = 1; c < u->channels; ++c){
+ unsigned b_i = pa_aupdate_write_begin(u->a_H[c]);
+ u->Xs[c][b_i] = u->Xs[r_channel][a_i];
+ memcpy(u->Hs[c][b_i], u->Hs[r_channel][a_i], FILTER_SIZE * sizeof(float));
+ pa_aupdate_write_end(u->a_H[c]);
+ }
+ }
+ pa_aupdate_write_end(u->a_H[r_channel]);
+}
+
+void equalizer_handle_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ double *H, preamp;
+ uint32_t channel;
+ unsigned _n_coefs;
+ DBusMessage *signal = NULL;
+ DBusError error;
+ pa_assert_se(u = (struct userdata *) _u);
+ pa_assert(conn);
+ pa_assert(msg);
+
+ dbus_error_init(&error);
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_UINT32, &channel,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &H, &_n_coefs,
+ DBUS_TYPE_DOUBLE, &preamp,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
+ if(_n_coefs != FILTER_SIZE){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", FILTER_SIZE, _n_coefs);
+ return;
+ }
+ set_filter(u, channel, H, preamp);
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
+ pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
+ dbus_message_unref(signal);
+}
+
void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
struct userdata *u = (struct userdata *) _u;
char *name;
+ uint32_t channel, r_channel;
DBusMessage *signal = NULL;
DBusError error;
pa_assert(conn);
@@ -1579,13 +1835,20 @@ void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void
dbus_error_init(&error);
if(!dbus_message_get_args(msg, &error,
- DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_UINT32, &channel,
+ DBUS_TYPE_STRING, &name,
DBUS_TYPE_INVALID)){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
- save_profile(u,name);
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
+ r_channel = channel == u->channels ? 0 : channel;
+ save_profile(u, r_channel, name);
pa_dbus_send_empty_reply(conn, msg);
pa_assert_se((signal = dbus_message_new_signal(MANAGER_PATH, MANAGER_IFACE, manager_signals[MANAGER_SIGNAL_PROFILES_CHANGED].name)));
@@ -1594,9 +1857,10 @@ void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void
}
void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u) {
- struct userdata *u=(struct userdata *) _u;
+ struct userdata *u = (struct userdata *) _u;
char *name;
DBusError error;
+ uint32_t channel, r_channel;
const char *err_msg = NULL;
DBusMessage *signal = NULL;
@@ -1606,18 +1870,31 @@ void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void
dbus_error_init(&error);
if(!dbus_message_get_args(msg, &error,
- DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_UINT32, &channel,
+ DBUS_TYPE_STRING, &name,
DBUS_TYPE_INVALID)){
pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
dbus_error_free(&error);
return;
}
- err_msg = load_profile(u, name);
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
+ r_channel = channel == u->channels ? 0 : channel;
+
+ err_msg = load_profile(u, r_channel, name);
if(err_msg != NULL){
pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "error loading profile %s: %s", name, err_msg);
dbus_error_free(&error);
return;
}
+ if(channel == u->channels){
+ for(uint32_t c = 1; c < u->channels; ++c){
+ load_profile(u, c, name);
+ }
+ }
pa_dbus_send_empty_reply(conn, msg);
pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
@@ -1630,6 +1907,17 @@ void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
}
+void equalizer_get_n_channels(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u;
+ uint32_t channels;
+ pa_assert_se(u = (struct userdata *) _u);
+ pa_assert(conn);
+ pa_assert(msg);
+
+ channels = (uint32_t) u->channels;
+ pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &channels);
+}
+
void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
uint32_t n_coefs;
@@ -1637,7 +1925,7 @@ void equalizer_get_n_coefs(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_assert(conn);
pa_assert(msg);
- n_coefs = (uint32_t) PROFILE_SIZE;
+ n_coefs = (uint32_t) CHANNEL_PROFILE_SIZE;
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &n_coefs);
}
@@ -1663,84 +1951,19 @@ void equalizer_get_filter_rate(DBusConnection *conn, DBusMessage *msg, void *_u)
pa_dbus_send_basic_variant_reply(conn, msg, DBUS_TYPE_UINT32, &fft_size);
}
-static double * get_filter(struct userdata *u){
- float *H;
- double *H_;
- unsigned a_i;
- H_ = pa_xnew0(double, PROFILE_SIZE);
- a_i = pa_aupdate_read_begin(u->a_H);
- H = u->Hs[a_i];
- H_[0] = u->Xs[a_i];
- for(size_t i = 0;i < FILTER_SIZE; ++i){
- H_[i + 1] = H[i] * u->fft_size;
- }
- pa_aupdate_read_end(u->a_H);
- return H_;
-}
-
-void equalizer_get_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
- struct userdata *u;
- unsigned n_coefs;
- double *H_;
- pa_assert_se(u = (struct userdata *) _u);
-
- n_coefs = PROFILE_SIZE;
- pa_assert(conn);
- pa_assert(msg);
- H_ = get_filter(u);
- pa_dbus_send_basic_array_variant_reply(conn, msg, DBUS_TYPE_DOUBLE, H_, n_coefs);
- pa_xfree(H_);
-}
-
-static void set_filter(struct userdata *u, double *H_){
- unsigned a_i= pa_aupdate_write_begin(u->a_H);
- float *H = u->Hs[a_i];
- u->Xs[a_i] = H_[0];
- for(size_t i = 0; i < FILTER_SIZE; ++i){
- H[i] = (float) H_[i + 1];
- }
- fix_filter(H + 1, u->fft_size);
- pa_aupdate_write_end(u->a_H);
-}
-
-void equalizer_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u){
- struct userdata *u;
- double *H;
- unsigned _n_coefs;
- DBusMessage *signal = NULL;
- pa_assert_se(u = (struct userdata *) _u);
- pa_assert(conn);
- pa_assert(msg);
-
- if(pa_dbus_get_fixed_array_set_property_arg(conn, msg, DBUS_TYPE_DOUBLE, &H, &_n_coefs)){
- return;
- }
- if(_n_coefs != PROFILE_SIZE){
- pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "This filter takes exactly %ld coefficients, you gave %d", PROFILE_SIZE, _n_coefs);
- return;
- }
- set_filter(u, H);
-
- pa_dbus_send_empty_reply(conn, msg);
-
- pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
- pa_dbus_protocol_send_signal(u->dbus_protocol, signal);
- dbus_message_unref(signal);
-}
-
void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u;
DBusMessage *reply = NULL;
DBusMessageIter msg_iter, dict_iter;
- uint32_t rev, n_coefs, rate, fft_size;
- double *H;
+ uint32_t rev, n_coefs, rate, fft_size, channels;
pa_assert_se(u = (struct userdata *) _u);
pa_assert(msg);
rev = 1;
- n_coefs = (uint32_t) PROFILE_SIZE;
+ n_coefs = (uint32_t) CHANNEL_PROFILE_SIZE;
rate = (uint32_t) u->sink->sample_spec.rate;
fft_size = (uint32_t) u->fft_size;
+ channels = (uint32_t) u->channels;
pa_assert_se((reply = dbus_message_new_method_return(msg)));
dbus_message_iter_init_append(reply, &msg_iter);
@@ -1750,9 +1973,7 @@ void equalizer_get_all(DBusConnection *conn, DBusMessage *msg, void *_u){
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_SAMPLERATE].property_name, DBUS_TYPE_UINT32, &rate);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTERSAMPLERATE].property_name, DBUS_TYPE_UINT32, &fft_size);
pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_COEFS].property_name, DBUS_TYPE_UINT32, &n_coefs);
- H = get_filter(u);
- pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_FILTER].property_name, DBUS_TYPE_UINT32, &H);
- pa_xfree(H);
+ pa_dbus_append_basic_variant_dict_entry(&dict_iter, equalizer_handlers[EQUALIZER_HANDLER_N_CHANNELS].property_name, DBUS_TYPE_UINT32, &channels);
pa_assert_se(dbus_message_iter_close_container(&msg_iter, &dict_iter));
pa_assert_se(dbus_connection_send(conn, reply, NULL));
commit f5ceed8151214a95ca2192ed1c681eb31cb0bc98
Author: Jason Newton <nevion at gmail.com>
Date: Thu Aug 20 18:24:19 2009 -0700
module-equalizer-sink: added server side persistance of profile names
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 98b6b89..c531468 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -122,6 +122,7 @@ struct userdata {
pa_bool_t set_default;
pa_database *database;
+ char **base_profiles;
};
static const char* const valid_modargs[] = {
@@ -143,7 +144,7 @@ static const char* const valid_modargs[] = {
#define EQ_STATE_DB "equalizer-state"
#define FILTER_SIZE (u->fft_size / 2 + 1)
#define CHANNEL_PROFILE_SIZE (FILTER_SIZE + 1)
-#define STATE_SIZE (CHANNEL_PROFILE_SIZE * u->channels)
+#define FILTER_STATE_SIZE (CHANNEL_PROFILE_SIZE * u->channels)
static void dbus_init(struct userdata *u);
static void dbus_done(struct userdata *u);
@@ -199,7 +200,7 @@ static int is_monotonic(const uint32_t *xs,size_t length){
/* Called from I/O thread context */
-static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
struct userdata *u = PA_SINK(o)->userdata;
switch (code) {
@@ -234,7 +235,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
/* Called from main context */
-static int sink_set_state(pa_sink *s, pa_sink_state_t state) {
+static int sink_set_state_cb(pa_sink *s, pa_sink_state_t state) {
struct userdata *u;
pa_sink_assert_ref(s);
@@ -249,7 +250,7 @@ static int sink_set_state(pa_sink *s, pa_sink_state_t state) {
}
/* Called from I/O thread context */
-static void sink_request_rewind(pa_sink *s) {
+static void sink_request_rewind_cb(pa_sink *s) {
struct userdata *u;
pa_sink_assert_ref(s);
@@ -264,7 +265,7 @@ static void sink_request_rewind(pa_sink *s) {
}
/* Called from I/O thread context */
-static void sink_update_requested_latency(pa_sink *s) {
+static void sink_update_requested_latency_cb(pa_sink *s) {
struct userdata *u;
pa_sink_assert_ref(s);
@@ -280,6 +281,35 @@ static void sink_update_requested_latency(pa_sink *s) {
pa_sink_get_requested_latency_within_thread(s));
}
+/* Called from main context */
+static void sink_set_volume_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(pa_sink_get_state(s)) ||
+ !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+ return;
+
+ pa_sink_input_set_volume(u->sink_input, &s->real_volume, s->save_volume, TRUE);
+}
+
+/* Called from main context */
+static void sink_set_mute_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(pa_sink_get_state(s)) ||
+ !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+ return;
+
+ pa_sink_input_set_mute(u->sink_input, s->muted, s->save_muted);
+}
+
+
//reference implementation
static void dsp_logic(
float * restrict dst,//used as a temp array too, needs to be fft_length!
@@ -581,6 +611,26 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
return 0;
}
+/* Called from main context */
+static void sink_input_volume_changed_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_volume_changed(u->sink, &i->volume);
+}
+
+/* Called from main context */
+static void sink_input_mute_changed_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_mute_changed(u->sink, i->muted);
+}
+
static void reset_filter(struct userdata *u){
u->samples_gathered = 0;
for(size_t i = 0;i < u->channels; ++i){
@@ -745,6 +795,41 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
}
}
+static void pack(char **strs, size_t len, char **packed, size_t *length){
+ size_t t_len = 0;
+ size_t headers = (1+len) * sizeof(uint16_t);
+ size_t offset = sizeof(uint16_t);
+ for(size_t i = 0; i < len; ++i){
+ t_len += strlen(strs[i]);
+ }
+ *length = headers + t_len;
+ *packed = pa_xmalloc0(*length);
+ ((uint16_t *) *packed)[0] = (uint16_t) len;
+ for(size_t i = 0; i < len; ++i){
+ uint16_t l = strlen(strs[i]);
+ *((uint16_t *)(*packed + offset)) = l;
+ offset += sizeof(uint16_t);
+ memcpy(*packed + offset, strs[i], l);
+ offset += l;
+ }
+}
+static void unpack(char *str, size_t length, char ***strs, size_t *len){
+ size_t offset = sizeof(uint16_t);
+ *len = ((uint16_t *)str)[0];
+ *strs = pa_xnew(char *, *len);
+ for(size_t i = 0; i < *len; ++i){
+ size_t l = *((uint16_t *)(str+offset));
+ size_t e = PA_MIN(offset + l, length) - offset;
+ offset = PA_MIN(offset + sizeof(uint16_t), length);
+ if(e > 0){
+ (*strs)[i] = pa_xnew(char, e + 1);
+ memcpy((*strs)[i], strs + offset, e);
+ (*strs)[i][e] = '\0';
+ }else{
+ (*strs)[i]=NULL;
+ }
+ }
+}
static void save_profile(struct userdata *u, size_t channel, char *name){
unsigned a_i;
const size_t profile_size = CHANNEL_PROFILE_SIZE * sizeof(float);
@@ -767,18 +852,26 @@ static void save_profile(struct userdata *u, size_t channel, char *name){
data.size = profile_size;
pa_database_set(u->database, &key, &data, TRUE);
pa_database_sync(u->database);
+ if(u->base_profiles[channel]){
+ pa_xfree(u->base_profiles[channel]);
+ }
+ u->base_profiles[channel] = pa_xstrdup(name);
}
static void save_state(struct userdata *u){
unsigned a_i;
- const size_t state_size = STATE_SIZE * sizeof(float);
+ const size_t filter_state_size = FILTER_STATE_SIZE * sizeof(float);
float *H_n, *state;
float *H;
pa_datum key, data;
pa_database *database;
char *dbname;
char *state_name = u->name;
- state = pa_xnew0(float, STATE_SIZE);
+ char *packed;
+ size_t packed_length;
+
+ pack(u->base_profiles, u->channels, &packed, &packed_length);
+ state = (float *) pa_xmalloc0(filter_state_size + packed_length);
for(size_t c = 0; c < u->channels; ++c){
a_i = pa_aupdate_read_begin(u->a_H[c]);
@@ -788,11 +881,13 @@ static void save_state(struct userdata *u){
memcpy(H_n, H, FILTER_SIZE * sizeof(float));
pa_aupdate_read_end(u->a_H[c]);
}
+ memcpy(((char *)state) + filter_state_size, packed, packed_length);
+ pa_xfree(packed);
key.data = state_name;
key.size = strlen(key.data);
data.data = state;
- data.size = state_size;
+ data.size = filter_state_size + packed_length;
//thread safety for 0.9.17?
pa_assert_se(dbname = pa_state_path(EQ_STATE_DB, TRUE));
pa_assert_se(database = pa_database_open(dbname, TRUE));
@@ -828,6 +923,10 @@ static const char* load_profile(struct userdata *u, size_t channel, char *name){
memcpy(u->Hs[channel][a_i], profile + 1, CHANNEL_PROFILE_SIZE * sizeof(float));
fix_filter(u->Hs[channel][a_i], u->fft_size);
pa_aupdate_write_end(u->a_H[channel]);
+ if(u->base_profiles[channel]){
+ pa_xfree(u->base_profiles[channel]);
+ }
+ u->base_profiles[channel] = pa_xstrdup(name);
}else{
return "incompatible size";
}
@@ -845,7 +944,6 @@ static void load_state(struct userdata *u){
pa_database *database;
char *dbname;
char *state_name = u->name;
-
pa_assert_se(dbname = pa_state_path(EQ_STATE_DB, FALSE));
database = pa_database_open(dbname, FALSE);
pa_xfree(dbname);
@@ -857,14 +955,26 @@ static void load_state(struct userdata *u){
key.size = strlen(key.data);
if(pa_database_get(database, &key, &value) != NULL){
- size_t states = PA_MIN(value.size / (CHANNEL_PROFILE_SIZE * sizeof(float)), u->channels);
- float *state = (float *) value.data;
- for(size_t c = 0; c < states; ++c){
- a_i = pa_aupdate_write_begin(u->a_H[c]);
- H = state + c * CHANNEL_PROFILE_SIZE + 1;
- u->Xs[c][a_i] = state[c * CHANNEL_PROFILE_SIZE];
- memcpy(u->Hs[c][a_i], H, FILTER_SIZE * sizeof(float));
- pa_aupdate_write_end(u->a_H[c]);
+ if(value.size > FILTER_STATE_SIZE * sizeof(float) + sizeof(uint16_t)){
+ float *state = (float *) value.data;
+ size_t n_profs;
+ char **names;
+ for(size_t c = 0; c < u->channels; ++c){
+ a_i = pa_aupdate_write_begin(u->a_H[c]);
+ H = state + c * CHANNEL_PROFILE_SIZE + 1;
+ u->Xs[c][a_i] = state[c * CHANNEL_PROFILE_SIZE];
+ memcpy(u->Hs[c][a_i], H, FILTER_SIZE * sizeof(float));
+ pa_aupdate_write_end(u->a_H[c]);
+ }
+ unpack(((char *)value.data) + FILTER_STATE_SIZE, value.size - FILTER_STATE_SIZE, &names, &n_profs);
+ n_profs = PA_MIN(n_profs, u->channels);
+ for(size_t c = 0; c < n_profs; ++c){
+ if(u->base_profiles[c]){
+ pa_xfree(u->base_profiles[c]);
+ }
+ u->base_profiles[c] = names[c];
+ }
+ pa_xfree(names);
}
pa_datum_free(&value);
}
@@ -898,8 +1008,6 @@ static void * alloc(size_t x,size_t s){
size_t f = PA_ROUND_UP(x*s, sizeof(float)*v_size);
float *t;
pa_assert(f >= x*s);
- //printf("requested %ld floats=%ld bytes, rem=%ld\n", x, x*sizeof(float), x*sizeof(float)%16);
- //printf("giving %ld floats=%ld bytes, rem=%ld\n", f, f*sizeof(float), f*sizeof(float)%16);
t = fftwf_malloc(f);
memset(t, 0, f);
return t;
@@ -914,7 +1022,6 @@ int pa__init(pa_module*m) {
pa_sink *master;
pa_sink_input_new_data sink_input_data;
pa_sink_new_data sink_data;
- pa_bool_t *use_default = NULL;
size_t fs;
float *H;
unsigned a_i;
@@ -988,6 +1095,8 @@ int pa__init(pa_module*m) {
hanning_window(u->W, u->window_size);
u->first_iteration = TRUE;
+ u->base_profiles = pa_xnew0(char *, u->channels);
+
/* Create sink */
pa_sink_new_data_init(&sink_data);
sink_data.driver = __FILE__;
@@ -1007,7 +1116,9 @@ int pa__init(pa_module*m) {
goto fail;
}
- u->sink = pa_sink_new(m->core, &sink_data, master->flags & (PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY));
+ u->sink = pa_sink_new(m->core, &sink_data,
+ PA_SINK_HW_MUTE_CTRL|PA_SINK_HW_VOLUME_CTRL|PA_SINK_DECIBEL_VOLUME|
+ (master->flags & (PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY)));
pa_sink_new_data_done(&sink_data);
if (!u->sink) {
@@ -1015,10 +1126,12 @@ int pa__init(pa_module*m) {
goto fail;
}
u->name=pa_xstrdup(u->sink->name);
- u->sink->parent.process_msg = sink_process_msg;
- u->sink->set_state = sink_set_state;
- u->sink->update_requested_latency = sink_update_requested_latency;
- u->sink->request_rewind = sink_request_rewind;
+ u->sink->parent.process_msg = sink_process_msg_cb;
+ u->sink->set_state = sink_set_state_cb;
+ u->sink->update_requested_latency = sink_update_requested_latency_cb;
+ u->sink->request_rewind = sink_request_rewind_cb;
+ u->sink->set_volume = sink_set_volume_cb;
+ u->sink->set_mute = sink_set_mute_cb;
u->sink->userdata = u;
u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, &u->sink->silence);
@@ -1053,6 +1166,9 @@ int pa__init(pa_module*m) {
u->sink_input->state_change = sink_input_state_change_cb;
u->sink_input->may_move_to = sink_input_may_move_to_cb;
u->sink_input->moving = sink_input_moving_cb;
+ u->sink_input->volume_changed = sink_input_volume_changed_cb;
+ u->sink_input->mute_changed = sink_input_mute_changed_cb;
+
u->sink_input->userdata = u;
pa_sink_put(u->sink);
@@ -1060,7 +1176,6 @@ int pa__init(pa_module*m) {
pa_modargs_free(ma);
- pa_xfree(use_default);
dbus_init(u);
@@ -1084,7 +1199,6 @@ fail:
if (ma)
pa_modargs_free(ma);
- pa_xfree(use_default);
pa__done(m);
@@ -1112,6 +1226,13 @@ void pa__done(pa_module*m) {
dbus_done(u);
+ for(size_t c = 0; c < u->channels; ++c){
+ if(u->base_profiles[c]){
+ pa_xfree(u->base_profiles[c]);
+ }
+ }
+ pa_xfree(u->base_profiles);
+
/* See comments in sink_input_kill_cb() above regarding
* destruction order! */
@@ -1181,6 +1302,7 @@ static void equalizer_handle_get_filter(DBusConnection *conn, DBusMessage *msg,
static void equalizer_handle_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_get_profile_name(DBusConnection *conn, DBusMessage *msg, void *_u);
enum manager_method_index {
MANAGER_METHOD_REMOVE_PROFILE,
MANAGER_METHOD_MAX
@@ -1246,6 +1368,7 @@ enum equalizer_method_index {
EQUALIZER_METHOD_LOAD_PROFILE,
EQUALIZER_METHOD_SET_FILTER,
EQUALIZER_METHOD_GET_FILTER,
+ EQUALIZER_METHOD_GET_PROFILE_NAME,
EQUALIZER_METHOD_MAX
};
@@ -1290,6 +1413,10 @@ pa_dbus_arg_info load_profile_args[]={
{"channel", "u","in"},
{"name", "s","in"}
};
+pa_dbus_arg_info base_profile_name_args[]={
+ {"channel", "u","in"},
+ {"name", "s","out"}
+};
static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
[EQUALIZER_METHOD_SEED_FILTER]{
@@ -1321,7 +1448,12 @@ static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
.method_name="LoadProfile",
.arguments=load_profile_args,
.n_arguments=sizeof(load_profile_args)/sizeof(pa_dbus_arg_info),
- .receive_cb=equalizer_handle_load_profile}
+ .receive_cb=equalizer_handle_load_profile},
+ [EQUALIZER_METHOD_GET_PROFILE_NAME]{
+ .method_name="BaseProfile",
+ .arguments=base_profile_name_args,
+ .n_arguments=sizeof(base_profile_name_args)/sizeof(pa_dbus_arg_info),
+ .receive_cb=equalizer_handle_get_profile_name}
};
static pa_dbus_property_handler equalizer_handlers[EQUALIZER_HANDLER_MAX]={
@@ -1631,9 +1763,6 @@ void equalizer_handle_seed_filter(DBusConnection *conn, DBusMessage *msg, void *
pa_xfree(ys);
- //Stupid for IO reasons? Add a save signal to dbus instead
- //save_state(u);
-
pa_dbus_send_empty_reply(conn, msg);
pa_assert_se((signal = dbus_message_new_signal(u->dbus_path, EQUALIZER_IFACE, equalizer_signals[EQUALIZER_SIGNAL_FILTER_CHANGED].name)));
@@ -1902,6 +2031,36 @@ void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void
dbus_message_unref(signal);
}
+void equalizer_handle_get_profile_name(DBusConnection *conn, DBusMessage *msg, void *_u){
+ struct userdata *u = (struct userdata *) _u;
+ DBusError error;
+ uint32_t channel, r_channel;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+ dbus_error_init(&error);
+
+ if(!dbus_message_get_args(msg, &error,
+ DBUS_TYPE_UINT32, &channel,
+ DBUS_TYPE_INVALID)){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", error.message);
+ dbus_error_free(&error);
+ return;
+ }
+ if(channel > u->channels){
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "invalid channel: %d", channel);
+ dbus_error_free(&error);
+ return;
+ }
+ r_channel = channel == u->channels ? 0 : channel;
+ if(u->base_profiles[r_channel]){
+ pa_dbus_send_basic_value_reply(conn,msg, DBUS_TYPE_STRING, &u->base_profiles[r_channel]);
+ }else{
+ pa_dbus_send_empty_reply(conn, msg);
+ }
+}
+
void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
uint32_t rev=1;
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_UINT32, &rev);
commit 263b683437b9a88722f80fd0abea9ca1998fbd36
Author: Jason Newton <nevion at gmail.com>
Date: Thu Aug 20 23:55:02 2009 -0700
module-equalizer-sink: fix improper usage of pa_modargs_get_value_boolean for u->set_default
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index c531468..9a79cb9 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -753,6 +753,7 @@ static void sink_input_attach_cb(pa_sink_input *i) {
//pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
pa_sink_attach_within_thread(u->sink);
if(u->set_default){
+ pa_log("Setting default sink to %s", u->sink->name);
pa_namereg_set_default_sink(u->module->core, u->sink);
}
}
@@ -1056,7 +1057,7 @@ int pa__init(pa_module*m) {
m->userdata = u;
u->set_default = TRUE;
- u->set_default = pa_modargs_get_value_boolean(ma, "set_default", &u->set_default);
+ pa_modargs_get_value_boolean(ma, "set_default", &u->set_default);
u->channels = ss.channels;
u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
commit 3053badf0684e077fca8e8fddb43b4e9f2a5c30c
Author: Jason Newton <nevion at gmail.com>
Date: Sun Aug 23 15:49:27 2009 -0700
module-equalizer-sink: resync with ladspa parent sink
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 9a79cb9..f634d5e 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -998,9 +998,11 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
-
- pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
- pa_sink_update_flags(u->sink, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
+ if (dest) {
+ pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
+ pa_sink_update_flags(u->sink, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
+ } else
+ pa_sink_set_asyncmsgq(u->sink, NULL);
}
//ensure's memory allocated is a multiple of v_size
commit bc869b5b28a0e0d4d53bc0a56174cda8212da1ca
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Jun 27 21:03:37 2009 +0100
device-manager: Add a new module to keep track of the names and descriptions of various sinks.
This will be used as the basis for a queryable system for past and present devices, initially for use in KDE.
Currently all this module does is save lists of sinks/sources and their descriptions, so it needs to
gain a protocol extension to make this queryable.
As things stand it will save the device descriptions of all sinks and restore them if they differ from whats on record.
diff --git a/src/Makefile.am b/src/Makefile.am
index 6544e2a..6e3d79b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -990,7 +990,8 @@ modlibexec_LTLIBRARIES += \
module-sine-source.la \
module-detect.la \
module-volume-restore.la \
- module-device-restore.la \
+ module-device-manager.la \
+ module-device-restore.la \
module-stream-restore.la \
module-card-restore.la \
module-default-device-restore.la \
@@ -1231,7 +1232,8 @@ SYMDEF_FILES = \
modules/jack/module-jack-sink-symdef.h \
modules/jack/module-jack-source-symdef.h \
modules/module-volume-restore-symdef.h \
- modules/module-device-restore-symdef.h \
+ modules/module-device-manager-symdef.h \
+ modules/module-device-restore-symdef.h \
modules/module-stream-restore-symdef.h \
modules/module-card-restore-symdef.h \
modules/module-default-device-restore-symdef.h \
@@ -1539,6 +1541,12 @@ module_cork_music_on_phone_la_LDFLAGS = $(MODULE_LDFLAGS)
module_cork_music_on_phone_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_cork_music_on_phone_la_CFLAGS = $(AM_CFLAGS)
+# Device description restore module
+module_device_manager_la_SOURCES = modules/module-device-manager.c
+module_device_manager_la_LDFLAGS = $(MODULE_LDFLAGS)
+module_device_manager_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_device_manager_la_CFLAGS = $(AM_CFLAGS)
+
# Device volume/muted restore module
module_device_restore_la_SOURCES = modules/module-device-restore.c
module_device_restore_la_LDFLAGS = $(MODULE_LDFLAGS)
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
new file mode 100644
index 0000000..96d4a66
--- /dev/null
+++ b/src/modules/module-device-manager.c
@@ -0,0 +1,352 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2006-2008 Lennart Poettering
+ Copyright 2009 Colin Guthrie
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <pulse/xmalloc.h>
+#include <pulse/volume.h>
+#include <pulse/timeval.h>
+#include <pulse/util.h>
+#include <pulse/rtclock.h>
+
+#include <pulsecore/core-error.h>
+#include <pulsecore/module.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/core-subscribe.h>
+#include <pulsecore/sink-input.h>
+#include <pulsecore/source-output.h>
+#include <pulsecore/namereg.h>
+#include <pulsecore/database.h>
+
+#include "module-device-manager-symdef.h"
+
+PA_MODULE_AUTHOR("Colin Guthrie");
+PA_MODULE_DESCRIPTION("Keep track of devices (and their descriptions) both past and present");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_USAGE("This module does not take any arguments");
+
+#define SAVE_INTERVAL (10 * PA_USEC_PER_SEC)
+
+static const char* const valid_modargs[] = {
+ NULL
+};
+
+struct userdata {
+ pa_core *core;
+ pa_module *module;
+ pa_subscription *subscription;
+ pa_hook_slot
+ *sink_new_hook_slot,
+ *source_new_hook_slot;
+ pa_time_event *save_time_event;
+ pa_database *database;
+};
+
+#define ENTRY_VERSION 1
+
+struct entry {
+ uint8_t version;
+ char description[PA_NAME_MAX];
+} PA_GCC_PACKED;
+
+static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
+ struct userdata *u = userdata;
+
+ pa_assert(a);
+ pa_assert(e);
+ pa_assert(u);
+
+ pa_assert(e == u->save_time_event);
+ u->core->mainloop->time_free(u->save_time_event);
+ u->save_time_event = NULL;
+
+ pa_database_sync(u->database);
+ pa_log_info("Synced.");
+}
+
+static struct entry* read_entry(struct userdata *u, const char *name) {
+ pa_datum key, data;
+ struct entry *e;
+
+ pa_assert(u);
+ pa_assert(name);
+
+ key.data = (char*) name;
+ key.size = strlen(name);
+
+ pa_zero(data);
+
+ if (!pa_database_get(u->database, &key, &data))
+ goto fail;
+
+ if (data.size != sizeof(struct entry)) {
+ pa_log_debug("Database contains entry for device %s of wrong size %lu != %lu. Probably due to upgrade, ignoring.", name, (unsigned long) data.size, (unsigned long) sizeof(struct entry));
+ goto fail;
+ }
+
+ e = (struct entry*) data.data;
+
+ if (e->version != ENTRY_VERSION) {
+ pa_log_debug("Version of database entry for device %s doesn't match our version. Probably due to upgrade, ignoring.", name);
+ goto fail;
+ }
+
+ if (!memchr(e->description, 0, sizeof(e->description))) {
+ pa_log_warn("Database contains entry for device %s with missing NUL byte in description", name);
+ goto fail;
+ }
+
+ return e;
+
+fail:
+
+ pa_datum_free(&data);
+ return NULL;
+}
+
+static void trigger_save(struct userdata *u) {
+ if (u->save_time_event)
+ return;
+
+ u->save_time_event = pa_core_rttime_new(u->core, pa_rtclock_now() + SAVE_INTERVAL, save_time_callback, u);
+}
+
+static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
+ if (strncmp(a->description, b->description, sizeof(a->description)))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ struct userdata *u = userdata;
+ struct entry entry, *old;
+ char *name;
+ pa_datum key, data;
+
+ pa_assert(c);
+ pa_assert(u);
+
+ if (t != (PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_NEW) &&
+ t != (PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_CHANGE) &&
+ t != (PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW) &&
+ t != (PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_CHANGE))
+ return;
+
+ pa_zero(entry);
+ entry.version = ENTRY_VERSION;
+
+ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK) {
+ pa_sink *sink;
+
+ if (!(sink = pa_idxset_get_by_index(c->sinks, idx)))
+ return;
+
+ name = pa_sprintf_malloc("sink:%s", sink->name);
+
+ if ((old = read_entry(u, name)))
+ entry = *old;
+
+ pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+
+ } else {
+ pa_source *source;
+
+ pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE);
+
+ if (!(source = pa_idxset_get_by_index(c->sources, idx)))
+ return;
+
+ name = pa_sprintf_malloc("source:%s", source->name);
+
+ if ((old = read_entry(u, name)))
+ entry = *old;
+
+ pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ }
+
+ if (old) {
+
+ if (entries_equal(old, &entry)) {
+ pa_xfree(old);
+ pa_xfree(name);
+ return;
+ }
+
+ pa_xfree(old);
+ }
+
+ key.data = name;
+ key.size = strlen(name);
+
+ data.data = &entry;
+ data.size = sizeof(entry);
+
+ pa_log_info("Storing device description for %s.", name);
+
+ pa_database_set(u->database, &key, &data, TRUE);
+
+ pa_xfree(name);
+
+ trigger_save(u);
+}
+
+static pa_hook_result_t sink_new_hook_callback(pa_core *c, pa_sink_new_data *new_data, struct userdata *u) {
+ char *name;
+ struct entry *e;
+
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ name = pa_sprintf_malloc("sink:%s", new_data->name);
+
+ if ((e = read_entry(u, name))) {
+ if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
+ pa_log_info("Restoring description for sink %s.", name);
+ pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
+ }
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data *new_data, struct userdata *u) {
+ char *name;
+ struct entry *e;
+
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ name = pa_sprintf_malloc("source:%s", new_data->name);
+
+ if ((e = read_entry(u, name))) {
+
+ if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
+ pa_log_info("Restoring description for sink %s.", name);
+ pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
+ }
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+
+ return PA_HOOK_OK;
+}
+
+int pa__init(pa_module*m) {
+ pa_modargs *ma = NULL;
+ struct userdata *u;
+ char *fname;
+ pa_sink *sink;
+ pa_source *source;
+ uint32_t idx;
+
+ 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->core = m->core;
+ u->module = m;
+
+ u->subscription = pa_subscription_new(m->core, PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE, subscribe_callback, u);
+
+ u->sink_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) sink_new_hook_callback, u);
+ u->source_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) source_new_hook_callback, u);
+
+ if (!(fname = pa_state_path("device-manager", TRUE)))
+ goto fail;
+
+ if (!(u->database = pa_database_open(fname, TRUE))) {
+ pa_log("Failed to open volume database '%s': %s", fname, pa_cstrerror(errno));
+ pa_xfree(fname);
+ goto fail;
+ }
+
+ pa_log_info("Sucessfully opened database file '%s'.", fname);
+ pa_xfree(fname);
+
+ for (sink = pa_idxset_first(m->core->sinks, &idx); sink; sink = pa_idxset_next(m->core->sinks, &idx))
+ subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_NEW, sink->index, u);
+
+ for (source = pa_idxset_first(m->core->sources, &idx); source; source = pa_idxset_next(m->core->sources, &idx))
+ subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW, source->index, u);
+
+ pa_modargs_free(ma);
+ return 0;
+
+fail:
+ pa__done(m);
+
+ if (ma)
+ pa_modargs_free(ma);
+
+ return -1;
+}
+
+void pa__done(pa_module*m) {
+ struct userdata* u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ if (u->subscription)
+ pa_subscription_free(u->subscription);
+
+ if (u->sink_new_hook_slot)
+ pa_hook_slot_free(u->sink_new_hook_slot);
+ if (u->source_new_hook_slot)
+ pa_hook_slot_free(u->source_new_hook_slot);
+
+ if (u->save_time_event)
+ u->core->mainloop->time_free(u->save_time_event);
+
+ if (u->database)
+ pa_database_close(u->database);
+
+ pa_xfree(u);
+}
commit 37e82cec0ad13923a5db259a88bd00a2840112c6
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Jun 27 22:08:07 2009 +0100
device-manager: Add an untested protocol extension.
This is effectively copied from the stream restore extension.
diff --git a/src/Makefile.am b/src/Makefile.am
index 6e3d79b..b7ebac5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -689,6 +689,7 @@ pulseinclude_HEADERS = \
pulse/context.h \
pulse/def.h \
pulse/error.h \
+ pulse/ext-device-manager.h \
pulse/ext-stream-restore.h \
pulse/gccmacro.h \
pulse/introspect.h \
@@ -739,6 +740,7 @@ libpulse_la_SOURCES = \
pulse/context.c pulse/context.h \
pulse/def.h \
pulse/error.c pulse/error.h \
+ pulse/ext-device-manager.c pulse/ext-device-manager.h \
pulse/ext-stream-restore.c pulse/ext-stream-restore.h \
pulse/gccmacro.h \
pulse/internal.h \
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 96d4a66..b41f71c 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -47,6 +47,9 @@
#include <pulsecore/sink-input.h>
#include <pulsecore/source-output.h>
#include <pulsecore/namereg.h>
+#include <pulsecore/protocol-native.h>
+#include <pulsecore/pstream.h>
+#include <pulsecore/pstream-util.h>
#include <pulsecore/database.h>
#include "module-device-manager-symdef.h"
@@ -69,9 +72,13 @@ struct userdata {
pa_subscription *subscription;
pa_hook_slot
*sink_new_hook_slot,
- *source_new_hook_slot;
+ *source_new_hook_slot,
+ *connection_unlink_hook_slot;
pa_time_event *save_time_event;
pa_database *database;
+
+ pa_native_protocol *protocol;
+ pa_idxset *subscribed;
};
#define ENTRY_VERSION 1
@@ -81,6 +88,15 @@ struct entry {
char description[PA_NAME_MAX];
} PA_GCC_PACKED;
+enum {
+ SUBCOMMAND_TEST,
+ SUBCOMMAND_READ,
+ SUBCOMMAND_WRITE,
+ SUBCOMMAND_DELETE,
+ SUBCOMMAND_SUBSCRIBE,
+ SUBCOMMAND_EVENT
+};
+
static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
struct userdata *u = userdata;
@@ -272,6 +288,230 @@ static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data
return PA_HOOK_OK;
}
+static char *get_name(const char *key, const char *prefix) {
+ char *t;
+
+ if (strncmp(key, prefix, sizeof(prefix)))
+ return NULL;
+
+ t = pa_xstrdup(key + sizeof(prefix));
+ return t;
+}
+
+static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
+ pa_sink *sink;
+ pa_source *source;
+ uint32_t idx;
+
+ pa_assert(u);
+ pa_assert(name);
+ pa_assert(e);
+
+ for (sink = pa_idxset_first(u->core->sinks, &idx); sink; sink = pa_idxset_next(u->core->sinks, &idx)) {
+ char *n;
+
+ if (!(n = get_name(name, "sink")))
+ continue;
+
+ if (!pa_streq(sink->name, n)) {
+ pa_xfree(n);
+ continue;
+ }
+ pa_xfree(n);
+
+ pa_log_info("Restoring description for sink %s.", sink->name);
+ pa_proplist_sets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
+ }
+
+ for (source = pa_idxset_first(u->core->sources, &idx); source; source = pa_idxset_next(u->core->sources, &idx)) {
+ char *n;
+
+ if (!(n = get_name(name, "source")))
+ continue;
+
+ if (!pa_streq(source->name, n)) {
+ pa_xfree(n);
+ continue;
+ }
+ pa_xfree(n);
+
+ pa_log_info("Restoring description for source %s.", source->name);
+ pa_proplist_sets(source->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
+ }
+}
+
+#define EXT_VERSION 1
+
+static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connection *c, uint32_t tag, pa_tagstruct *t) {
+ struct userdata *u;
+ uint32_t command;
+ pa_tagstruct *reply = NULL;
+
+ pa_assert(p);
+ pa_assert(m);
+ pa_assert(c);
+ pa_assert(t);
+
+ u = m->userdata;
+
+ if (pa_tagstruct_getu32(t, &command) < 0)
+ goto fail;
+
+ reply = pa_tagstruct_new(NULL, 0);
+ pa_tagstruct_putu32(reply, PA_COMMAND_REPLY);
+ pa_tagstruct_putu32(reply, tag);
+
+ switch (command) {
+ case SUBCOMMAND_TEST: {
+ if (!pa_tagstruct_eof(t))
+ goto fail;
+
+ pa_tagstruct_putu32(reply, EXT_VERSION);
+ break;
+ }
+
+ case SUBCOMMAND_READ: {
+ pa_datum key;
+ pa_bool_t done;
+
+ if (!pa_tagstruct_eof(t))
+ goto fail;
+
+ done = !pa_database_first(u->database, &key, NULL);
+
+ while (!done) {
+ pa_datum next_key;
+ struct entry *e;
+ char *name;
+
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
+
+ name = pa_xstrndup(key.data, key.size);
+ pa_datum_free(&key);
+
+ if ((e = read_entry(u, name))) {
+ pa_tagstruct_puts(reply, name);
+ pa_tagstruct_puts(reply, e->description);
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+
+ key = next_key;
+ }
+
+ break;
+ }
+
+ case SUBCOMMAND_WRITE: {
+ uint32_t mode;
+ pa_bool_t apply_immediately = FALSE;
+
+ if (pa_tagstruct_getu32(t, &mode) < 0 ||
+ pa_tagstruct_get_boolean(t, &apply_immediately) < 0)
+ goto fail;
+
+ if (mode != PA_UPDATE_MERGE &&
+ mode != PA_UPDATE_REPLACE &&
+ mode != PA_UPDATE_SET)
+ goto fail;
+
+ if (mode == PA_UPDATE_SET)
+ pa_database_clear(u->database);
+
+ while (!pa_tagstruct_eof(t)) {
+ const char *name, *description;
+ struct entry entry;
+ pa_datum key, data;
+
+ pa_zero(entry);
+ entry.version = ENTRY_VERSION;
+
+ if (pa_tagstruct_gets(t, &name) < 0 ||
+ pa_tagstruct_gets(reply, &description) < 0)
+ goto fail;
+
+ if (!name || !*name)
+ goto fail;
+
+ pa_strlcpy(entry.description, description, sizeof(entry.description));
+
+ key.data = (char*) name;
+ key.size = strlen(name);
+
+ data.data = &entry;
+ data.size = sizeof(entry);
+
+ if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0)
+ if (apply_immediately)
+ apply_entry(u, name, &entry);
+ }
+
+ trigger_save(u);
+
+ break;
+ }
+
+ case SUBCOMMAND_DELETE:
+
+ while (!pa_tagstruct_eof(t)) {
+ const char *name;
+ pa_datum key;
+
+ if (pa_tagstruct_gets(t, &name) < 0)
+ goto fail;
+
+ key.data = (char*) name;
+ key.size = strlen(name);
+
+ pa_database_unset(u->database, &key);
+ }
+
+ trigger_save(u);
+
+ break;
+
+ case SUBCOMMAND_SUBSCRIBE: {
+
+ pa_bool_t enabled;
+
+ if (pa_tagstruct_get_boolean(t, &enabled) < 0 ||
+ !pa_tagstruct_eof(t))
+ goto fail;
+
+ if (enabled)
+ pa_idxset_put(u->subscribed, c, NULL);
+ else
+ pa_idxset_remove_by_data(u->subscribed, c, NULL);
+
+ break;
+ }
+
+ default:
+ goto fail;
+ }
+
+ pa_pstream_send_tagstruct(pa_native_connection_get_pstream(c), reply);
+ return 0;
+
+ fail:
+
+ if (reply)
+ pa_tagstruct_free(reply);
+
+ return -1;
+}
+
+static pa_hook_result_t connection_unlink_hook_cb(pa_native_protocol *p, pa_native_connection *c, struct userdata *u) {
+ pa_assert(p);
+ pa_assert(c);
+ pa_assert(u);
+
+ pa_idxset_remove_by_data(u->subscribed, c, NULL);
+ return PA_HOOK_OK;
+}
+
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
@@ -290,6 +530,12 @@ int pa__init(pa_module*m) {
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->module = m;
+ u->subscribed = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+
+ u->protocol = pa_native_protocol_get(m->core);
+ pa_native_protocol_install_ext(u->protocol, m, extension_cb);
+
+ u->connection_unlink_hook_slot = pa_hook_connect(&pa_native_protocol_hooks(u->protocol)[PA_NATIVE_HOOK_CONNECTION_UNLINK], PA_HOOK_NORMAL, (pa_hook_cb_t) connection_unlink_hook_cb, u);
u->subscription = pa_subscription_new(m->core, PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE, subscribe_callback, u);
@@ -348,5 +594,13 @@ void pa__done(pa_module*m) {
if (u->database)
pa_database_close(u->database);
+ if (u->protocol) {
+ pa_native_protocol_remove_ext(u->protocol, m);
+ pa_native_protocol_unref(u->protocol);
+ }
+
+ if (u->subscribed)
+ pa_idxset_free(u->subscribed, NULL, NULL);
+
pa_xfree(u);
}
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 23ae30c..7468d0a 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -128,6 +128,9 @@ static void reset_callbacks(pa_context *c) {
c->event_callback = NULL;
c->event_userdata = NULL;
+ c->ext_device_manager.callback = NULL;
+ c->ext_device_manager.userdata = NULL;
+
c->ext_stream_restore.callback = NULL;
c->ext_stream_restore.userdata = NULL;
}
@@ -1434,6 +1437,8 @@ void pa_command_extension(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_t
if (!strcmp(name, "module-stream-restore"))
pa_ext_stream_restore_command(c, tag, t);
+ else if (!strcmp(name, "module-device-manager"))
+ pa_ext_device_manager_command(c, tag, t);
else
pa_log(_("Received message for unknown extension '%s'"), name);
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
new file mode 100644
index 0000000..1c6eee5
--- /dev/null
+++ b/src/pulse/ext-device-manager.c
@@ -0,0 +1,358 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2008 Lennart Poettering
+ Copyright 2009 Colin Guthrie
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulse/context.h>
+#include <pulse/gccmacro.h>
+
+#include <pulsecore/macro.h>
+#include <pulsecore/pstream-util.h>
+
+#include "internal.h"
+#include "operation.h"
+#include "fork-detect.h"
+
+#include "ext-device-manager.h"
+
+enum {
+ SUBCOMMAND_TEST,
+ SUBCOMMAND_READ,
+ SUBCOMMAND_WRITE,
+ SUBCOMMAND_DELETE,
+ SUBCOMMAND_SUBSCRIBE,
+ SUBCOMMAND_EVENT
+};
+
+static void ext_device_manager_test_cb(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
+ pa_operation *o = userdata;
+ uint32_t version = PA_INVALID_INDEX;
+
+ pa_assert(pd);
+ pa_assert(o);
+ pa_assert(PA_REFCNT_VALUE(o) >= 1);
+
+ if (!o->context)
+ goto finish;
+
+ if (command != PA_COMMAND_REPLY) {
+ if (pa_context_handle_error(o->context, command, t, FALSE) < 0)
+ goto finish;
+
+ } else if (pa_tagstruct_getu32(t, &version) < 0 ||
+ !pa_tagstruct_eof(t)) {
+
+ pa_context_fail(o->context, PA_ERR_PROTOCOL);
+ goto finish;
+ }
+
+ if (o->callback) {
+ pa_ext_device_manager_test_cb_t cb = (pa_ext_device_manager_test_cb_t) o->callback;
+ cb(o->context, version, o->userdata);
+ }
+
+finish:
+ pa_operation_done(o);
+ pa_operation_unref(o);
+}
+
+pa_operation *pa_ext_device_manager_test(
+ pa_context *c,
+ pa_ext_device_manager_test_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o;
+ pa_tagstruct *t;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_TEST);
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, ext_device_manager_test_cb, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+}
+
+static void ext_device_manager_read_cb(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
+ pa_operation *o = userdata;
+ int eol = 1;
+
+ pa_assert(pd);
+ pa_assert(o);
+ pa_assert(PA_REFCNT_VALUE(o) >= 1);
+
+ if (!o->context)
+ goto finish;
+
+ if (command != PA_COMMAND_REPLY) {
+ if (pa_context_handle_error(o->context, command, t, FALSE) < 0)
+ goto finish;
+
+ eol = -1;
+ } else {
+
+ while (!pa_tagstruct_eof(t)) {
+ pa_ext_device_manager_info i;
+
+ memset(&i, 0, sizeof(i));
+
+ if (pa_tagstruct_gets(t, &i.name) < 0 ||
+ pa_tagstruct_gets(t, &i.description) < 0) {
+
+ pa_context_fail(o->context, PA_ERR_PROTOCOL);
+ goto finish;
+ }
+
+ if (o->callback) {
+ pa_ext_device_manager_read_cb_t cb = (pa_ext_device_manager_read_cb_t) o->callback;
+ cb(o->context, &i, 0, o->userdata);
+ }
+ }
+ }
+
+ if (o->callback) {
+ pa_ext_device_manager_read_cb_t cb = (pa_ext_device_manager_read_cb_t) o->callback;
+ cb(o->context, NULL, eol, o->userdata);
+ }
+
+finish:
+ pa_operation_done(o);
+ pa_operation_unref(o);
+}
+
+pa_operation *pa_ext_device_manager_read(
+ pa_context *c,
+ pa_ext_device_manager_read_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o;
+ pa_tagstruct *t;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_READ);
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, ext_device_manager_read_cb, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+}
+
+pa_operation *pa_ext_device_manager_write(
+ pa_context *c,
+ pa_update_mode_t mode,
+ const pa_ext_device_manager_info data[],
+ unsigned n,
+ int apply_immediately,
+ pa_context_success_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o = NULL;
+ pa_tagstruct *t = NULL;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ pa_assert(mode == PA_UPDATE_MERGE || mode == PA_UPDATE_REPLACE || mode == PA_UPDATE_SET);
+ pa_assert(data);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_WRITE);
+
+ pa_tagstruct_putu32(t, mode);
+ pa_tagstruct_put_boolean(t, apply_immediately);
+
+ for (; n > 0; n--, data++) {
+ if (!data->name || !*data->name)
+ goto fail;
+
+ pa_tagstruct_puts(t, data->name);
+ pa_tagstruct_puts(t, data->description);
+ }
+
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+
+fail:
+ if (o) {
+ pa_operation_cancel(o);
+ pa_operation_unref(o);
+ }
+
+ if (t)
+ pa_tagstruct_free(t);
+
+ pa_context_set_error(c, PA_ERR_INVALID);
+ return NULL;
+}
+
+pa_operation *pa_ext_device_manager_delete(
+ pa_context *c,
+ const char *const s[],
+ pa_context_success_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o = NULL;
+ pa_tagstruct *t = NULL;
+ const char *const *k;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ pa_assert(s);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_DELETE);
+
+ for (k = s; *k; k++) {
+ if (!*k || !**k)
+ goto fail;
+
+ pa_tagstruct_puts(t, *k);
+ }
+
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+
+fail:
+ if (o) {
+ pa_operation_cancel(o);
+ pa_operation_unref(o);
+ }
+
+ if (t)
+ pa_tagstruct_free(t);
+
+ pa_context_set_error(c, PA_ERR_INVALID);
+ return NULL;
+}
+
+pa_operation *pa_ext_device_manager_subscribe(
+ pa_context *c,
+ int enable,
+ pa_context_success_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o;
+ pa_tagstruct *t;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_SUBSCRIBE);
+ pa_tagstruct_put_boolean(t, enable);
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+}
+
+void pa_ext_device_manager_set_subscribe_cb(
+ pa_context *c,
+ pa_ext_device_manager_subscribe_cb_t cb,
+ void *userdata) {
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ if (pa_detect_fork())
+ return;
+
+ c->ext_device_manager.callback = cb;
+ c->ext_device_manager.userdata = userdata;
+}
+
+void pa_ext_device_manager_command(pa_context *c, uint32_t tag, pa_tagstruct *t) {
+ uint32_t subcommand;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ pa_assert(t);
+
+ if (pa_tagstruct_getu32(t, &subcommand) < 0 ||
+ !pa_tagstruct_eof(t)) {
+
+ pa_context_fail(c, PA_ERR_PROTOCOL);
+ return;
+ }
+
+ if (subcommand != SUBCOMMAND_EVENT) {
+ pa_context_fail(c, PA_ERR_PROTOCOL);
+ return;
+ }
+
+ if (c->ext_device_manager.callback)
+ c->ext_device_manager.callback(c, c->ext_device_manager.userdata);
+}
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
new file mode 100644
index 0000000..eed0c50
--- /dev/null
+++ b/src/pulse/ext-device-manager.h
@@ -0,0 +1,106 @@
+#ifndef foopulseextdevicemanagerhfoo
+#define foopulseextdevicemanagerhfoo
+
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2008 Lennart Poettering
+ Copyright 2009 Colin Guthrie
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#include <pulse/context.h>
+#include <pulse/version.h>
+
+/** \file
+ *
+ * Routines for controlling module-stream-restore
+ */
+
+PA_C_DECL_BEGIN
+
+/** Stores information about one device in the device database that is
+ * maintained by module-device-manager. \since 0.9.17 */
+typedef struct pa_ext_device_manager_info {
+ const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
+ const char *description; /**< The description of the device when it was last seen, if applicable and saved */
+} pa_ext_device_manager_info;
+
+/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.17 */
+typedef void (*pa_ext_device_manager_test_cb_t)(
+ pa_context *c,
+ uint32_t version,
+ void *userdata);
+
+/** Test if this extension module is available in the server. \since 0.9.17 */
+pa_operation *pa_ext_device_manager_test(
+ pa_context *c,
+ pa_ext_device_manager_test_cb_t cb,
+ void *userdata);
+
+/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.17 */
+typedef void (*pa_ext_device_manager_read_cb_t)(
+ pa_context *c,
+ const pa_ext_device_manager_info *info,
+ int eol,
+ void *userdata);
+
+/** Read all entries from the device database. \since 0.9.17 */
+pa_operation *pa_ext_device_manager_read(
+ pa_context *c,
+ pa_ext_device_manager_read_cb_t cb,
+ void *userdata);
+
+/** Store entries in the device database. \since 0.9.17 */
+pa_operation *pa_ext_device_manager_write(
+ pa_context *c,
+ pa_update_mode_t mode,
+ const pa_ext_device_manager_info data[],
+ unsigned n,
+ int apply_immediately,
+ pa_context_success_cb_t cb,
+ void *userdata);
+
+/** Delete entries from the device database. \since 0.9.17 */
+pa_operation *pa_ext_device_manager_delete(
+ pa_context *c,
+ const char *const s[],
+ pa_context_success_cb_t cb,
+ void *userdata);
+
+/** Subscribe to changes in the device database. \since 0.9.17 */
+pa_operation *pa_ext_device_manager_subscribe(
+ pa_context *c,
+ int enable,
+ pa_context_success_cb_t cb,
+ void *userdata);
+
+/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.17 */
+typedef void (*pa_ext_device_manager_subscribe_cb_t)(
+ pa_context *c,
+ void *userdata);
+
+/** Set the subscription callback that is called when
+ * pa_ext_device_manager_subscribe() was called. \since 0.9.17 */
+void pa_ext_device_manager_set_subscribe_cb(
+ pa_context *c,
+ pa_ext_device_manager_subscribe_cb_t cb,
+ void *userdata);
+
+PA_C_DECL_END
+
+#endif
diff --git a/src/pulse/internal.h b/src/pulse/internal.h
index e069c9e..b371bfc 100644
--- a/src/pulse/internal.h
+++ b/src/pulse/internal.h
@@ -28,6 +28,7 @@
#include <pulse/stream.h>
#include <pulse/operation.h>
#include <pulse/subscribe.h>
+#include <pulse/ext-device-manager.h>
#include <pulse/ext-stream-restore.h>
#include <pulsecore/socket-client.h>
@@ -102,6 +103,10 @@ struct pa_context {
/* Extension specific data */
struct {
+ pa_ext_device_manager_subscribe_cb_t callback;
+ void *userdata;
+ } ext_device_manager;
+ struct {
pa_ext_stream_restore_subscribe_cb_t callback;
void *userdata;
} ext_stream_restore;
@@ -283,6 +288,7 @@ pa_tagstruct *pa_tagstruct_command(pa_context *c, uint32_t command, uint32_t *ta
#define PA_FAIL_RETURN_NULL(context, error) \
PA_FAIL_RETURN_ANY(context, error, NULL)
+void pa_ext_device_manager_command(pa_context *c, uint32_t tag, pa_tagstruct *t);
void pa_ext_stream_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t);
pa_bool_t pa_mainloop_is_our_api(pa_mainloop_api*m);
commit 93c3c655e436862e2340a9d8a90d6b8a58c9a6e1
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Jun 27 22:09:00 2009 +0100
device-manager: Fix indentation
diff --git a/src/Makefile.am b/src/Makefile.am
index b7ebac5..0a041eb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -992,8 +992,8 @@ modlibexec_LTLIBRARIES += \
module-sine-source.la \
module-detect.la \
module-volume-restore.la \
- module-device-manager.la \
- module-device-restore.la \
+ module-device-manager.la \
+ module-device-restore.la \
module-stream-restore.la \
module-card-restore.la \
module-default-device-restore.la \
@@ -1234,8 +1234,8 @@ SYMDEF_FILES = \
modules/jack/module-jack-sink-symdef.h \
modules/jack/module-jack-source-symdef.h \
modules/module-volume-restore-symdef.h \
- modules/module-device-manager-symdef.h \
- modules/module-device-restore-symdef.h \
+ modules/module-device-manager-symdef.h \
+ modules/module-device-restore-symdef.h \
modules/module-stream-restore-symdef.h \
modules/module-card-restore-symdef.h \
modules/module-default-device-restore-symdef.h \
commit 0b3b037e222e076e506bbcbdbeae4cd1dad96c40
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Jun 28 13:08:17 2009 +0100
device-manager: Export device-manager extension functions
diff --git a/src/map-file b/src/map-file
index 95b2803..cec688f 100644
--- a/src/map-file
+++ b/src/map-file
@@ -144,6 +144,12 @@ pa_cvolume_set_fade;
pa_cvolume_set_position;
pa_cvolume_snprint;
pa_cvolume_valid;
+pa_ext_device_manager_delete;
+pa_ext_device_manager_read;
+pa_ext_device_manager_set_subscribe_cb;
+pa_ext_device_manager_subscribe;
+pa_ext_device_manager_test;
+pa_ext_device_manager_write;
pa_ext_stream_restore_delete;
pa_ext_stream_restore_read;
pa_ext_stream_restore_set_subscribe_cb;
commit 70accbbd61ae1205a009a4bfa6ae7514bc0bd940
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Jun 28 13:21:43 2009 +0100
device-manager: Link native protocol library.
diff --git a/src/Makefile.am b/src/Makefile.am
index 0a041eb..8ed7482 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1546,7 +1546,7 @@ module_cork_music_on_phone_la_CFLAGS = $(AM_CFLAGS)
# Device description restore module
module_device_manager_la_SOURCES = modules/module-device-manager.c
module_device_manager_la_LDFLAGS = $(MODULE_LDFLAGS)
-module_device_manager_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_device_manager_la_LIBADD = $(AM_LIBADD) libprotocol-native.la libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_device_manager_la_CFLAGS = $(AM_CFLAGS)
# Device volume/muted restore module
commit 40e97eb698e0211045818c73d03d55e985f329d5
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Jun 28 14:40:00 2009 +0100
device-manager: Fix tagstruct description extraction (copy+paste blunder)
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index b41f71c..68ed951 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -429,7 +429,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
entry.version = ENTRY_VERSION;
if (pa_tagstruct_gets(t, &name) < 0 ||
- pa_tagstruct_gets(reply, &description) < 0)
+ pa_tagstruct_gets(t, &description) < 0)
goto fail;
if (!name || !*name)
commit 64979385e09ba0a411669f9feeea56c93bf14d38
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Jun 28 15:33:38 2009 +0100
device-restore: Fix the application of an entry to allow changing the name of devices.
This fixes a few bugs in the copy+pasted implementation of apply_entry()/get_name().
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 68ed951..3ebdd48 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -289,55 +289,47 @@ static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data
}
static char *get_name(const char *key, const char *prefix) {
- char *t;
+ char *t;
- if (strncmp(key, prefix, sizeof(prefix)))
- return NULL;
+ if (strncmp(key, prefix, strlen(prefix)))
+ return NULL;
- t = pa_xstrdup(key + sizeof(prefix));
- return t;
+ t = pa_xstrdup(key + strlen(prefix));
+ return t;
}
static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
- pa_sink *sink;
- pa_source *source;
- uint32_t idx;
-
- pa_assert(u);
- pa_assert(name);
- pa_assert(e);
-
- for (sink = pa_idxset_first(u->core->sinks, &idx); sink; sink = pa_idxset_next(u->core->sinks, &idx)) {
+ pa_sink *sink;
+ pa_source *source;
+ uint32_t idx;
char *n;
- if (!(n = get_name(name, "sink")))
- continue;
-
- if (!pa_streq(sink->name, n)) {
- pa_xfree(n);
- continue;
- }
- pa_xfree(n);
-
- pa_log_info("Restoring description for sink %s.", sink->name);
- pa_proplist_sets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
- }
-
- for (source = pa_idxset_first(u->core->sources, &idx); source; source = pa_idxset_next(u->core->sources, &idx)) {
- char *n;
+ pa_assert(u);
+ pa_assert(name);
+ pa_assert(e);
- if (!(n = get_name(name, "source")))
- continue;
+ if ((n = get_name(name, "sink:"))) {
+ for (sink = pa_idxset_first(u->core->sinks, &idx); sink; sink = pa_idxset_next(u->core->sinks, &idx)) {
+ if (!pa_streq(sink->name, n)) {
+ continue;
+ }
- if (!pa_streq(source->name, n)) {
- pa_xfree(n);
- continue;
+ pa_log_info("Setting description for sink %s.", sink->name);
+ pa_sink_set_description(sink, e->description);
+ }
+ pa_xfree(n);
+ }
+ else if ((n = get_name(name, "source:"))) {
+ for (source = pa_idxset_first(u->core->sources, &idx); source; source = pa_idxset_next(u->core->sources, &idx)) {
+ if (!pa_streq(source->name, n)) {
+ continue;
+ }
+
+ pa_log_info("Setting description for source %s.", source->name);
+ pa_source_set_description(source, e->description);
+ }
+ pa_xfree(n);
}
- pa_xfree(n);
-
- pa_log_info("Restoring description for source %s.", source->name);
- pa_proplist_sets(source->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
- }
}
#define EXT_VERSION 1
commit 42b30e1aa2a134ccd90486b3dc73d1b13a7636a6
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Jun 29 19:55:34 2009 +0100
stream-restore: Preventative initialistion to NULL
There is not technically a bug here due to the early return and the knowledge that one of the if blocks
will definitely be run, but this makes sure we don't call free on uninitialised data or do
anything else suitibly daft. Also helps when you copy the code and change it slightly and don't realise
you've left things open...
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 9b6f914..b7b36be 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -281,8 +281,8 @@ static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
struct userdata *u = userdata;
- struct entry entry, *old;
- char *name;
+ struct entry entry, *old = NULL;
+ char *name = NULL;
pa_datum key, data;
pa_assert(c);
commit aa5d56ba752490abb9a8a18081196d9de2f6976b
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Jun 29 20:10:04 2009 +0100
device-manager: Only store and save details for non-monitor sources
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 3ebdd48..77b6f2f 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -168,8 +168,8 @@ static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
struct userdata *u = userdata;
- struct entry entry, *old;
- char *name;
+ struct entry entry, *old = NULL;
+ char *name = NULL;
pa_datum key, data;
pa_assert(c);
@@ -205,6 +205,9 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
if (!(source = pa_idxset_get_by_index(c->sources, idx)))
return;
+ if (source->monitor_of)
+ return;
+
name = pa_sprintf_malloc("source:%s", source->name);
if ((old = read_entry(u, name)))
@@ -251,7 +254,7 @@ static pa_hook_result_t sink_new_hook_callback(pa_core *c, pa_sink_new_data *new
if ((e = read_entry(u, name))) {
if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
- pa_log_info("Restoring description for sink %s.", name);
+ pa_log_info("Restoring description for sink %s.", new_data->name);
pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
}
@@ -276,7 +279,8 @@ static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data
if ((e = read_entry(u, name))) {
if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
- pa_log_info("Restoring description for sink %s.", name);
+ /* NB, We cannot detect if we are a monitor here... this could mess things up a bit... */
+ pa_log_info("Restoring description for sink %s.", new_data->name);
pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
}
@@ -325,6 +329,11 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
continue;
}
+ if (source->monitor_of) {
+ pa_log_warn("Cowardly refusing to set the description for monitor source %s.", source->name);
+ continue;
+ }
+
pa_log_info("Setting description for source %s.", source->name);
pa_source_set_description(source, e->description);
}
commit 464e1a89868b7c68927d7c95b4ff7d8fe3dbb0f0
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Jul 5 19:40:06 2009 +0100
device-manager: Fix copy+paste leftover
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index eed0c50..422691f 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -28,7 +28,7 @@
/** \file
*
- * Routines for controlling module-stream-restore
+ * Routines for controlling module-device-manager
*/
PA_C_DECL_BEGIN
commit 9357bdf4e7c069e29d2fa403a01a892d80d2d89f
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Sep 19 15:32:13 2009 +0100
device-manager: Update docs version -> 0.9.19 (predicted)
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 422691f..33bcbfa 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -34,38 +34,38 @@
PA_C_DECL_BEGIN
/** Stores information about one device in the device database that is
- * maintained by module-device-manager. \since 0.9.17 */
+ * maintained by module-device-manager. \since 0.9.19 */
typedef struct pa_ext_device_manager_info {
const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
const char *description; /**< The description of the device when it was last seen, if applicable and saved */
} pa_ext_device_manager_info;
-/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.17 */
+/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.19 */
typedef void (*pa_ext_device_manager_test_cb_t)(
pa_context *c,
uint32_t version,
void *userdata);
-/** Test if this extension module is available in the server. \since 0.9.17 */
+/** Test if this extension module is available in the server. \since 0.9.19 */
pa_operation *pa_ext_device_manager_test(
pa_context *c,
pa_ext_device_manager_test_cb_t cb,
void *userdata);
-/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.17 */
+/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.19 */
typedef void (*pa_ext_device_manager_read_cb_t)(
pa_context *c,
const pa_ext_device_manager_info *info,
int eol,
void *userdata);
-/** Read all entries from the device database. \since 0.9.17 */
+/** Read all entries from the device database. \since 0.9.19 */
pa_operation *pa_ext_device_manager_read(
pa_context *c,
pa_ext_device_manager_read_cb_t cb,
void *userdata);
-/** Store entries in the device database. \since 0.9.17 */
+/** Store entries in the device database. \since 0.9.19 */
pa_operation *pa_ext_device_manager_write(
pa_context *c,
pa_update_mode_t mode,
@@ -75,27 +75,27 @@ pa_operation *pa_ext_device_manager_write(
pa_context_success_cb_t cb,
void *userdata);
-/** Delete entries from the device database. \since 0.9.17 */
+/** Delete entries from the device database. \since 0.9.19 */
pa_operation *pa_ext_device_manager_delete(
pa_context *c,
const char *const s[],
pa_context_success_cb_t cb,
void *userdata);
-/** Subscribe to changes in the device database. \since 0.9.17 */
+/** Subscribe to changes in the device database. \since 0.9.19 */
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
pa_context_success_cb_t cb,
void *userdata);
-/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.17 */
+/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.19 */
typedef void (*pa_ext_device_manager_subscribe_cb_t)(
pa_context *c,
void *userdata);
/** Set the subscription callback that is called when
- * pa_ext_device_manager_subscribe() was called. \since 0.9.17 */
+ * pa_ext_device_manager_subscribe() was called. \since 0.9.19 */
void pa_ext_device_manager_set_subscribe_cb(
pa_context *c,
pa_ext_device_manager_subscribe_cb_t cb,
commit 103897a1e33fe83f6ba0b7d521ccc2e36da43881
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Sep 19 16:13:25 2009 +0100
device-manager: Provide a way for clients to enable/disable role-based device-priority routing.
The routing logic itself does not yet exist, but the command currently will unload/load module-stream-restore as approriate.
(module-stream-restore would conflict with the role-based priority-routing).
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 77b6f2f..5685dbb 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -79,6 +79,10 @@ struct userdata {
pa_native_protocol *protocol;
pa_idxset *subscribed;
+
+ pa_bool_t role_device_priority_routing;
+ pa_bool_t stream_restore_used;
+ pa_bool_t checked_stream_restore;
};
#define ENTRY_VERSION 1
@@ -93,6 +97,7 @@ enum {
SUBCOMMAND_READ,
SUBCOMMAND_WRITE,
SUBCOMMAND_DELETE,
+ SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -473,6 +478,57 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
break;
+ case SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING:
+
+ while (!pa_tagstruct_eof(t)) {
+ pa_bool_t enable;
+ uint32_t sridx = PA_INVALID_INDEX;
+ uint32_t idx;
+ pa_module *module;
+
+ if (pa_tagstruct_get_boolean(t, &enable) < 0)
+ goto fail;
+
+ /* If this is the first run, check for stream restore module */
+ if (!u->checked_stream_restore) {
+ u->checked_stream_restore = TRUE;
+
+ for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
+ if (strcmp(module->name, "module-stream-restore") == 0) {
+ pa_log_debug("Detected module-stream-restore is currently in use");
+ u->stream_restore_used = TRUE;
+ sridx = module->index;
+ }
+ }
+ }
+
+ u->role_device_priority_routing = enable;
+ if (enable) {
+ if (u->stream_restore_used) {
+ if (PA_INVALID_INDEX == sridx) {
+ /* As a shortcut on first load, we have sridx filled in, but otherwise we search for it. */
+ for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
+ if (strcmp(module->name, "module-stream-restore") == 0) {
+ sridx = module->index;
+ }
+ }
+ }
+ if (PA_INVALID_INDEX != sridx) {
+ pa_log_debug("Unloading module-stream-restore to enable role-based device-priority routing");
+ pa_module_unload_request_by_index(u->core, sridx, TRUE);
+ }
+ }
+ } else if (u->stream_restore_used) {
+ /* We want to reload module-stream-restore */
+ if (!pa_module_load(u->core, "module-stream-restore", ""))
+ pa_log_warn("Failed to load module-stream-restore while disabling role-based device-priority routing");
+ }
+ }
+
+ trigger_save(u);
+
+ break;
+
case SUBCOMMAND_SUBSCRIBE: {
pa_bool_t enabled;
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index 1c6eee5..0603a89 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -41,6 +41,7 @@ enum {
SUBCOMMAND_READ,
SUBCOMMAND_WRITE,
SUBCOMMAND_DELETE,
+ SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -289,6 +290,37 @@ fail:
return NULL;
}
+pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
+ pa_context *c,
+ int enable,
+ pa_context_success_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o = NULL;
+ pa_tagstruct *t = NULL;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING);
+ pa_tagstruct_put_boolean(t, !!enable);
+
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+}
+
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 33bcbfa..29d56ba 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -83,6 +83,13 @@ pa_operation *pa_ext_device_manager_delete(
void *userdata);
/** Subscribe to changes in the device database. \since 0.9.19 */
+pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
+ pa_context *c,
+ int enable,
+ pa_context_success_cb_t cb,
+ void *userdata);
+
+/** Subscribe to changes in the device database. \since 0.9.19 */
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
commit 95f28393ab413c797e2f16d2caf1f8caf0283b71
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Sep 19 16:46:18 2009 +0100
device-manager: Fix copy+paste code that looped over the tagstruct when not necessary
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 5685dbb..b3c407c 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -478,56 +478,53 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
break;
- case SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING:
-
- while (!pa_tagstruct_eof(t)) {
- pa_bool_t enable;
- uint32_t sridx = PA_INVALID_INDEX;
- uint32_t idx;
- pa_module *module;
-
- if (pa_tagstruct_get_boolean(t, &enable) < 0)
- goto fail;
-
- /* If this is the first run, check for stream restore module */
- if (!u->checked_stream_restore) {
- u->checked_stream_restore = TRUE;
-
- for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
- if (strcmp(module->name, "module-stream-restore") == 0) {
- pa_log_debug("Detected module-stream-restore is currently in use");
- u->stream_restore_used = TRUE;
- sridx = module->index;
- }
+ case SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING: {
+
+ pa_bool_t enable;
+ uint32_t sridx = PA_INVALID_INDEX;
+ uint32_t idx;
+ pa_module *module;
+
+ if (pa_tagstruct_get_boolean(t, &enable) < 0)
+ goto fail;
+
+ /* If this is the first run, check for stream restore module */
+ if (!u->checked_stream_restore) {
+ u->checked_stream_restore = TRUE;
+
+ for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
+ if (strcmp(module->name, "module-stream-restore") == 0) {
+ pa_log_debug("Detected module-stream-restore is currently in use");
+ u->stream_restore_used = TRUE;
+ sridx = module->index;
}
}
+ }
- u->role_device_priority_routing = enable;
- if (enable) {
- if (u->stream_restore_used) {
- if (PA_INVALID_INDEX == sridx) {
- /* As a shortcut on first load, we have sridx filled in, but otherwise we search for it. */
- for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
- if (strcmp(module->name, "module-stream-restore") == 0) {
- sridx = module->index;
- }
+ u->role_device_priority_routing = enable;
+ if (enable) {
+ if (u->stream_restore_used) {
+ if (PA_INVALID_INDEX == sridx) {
+ /* As a shortcut on first load, we have sridx filled in, but otherwise we search for it. */
+ for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
+ if (strcmp(module->name, "module-stream-restore") == 0) {
+ sridx = module->index;
}
}
- if (PA_INVALID_INDEX != sridx) {
- pa_log_debug("Unloading module-stream-restore to enable role-based device-priority routing");
- pa_module_unload_request_by_index(u->core, sridx, TRUE);
- }
}
- } else if (u->stream_restore_used) {
- /* We want to reload module-stream-restore */
- if (!pa_module_load(u->core, "module-stream-restore", ""))
- pa_log_warn("Failed to load module-stream-restore while disabling role-based device-priority routing");
+ if (PA_INVALID_INDEX != sridx) {
+ pa_log_debug("Unloading module-stream-restore to enable role-based device-priority routing");
+ pa_module_unload_request_by_index(u->core, sridx, TRUE);
+ }
}
+ } else if (u->stream_restore_used) {
+ /* We want to reload module-stream-restore */
+ if (!pa_module_load(u->core, "module-stream-restore", ""))
+ pa_log_warn("Failed to load module-stream-restore while disabling role-based device-priority routing");
}
- trigger_save(u);
-
break;
+ }
case SUBCOMMAND_SUBSCRIBE: {
commit aebe4787f293cc6810c54db751bee7df3a5d1ea2
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Sep 19 17:48:10 2009 +0100
device-manager: Provide a method for prefering/defering a device.
This allows clients to edit the priroity order. What is not yet in place is the initialisation of that priority list
when new devices are detected or the cleaning (remove holes) when devices are removed.
In order to keep the storage transparent I will likely remove the write functionality and replace it with a
simple rename method.
I also still need to expose the priority itself when reading the data.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index b3c407c..740b98f 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -87,9 +87,23 @@ struct userdata {
#define ENTRY_VERSION 1
+#define NUM_ROLES 9
+enum {
+ ROLE_NONE,
+ ROLE_VIDEO,
+ ROLE_MUSIC,
+ ROLE_GAME,
+ ROLE_EVENT,
+ ROLE_PHONE,
+ ROLE_ANIMATION,
+ ROLE_PRODUCTION,
+ ROLE_A11Y,
+};
+
struct entry {
uint8_t version;
char description[PA_NAME_MAX];
+ uint32_t priority[NUM_ROLES];
} PA_GCC_PACKED;
enum {
@@ -98,6 +112,8 @@ enum {
SUBCOMMAND_WRITE,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
+ SUBCOMMAND_PREFER_DEVICE,
+ SUBCOMMAND_DEFER_DEVICE,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -346,6 +362,31 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
}
}
+
+static uint32_t get_role_index(const char* role) {
+ pa_assert(role);
+
+ if (strcmp(role, "") == 0)
+ return ROLE_NONE;
+ if (strcmp(role, "video") == 0)
+ return ROLE_VIDEO;
+ if (strcmp(role, "music") == 0)
+ return ROLE_MUSIC;
+ if (strcmp(role, "game") == 0)
+ return ROLE_GAME;
+ if (strcmp(role, "event") == 0)
+ return ROLE_EVENT;
+ if (strcmp(role, "phone") == 0)
+ return ROLE_PHONE;
+ if (strcmp(role, "animation") == 0)
+ return ROLE_ANIMATION;
+ if (strcmp(role, "production") == 0)
+ return ROLE_PRODUCTION;
+ if (strcmp(role, "a11y") == 0)
+ return ROLE_A11Y;
+ return PA_INVALID_INDEX;
+}
+
#define EXT_VERSION 1
static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connection *c, uint32_t tag, pa_tagstruct *t) {
@@ -526,6 +567,113 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
break;
}
+ case SUBCOMMAND_PREFER_DEVICE:
+ case SUBCOMMAND_DEFER_DEVICE: {
+
+ const char *role, *device;
+ struct entry *e;
+ uint32_t role_index;
+
+ if (pa_tagstruct_gets(t, &role) < 0 ||
+ pa_tagstruct_gets(t, &device) < 0)
+ goto fail;
+
+ if (!role || !device || !*device)
+ goto fail;
+
+ role_index = get_role_index(role);
+ if (PA_INVALID_INDEX == role_index)
+ goto fail;
+
+ if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
+ pa_datum key;
+ pa_datum data;
+ pa_bool_t done;
+ char* prefix;
+ uint32_t priority;
+ pa_bool_t haschanged = FALSE;
+
+ if (strncmp(device, "sink:", 5) == 0)
+ prefix = pa_xstrdup("sink:");
+ else
+ prefix = pa_xstrdup("source:");
+
+ priority = e->priority[role_index];
+
+ /* Now we need to load up all the other entries of this type and shuffle the priroities around */
+
+ done = !pa_database_first(u->database, &key, NULL);
+
+ while (!done && !haschanged) {
+ pa_datum next_key;
+
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
+
+ /* Only read devices with the right prefix */
+ if (key.size > strlen(prefix) && strncmp(key.data, prefix, strlen(prefix)) == 0) {
+ char *name;
+ struct entry *e2;
+
+ name = pa_xstrndup(key.data, key.size);
+ pa_datum_free(&key);
+
+ if ((e2 = read_entry(u, name))) {
+ if (SUBCOMMAND_PREFER_DEVICE == command) {
+ /* PREFER */
+ if (e2->priority[role_index] == (priority - 1)) {
+ e2->priority[role_index]++;
+ haschanged = TRUE;
+ }
+ } else {
+ /* DEFER */
+ if (e2->priority[role_index] == (priority + 1)) {
+ e2->priority[role_index]--;
+ haschanged = TRUE;
+ }
+ }
+
+ if (haschanged) {
+ data.data = e2;
+ data.size = sizeof(*e2);
+
+ if (pa_database_set(u->database, &key, &data, FALSE))
+ pa_log_warn("Could not save device");
+ }
+ pa_xfree(e2);
+ }
+
+ pa_xfree(name);
+ }
+
+ key = next_key;
+ }
+
+ /* Now write out our actual entry */
+ if (haschanged) {
+ if (SUBCOMMAND_PREFER_DEVICE == command)
+ e->priority[role_index]--;
+ else
+ e->priority[role_index]++;
+
+ key.data = (char *) device;
+ key.size = strlen(device);
+
+ data.data = e;
+ data.size = sizeof(*e);
+
+ if (pa_database_set(u->database, &key, &data, FALSE))
+ pa_log_warn("Could not save device");
+
+ trigger_save(u);
+ }
+
+ pa_xfree(e);
+
+ pa_xfree(prefix);
+ }
+ break;
+ }
+
case SUBCOMMAND_SUBSCRIBE: {
pa_bool_t enabled;
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index 0603a89..a634e21 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -42,6 +42,8 @@ enum {
SUBCOMMAND_WRITE,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
+ SUBCOMMAND_PREFER_DEVICE,
+ SUBCOMMAND_DEFER_DEVICE,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -321,6 +323,78 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
return o;
}
+pa_operation *pa_ext_device_manager_prefer_device(
+ pa_context *c,
+ const char* role,
+ const char* device,
+ pa_context_success_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o = NULL;
+ pa_tagstruct *t = NULL;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ pa_assert(role);
+ pa_assert(device);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_PREFER_DEVICE);
+ pa_tagstruct_puts(t, role);
+ pa_tagstruct_puts(t, device);
+
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+}
+
+pa_operation *pa_ext_device_manager_defer_device(
+ pa_context *c,
+ const char* role,
+ const char* device,
+ pa_context_success_cb_t cb,
+ void *userdata) {
+
+ uint32_t tag;
+ pa_operation *o = NULL;
+ pa_tagstruct *t = NULL;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
+
+ pa_assert(role);
+ pa_assert(device);
+
+ o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+ t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
+ pa_tagstruct_putu32(t, PA_INVALID_INDEX);
+ pa_tagstruct_puts(t, "module-device-manager");
+ pa_tagstruct_putu32(t, SUBCOMMAND_DEFER_DEVICE);
+ pa_tagstruct_puts(t, role);
+ pa_tagstruct_puts(t, device);
+
+ pa_pstream_send_tagstruct(c->pstream, t);
+ pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+ return o;
+}
+
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 29d56ba..d6de132 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -90,6 +90,22 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
void *userdata);
/** Subscribe to changes in the device database. \since 0.9.19 */
+pa_operation *pa_ext_device_manager_prefer_device(
+ pa_context *c,
+ const char* role,
+ const char* device,
+ pa_context_success_cb_t cb,
+ void *userdata);
+
+/** Subscribe to changes in the device database. \since 0.9.19 */
+pa_operation *pa_ext_device_manager_defer_device(
+ pa_context *c,
+ const char* role,
+ const char* device,
+ pa_context_success_cb_t cb,
+ void *userdata);
+
+/** Subscribe to changes in the device database. \since 0.9.19 */
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
commit f8ec8f382ff1e9a05296b5a656195d44e8d05b44
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 12:44:02 2009 +0100
device-manager: Change the write function to a rename function.
The structure itself will contain various bits of info so exposing this fully to the client is a bad idea.
By keeping to a rename operation we keep what we do store abstracted from the clients.
Also fix some doxy comments.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 740b98f..0a0c39d 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -109,7 +109,7 @@ struct entry {
enum {
SUBCOMMAND_TEST,
SUBCOMMAND_READ,
- SUBCOMMAND_WRITE,
+ SUBCOMMAND_RENAME,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
SUBCOMMAND_PREFER_DEVICE,
@@ -451,51 +451,41 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
break;
}
- case SUBCOMMAND_WRITE: {
- uint32_t mode;
- pa_bool_t apply_immediately = FALSE;
+ case SUBCOMMAND_RENAME: {
- if (pa_tagstruct_getu32(t, &mode) < 0 ||
- pa_tagstruct_get_boolean(t, &apply_immediately) < 0)
- goto fail;
-
- if (mode != PA_UPDATE_MERGE &&
- mode != PA_UPDATE_REPLACE &&
- mode != PA_UPDATE_SET)
- goto fail;
-
- if (mode == PA_UPDATE_SET)
- pa_database_clear(u->database);
-
- while (!pa_tagstruct_eof(t)) {
- const char *name, *description;
- struct entry entry;
- pa_datum key, data;
-
- pa_zero(entry);
- entry.version = ENTRY_VERSION;
+ struct entry *e;
+ const char *device, *description;
- if (pa_tagstruct_gets(t, &name) < 0 ||
+ if (pa_tagstruct_gets(t, &device) < 0 ||
pa_tagstruct_gets(t, &description) < 0)
goto fail;
- if (!name || !*name)
+ if (!device || !*device || !description || !*description)
goto fail;
- pa_strlcpy(entry.description, description, sizeof(entry.description));
+ if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
+ pa_datum key, data;
- key.data = (char*) name;
- key.size = strlen(name);
+ pa_strlcpy(e->description, description, sizeof(e->description));
- data.data = &entry;
- data.size = sizeof(entry);
+ key.data = (char *) device;
+ key.size = strlen(device);
- if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0)
- if (apply_immediately)
- apply_entry(u, name, &entry);
- }
+ data.data = e;
+ data.size = sizeof(*e);
- trigger_save(u);
+ if (pa_database_set(u->database, &key, &data, FALSE) == 0) {
+ apply_entry(u, device, e);
+
+ trigger_save(u);
+ }
+ else
+ pa_log_warn("Could not save device");
+
+ pa_xfree(e);
+ }
+ else
+ pa_log_warn("Could not rename device %s, no entry in database", device);
break;
}
@@ -671,6 +661,9 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_xfree(prefix);
}
+ else
+ pa_log_warn("Could not reorder device %s, no entry in database", device);
+
break;
}
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index a634e21..bc6301c 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -39,7 +39,7 @@
enum {
SUBCOMMAND_TEST,
SUBCOMMAND_READ,
- SUBCOMMAND_WRITE,
+ SUBCOMMAND_RENAME,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
SUBCOMMAND_PREFER_DEVICE,
@@ -183,12 +183,10 @@ pa_operation *pa_ext_device_manager_read(
return o;
}
-pa_operation *pa_ext_device_manager_write(
+pa_operation *pa_ext_device_manager_set_device_description(
pa_context *c,
- pa_update_mode_t mode,
- const pa_ext_device_manager_info data[],
- unsigned n,
- int apply_immediately,
+ const char* device,
+ const char* description,
pa_context_success_cb_t cb,
void *userdata) {
@@ -198,8 +196,8 @@ pa_operation *pa_ext_device_manager_write(
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
- pa_assert(mode == PA_UPDATE_MERGE || mode == PA_UPDATE_REPLACE || mode == PA_UPDATE_SET);
- pa_assert(data);
+ pa_assert(device);
+ pa_assert(description);
PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
@@ -210,35 +208,15 @@ pa_operation *pa_ext_device_manager_write(
t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
pa_tagstruct_puts(t, "module-device-manager");
- pa_tagstruct_putu32(t, SUBCOMMAND_WRITE);
-
- pa_tagstruct_putu32(t, mode);
- pa_tagstruct_put_boolean(t, apply_immediately);
-
- for (; n > 0; n--, data++) {
- if (!data->name || !*data->name)
- goto fail;
+ pa_tagstruct_putu32(t, SUBCOMMAND_RENAME);
- pa_tagstruct_puts(t, data->name);
- pa_tagstruct_puts(t, data->description);
- }
+ pa_tagstruct_puts(t, device);
+ pa_tagstruct_puts(t, description);
pa_pstream_send_tagstruct(c->pstream, t);
pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
return o;
-
-fail:
- if (o) {
- pa_operation_cancel(o);
- pa_operation_unref(o);
- }
-
- if (t)
- pa_tagstruct_free(t);
-
- pa_context_set_error(c, PA_ERR_INVALID);
- return NULL;
}
pa_operation *pa_ext_device_manager_delete(
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index d6de132..686c8d2 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -65,13 +65,11 @@ pa_operation *pa_ext_device_manager_read(
pa_ext_device_manager_read_cb_t cb,
void *userdata);
-/** Store entries in the device database. \since 0.9.19 */
-pa_operation *pa_ext_device_manager_write(
+/** Sets the description for a device. \since 0.9.19 */
+pa_operation *pa_ext_device_manager_set_device_description(
pa_context *c,
- pa_update_mode_t mode,
- const pa_ext_device_manager_info data[],
- unsigned n,
- int apply_immediately,
+ const char* device,
+ const char* description,
pa_context_success_cb_t cb,
void *userdata);
@@ -82,14 +80,14 @@ pa_operation *pa_ext_device_manager_delete(
pa_context_success_cb_t cb,
void *userdata);
-/** Subscribe to changes in the device database. \since 0.9.19 */
+/** Enable the role-based device-priority routing mode. \since 0.9.19 */
pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
pa_context *c,
int enable,
pa_context_success_cb_t cb,
void *userdata);
-/** Subscribe to changes in the device database. \since 0.9.19 */
+/** Prefer a given device in the priority list. \since 0.9.19 */
pa_operation *pa_ext_device_manager_prefer_device(
pa_context *c,
const char* role,
@@ -97,7 +95,7 @@ pa_operation *pa_ext_device_manager_prefer_device(
pa_context_success_cb_t cb,
void *userdata);
-/** Subscribe to changes in the device database. \since 0.9.19 */
+/** Defer a given device in the priority list. \since 0.9.19 */
pa_operation *pa_ext_device_manager_defer_device(
pa_context *c,
const char* role,
commit a64f0f719ff4154cbd3d8f78dbb41c8e816eb672
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 13:57:10 2009 +0100
device-manager: Let subscribed clients know when something changes.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 0a0c39d..59aedd6 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -174,6 +174,22 @@ fail:
}
static void trigger_save(struct userdata *u) {
+ pa_native_connection *c;
+ uint32_t idx;
+
+ for (c = pa_idxset_first(u->subscribed, &idx); c; c = pa_idxset_next(u->subscribed, &idx)) {
+ pa_tagstruct *t;
+
+ t = pa_tagstruct_new(NULL, 0);
+ pa_tagstruct_putu32(t, PA_COMMAND_EXTENSION);
+ pa_tagstruct_putu32(t, 0);
+ pa_tagstruct_putu32(t, u->module->index);
+ pa_tagstruct_puts(t, u->module->name);
+ pa_tagstruct_putu32(t, SUBCOMMAND_EVENT);
+
+ pa_pstream_send_tagstruct(pa_native_connection_get_pstream(c), t);
+ }
+
if (u->save_time_event)
return;
commit 180250096765ccbabfd4194b186c2d00110df70d
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 14:36:20 2009 +0100
device-manager: When a new device is encountered, initialise the priority list to an appropriate value
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 59aedd6..f759e34 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -203,6 +203,60 @@ static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
return TRUE;
}
+static inline struct entry *load_or_initialize_entry(struct userdata *u, struct entry *entry, const char *name, const char *prefix) {
+ struct entry *old;
+
+ pa_assert(u);
+ pa_assert(entry);
+ pa_assert(name);
+ pa_assert(prefix);
+
+ if ((old = read_entry(u, name)))
+ *entry = *old;
+ else {
+ /* This is a new device, so make sure we write it's priority list correctly */
+ uint32_t max_priority[NUM_ROLES];
+ pa_datum key;
+ pa_bool_t done;
+
+ pa_zero(max_priority);
+ done = !pa_database_first(u->database, &key, NULL);
+
+ /* Find all existing devices with the same prefix so we calculate the current max priority for each role */
+ while (!done) {
+ pa_datum next_key;
+
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
+
+ if (key.size > strlen(prefix) && strncmp(key.data, prefix, strlen(prefix)) == 0) {
+ char *name2;
+ struct entry *e;
+
+ name2 = pa_xstrndup(key.data, key.size);
+
+ if ((e = read_entry(u, name2))) {
+ for (uint32_t i = 0; i < NUM_ROLES; ++i) {
+ max_priority[i] = PA_MAX(max_priority[i], e->priority[i]);
+ }
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name2);
+ }
+ pa_datum_free(&key);
+ key = next_key;
+ }
+
+ /* Actually initialise our entry now we've calculated it */
+ for (uint32_t i = 0; i < NUM_ROLES; ++i) {
+ entry->priority[i] = max_priority[i] + 1;
+ }
+ }
+
+ return old;
+}
+
static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
struct userdata *u = userdata;
struct entry entry, *old = NULL;
@@ -229,8 +283,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
name = pa_sprintf_malloc("sink:%s", sink->name);
- if ((old = read_entry(u, name)))
- entry = *old;
+ old = load_or_initialize_entry(u, &entry, name, "sink:");
pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
@@ -247,8 +300,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
name = pa_sprintf_malloc("source:%s", source->name);
- if ((old = read_entry(u, name)))
- entry = *old;
+ old = load_or_initialize_entry(u, &entry, name, "source:");
pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
}
commit e589f38e227a53e1ed57491528c1290ddf8c1da7
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 14:39:41 2009 +0100
device-manager: Fix the freeing of the datum on prefer/defer.
Also fix a log typo
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index f759e34..75059f7 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -366,10 +366,9 @@ static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data
name = pa_sprintf_malloc("source:%s", new_data->name);
if ((e = read_entry(u, name))) {
-
if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
/* NB, We cannot detect if we are a monitor here... this could mess things up a bit... */
- pa_log_info("Restoring description for sink %s.", new_data->name);
+ pa_log_info("Restoring description for source %s.", new_data->name);
pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
}
@@ -644,8 +643,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
goto fail;
if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
- pa_datum key;
- pa_datum data;
+ pa_datum key, data;
pa_bool_t done;
char* prefix;
uint32_t priority;
@@ -673,7 +671,6 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
struct entry *e2;
name = pa_xstrndup(key.data, key.size);
- pa_datum_free(&key);
if ((e2 = read_entry(u, name))) {
if (SUBCOMMAND_PREFER_DEVICE == command) {
@@ -697,12 +694,14 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if (pa_database_set(u->database, &key, &data, FALSE))
pa_log_warn("Could not save device");
}
+
pa_xfree(e2);
}
pa_xfree(name);
}
+ pa_datum_free(&key);
key = next_key;
}
commit faae33d808480a34f02bea6e66ba0da0523694cf
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 14:43:53 2009 +0100
device-manager: debug and comments
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 75059f7..e029c1d 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -322,7 +322,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
data.data = &entry;
data.size = sizeof(entry);
- pa_log_info("Storing device description for %s.", name);
+ pa_log_info("Storing device %s.", name);
pa_database_set(u->database, &key, &data, TRUE);
@@ -569,6 +569,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
key.data = (char*) name;
key.size = strlen(name);
+ /** @todo: Reindex the priorities */
pa_database_unset(u->database, &key);
}
commit ed8af7c8fd7bf845a243518357b6b73667d209c0
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 17:29:38 2009 +0100
device-manager: Rough framework (slots etc.) for handling routing.
This is incomplete, it just adds the slots in question and assigns noops to them.
Some minor cleanup of types.
Due to the priority of the hooks, it seems we can actually coexist with module-stream restore so
the code to detect and unload it will be removed shortly.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index e029c1d..4c4e3f0 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -58,11 +58,15 @@ PA_MODULE_AUTHOR("Colin Guthrie");
PA_MODULE_DESCRIPTION("Keep track of devices (and their descriptions) both past and present");
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(TRUE);
-PA_MODULE_USAGE("This module does not take any arguments");
+PA_MODULE_USAGE(
+ "on_hotplug=<When new device becomes available, recheck streams?> "
+ "on_rescue=<When device becomes unavailable, recheck streams?>");
#define SAVE_INTERVAL (10 * PA_USEC_PER_SEC)
static const char* const valid_modargs[] = {
+ "on_hotplug",
+ "on_rescue",
NULL
};
@@ -73,6 +77,12 @@ struct userdata {
pa_hook_slot
*sink_new_hook_slot,
*source_new_hook_slot,
+ *sink_input_new_hook_slot,
+ *source_output_new_hook_slot,
+ *sink_put_hook_slot,
+ *source_put_hook_slot,
+ *sink_unlink_hook_slot,
+ *source_unlink_hook_slot,
*connection_unlink_hook_slot;
pa_time_event *save_time_event;
pa_database *database;
@@ -80,6 +90,8 @@ struct userdata {
pa_native_protocol *protocol;
pa_idxset *subscribed;
+ pa_bool_t on_hotplug;
+ pa_bool_t on_rescue;
pa_bool_t role_device_priority_routing;
pa_bool_t stream_restore_used;
pa_bool_t checked_stream_restore;
@@ -100,10 +112,12 @@ enum {
ROLE_A11Y,
};
+typedef uint32_t role_indexes_t[NUM_ROLES];
+
struct entry {
uint8_t version;
char description[PA_NAME_MAX];
- uint32_t priority[NUM_ROLES];
+ role_indexes_t priority;
} PA_GCC_PACKED;
enum {
@@ -215,7 +229,7 @@ static inline struct entry *load_or_initialize_entry(struct userdata *u, struct
*entry = *old;
else {
/* This is a new device, so make sure we write it's priority list correctly */
- uint32_t max_priority[NUM_ROLES];
+ role_indexes_t max_priority;
pa_datum key;
pa_bool_t done;
@@ -390,6 +404,138 @@ static char *get_name(const char *key, const char *prefix) {
return t;
}
+static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
+ char *name;
+ struct entry *e;
+
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ if (!u->role_device_priority_routing)
+ return PA_HOOK_OK;
+
+ /*if (!(name = get_name(new_data->proplist, "sink-input")))
+ return PA_HOOK_OK;
+
+ if (new_data->sink)
+ pa_log_debug("Not restoring device for stream %s, because already set.", name);
+ else if ((e = read_entry(u, name))) {
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);*/
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
+ char *name;
+ struct entry *e;
+
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ if (!u->role_device_priority_routing)
+ return PA_HOOK_OK;
+
+ if (new_data->direct_on_input)
+ return PA_HOOK_OK;
+
+ /*if (!(name = get_name(new_data->proplist, "source-output")))
+ return PA_HOOK_OK;
+
+ if (new_data->source)
+ pa_log_debug("Not restoring device for stream %s, because already set", name);
+ else if ((e = read_entry(u, name))) {
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);*/
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
+ pa_sink_input *si;
+ uint32_t idx;
+
+ pa_assert(c);
+ pa_assert(sink);
+ pa_assert(u);
+ pa_assert(u->on_hotplug);
+
+ if (!u->role_device_priority_routing)
+ return PA_HOOK_OK;
+
+ /** @todo Ensure redo the routing based on the priorities */
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
+ pa_source_output *so;
+ uint32_t idx;
+
+ pa_assert(c);
+ pa_assert(source);
+ pa_assert(u);
+ pa_assert(u->on_hotplug);
+
+ if (!u->role_device_priority_routing)
+ return PA_HOOK_OK;
+
+ /** @todo Ensure redo the routing based on the priorities */
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
+ pa_sink_input *si;
+ uint32_t idx;
+
+ pa_assert(c);
+ pa_assert(sink);
+ pa_assert(u);
+ pa_assert(u->on_rescue);
+
+ /* There's no point in doing anything if the core is shut down anyway */
+ if (c->state == PA_CORE_SHUTDOWN)
+ return PA_HOOK_OK;
+
+ if (!u->role_device_priority_routing)
+ return PA_HOOK_OK;
+
+ /** @todo Ensure redo the routing based on the priorities */
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
+ pa_source_output *so;
+ uint32_t idx;
+
+ pa_assert(c);
+ pa_assert(source);
+ pa_assert(u);
+ pa_assert(u->on_rescue);
+
+ /* There's no point in doing anything if the core is shut down anyway */
+ if (c->state == PA_CORE_SHUTDOWN)
+ return PA_HOOK_OK;
+
+ if (!u->role_device_priority_routing)
+ return PA_HOOK_OK;
+
+ /** @todo Ensure redo the routing based on the priorities */
+
+ return PA_HOOK_OK;
+}
+
+
static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
pa_sink *sink;
pa_source *source;
@@ -781,7 +927,10 @@ int pa__init(pa_module*m) {
char *fname;
pa_sink *sink;
pa_source *source;
+ pa_sink_input *si;
+ pa_source_output *so;
uint32_t idx;
+ pa_bool_t on_hotplug = TRUE, on_rescue = TRUE;
pa_assert(m);
@@ -790,9 +939,17 @@ int pa__init(pa_module*m) {
goto fail;
}
+ if (pa_modargs_get_value_boolean(ma, "on_hotplug", &on_hotplug) < 0 ||
+ pa_modargs_get_value_boolean(ma, "on_rescue", &on_rescue) < 0) {
+ pa_log("on_hotplug= and on_rescue= expect boolean arguments");
+ goto fail;
+ }
+
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->module = m;
+ u->on_hotplug = on_hotplug;
+ u->on_rescue = on_rescue;
u->subscribed = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
u->protocol = pa_native_protocol_get(m->core);
@@ -802,9 +959,27 @@ int pa__init(pa_module*m) {
u->subscription = pa_subscription_new(m->core, PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE, subscribe_callback, u);
+ /* Used to handle device description management */
u->sink_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) sink_new_hook_callback, u);
u->source_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) source_new_hook_callback, u);
+ /* The following slots are used to deal with routing */
+ /* A little bit later than module-stream-restore, module-intended-roles */
+ u->sink_input_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], PA_HOOK_EARLY+15, (pa_hook_cb_t) sink_input_new_hook_callback, u);
+ u->source_output_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_NEW], PA_HOOK_EARLY+15, (pa_hook_cb_t) source_output_new_hook_callback, u);
+
+ if (on_hotplug) {
+ /* A little bit later than module-stream-restore, module-intended-roles */
+ u->sink_put_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_LATE+15, (pa_hook_cb_t) sink_put_hook_callback, u);
+ u->source_put_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_PUT], PA_HOOK_LATE+15, (pa_hook_cb_t) source_put_hook_callback, u);
+ }
+
+ if (on_rescue) {
+ /* A little bit later than module-stream-restore, module-intended-roles, a little bit earlier than module-rescue-streams, ... */
+ u->sink_unlink_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_UNLINK], PA_HOOK_LATE+15, (pa_hook_cb_t) sink_unlink_hook_callback, u);
+ u->source_unlink_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_UNLINK], PA_HOOK_LATE+15, (pa_hook_cb_t) source_unlink_hook_callback, u);
+ }
+
if (!(fname = pa_state_path("device-manager", TRUE)))
goto fail;
@@ -817,12 +992,18 @@ int pa__init(pa_module*m) {
pa_log_info("Sucessfully opened database file '%s'.", fname);
pa_xfree(fname);
- for (sink = pa_idxset_first(m->core->sinks, &idx); sink; sink = pa_idxset_next(m->core->sinks, &idx))
+ PA_IDXSET_FOREACH(sink, m->core->sinks, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_NEW, sink->index, u);
- for (source = pa_idxset_first(m->core->sources, &idx); source; source = pa_idxset_next(m->core->sources, &idx))
+ PA_IDXSET_FOREACH(source, m->core->sources, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW, source->index, u);
+ PA_IDXSET_FOREACH(si, m->core->sink_inputs, idx)
+ subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, si->index, u);
+
+ PA_IDXSET_FOREACH(so, m->core->source_outputs, idx)
+ subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_NEW, so->index, u);
+
pa_modargs_free(ma);
return 0;
@@ -851,6 +1032,21 @@ void pa__done(pa_module*m) {
if (u->source_new_hook_slot)
pa_hook_slot_free(u->source_new_hook_slot);
+ if (u->sink_input_new_hook_slot)
+ pa_hook_slot_free(u->sink_input_new_hook_slot);
+ if (u->source_output_new_hook_slot)
+ pa_hook_slot_free(u->source_output_new_hook_slot);
+
+ if (u->sink_put_hook_slot)
+ pa_hook_slot_free(u->sink_put_hook_slot);
+ if (u->source_put_hook_slot)
+ pa_hook_slot_free(u->source_put_hook_slot);
+
+ if (u->sink_unlink_hook_slot)
+ pa_hook_slot_free(u->sink_unlink_hook_slot);
+ if (u->source_unlink_hook_slot)
+ pa_hook_slot_free(u->source_unlink_hook_slot);
+
if (u->save_time_event)
u->core->mainloop->time_free(u->save_time_event);
commit ca68105c8f9920fa18016b24e26ba9365d8f94b6
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 17:33:18 2009 +0100
device-manager: Remove unneeded logic for checking for and (un)loading module-stream-restore. We can co-exist
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 4c4e3f0..38b4c02 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -93,8 +93,6 @@ struct userdata {
pa_bool_t on_hotplug;
pa_bool_t on_rescue;
pa_bool_t role_device_priority_routing;
- pa_bool_t stream_restore_used;
- pa_bool_t checked_stream_restore;
};
#define ENTRY_VERSION 1
@@ -733,40 +731,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if (pa_tagstruct_get_boolean(t, &enable) < 0)
goto fail;
- /* If this is the first run, check for stream restore module */
- if (!u->checked_stream_restore) {
- u->checked_stream_restore = TRUE;
-
- for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
- if (strcmp(module->name, "module-stream-restore") == 0) {
- pa_log_debug("Detected module-stream-restore is currently in use");
- u->stream_restore_used = TRUE;
- sridx = module->index;
- }
- }
- }
-
u->role_device_priority_routing = enable;
- if (enable) {
- if (u->stream_restore_used) {
- if (PA_INVALID_INDEX == sridx) {
- /* As a shortcut on first load, we have sridx filled in, but otherwise we search for it. */
- for (module = pa_idxset_first(u->core->modules, &idx); module; module = pa_idxset_next(u->core->modules, &idx)) {
- if (strcmp(module->name, "module-stream-restore") == 0) {
- sridx = module->index;
- }
- }
- }
- if (PA_INVALID_INDEX != sridx) {
- pa_log_debug("Unloading module-stream-restore to enable role-based device-priority routing");
- pa_module_unload_request_by_index(u->core, sridx, TRUE);
- }
- }
- } else if (u->stream_restore_used) {
- /* We want to reload module-stream-restore */
- if (!pa_module_load(u->core, "module-stream-restore", ""))
- pa_log_warn("Failed to load module-stream-restore while disabling role-based device-priority routing");
- }
break;
}
commit 678d8e963d7a9ce4ecd27f38ba49112b6b7663d4
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 17:34:17 2009 +0100
device-manager: Add a function to get a list of the highest priority device indexes for each role.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 38b4c02..f4d00b5 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -402,6 +402,87 @@ static char *get_name(const char *key, const char *prefix) {
return t;
}
+static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, const char *prefix) {
+ role_indexes_t *indexes, highest_priority_available;
+ pa_datum key;
+ pa_bool_t done;
+
+ pa_assert(u);
+ pa_assert(prefix);
+
+ indexes = pa_xnew(role_indexes_t, 1);
+ for (uint32_t i = 0; i < NUM_ROLES; ++i) {
+ *indexes[i] = PA_INVALID_INDEX;
+ }
+ pa_zero(highest_priority_available);
+
+ done = !pa_database_first(u->database, &key, NULL);
+
+ /* Find all existing devices with the same prefix so we find the highest priority device for each role */
+ while (!done) {
+ pa_datum next_key;
+
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
+
+ if (key.size > strlen(prefix) && strncmp(key.data, prefix, strlen(prefix)) == 0) {
+ char *name;
+ struct entry *e;
+
+ name = pa_xstrndup(key.data, key.size);
+
+ if ((e = read_entry(u, name))) {
+ for (uint32_t i = 0; i < NUM_ROLES; ++i) {
+ if (highest_priority_available[i] && e->priority[i] < highest_priority_available[i]) {
+ /* We've found a device with a higher priority than that we've currently got,
+ so see if it is currently available or not and update our list */
+ uint32_t idx;
+ pa_bool_t found = FALSE;
+ char *device_name = get_name(name, prefix);
+
+ if (strcmp(prefix, "sink:") == 0) {
+ pa_sink *sink;
+
+ PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
+ if (strcmp(sink->name, device_name) == 0) {
+ found = TRUE;
+ idx = sink->index; /* Is this needed? */
+ break;
+ }
+ }
+ } else {
+ pa_source *source;
+
+ PA_IDXSET_FOREACH(source, u->core->sources, idx) {
+ if (strcmp(source->name, device_name) == 0) {
+ found = TRUE;
+ idx = source->index; /* Is this needed? */
+ break;
+ }
+ }
+ }
+ if (found) {
+ highest_priority_available[i] = e->priority[i];
+ *indexes[i] = idx;
+ }
+
+ pa_xfree(device_name);
+ }
+ }
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+ }
+
+ pa_datum_free(&key);
+ key = next_key;
+ }
+
+ return indexes;
+}
+
+
static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
char *name;
struct entry *e;
commit 74c1c27eaac2e9d40902442f4b3671e12499494b
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 18:08:40 2009 +0100
device-manager: Add routing functions that are triggered when sinks/soruces are added/removed.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index f4d00b5..87588ae 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -402,6 +402,30 @@ static char *get_name(const char *key, const char *prefix) {
return t;
}
+static uint32_t get_role_index(const char* role) {
+ pa_assert(role);
+
+ if (strcmp(role, "") == 0)
+ return ROLE_NONE;
+ if (strcmp(role, "video") == 0)
+ return ROLE_VIDEO;
+ if (strcmp(role, "music") == 0)
+ return ROLE_MUSIC;
+ if (strcmp(role, "game") == 0)
+ return ROLE_GAME;
+ if (strcmp(role, "event") == 0)
+ return ROLE_EVENT;
+ if (strcmp(role, "phone") == 0)
+ return ROLE_PHONE;
+ if (strcmp(role, "animation") == 0)
+ return ROLE_ANIMATION;
+ if (strcmp(role, "production") == 0)
+ return ROLE_PRODUCTION;
+ if (strcmp(role, "a11y") == 0)
+ return ROLE_A11Y;
+ return PA_INVALID_INDEX;
+}
+
static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, const char *prefix) {
role_indexes_t *indexes, highest_priority_available;
pa_datum key;
@@ -484,9 +508,6 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
- char *name;
- struct entry *e;
-
pa_assert(c);
pa_assert(new_data);
pa_assert(u);
@@ -510,9 +531,6 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
}
static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
- char *name;
- struct entry *e;
-
pa_assert(c);
pa_assert(new_data);
pa_assert(u);
@@ -538,80 +556,161 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
return PA_HOOK_OK;
}
-static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
+static pa_hook_result_t reroute_sinks(struct userdata *u) {
pa_sink_input *si;
+ role_indexes_t *indexes;
uint32_t idx;
- pa_assert(c);
- pa_assert(sink);
pa_assert(u);
- pa_assert(u->on_hotplug);
if (!u->role_device_priority_routing)
return PA_HOOK_OK;
- /** @todo Ensure redo the routing based on the priorities */
+ pa_assert_se(indexes = get_highest_priority_device_indexes(u, "sink:"));
+
+ PA_IDXSET_FOREACH(si, u->core->sink_inputs, idx) {
+ const char *role;
+ uint32_t role_index, device_index;
+ pa_sink *sink;
+
+ if (si->save_sink)
+ continue;
+
+ /* Skip this if it is already in the process of being moved
+ * anyway */
+ if (!si->sink)
+ continue;
+
+ /* It might happen that a stream and a sink are set up at the
+ same time, in which case we want to make sure we don't
+ interfere with that */
+ if (!PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(si)))
+ continue;
+
+ if (!(role = pa_proplist_gets(si->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX == role_index)
+ continue;
+
+ device_index = *indexes[role_index];
+ if (PA_INVALID_INDEX == device_index)
+ continue;
+
+ if (!(sink = pa_idxset_get_by_index(u->core->sinks, device_index)))
+ continue;
+
+ if (si->sink != sink)
+ pa_sink_input_move_to(si, sink, TRUE);
+ }
+
+ pa_xfree(indexes);
return PA_HOOK_OK;
}
-static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
+static pa_hook_result_t reroute_sources(struct userdata *u) {
pa_source_output *so;
+ role_indexes_t *indexes;
uint32_t idx;
- pa_assert(c);
- pa_assert(source);
pa_assert(u);
- pa_assert(u->on_hotplug);
if (!u->role_device_priority_routing)
return PA_HOOK_OK;
- /** @todo Ensure redo the routing based on the priorities */
+ pa_assert_se(indexes = get_highest_priority_device_indexes(u, "source:"));
+
+ PA_IDXSET_FOREACH(so, u->core->source_outputs, idx) {
+ const char *role;
+ uint32_t role_index, device_index;
+ pa_source *source;
+
+ if (so->save_source)
+ continue;
+
+ if (so->direct_on_input)
+ continue;
+
+ /* Skip this if it is already in the process of being moved
+ * anyway */
+ if (!so->source)
+ continue;
+
+ /* It might happen that a stream and a source are set up at the
+ same time, in which case we want to make sure we don't
+ interfere with that */
+ if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(so)))
+ continue;
+
+ if (!(role = pa_proplist_gets(so->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX == role_index)
+ continue;
+
+ device_index = *indexes[role_index];
+ if (PA_INVALID_INDEX == device_index)
+ continue;
+
+ if (!(source = pa_idxset_get_by_index(u->core->sources, device_index)))
+ continue;
+
+ if (so->source != source)
+ pa_source_output_move_to(so, source, TRUE);
+ }
+
+ pa_xfree(indexes);
return PA_HOOK_OK;
}
-static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
- pa_sink_input *si;
- uint32_t idx;
+static pa_hook_result_t sink_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink *sink, struct userdata *u) {
+ pa_assert(c);
+ pa_assert(u);
+ pa_assert(u->core == c);
+ pa_assert(u->on_hotplug);
+
+ return reroute_sinks(u);
+}
+
+static pa_hook_result_t source_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_source *source, struct userdata *u) {
+ pa_assert(c);
+ pa_assert(u);
+ pa_assert(u->core == c);
+ pa_assert(u->on_hotplug);
+ return reroute_sources(u);
+}
+
+static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink *sink, struct userdata *u) {
pa_assert(c);
- pa_assert(sink);
pa_assert(u);
+ pa_assert(u->core == c);
pa_assert(u->on_rescue);
/* There's no point in doing anything if the core is shut down anyway */
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
- if (!u->role_device_priority_routing)
- return PA_HOOK_OK;
-
- /** @todo Ensure redo the routing based on the priorities */
-
- return PA_HOOK_OK;
+ return reroute_sinks(u);
}
-static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
- pa_source_output *so;
- uint32_t idx;
-
+static pa_hook_result_t source_unlink_hook_callback(pa_core *c, PA_GCC_UNUSED pa_source *source, struct userdata *u) {
pa_assert(c);
- pa_assert(source);
pa_assert(u);
+ pa_assert(u->core == c);
pa_assert(u->on_rescue);
/* There's no point in doing anything if the core is shut down anyway */
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
- if (!u->role_device_priority_routing)
- return PA_HOOK_OK;
-
- /** @todo Ensure redo the routing based on the priorities */
-
- return PA_HOOK_OK;
+ return reroute_sinks(u);
}
@@ -655,30 +754,6 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
}
-static uint32_t get_role_index(const char* role) {
- pa_assert(role);
-
- if (strcmp(role, "") == 0)
- return ROLE_NONE;
- if (strcmp(role, "video") == 0)
- return ROLE_VIDEO;
- if (strcmp(role, "music") == 0)
- return ROLE_MUSIC;
- if (strcmp(role, "game") == 0)
- return ROLE_GAME;
- if (strcmp(role, "event") == 0)
- return ROLE_EVENT;
- if (strcmp(role, "phone") == 0)
- return ROLE_PHONE;
- if (strcmp(role, "animation") == 0)
- return ROLE_ANIMATION;
- if (strcmp(role, "production") == 0)
- return ROLE_PRODUCTION;
- if (strcmp(role, "a11y") == 0)
- return ROLE_A11Y;
- return PA_INVALID_INDEX;
-}
-
#define EXT_VERSION 1
static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connection *c, uint32_t tag, pa_tagstruct *t) {
commit 1d04c353ea61f47961c2f25aff20b75c602e8c93
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 18:23:52 2009 +0100
device-manager: Set the most appropriate sink/source when new streams are created
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 87588ae..5c3c395 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -515,17 +515,34 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
if (!u->role_device_priority_routing)
return PA_HOOK_OK;
- /*if (!(name = get_name(new_data->proplist, "sink-input")))
- return PA_HOOK_OK;
-
if (new_data->sink)
- pa_log_debug("Not restoring device for stream %s, because already set.", name);
- else if ((e = read_entry(u, name))) {
+ pa_log_debug("Not restoring device for stream, because already set.");
+ else {
+ const char *role;
+ uint32_t role_index;
- pa_xfree(e);
- }
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX != role_index) {
+ role_indexes_t *indexes;
+ uint32_t device_index;
+
+ pa_assert_se(indexes = get_highest_priority_device_indexes(u, "sink:"));
+
+ device_index = *indexes[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_sink *sink;
- pa_xfree(name);*/
+ if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
+ new_data->sink = sink;
+ new_data->save_sink = TRUE;
+ }
+ }
+ }
+ }
return PA_HOOK_OK;
}
@@ -541,17 +558,34 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
if (new_data->direct_on_input)
return PA_HOOK_OK;
- /*if (!(name = get_name(new_data->proplist, "source-output")))
- return PA_HOOK_OK;
-
if (new_data->source)
- pa_log_debug("Not restoring device for stream %s, because already set", name);
- else if ((e = read_entry(u, name))) {
+ pa_log_debug("Not restoring device for stream, because already set");
+ else {
+ const char *role;
+ uint32_t role_index;
- pa_xfree(e);
- }
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX != role_index) {
+ role_indexes_t *indexes;
+ uint32_t device_index;
+
+ pa_assert_se(indexes = get_highest_priority_device_indexes(u, "source:"));
+
+ device_index = *indexes[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_source *source;
- pa_xfree(name);*/
+ if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
+ new_data->source = source;
+ new_data->save_source = TRUE;
+ }
+ }
+ }
+ }
return PA_HOOK_OK;
}
commit 4fb9dafaf8cf844ecf981d243d35a2d57b780275
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 18:24:51 2009 +0100
device-manager: Remove unused variables
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 5c3c395..ec981bb 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -914,9 +914,6 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
case SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING: {
pa_bool_t enable;
- uint32_t sridx = PA_INVALID_INDEX;
- uint32_t idx;
- pa_module *module;
if (pa_tagstruct_get_boolean(t, &enable) < 0)
goto fail;
commit e47f385b09b2bd6e4c5dd2ba4c1b93a213ec1b5c
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 18:31:10 2009 +0100
device-manager: Allow the routing component to be turned on via a module argument as well as via protocol extn.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index ec981bb..fba4ebe 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -59,12 +59,14 @@ PA_MODULE_DESCRIPTION("Keep track of devices (and their descriptions) both past
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(TRUE);
PA_MODULE_USAGE(
+ "do_routing=<Automatically route streams based on a priority list (unique per-role)?> "
"on_hotplug=<When new device becomes available, recheck streams?> "
"on_rescue=<When device becomes unavailable, recheck streams?>");
#define SAVE_INTERVAL (10 * PA_USEC_PER_SEC)
static const char* const valid_modargs[] = {
+ "do_routing",
"on_hotplug",
"on_rescue",
NULL
@@ -92,7 +94,7 @@ struct userdata {
pa_bool_t on_hotplug;
pa_bool_t on_rescue;
- pa_bool_t role_device_priority_routing;
+ pa_bool_t do_routing;
};
#define ENTRY_VERSION 1
@@ -512,7 +514,7 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
pa_assert(new_data);
pa_assert(u);
- if (!u->role_device_priority_routing)
+ if (!u->do_routing)
return PA_HOOK_OK;
if (new_data->sink)
@@ -552,7 +554,7 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
pa_assert(new_data);
pa_assert(u);
- if (!u->role_device_priority_routing)
+ if (!u->do_routing)
return PA_HOOK_OK;
if (new_data->direct_on_input)
@@ -597,7 +599,7 @@ static pa_hook_result_t reroute_sinks(struct userdata *u) {
pa_assert(u);
- if (!u->role_device_priority_routing)
+ if (!u->do_routing)
return PA_HOOK_OK;
pa_assert_se(indexes = get_highest_priority_device_indexes(u, "sink:"));
@@ -610,8 +612,7 @@ static pa_hook_result_t reroute_sinks(struct userdata *u) {
if (si->save_sink)
continue;
- /* Skip this if it is already in the process of being moved
- * anyway */
+ /* Skip this if it is already in the process of being moved anyway */
if (!si->sink)
continue;
@@ -652,7 +653,7 @@ static pa_hook_result_t reroute_sources(struct userdata *u) {
pa_assert(u);
- if (!u->role_device_priority_routing)
+ if (!u->do_routing)
return PA_HOOK_OK;
pa_assert_se(indexes = get_highest_priority_device_indexes(u, "source:"));
@@ -668,8 +669,7 @@ static pa_hook_result_t reroute_sources(struct userdata *u) {
if (so->direct_on_input)
continue;
- /* Skip this if it is already in the process of being moved
- * anyway */
+ /* Skip this if it is already in the process of being moved anyway */
if (!so->source)
continue;
@@ -918,7 +918,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if (pa_tagstruct_get_boolean(t, &enable) < 0)
goto fail;
- u->role_device_priority_routing = enable;
+ u->do_routing = enable;
break;
}
@@ -1082,7 +1082,7 @@ int pa__init(pa_module*m) {
pa_sink_input *si;
pa_source_output *so;
uint32_t idx;
- pa_bool_t on_hotplug = TRUE, on_rescue = TRUE;
+ pa_bool_t do_routing = FALSE, on_hotplug = TRUE, on_rescue = TRUE;
pa_assert(m);
@@ -1091,7 +1091,8 @@ int pa__init(pa_module*m) {
goto fail;
}
- if (pa_modargs_get_value_boolean(ma, "on_hotplug", &on_hotplug) < 0 ||
+ if (pa_modargs_get_value_boolean(ma, "do_routing", &do_routing) < 0 ||
+ pa_modargs_get_value_boolean(ma, "on_hotplug", &on_hotplug) < 0 ||
pa_modargs_get_value_boolean(ma, "on_rescue", &on_rescue) < 0) {
pa_log("on_hotplug= and on_rescue= expect boolean arguments");
goto fail;
@@ -1100,6 +1101,7 @@ int pa__init(pa_module*m) {
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->module = m;
+ u->do_routing = do_routing;
u->on_hotplug = on_hotplug;
u->on_rescue = on_rescue;
u->subscribed = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
commit 9e447978eb9ed246762a07e52466384580834566
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 18:39:50 2009 +0100
device-manager: Some efficiency and safety tweaks
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index fba4ebe..5abcc75 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -431,7 +431,7 @@ static uint32_t get_role_index(const char* role) {
static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, const char *prefix) {
role_indexes_t *indexes, highest_priority_available;
pa_datum key;
- pa_bool_t done;
+ pa_bool_t done, sink_mode;
pa_assert(u);
pa_assert(prefix);
@@ -442,6 +442,8 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
}
pa_zero(highest_priority_available);
+ sink_mode = (strcmp(prefix, "sink:") == 0);
+
done = !pa_database_first(u->database, &key, NULL);
/* Find all existing devices with the same prefix so we find the highest priority device for each role */
@@ -465,7 +467,7 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
pa_bool_t found = FALSE;
char *device_name = get_name(name, prefix);
- if (strcmp(prefix, "sink:") == 0) {
+ if (sink_mode) {
pa_sink *sink;
PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
@@ -944,15 +946,18 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
pa_datum key, data;
pa_bool_t done;
- char* prefix;
+ char* prefix = NULL;
uint32_t priority;
pa_bool_t haschanged = FALSE;
if (strncmp(device, "sink:", 5) == 0)
prefix = pa_xstrdup("sink:");
- else
+ else if (strncmp(device, "source:", 7) == 0)
prefix = pa_xstrdup("source:");
+ if (!prefix)
+ goto fail;
+
priority = e->priority[role_index];
/* Now we need to load up all the other entries of this type and shuffle the priroities around */
commit 1e2d236b9984dbc25080b5a97add86043a524ea4
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 19:18:22 2009 +0100
device-manager: Update exports
diff --git a/src/map-file b/src/map-file
index cec688f..d7b341d 100644
--- a/src/map-file
+++ b/src/map-file
@@ -144,12 +144,15 @@ pa_cvolume_set_fade;
pa_cvolume_set_position;
pa_cvolume_snprint;
pa_cvolume_valid;
+pa_ext_device_manager_defer_device;
pa_ext_device_manager_delete;
+pa_ext_device_manager_enable_role_device_priority_routing;
+pa_ext_device_manager_prefer_device;
pa_ext_device_manager_read;
+pa_ext_device_manager_set_device_description;
pa_ext_device_manager_set_subscribe_cb;
pa_ext_device_manager_subscribe;
pa_ext_device_manager_test;
-pa_ext_device_manager_write;
pa_ext_stream_restore_delete;
pa_ext_stream_restore_read;
pa_ext_stream_restore_set_subscribe_cb;
commit ce0b2bdc0718cfaec58d9809bd97a123a9fe07a4
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 19:30:31 2009 +0100
device-manager: Fix the database write mode
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 5abcc75..3f4418a 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -877,7 +877,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
data.data = e;
data.size = sizeof(*e);
- if (pa_database_set(u->database, &key, &data, FALSE) == 0) {
+ if (pa_database_set(u->database, &key, &data, TRUE) == 0) {
apply_entry(u, device, e);
trigger_save(u);
@@ -995,7 +995,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
data.data = e2;
data.size = sizeof(*e2);
- if (pa_database_set(u->database, &key, &data, FALSE))
+ if (pa_database_set(u->database, &key, &data, TRUE))
pa_log_warn("Could not save device");
}
@@ -1022,7 +1022,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
data.data = e;
data.size = sizeof(*e);
- if (pa_database_set(u->database, &key, &data, FALSE))
+ if (pa_database_set(u->database, &key, &data, TRUE))
pa_log_warn("Could not save device");
trigger_save(u);
commit 0016b5e2655ec8e5a415d02bf3ccb97c641a60bb
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 20:34:52 2009 +0100
device-manager: Keep a cache of the highest priority devices for each role.
Rather than querying our database on every new stream, we keep a cache and only update it when a sink/source is added/removed.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 3f4418a..3f3f4a1 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -72,6 +72,21 @@ static const char* const valid_modargs[] = {
NULL
};
+#define NUM_ROLES 9
+enum {
+ ROLE_NONE,
+ ROLE_VIDEO,
+ ROLE_MUSIC,
+ ROLE_GAME,
+ ROLE_EVENT,
+ ROLE_PHONE,
+ ROLE_ANIMATION,
+ ROLE_PRODUCTION,
+ ROLE_A11Y,
+};
+
+typedef uint32_t role_indexes_t[NUM_ROLES];
+
struct userdata {
pa_core *core;
pa_module *module;
@@ -95,24 +110,12 @@ struct userdata {
pa_bool_t on_hotplug;
pa_bool_t on_rescue;
pa_bool_t do_routing;
-};
-#define ENTRY_VERSION 1
-
-#define NUM_ROLES 9
-enum {
- ROLE_NONE,
- ROLE_VIDEO,
- ROLE_MUSIC,
- ROLE_GAME,
- ROLE_EVENT,
- ROLE_PHONE,
- ROLE_ANIMATION,
- ROLE_PRODUCTION,
- ROLE_A11Y,
+ role_indexes_t preferred_sinks;
+ role_indexes_t preferred_sources;
};
-typedef uint32_t role_indexes_t[NUM_ROLES];
+#define ENTRY_VERSION 1
struct entry {
uint8_t version;
@@ -211,6 +214,7 @@ static void trigger_save(struct userdata *u) {
}
static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
+ /** @todo: Compare the priority lists too */
if (strncmp(a->description, b->description, sizeof(a->description)))
return FALSE;
@@ -428,7 +432,7 @@ static uint32_t get_role_index(const char* role) {
return PA_INVALID_INDEX;
}
-static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, const char *prefix) {
+static void update_highest_priority_device_indexes(struct userdata *u, const char *prefix, void *ignore_device) {
role_indexes_t *indexes, highest_priority_available;
pa_datum key;
pa_bool_t done, sink_mode;
@@ -436,14 +440,18 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
pa_assert(u);
pa_assert(prefix);
- indexes = pa_xnew(role_indexes_t, 1);
+ sink_mode = (strcmp(prefix, "sink:") == 0);
+
+ if (sink_mode)
+ indexes = &u->preferred_sinks;
+ else
+ indexes = &u->preferred_sources;
+
for (uint32_t i = 0; i < NUM_ROLES; ++i) {
*indexes[i] = PA_INVALID_INDEX;
}
pa_zero(highest_priority_available);
- sink_mode = (strcmp(prefix, "sink:") == 0);
-
done = !pa_database_first(u->database, &key, NULL);
/* Find all existing devices with the same prefix so we find the highest priority device for each role */
@@ -471,6 +479,8 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
pa_sink *sink;
PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
+ if ((pa_sink*) ignore_device == sink)
+ continue;
if (strcmp(sink->name, device_name) == 0) {
found = TRUE;
idx = sink->index; /* Is this needed? */
@@ -481,6 +491,8 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
pa_source *source;
PA_IDXSET_FOREACH(source, u->core->sources, idx) {
+ if ((pa_source*) ignore_device == source)
+ continue;
if (strcmp(source->name, device_name) == 0) {
found = TRUE;
idx = source->index; /* Is this needed? */
@@ -506,8 +518,6 @@ static role_indexes_t *get_highest_priority_device_indexes(struct userdata *u, c
pa_datum_free(&key);
key = next_key;
}
-
- return indexes;
}
@@ -531,12 +541,9 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
role_index = get_role_index(role);
if (PA_INVALID_INDEX != role_index) {
- role_indexes_t *indexes;
uint32_t device_index;
- pa_assert_se(indexes = get_highest_priority_device_indexes(u, "sink:"));
-
- device_index = *indexes[role_index];
+ device_index = u->preferred_sinks[role_index];
if (PA_INVALID_INDEX != device_index) {
pa_sink *sink;
@@ -574,12 +581,9 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
role_index = get_role_index(role);
if (PA_INVALID_INDEX != role_index) {
- role_indexes_t *indexes;
uint32_t device_index;
- pa_assert_se(indexes = get_highest_priority_device_indexes(u, "source:"));
-
- device_index = *indexes[role_index];
+ device_index = u->preferred_sources[role_index];
if (PA_INVALID_INDEX != device_index) {
pa_source *source;
@@ -594,9 +598,8 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
return PA_HOOK_OK;
}
-static pa_hook_result_t reroute_sinks(struct userdata *u) {
+static pa_hook_result_t reroute_sinks(struct userdata *u, pa_sink *ignore_sink) {
pa_sink_input *si;
- role_indexes_t *indexes;
uint32_t idx;
pa_assert(u);
@@ -604,7 +607,7 @@ static pa_hook_result_t reroute_sinks(struct userdata *u) {
if (!u->do_routing)
return PA_HOOK_OK;
- pa_assert_se(indexes = get_highest_priority_device_indexes(u, "sink:"));
+ update_highest_priority_device_indexes(u, "sink:", ignore_sink);
PA_IDXSET_FOREACH(si, u->core->sink_inputs, idx) {
const char *role;
@@ -632,7 +635,7 @@ static pa_hook_result_t reroute_sinks(struct userdata *u) {
if (PA_INVALID_INDEX == role_index)
continue;
- device_index = *indexes[role_index];
+ device_index = u->preferred_sinks[role_index];
if (PA_INVALID_INDEX == device_index)
continue;
@@ -643,14 +646,11 @@ static pa_hook_result_t reroute_sinks(struct userdata *u) {
pa_sink_input_move_to(si, sink, TRUE);
}
- pa_xfree(indexes);
-
return PA_HOOK_OK;
}
-static pa_hook_result_t reroute_sources(struct userdata *u) {
+static pa_hook_result_t reroute_sources(struct userdata *u, pa_source* ignore_source) {
pa_source_output *so;
- role_indexes_t *indexes;
uint32_t idx;
pa_assert(u);
@@ -658,7 +658,7 @@ static pa_hook_result_t reroute_sources(struct userdata *u) {
if (!u->do_routing)
return PA_HOOK_OK;
- pa_assert_se(indexes = get_highest_priority_device_indexes(u, "source:"));
+ update_highest_priority_device_indexes(u, "source:", ignore_source);
PA_IDXSET_FOREACH(so, u->core->source_outputs, idx) {
const char *role;
@@ -689,7 +689,7 @@ static pa_hook_result_t reroute_sources(struct userdata *u) {
if (PA_INVALID_INDEX == role_index)
continue;
- device_index = *indexes[role_index];
+ device_index = u->preferred_sources[role_index];
if (PA_INVALID_INDEX == device_index)
continue;
@@ -700,8 +700,6 @@ static pa_hook_result_t reroute_sources(struct userdata *u) {
pa_source_output_move_to(so, source, TRUE);
}
- pa_xfree(indexes);
-
return PA_HOOK_OK;
}
@@ -711,7 +709,7 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink
pa_assert(u->core == c);
pa_assert(u->on_hotplug);
- return reroute_sinks(u);
+ return reroute_sinks(u, NULL);
}
static pa_hook_result_t source_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_source *source, struct userdata *u) {
@@ -720,11 +718,12 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_so
pa_assert(u->core == c);
pa_assert(u->on_hotplug);
- return reroute_sources(u);
+ return reroute_sources(u, NULL);
}
-static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink *sink, struct userdata *u) {
+static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
pa_assert(c);
+ pa_assert(sink);
pa_assert(u);
pa_assert(u->core == c);
pa_assert(u->on_rescue);
@@ -733,11 +732,12 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, PA_GCC_UNUSED pa_s
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
- return reroute_sinks(u);
+ return reroute_sinks(u, sink);
}
-static pa_hook_result_t source_unlink_hook_callback(pa_core *c, PA_GCC_UNUSED pa_source *source, struct userdata *u) {
+static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
pa_assert(c);
+ pa_assert(source);
pa_assert(u);
pa_assert(u->core == c);
pa_assert(u->on_rescue);
@@ -746,7 +746,7 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, PA_GCC_UNUSED pa
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
- return reroute_sinks(u);
+ return reroute_sources(u, source);
}
@@ -1151,12 +1151,17 @@ int pa__init(pa_module*m) {
pa_log_info("Sucessfully opened database file '%s'.", fname);
pa_xfree(fname);
+ /* We cycle over all the available sinks so that they are added to our database if they are not in it yet */
PA_IDXSET_FOREACH(sink, m->core->sinks, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_NEW, sink->index, u);
PA_IDXSET_FOREACH(source, m->core->sources, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW, source->index, u);
+ /* Update our caches (all available devices will be present in our database now */
+ update_highest_priority_device_indexes(u, "sink:", NULL);
+ update_highest_priority_device_indexes(u, "source:", NULL);
+
PA_IDXSET_FOREACH(si, m->core->sink_inputs, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, si->index, u);
commit 25f75342d4e3e2885d751b9625a8eda4c0c1380c
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 20:48:58 2009 +0100
device-manager: Reroute the streams on startup and update our cache on enable.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 3f3f4a1..745961c 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -920,7 +920,11 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if (pa_tagstruct_get_boolean(t, &enable) < 0)
goto fail;
- u->do_routing = enable;
+ if ((u->do_routing = enable)) {
+ /* Update our caches */
+ update_highest_priority_device_indexes(u, "sink:", NULL);
+ update_highest_priority_device_indexes(u, "source:", NULL);
+ }
break;
}
@@ -1158,15 +1162,9 @@ int pa__init(pa_module*m) {
PA_IDXSET_FOREACH(source, m->core->sources, idx)
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW, source->index, u);
- /* Update our caches (all available devices will be present in our database now */
- update_highest_priority_device_indexes(u, "sink:", NULL);
- update_highest_priority_device_indexes(u, "source:", NULL);
-
- PA_IDXSET_FOREACH(si, m->core->sink_inputs, idx)
- subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, si->index, u);
-
- PA_IDXSET_FOREACH(so, m->core->source_outputs, idx)
- subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_NEW, so->index, u);
+ /* Perform the routing (if it's enabled) which will update our priority list cache too */
+ reroute_sinks(u, NULL);
+ reroute_sources(u, NULL);
pa_modargs_free(ma);
return 0;
commit 8d0787c1d5a0552e52ad91c2a6f0630f96216a69
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 20:50:23 2009 +0100
device-manager: More sensible names for internal functions
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 745961c..c2bc041 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -598,7 +598,7 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
return PA_HOOK_OK;
}
-static pa_hook_result_t reroute_sinks(struct userdata *u, pa_sink *ignore_sink) {
+static pa_hook_result_t route_sink_inputs(struct userdata *u, pa_sink *ignore_sink) {
pa_sink_input *si;
uint32_t idx;
@@ -649,7 +649,7 @@ static pa_hook_result_t reroute_sinks(struct userdata *u, pa_sink *ignore_sink)
return PA_HOOK_OK;
}
-static pa_hook_result_t reroute_sources(struct userdata *u, pa_source* ignore_source) {
+static pa_hook_result_t route_source_outputs(struct userdata *u, pa_source* ignore_source) {
pa_source_output *so;
uint32_t idx;
@@ -709,7 +709,7 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink
pa_assert(u->core == c);
pa_assert(u->on_hotplug);
- return reroute_sinks(u, NULL);
+ return route_sink_inputs(u, NULL);
}
static pa_hook_result_t source_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_source *source, struct userdata *u) {
@@ -718,7 +718,7 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_so
pa_assert(u->core == c);
pa_assert(u->on_hotplug);
- return reroute_sources(u, NULL);
+ return route_source_outputs(u, NULL);
}
static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
@@ -732,7 +732,7 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
- return reroute_sinks(u, sink);
+ return route_sink_inputs(u, sink);
}
static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
@@ -746,7 +746,7 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
- return reroute_sources(u, source);
+ return route_source_outputs(u, source);
}
@@ -1088,8 +1088,6 @@ int pa__init(pa_module*m) {
char *fname;
pa_sink *sink;
pa_source *source;
- pa_sink_input *si;
- pa_source_output *so;
uint32_t idx;
pa_bool_t do_routing = FALSE, on_hotplug = TRUE, on_rescue = TRUE;
@@ -1163,8 +1161,8 @@ int pa__init(pa_module*m) {
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW, source->index, u);
/* Perform the routing (if it's enabled) which will update our priority list cache too */
- reroute_sinks(u, NULL);
- reroute_sources(u, NULL);
+ route_sink_inputs(u, NULL);
+ route_source_outputs(u, NULL);
pa_modargs_free(ma);
return 0;
commit d3460e349893f6dc75eda1f03ee7690b0911dcc2
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 20:57:34 2009 +0100
device-manager: Refactor the routing method to allow the routing of a single stream
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index c2bc041..d672197 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -598,6 +598,47 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
return PA_HOOK_OK;
}
+
+static void route_sink_input(struct userdata *u, pa_sink_input *si) {
+ const char *role;
+ uint32_t role_index, device_index;
+ pa_sink *sink;
+
+ pa_assert(u);
+ pa_assert(u->do_routing);
+
+ if (si->save_sink)
+ return;
+
+ /* Skip this if it is already in the process of being moved anyway */
+ if (!si->sink)
+ return;
+
+ /* It might happen that a stream and a sink are set up at the
+ same time, in which case we want to make sure we don't
+ interfere with that */
+ if (!PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(si)))
+ return;
+
+ if (!(role = pa_proplist_gets(si->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX == role_index)
+ return;
+
+ device_index = u->preferred_sinks[role_index];
+ if (PA_INVALID_INDEX == device_index)
+ return;
+
+ if (!(sink = pa_idxset_get_by_index(u->core->sinks, device_index)))
+ return;
+
+ if (si->sink != sink)
+ pa_sink_input_move_to(si, sink, TRUE);
+}
+
static pa_hook_result_t route_sink_inputs(struct userdata *u, pa_sink *ignore_sink) {
pa_sink_input *si;
uint32_t idx;
@@ -610,43 +651,53 @@ static pa_hook_result_t route_sink_inputs(struct userdata *u, pa_sink *ignore_si
update_highest_priority_device_indexes(u, "sink:", ignore_sink);
PA_IDXSET_FOREACH(si, u->core->sink_inputs, idx) {
- const char *role;
- uint32_t role_index, device_index;
- pa_sink *sink;
+ route_sink_input(u, si);
+ }
- if (si->save_sink)
- continue;
+ return PA_HOOK_OK;
+}
- /* Skip this if it is already in the process of being moved anyway */
- if (!si->sink)
- continue;
+static void route_source_output(struct userdata *u, pa_source_output *so) {
+ const char *role;
+ uint32_t role_index, device_index;
+ pa_source *source;
- /* It might happen that a stream and a sink are set up at the
- same time, in which case we want to make sure we don't
- interfere with that */
- if (!PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(si)))
- continue;
+ pa_assert(u);
+ pa_assert(u->do_routing);
- if (!(role = pa_proplist_gets(si->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
- else
- role_index = get_role_index(role);
+ if (so->save_source)
+ return;
- if (PA_INVALID_INDEX == role_index)
- continue;
+ if (so->direct_on_input)
+ return;
- device_index = u->preferred_sinks[role_index];
- if (PA_INVALID_INDEX == device_index)
- continue;
+ /* Skip this if it is already in the process of being moved anyway */
+ if (!so->source)
+ return;
- if (!(sink = pa_idxset_get_by_index(u->core->sinks, device_index)))
- continue;
+ /* It might happen that a stream and a source are set up at the
+ same time, in which case we want to make sure we don't
+ interfere with that */
+ if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(so)))
+ return;
- if (si->sink != sink)
- pa_sink_input_move_to(si, sink, TRUE);
- }
+ if (!(role = pa_proplist_gets(so->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
- return PA_HOOK_OK;
+ if (PA_INVALID_INDEX == role_index)
+ return;
+
+ device_index = u->preferred_sources[role_index];
+ if (PA_INVALID_INDEX == device_index)
+ return;
+
+ if (!(source = pa_idxset_get_by_index(u->core->sources, device_index)))
+ return;
+
+ if (so->source != source)
+ pa_source_output_move_to(so, source, TRUE);
}
static pa_hook_result_t route_source_outputs(struct userdata *u, pa_source* ignore_source) {
@@ -661,43 +712,7 @@ static pa_hook_result_t route_source_outputs(struct userdata *u, pa_source* igno
update_highest_priority_device_indexes(u, "source:", ignore_source);
PA_IDXSET_FOREACH(so, u->core->source_outputs, idx) {
- const char *role;
- uint32_t role_index, device_index;
- pa_source *source;
-
- if (so->save_source)
- continue;
-
- if (so->direct_on_input)
- continue;
-
- /* Skip this if it is already in the process of being moved anyway */
- if (!so->source)
- continue;
-
- /* It might happen that a stream and a source are set up at the
- same time, in which case we want to make sure we don't
- interfere with that */
- if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(so)))
- continue;
-
- if (!(role = pa_proplist_gets(so->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
- else
- role_index = get_role_index(role);
-
- if (PA_INVALID_INDEX == role_index)
- continue;
-
- device_index = u->preferred_sources[role_index];
- if (PA_INVALID_INDEX == device_index)
- continue;
-
- if (!(source = pa_idxset_get_by_index(u->core->sources, device_index)))
- continue;
-
- if (so->source != source)
- pa_source_output_move_to(so, source, TRUE);
+ route_source_output(u, so);
}
return PA_HOOK_OK;
commit 1d43230006e639170fbdbfa8797f2ba783ae5ca2
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 20 21:19:41 2009 +0100
device-manager: Reroute streams when they change allowing the media.role to be updated mid-stream.
We do not handle the _EVENT_NEW subscription here as the PA_CORE_HOOK_SINK_INPUT_NEW/PA_CORE_HOOK_SOURCE_OUTPUT_NEW
hook should handle the initial routing.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index d672197..72b473c 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -221,6 +221,16 @@ static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
return TRUE;
}
+static char *get_name(const char *key, const char *prefix) {
+ char *t;
+
+ if (strncmp(key, prefix, strlen(prefix)))
+ return NULL;
+
+ t = pa_xstrdup(key + strlen(prefix));
+ return t;
+}
+
static inline struct entry *load_or_initialize_entry(struct userdata *u, struct entry *entry, const char *name, const char *prefix) {
struct entry *old;
@@ -275,139 +285,6 @@ static inline struct entry *load_or_initialize_entry(struct userdata *u, struct
return old;
}
-static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
- struct userdata *u = userdata;
- struct entry entry, *old = NULL;
- char *name = NULL;
- pa_datum key, data;
-
- pa_assert(c);
- pa_assert(u);
-
- if (t != (PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_NEW) &&
- t != (PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_CHANGE) &&
- t != (PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW) &&
- t != (PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_CHANGE))
- return;
-
- pa_zero(entry);
- entry.version = ENTRY_VERSION;
-
- if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK) {
- pa_sink *sink;
-
- if (!(sink = pa_idxset_get_by_index(c->sinks, idx)))
- return;
-
- name = pa_sprintf_malloc("sink:%s", sink->name);
-
- old = load_or_initialize_entry(u, &entry, name, "sink:");
-
- pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
-
- } else {
- pa_source *source;
-
- pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE);
-
- if (!(source = pa_idxset_get_by_index(c->sources, idx)))
- return;
-
- if (source->monitor_of)
- return;
-
- name = pa_sprintf_malloc("source:%s", source->name);
-
- old = load_or_initialize_entry(u, &entry, name, "source:");
-
- pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
- }
-
- if (old) {
-
- if (entries_equal(old, &entry)) {
- pa_xfree(old);
- pa_xfree(name);
- return;
- }
-
- pa_xfree(old);
- }
-
- key.data = name;
- key.size = strlen(name);
-
- data.data = &entry;
- data.size = sizeof(entry);
-
- pa_log_info("Storing device %s.", name);
-
- pa_database_set(u->database, &key, &data, TRUE);
-
- pa_xfree(name);
-
- trigger_save(u);
-}
-
-static pa_hook_result_t sink_new_hook_callback(pa_core *c, pa_sink_new_data *new_data, struct userdata *u) {
- char *name;
- struct entry *e;
-
- pa_assert(c);
- pa_assert(new_data);
- pa_assert(u);
-
- name = pa_sprintf_malloc("sink:%s", new_data->name);
-
- if ((e = read_entry(u, name))) {
- if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
- pa_log_info("Restoring description for sink %s.", new_data->name);
- pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
- }
-
- pa_xfree(e);
- }
-
- pa_xfree(name);
-
- return PA_HOOK_OK;
-}
-
-static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data *new_data, struct userdata *u) {
- char *name;
- struct entry *e;
-
- pa_assert(c);
- pa_assert(new_data);
- pa_assert(u);
-
- name = pa_sprintf_malloc("source:%s", new_data->name);
-
- if ((e = read_entry(u, name))) {
- if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
- /* NB, We cannot detect if we are a monitor here... this could mess things up a bit... */
- pa_log_info("Restoring description for source %s.", new_data->name);
- pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
- }
-
- pa_xfree(e);
- }
-
- pa_xfree(name);
-
- return PA_HOOK_OK;
-}
-
-static char *get_name(const char *key, const char *prefix) {
- char *t;
-
- if (strncmp(key, prefix, strlen(prefix)))
- return NULL;
-
- t = pa_xstrdup(key + strlen(prefix));
- return t;
-}
-
static uint32_t get_role_index(const char* role) {
pa_assert(role);
@@ -521,84 +398,6 @@ static void update_highest_priority_device_indexes(struct userdata *u, const cha
}
-static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
- pa_assert(c);
- pa_assert(new_data);
- pa_assert(u);
-
- if (!u->do_routing)
- return PA_HOOK_OK;
-
- if (new_data->sink)
- pa_log_debug("Not restoring device for stream, because already set.");
- else {
- const char *role;
- uint32_t role_index;
-
- if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
- else
- role_index = get_role_index(role);
-
- if (PA_INVALID_INDEX != role_index) {
- uint32_t device_index;
-
- device_index = u->preferred_sinks[role_index];
- if (PA_INVALID_INDEX != device_index) {
- pa_sink *sink;
-
- if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
- new_data->sink = sink;
- new_data->save_sink = TRUE;
- }
- }
- }
- }
-
- return PA_HOOK_OK;
-}
-
-static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
- pa_assert(c);
- pa_assert(new_data);
- pa_assert(u);
-
- if (!u->do_routing)
- return PA_HOOK_OK;
-
- if (new_data->direct_on_input)
- return PA_HOOK_OK;
-
- if (new_data->source)
- pa_log_debug("Not restoring device for stream, because already set");
- else {
- const char *role;
- uint32_t role_index;
-
- if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
- else
- role_index = get_role_index(role);
-
- if (PA_INVALID_INDEX != role_index) {
- uint32_t device_index;
-
- device_index = u->preferred_sources[role_index];
- if (PA_INVALID_INDEX != device_index) {
- pa_source *source;
-
- if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
- new_data->source = source;
- new_data->save_source = TRUE;
- }
- }
- }
- }
-
- return PA_HOOK_OK;
-}
-
-
static void route_sink_input(struct userdata *u, pa_sink_input *si) {
const char *role;
uint32_t role_index, device_index;
@@ -718,6 +517,238 @@ static pa_hook_result_t route_source_outputs(struct userdata *u, pa_source* igno
return PA_HOOK_OK;
}
+static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ struct userdata *u = userdata;
+ struct entry entry, *old = NULL;
+ char *name = NULL;
+ pa_datum key, data;
+
+ pa_assert(c);
+ pa_assert(u);
+
+ if (t != (PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_NEW) &&
+ t != (PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_CHANGE) &&
+ t != (PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW) &&
+ t != (PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_CHANGE) &&
+
+ /*t != (PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW) &&*/
+ t != (PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE) &&
+ /*t != (PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_NEW) &&*/
+ t != (PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_CHANGE))
+ return;
+
+ pa_zero(entry);
+ entry.version = ENTRY_VERSION;
+
+ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK_INPUT) {
+ pa_sink_input *si;
+
+ if (!u->do_routing)
+ return;
+ if (!(si = pa_idxset_get_by_index(c->sink_inputs, idx)))
+ return;
+
+ /* The role may change mid-stream, so we reroute */
+ route_sink_input(u, si);
+
+ return;
+ } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT) {
+ pa_source_output *so;
+
+ if (!u->do_routing)
+ return;
+ if (!(so = pa_idxset_get_by_index(c->source_outputs, idx)))
+ return;
+
+ /* The role may change mid-stream, so we reroute */
+ route_source_output(u, so);
+
+ return;
+ } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK) {
+ pa_sink *sink;
+
+ if (!(sink = pa_idxset_get_by_index(c->sinks, idx)))
+ return;
+
+ name = pa_sprintf_malloc("sink:%s", sink->name);
+
+ old = load_or_initialize_entry(u, &entry, name, "sink:");
+
+ pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+
+ } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE) {
+ pa_source *source;
+
+ pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE);
+
+ if (!(source = pa_idxset_get_by_index(c->sources, idx)))
+ return;
+
+ if (source->monitor_of)
+ return;
+
+ name = pa_sprintf_malloc("source:%s", source->name);
+
+ old = load_or_initialize_entry(u, &entry, name, "source:");
+
+ pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ }
+
+ pa_assert(name);
+
+ if (old) {
+
+ if (entries_equal(old, &entry)) {
+ pa_xfree(old);
+ pa_xfree(name);
+ return;
+ }
+
+ pa_xfree(old);
+ }
+
+ key.data = name;
+ key.size = strlen(name);
+
+ data.data = &entry;
+ data.size = sizeof(entry);
+
+ pa_log_info("Storing device %s.", name);
+
+ pa_database_set(u->database, &key, &data, TRUE);
+
+ pa_xfree(name);
+
+ trigger_save(u);
+}
+
+static pa_hook_result_t sink_new_hook_callback(pa_core *c, pa_sink_new_data *new_data, struct userdata *u) {
+ char *name;
+ struct entry *e;
+
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ name = pa_sprintf_malloc("sink:%s", new_data->name);
+
+ if ((e = read_entry(u, name))) {
+ if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
+ pa_log_info("Restoring description for sink %s.", new_data->name);
+ pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
+ }
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data *new_data, struct userdata *u) {
+ char *name;
+ struct entry *e;
+
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ name = pa_sprintf_malloc("source:%s", new_data->name);
+
+ if ((e = read_entry(u, name))) {
+ if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
+ /* NB, We cannot detect if we are a monitor here... this could mess things up a bit... */
+ pa_log_info("Restoring description for source %s.", new_data->name);
+ pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
+ }
+
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ if (!u->do_routing)
+ return PA_HOOK_OK;
+
+ if (new_data->sink)
+ pa_log_debug("Not restoring device for stream, because already set.");
+ else {
+ const char *role;
+ uint32_t role_index;
+
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX != role_index) {
+ uint32_t device_index;
+
+ device_index = u->preferred_sinks[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_sink *sink;
+
+ if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
+ new_data->sink = sink;
+ new_data->save_sink = TRUE;
+ }
+ }
+ }
+ }
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
+ pa_assert(c);
+ pa_assert(new_data);
+ pa_assert(u);
+
+ if (!u->do_routing)
+ return PA_HOOK_OK;
+
+ if (new_data->direct_on_input)
+ return PA_HOOK_OK;
+
+ if (new_data->source)
+ pa_log_debug("Not restoring device for stream, because already set");
+ else {
+ const char *role;
+ uint32_t role_index;
+
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("");
+ else
+ role_index = get_role_index(role);
+
+ if (PA_INVALID_INDEX != role_index) {
+ uint32_t device_index;
+
+ device_index = u->preferred_sources[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_source *source;
+
+ if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
+ new_data->source = source;
+ new_data->save_source = TRUE;
+ }
+ }
+ }
+ }
+
+ return PA_HOOK_OK;
+}
+
+
static pa_hook_result_t sink_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink *sink, struct userdata *u) {
pa_assert(c);
pa_assert(u);
@@ -1133,7 +1164,7 @@ int pa__init(pa_module*m) {
u->connection_unlink_hook_slot = pa_hook_connect(&pa_native_protocol_hooks(u->protocol)[PA_NATIVE_HOOK_CONNECTION_UNLINK], PA_HOOK_NORMAL, (pa_hook_cb_t) connection_unlink_hook_cb, u);
- u->subscription = pa_subscription_new(m->core, PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE, subscribe_callback, u);
+ u->subscription = pa_subscription_new(m->core, PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE|PA_SUBSCRIPTION_MASK_SINK_INPUT|PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT, subscribe_callback, u);
/* Used to handle device description management */
u->sink_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) sink_new_hook_callback, u);
commit 4dedba73a6183fbc9eb51d0577a6dfd402f1e135
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Sep 21 18:50:00 2009 +0100
device-manager: Add a function to dump the database which we do whenever we save it (and on startup)
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 72b473c..baff560 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -55,7 +55,7 @@
#include "module-device-manager-symdef.h"
PA_MODULE_AUTHOR("Colin Guthrie");
-PA_MODULE_DESCRIPTION("Keep track of devices (and their descriptions) both past and present");
+PA_MODULE_DESCRIPTION("Keep track of devices (and their descriptions) both past and present and prioritise by role");
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(TRUE);
PA_MODULE_USAGE(
@@ -64,6 +64,7 @@ PA_MODULE_USAGE(
"on_rescue=<When device becomes unavailable, recheck streams?>");
#define SAVE_INTERVAL (10 * PA_USEC_PER_SEC)
+#define DUMP_DATABASE
static const char* const valid_modargs[] = {
"do_routing",
@@ -135,20 +136,6 @@ enum {
SUBCOMMAND_EVENT
};
-static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
- struct userdata *u = userdata;
-
- pa_assert(a);
- pa_assert(e);
- pa_assert(u);
-
- pa_assert(e == u->save_time_event);
- u->core->mainloop->time_free(u->save_time_event);
- u->save_time_event = NULL;
-
- pa_database_sync(u->database);
- pa_log_info("Synced.");
-}
static struct entry* read_entry(struct userdata *u, const char *name) {
pa_datum key, data;
@@ -190,6 +177,107 @@ fail:
return NULL;
}
+#ifdef DUMP_DATABASE
+static void dump_database_helper(struct userdata *u, uint32_t role_index, const char* human, pa_bool_t sink_mode) {
+ pa_assert(u);
+ pa_assert(human);
+
+ if (sink_mode) {
+ pa_sink *s;
+ if (PA_INVALID_INDEX != u->preferred_sinks[role_index] && (s = pa_idxset_get_by_index(u->core->sinks, u->preferred_sinks[role_index])))
+ pa_log_debug(" %s %s (%s)", human, pa_strnull(pa_proplist_gets(s->proplist, PA_PROP_DEVICE_DESCRIPTION)), s->name);
+ else
+ pa_log_debug(" %s No sink specified", human);
+ } else {
+ pa_source *s;
+ if (PA_INVALID_INDEX != u->preferred_sinks[role_index] && (s = pa_idxset_get_by_index(u->core->sinks, u->preferred_sinks[role_index])))
+ pa_log_debug(" %s %s (%s)", human, pa_strnull(pa_proplist_gets(s->proplist, PA_PROP_DEVICE_DESCRIPTION)), s->name);
+ else
+ pa_log_debug(" %s No source specified", human);
+ }
+}
+
+static void dump_database(struct userdata *u) {
+ pa_datum key;
+ pa_bool_t done;
+
+ pa_assert(u);
+
+ done = !pa_database_first(u->database, &key, NULL);
+
+ pa_log_debug("Dumping database");
+ while (!done) {
+ char *name;
+ struct entry *e;
+ pa_datum next_key;
+
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
+
+ name = pa_xstrndup(key.data, key.size);
+
+ if ((e = read_entry(u, name))) {
+ pa_log_debug(" Got entry: %s", name);
+ pa_log_debug(" Description: %s", e->description);
+ pa_log_debug(" Priorities: None: %3u, Video: %3u, Music: %3u, Game: %3u, Event: %3u",
+ e->priority[ROLE_NONE], e->priority[ROLE_VIDEO], e->priority[ROLE_MUSIC], e->priority[ROLE_GAME], e->priority[ROLE_EVENT]);
+ pa_log_debug(" Phone: %3u, Anim: %3u, Prodtn: %3u, A11y: %3u",
+ e->priority[ROLE_PHONE], e->priority[ROLE_ANIMATION], e->priority[ROLE_PRODUCTION], e->priority[ROLE_A11Y]);
+ pa_xfree(e);
+ }
+
+ pa_xfree(name);
+
+ pa_datum_free(&key);
+ key = next_key;
+ }
+
+ pa_log_debug(" Highest priority devices per-role:");
+
+ pa_log_debug(" Sinks:");
+ dump_database_helper(u, ROLE_NONE, "None: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Video: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Music: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Game: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Event: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Phone: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Anim: ", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Prodtn:", TRUE);
+ dump_database_helper(u, ROLE_NONE, "Ally: ", TRUE);
+
+ pa_log_debug(" Sources:");
+ dump_database_helper(u, ROLE_NONE, "None: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Video: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Music: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Game: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Event: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Phone: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Anim: ", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Prodtn:", FALSE);
+ dump_database_helper(u, ROLE_NONE, "Ally: ", FALSE);
+
+ pa_log_debug("Completed database dump");
+}
+#endif
+
+static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
+ struct userdata *u = userdata;
+
+ pa_assert(a);
+ pa_assert(e);
+ pa_assert(u);
+
+ pa_assert(e == u->save_time_event);
+ u->core->mainloop->time_free(u->save_time_event);
+ u->save_time_event = NULL;
+
+ pa_database_sync(u->database);
+ pa_log_info("Synced.");
+
+#ifdef DUMP_DATABASE
+ dump_database(u);
+#endif
+}
+
static void trigger_save(struct userdata *u) {
pa_native_connection *c;
uint32_t idx;
@@ -1210,6 +1298,10 @@ int pa__init(pa_module*m) {
route_sink_inputs(u, NULL);
route_source_outputs(u, NULL);
+#ifdef DUMP_DATABASE
+ dump_database(u);
+#endif
+
pa_modargs_free(ma);
return 0;
commit 8b2cc4def30327a72d95365c671d2adcae1a77a8
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Sep 26 14:36:36 2009 +0100
device-manager: Expose the priority lists in the protocol extension.
Also leave space for 'icon' and 'available' details too, althought currently this info is dummy.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index baff560..8a3a6f8 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -88,6 +88,18 @@ enum {
typedef uint32_t role_indexes_t[NUM_ROLES];
+static const char* role_names[NUM_ROLES] = {
+ "none",
+ "video",
+ "music",
+ "game",
+ "event",
+ "phone",
+ "animation",
+ "production",
+ "a11y",
+};
+
struct userdata {
pa_core *core;
pa_module *module;
@@ -234,26 +246,28 @@ static void dump_database(struct userdata *u) {
pa_log_debug(" Highest priority devices per-role:");
pa_log_debug(" Sinks:");
- dump_database_helper(u, ROLE_NONE, "None: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Video: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Music: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Game: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Event: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Phone: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Anim: ", TRUE);
- dump_database_helper(u, ROLE_NONE, "Prodtn:", TRUE);
- dump_database_helper(u, ROLE_NONE, "Ally: ", TRUE);
+ for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
+ char name[13];
+ uint32_t len = PA_MAX(12u, strlen(role_names[role]));
+ for (int i = 0; i < 12; ++i) name[i] = ' ';
+ strncpy(name, role_names[role], len);
+ name[len] = ':';
+ name[0] -= 32;
+ name[12] = '\0';
+ dump_database_helper(u, role, name, TRUE);
+ }
pa_log_debug(" Sources:");
- dump_database_helper(u, ROLE_NONE, "None: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Video: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Music: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Game: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Event: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Phone: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Anim: ", FALSE);
- dump_database_helper(u, ROLE_NONE, "Prodtn:", FALSE);
- dump_database_helper(u, ROLE_NONE, "Ally: ", FALSE);
+ for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
+ char name[13];
+ uint32_t len = PA_MAX(12u, strlen(role_names[role]));
+ for (int i = 0; i < 12; ++i) name[i] = ' ';
+ strncpy(name, role_names[role], len);
+ name[len] = ':';
+ name[0] -= 32;
+ name[12] = '\0';
+ dump_database_helper(u, role, name, FALSE);
+ }
pa_log_debug("Completed database dump");
}
@@ -378,22 +392,10 @@ static uint32_t get_role_index(const char* role) {
if (strcmp(role, "") == 0)
return ROLE_NONE;
- if (strcmp(role, "video") == 0)
- return ROLE_VIDEO;
- if (strcmp(role, "music") == 0)
- return ROLE_MUSIC;
- if (strcmp(role, "game") == 0)
- return ROLE_GAME;
- if (strcmp(role, "event") == 0)
- return ROLE_EVENT;
- if (strcmp(role, "phone") == 0)
- return ROLE_PHONE;
- if (strcmp(role, "animation") == 0)
- return ROLE_ANIMATION;
- if (strcmp(role, "production") == 0)
- return ROLE_PRODUCTION;
- if (strcmp(role, "a11y") == 0)
- return ROLE_A11Y;
+ for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i)
+ if (strcmp(role, role_names[i]) == 0)
+ return i;
+
return PA_INVALID_INDEX;
}
@@ -974,10 +976,18 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_datum_free(&key);
if ((e = read_entry(u, name))) {
- pa_tagstruct_puts(reply, name);
- pa_tagstruct_puts(reply, e->description);
+ pa_tagstruct_puts(reply, name);
+ pa_tagstruct_puts(reply, e->description);
+ pa_tagstruct_puts(reply, "audio-card"); /** @todo store the icon */
+ pa_tagstruct_put_boolean(reply, TRUE); /** @todo show current available */
+ pa_tagstruct_putu32(reply, NUM_ROLES);
+
+ for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i) {
+ pa_tagstruct_puts(reply, role_names[i]);
+ pa_tagstruct_putu32(reply, e->priority[i]);
+ }
- pa_xfree(e);
+ pa_xfree(e);
}
pa_xfree(name);
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index bc6301c..01e4594 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -26,6 +26,7 @@
#include <pulse/context.h>
#include <pulse/gccmacro.h>
+#include <pulse/xmalloc.h>
#include <pulsecore/macro.h>
#include <pulsecore/pstream-util.h>
@@ -128,20 +129,48 @@ static void ext_device_manager_read_cb(pa_pdispatch *pd, uint32_t command, uint3
while (!pa_tagstruct_eof(t)) {
pa_ext_device_manager_info i;
+ pa_bool_t available;
memset(&i, 0, sizeof(i));
+ available = FALSE;
if (pa_tagstruct_gets(t, &i.name) < 0 ||
- pa_tagstruct_gets(t, &i.description) < 0) {
+ pa_tagstruct_gets(t, &i.description) < 0 ||
+ pa_tagstruct_gets(t, &i.icon) < 0 ||
+ pa_tagstruct_get_boolean(t, &available) < 0 ||
+ pa_tagstruct_getu32(t, &i.n_role_priorities) < 0) {
pa_context_fail(o->context, PA_ERR_PROTOCOL);
goto finish;
}
+ i.available = (uint8_t)available;
+
+ if (i.n_role_priorities > 0) {
+ uint32_t j;
+ i.role_priorities = pa_xnew0(pa_ext_device_manager_role_priority_info, i.n_role_priorities+1);
+
+ for (j = 0; j < i.n_role_priorities; j++) {
+
+ if (pa_tagstruct_gets(t, &i.role_priorities[j].role) < 0 ||
+ pa_tagstruct_getu32(t, &i.role_priorities[j].priority) < 0) {
+
+ pa_context_fail(o->context, PA_ERR_PROTOCOL);
+ pa_xfree(i.role_priorities);
+ goto finish;
+ }
+ }
+
+ /* Terminate with an extra NULL entry, just to make sure */
+ i.role_priorities[j].role = NULL;
+ i.role_priorities[j].priority = 0;
+ }
if (o->callback) {
pa_ext_device_manager_read_cb_t cb = (pa_ext_device_manager_read_cb_t) o->callback;
cb(o->context, &i, 0, o->userdata);
}
+
+ pa_xfree(i.role_priorities);
}
}
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 686c8d2..bd52331 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -33,11 +33,20 @@
PA_C_DECL_BEGIN
+typedef struct pa_ext_device_manager_role_priority_info {
+ const char *role;
+ uint32_t priority;
+} pa_ext_device_manager_role_priority_info;
+
/** Stores information about one device in the device database that is
* maintained by module-device-manager. \since 0.9.19 */
typedef struct pa_ext_device_manager_info {
const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
const char *description; /**< The description of the device when it was last seen, if applicable and saved */
+ const char *icon; /**< The icon given to the device */
+ uint8_t available; /**< Is the device currently available? */
+ uint32_t n_role_priorities; /**< How many role priorities do we have? */
+ pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */
} pa_ext_device_manager_info;
/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.19 */
commit bbf67019df9a16fa27594054c0df222acd408b12
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 27 03:11:44 2009 +0100
device-manager: Save icon and report current availability over protocol.
This also ensures we let clients know whenver a sink changes in some capacity.
Also correct some debug code.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 8a3a6f8..0764ad0 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -133,6 +133,7 @@ struct userdata {
struct entry {
uint8_t version;
char description[PA_NAME_MAX];
+ char icon[PA_NAME_MAX];
role_indexes_t priority;
} PA_GCC_PACKED;
@@ -248,24 +249,20 @@ static void dump_database(struct userdata *u) {
pa_log_debug(" Sinks:");
for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
char name[13];
- uint32_t len = PA_MAX(12u, strlen(role_names[role]));
- for (int i = 0; i < 12; ++i) name[i] = ' ';
+ uint32_t len = PA_MIN(12u, strlen(role_names[role]));
strncpy(name, role_names[role], len);
- name[len] = ':';
- name[0] -= 32;
- name[12] = '\0';
+ for (int i = len+1; i < 12; ++i) name[i] = ' ';
+ name[len] = ':'; name[0] -= 32; name[12] = '\0';
dump_database_helper(u, role, name, TRUE);
}
pa_log_debug(" Sources:");
for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
char name[13];
- uint32_t len = PA_MAX(12u, strlen(role_names[role]));
- for (int i = 0; i < 12; ++i) name[i] = ' ';
+ uint32_t len = PA_MIN(12u, strlen(role_names[role]));
strncpy(name, role_names[role], len);
- name[len] = ':';
- name[0] -= 32;
- name[12] = '\0';
+ for (int i = len+1; i < 12; ++i) name[i] = ' ';
+ name[len] = ':'; name[0] -= 32; name[12] = '\0';
dump_database_helper(u, role, name, FALSE);
}
@@ -292,10 +289,13 @@ static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct
#endif
}
-static void trigger_save(struct userdata *u) {
+static void notify_subscribers(struct userdata *u) {
+
pa_native_connection *c;
uint32_t idx;
+ pa_assert(u);
+
for (c = pa_idxset_first(u->subscribed, &idx); c; c = pa_idxset_next(u->subscribed, &idx)) {
pa_tagstruct *t;
@@ -308,6 +308,13 @@ static void trigger_save(struct userdata *u) {
pa_pstream_send_tagstruct(pa_native_connection_get_pstream(c), t);
}
+}
+
+static void trigger_save(struct userdata *u) {
+
+ pa_assert(u);
+
+ notify_subscribers(u);
if (u->save_time_event)
return;
@@ -390,8 +397,6 @@ static inline struct entry *load_or_initialize_entry(struct userdata *u, struct
static uint32_t get_role_index(const char* role) {
pa_assert(role);
- if (strcmp(role, "") == 0)
- return ROLE_NONE;
for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i)
if (strcmp(role, role_names[i]) == 0)
return i;
@@ -510,7 +515,7 @@ static void route_sink_input(struct userdata *u, pa_sink_input *si) {
return;
if (!(role = pa_proplist_gets(si->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
+ role_index = get_role_index("none");
else
role_index = get_role_index(role);
@@ -571,7 +576,7 @@ static void route_source_output(struct userdata *u, pa_source_output *so) {
return;
if (!(role = pa_proplist_gets(so->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
+ role_index = get_role_index("none");
else
role_index = get_role_index(role);
@@ -665,6 +670,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
old = load_or_initialize_entry(u, &entry, name, "sink:");
pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ pa_strlcpy(entry.icon, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_ICON_NAME)), sizeof(entry.icon));
} else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE) {
pa_source *source;
@@ -682,6 +688,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
old = load_or_initialize_entry(u, &entry, name, "source:");
pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ pa_strlcpy(entry.icon, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_ICON_NAME)), sizeof(entry.icon));
}
pa_assert(name);
@@ -691,6 +698,11 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
if (entries_equal(old, &entry)) {
pa_xfree(old);
pa_xfree(name);
+
+ /* Even if the entries are equal, the availability or otherwise
+ of the sink/source may have changed so we notify clients all the same */
+ notify_subscribers(u);
+
return;
}
@@ -976,10 +988,34 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_datum_free(&key);
if ((e = read_entry(u, name))) {
+ uint32_t idx;
+ char *devname;
+ pa_bool_t available = FALSE;
+
+ if ((devname = get_name(name, "sink:"))) {
+ pa_sink* s;
+ PA_IDXSET_FOREACH(s, u->core->sinks, idx) {
+ if (strcmp(s->name, devname) == 0) {
+ available = TRUE;
+ break;
+ }
+ }
+ pa_xfree(devname);
+ } else if ((devname = get_name(name, "source:"))) {
+ pa_source* s;
+ PA_IDXSET_FOREACH(s, u->core->sources, idx) {
+ if (strcmp(s->name, devname) == 0) {
+ available = TRUE;
+ break;
+ }
+ }
+ pa_xfree(devname);
+ }
+
pa_tagstruct_puts(reply, name);
pa_tagstruct_puts(reply, e->description);
- pa_tagstruct_puts(reply, "audio-card"); /** @todo store the icon */
- pa_tagstruct_put_boolean(reply, TRUE); /** @todo show current available */
+ pa_tagstruct_puts(reply, e->icon);
+ pa_tagstruct_put_boolean(reply, available);
pa_tagstruct_putu32(reply, NUM_ROLES);
for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i) {
commit 8977abdc840989975d79d041ffcaf48804d7a52b
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sun Sep 27 16:55:31 2009 +0100
device-manager: Don't notify clients on every subscription (it happens all the time).
Also compare the entries fully before saving.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 0764ad0..89fb460 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -323,10 +323,18 @@ static void trigger_save(struct userdata *u) {
}
static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
- /** @todo: Compare the priority lists too */
- if (strncmp(a->description, b->description, sizeof(a->description)))
+
+ pa_assert(a);
+ pa_assert(b);
+
+ if (strncmp(a->description, b->description, sizeof(a->description))
+ || strncmp(a->icon, b->icon, sizeof(a->icon)))
return FALSE;
+ for (int i=0; i < NUM_ROLES; ++i)
+ if (a->priority[i] != b->priority[i])
+ return FALSE;
+
return TRUE;
}
@@ -699,10 +707,6 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
pa_xfree(old);
pa_xfree(name);
- /* Even if the entries are equal, the availability or otherwise
- of the sink/source may have changed so we notify clients all the same */
- notify_subscribers(u);
-
return;
}
@@ -857,6 +861,8 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_sink
pa_assert(u->core == c);
pa_assert(u->on_hotplug);
+ notify_subscribers(u);
+
return route_sink_inputs(u, NULL);
}
@@ -866,6 +872,8 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, PA_GCC_UNUSED pa_so
pa_assert(u->core == c);
pa_assert(u->on_hotplug);
+ notify_subscribers(u);
+
return route_source_outputs(u, NULL);
}
@@ -880,6 +888,8 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
+ notify_subscribers(u);
+
return route_sink_inputs(u, sink);
}
@@ -894,6 +904,8 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
if (c->state == PA_CORE_SHUTDOWN)
return PA_HOOK_OK;
+ notify_subscribers(u);
+
return route_source_outputs(u, source);
}
commit f9b2d6500b75445b66c83ad1d6700e042f2f8d2a
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Oct 1 01:27:02 2009 +0100
device-manager: Change the prefer/defer options to a single 'reorder' command.
We put in the devices from the wire into a hashmap and then add all like type device in the database
and then order them based on priority (with the ones specified on the wire always being in that order at
the top of the list.
diff --git a/src/map-file b/src/map-file
index d7b341d..3fc934c 100644
--- a/src/map-file
+++ b/src/map-file
@@ -144,11 +144,10 @@ pa_cvolume_set_fade;
pa_cvolume_set_position;
pa_cvolume_snprint;
pa_cvolume_valid;
-pa_ext_device_manager_defer_device;
pa_ext_device_manager_delete;
pa_ext_device_manager_enable_role_device_priority_routing;
-pa_ext_device_manager_prefer_device;
pa_ext_device_manager_read;
+pa_ext_device_manager_reorder_devices_for_role;
pa_ext_device_manager_set_device_description;
pa_ext_device_manager_set_subscribe_cb;
pa_ext_device_manager_subscribe;
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 89fb460..407d76d 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -143,8 +143,7 @@ enum {
SUBCOMMAND_RENAME,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
- SUBCOMMAND_PREFER_DEVICE,
- SUBCOMMAND_DEFER_DEVICE,
+ SUBCOMMAND_REORDER,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -1121,115 +1120,174 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
break;
}
- case SUBCOMMAND_PREFER_DEVICE:
- case SUBCOMMAND_DEFER_DEVICE: {
+ case SUBCOMMAND_REORDER: {
- const char *role, *device;
+ const char *role;
struct entry *e;
- uint32_t role_index;
+ uint32_t role_index, n_devices;
+ pa_datum key, data;
+ pa_bool_t done, sink_mode = TRUE;
+ struct device_t { uint32_t prio; char *device; };
+ struct device_t *device;
+ struct device_t **devices;
+ uint32_t i, idx, offset;
+ pa_hashmap *h;
+ pa_bool_t first;
if (pa_tagstruct_gets(t, &role) < 0 ||
- pa_tagstruct_gets(t, &device) < 0)
- goto fail;
-
- if (!role || !device || !*device)
- goto fail;
-
- role_index = get_role_index(role);
- if (PA_INVALID_INDEX == role_index)
+ pa_tagstruct_getu32(t, &n_devices) < 0 ||
+ n_devices < 1)
goto fail;
- if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
- pa_datum key, data;
- pa_bool_t done;
- char* prefix = NULL;
- uint32_t priority;
- pa_bool_t haschanged = FALSE;
-
- if (strncmp(device, "sink:", 5) == 0)
- prefix = pa_xstrdup("sink:");
- else if (strncmp(device, "source:", 7) == 0)
- prefix = pa_xstrdup("source:");
+ if (PA_INVALID_INDEX == (role_index = get_role_index(role)))
+ goto fail;
+
+ /* Cycle through the devices given and make sure they exist */
+ h = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ first = TRUE;
+ idx = 0;
+ for (i = 0; i < n_devices; ++i) {
+ const char *s;
+ if (pa_tagstruct_gets(t, &s) < 0) {
+ while ((device = pa_hashmap_steal_first(h))) {
+ pa_xfree(device->device);
+ pa_xfree(device);
+ }
- if (!prefix)
+ pa_hashmap_free(h, NULL, NULL);
+ pa_log_error("Protocol error on reorder");
goto fail;
+ }
- priority = e->priority[role_index];
+ /* Ensure this is a valid entry */
+ if (!(e = read_entry(u, s))) {
+ while ((device = pa_hashmap_steal_first(h))) {
+ pa_xfree(device->device);
+ pa_xfree(device);
+ }
- /* Now we need to load up all the other entries of this type and shuffle the priroities around */
+ pa_hashmap_free(h, NULL, NULL);
+ pa_log_error("Client specified an unknown device in it's reorder list.");
+ goto fail;
+ }
+ pa_xfree(e);
- done = !pa_database_first(u->database, &key, NULL);
+ if (first) {
+ first = FALSE;
+ sink_mode = (0 == strncmp("sink:", s, 5));
+ } else if ((sink_mode && 0 != strncmp("sink:", s, 5))
+ || (!sink_mode && 0 != strncmp("source:", s, 7)))
+ {
+ while ((device = pa_hashmap_steal_first(h))) {
+ pa_xfree(device->device);
+ pa_xfree(device);
+ }
- while (!done && !haschanged) {
- pa_datum next_key;
+ pa_hashmap_free(h, NULL, NULL);
+ pa_log_error("Attempted to reorder mixed devices (sinks and sources)");
+ goto fail;
+ }
- done = !pa_database_next(u->database, &key, &next_key, NULL);
+ /* Add the device to our hashmap. If it's alredy in it, free it now and carry on */
+ device = pa_xnew(struct device_t, 1);
+ device->device = pa_xstrdup(s);
+ if (pa_hashmap_put(h, device->device, device) == 0) {
+ device->prio = idx;
+ idx++;
+ } else {
+ pa_xfree(device->device);
+ pa_xfree(device);
+ }
+ }
- /* Only read devices with the right prefix */
- if (key.size > strlen(prefix) && strncmp(key.data, prefix, strlen(prefix)) == 0) {
- char *name;
- struct entry *e2;
+ /* Now cycle through our list and add all the devices.
+ This has the effect of addign in any in our DB,
+ not specified in the device list (and thus will be
+ tacked on at the end) */
+ offset = idx;
+ done = !pa_database_first(u->database, &key, NULL);
- name = pa_xstrndup(key.data, key.size);
+ while (!done && idx < 256) {
+ pa_datum next_key;
- if ((e2 = read_entry(u, name))) {
- if (SUBCOMMAND_PREFER_DEVICE == command) {
- /* PREFER */
- if (e2->priority[role_index] == (priority - 1)) {
- e2->priority[role_index]++;
- haschanged = TRUE;
- }
- } else {
- /* DEFER */
- if (e2->priority[role_index] == (priority + 1)) {
- e2->priority[role_index]--;
- haschanged = TRUE;
- }
- }
+ done = !pa_database_next(u->database, &key, &next_key, NULL);
- if (haschanged) {
- data.data = e2;
- data.size = sizeof(*e2);
+ device = pa_xnew(struct device_t, 1);
+ device->device = pa_xstrndup(key.data, key.size);
+ if ((sink_mode && 0 == strncmp("sink:", device->device, 5))
+ || (!sink_mode && 0 == strncmp("source:", device->device, 7))) {
+
+ /* Add the device to our hashmap. If it's alredy in it, free it now and carry on */
+ if (pa_hashmap_put(h, device->device, device) == 0
+ && (e = read_entry(u, device->device)) && ENTRY_VERSION == e->version) {
+ /* We add offset on to the existing priorirty so that when we order, the
+ existing entries are always lower priority than the new ones. */
+ device->prio = (offset + e->priority[role_index]);
+ pa_xfree(e);
+ }
+ else {
+ pa_xfree(device->device);
+ pa_xfree(device);
+ }
+ } else {
+ pa_xfree(device->device);
+ pa_xfree(device);
+ }
- if (pa_database_set(u->database, &key, &data, TRUE))
- pa_log_warn("Could not save device");
- }
+ pa_datum_free(&key);
- pa_xfree(e2);
- }
+ key = next_key;
+ }
- pa_xfree(name);
+ /* Now we put all the entries in a simple list for sorting it. */
+ n_devices = pa_hashmap_size(h);
+ devices = pa_xnew(struct device_t *, n_devices);
+ idx = 0;
+ while ((device = pa_hashmap_steal_first(h))) {
+ devices[idx++] = device;
+ }
+ pa_hashmap_free(h, NULL, NULL);
+
+ /* Simple bubble sort */
+ for (i = 0; i < n_devices; ++i) {
+ for (uint32_t j = i; j < n_devices; ++j) {
+ if (devices[i]->prio > devices[j]->prio) {
+ struct device_t *tmp;
+ tmp = devices[i];
+ devices[i] = devices[j];
+ devices[j] = tmp;
}
-
- pa_datum_free(&key);
- key = next_key;
}
+ }
- /* Now write out our actual entry */
- if (haschanged) {
- if (SUBCOMMAND_PREFER_DEVICE == command)
- e->priority[role_index]--;
- else
- e->priority[role_index]++;
+ /* Go through in order and write the new entry and cleanup our own list */
+ i = 0; idx = 1;
+ first = TRUE;
+ for (i = 0; i < n_devices; ++i) {
+ if ((e = read_entry(u, devices[i]->device)) && ENTRY_VERSION == e->version) {
+ if (e->priority[role_index] != idx) {
+ e->priority[role_index] = idx;
- key.data = (char *) device;
- key.size = strlen(device);
+ key.data = (char *) devices[i]->device;
+ key.size = strlen(devices[i]->device);
- data.data = e;
- data.size = sizeof(*e);
+ data.data = e;
+ data.size = sizeof(*e);
- if (pa_database_set(u->database, &key, &data, TRUE))
- pa_log_warn("Could not save device");
+ if (pa_database_set(u->database, &key, &data, TRUE) == 0) {
+ first = FALSE;
+ idx++;
+ }
+ }
- trigger_save(u);
+ pa_xfree(e);
}
-
- pa_xfree(e);
-
- pa_xfree(prefix);
+ pa_xfree(devices[i]->device);
+ pa_xfree(devices[i]);
}
- else
- pa_log_warn("Could not reorder device %s, no entry in database", device);
+
+ if (!first)
+ trigger_save(u);
break;
}
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index 01e4594..138ed83 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -43,8 +43,7 @@ enum {
SUBCOMMAND_RENAME,
SUBCOMMAND_DELETE,
SUBCOMMAND_ROLE_DEVICE_PRIORITY_ROUTING,
- SUBCOMMAND_PREFER_DEVICE,
- SUBCOMMAND_DEFER_DEVICE,
+ SUBCOMMAND_REORDER,
SUBCOMMAND_SUBSCRIBE,
SUBCOMMAND_EVENT
};
@@ -330,14 +329,14 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
return o;
}
-pa_operation *pa_ext_device_manager_prefer_device(
+pa_operation *pa_ext_device_manager_reorder_devices_for_role(
pa_context *c,
const char* role,
- const char* device,
+ const char** devices,
pa_context_success_cb_t cb,
void *userdata) {
- uint32_t tag;
+ uint32_t tag, i;
pa_operation *o = NULL;
pa_tagstruct *t = NULL;
@@ -349,52 +348,22 @@ pa_operation *pa_ext_device_manager_prefer_device(
PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
pa_assert(role);
- pa_assert(device);
+ pa_assert(devices);
o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
pa_tagstruct_putu32(t, PA_INVALID_INDEX);
pa_tagstruct_puts(t, "module-device-manager");
- pa_tagstruct_putu32(t, SUBCOMMAND_PREFER_DEVICE);
+ pa_tagstruct_putu32(t, SUBCOMMAND_REORDER);
pa_tagstruct_puts(t, role);
- pa_tagstruct_puts(t, device);
-
- pa_pstream_send_tagstruct(c->pstream, t);
- pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
-
- return o;
-}
-
-pa_operation *pa_ext_device_manager_defer_device(
- pa_context *c,
- const char* role,
- const char* device,
- pa_context_success_cb_t cb,
- void *userdata) {
-
- uint32_t tag;
- pa_operation *o = NULL;
- pa_tagstruct *t = NULL;
-
- pa_assert(c);
- pa_assert(PA_REFCNT_VALUE(c) >= 1);
-
- PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
- PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
- PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 14, PA_ERR_NOTSUPPORTED);
- pa_assert(role);
- pa_assert(device);
+ i = 0; while (devices[i]) i++;
+ pa_tagstruct_putu32(t, i);
- o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
-
- t = pa_tagstruct_command(c, PA_COMMAND_EXTENSION, &tag);
- pa_tagstruct_putu32(t, PA_INVALID_INDEX);
- pa_tagstruct_puts(t, "module-device-manager");
- pa_tagstruct_putu32(t, SUBCOMMAND_DEFER_DEVICE);
- pa_tagstruct_puts(t, role);
- pa_tagstruct_puts(t, device);
+ i = 0;
+ while (devices[i])
+ pa_tagstruct_puts(t, devices[i++]);
pa_pstream_send_tagstruct(c->pstream, t);
pa_pdispatch_register_reply(c->pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index bd52331..13538f0 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -97,18 +97,10 @@ pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
void *userdata);
/** Prefer a given device in the priority list. \since 0.9.19 */
-pa_operation *pa_ext_device_manager_prefer_device(
+pa_operation *pa_ext_device_manager_reorder_devices_for_role(
pa_context *c,
const char* role,
- const char* device,
- pa_context_success_cb_t cb,
- void *userdata);
-
-/** Defer a given device in the priority list. \since 0.9.19 */
-pa_operation *pa_ext_device_manager_defer_device(
- pa_context *c,
- const char* role,
- const char* device,
+ const char** devices,
pa_context_success_cb_t cb,
void *userdata);
commit 7633bb8a290f1748d8953ce7558b80aa77084140
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Oct 1 09:07:42 2009 +0100
device-manager: Add extra debug messages
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 407d76d..00389b6 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -1132,6 +1132,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
struct device_t **devices;
uint32_t i, idx, offset;
pa_hashmap *h;
+ void *state;
pa_bool_t first;
if (pa_tagstruct_gets(t, &role) < 0 ||
@@ -1200,6 +1201,11 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
}
}
+ pa_log_debug("Hashmap contents (received from client)");
+ PA_HASHMAP_FOREACH(device, h, state) {
+ pa_log_debug(" - %s (%d)", device->device, device->prio);
+ }
+
/* Now cycle through our list and add all the devices.
This has the effect of addign in any in our DB,
not specified in the device list (and thus will be
@@ -1239,6 +1245,11 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
key = next_key;
}
+ pa_log_debug("Hashmap contents (combined with database)");
+ PA_HASHMAP_FOREACH(device, h, state) {
+ pa_log_debug(" - %s (%d)", device->device, device->prio);
+ }
+
/* Now we put all the entries in a simple list for sorting it. */
n_devices = pa_hashmap_size(h);
devices = pa_xnew(struct device_t *, n_devices);
@@ -1260,8 +1271,13 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
}
}
+ pa_log_debug("Sorted device list");
+ for (i = 0; i < n_devices; ++i) {
+ pa_log_debug(" - %s (%d)", devices[i]->device, devices[i]->prio);
+ }
+
/* Go through in order and write the new entry and cleanup our own list */
- i = 0; idx = 1;
+ idx = 1;
first = TRUE;
for (i = 0; i < n_devices; ++i) {
if ((e = read_entry(u, devices[i]->device)) && ENTRY_VERSION == e->version) {
@@ -1274,7 +1290,9 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
data.data = e;
data.size = sizeof(*e);
+ pa_log_debug("Attempting to write record: %d. %s", e->priority[role_index], e->description);
if (pa_database_set(u->database, &key, &data, TRUE) == 0) {
+ pa_log_debug("..... write successfull");
first = FALSE;
idx++;
}
commit b8a6436d4be0c78405b21dbf6ee192a527713388
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Oct 1 20:13:38 2009 +0100
device-manager: Fix the writing of the database when priority doesn't change.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 00389b6..6b815bd 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -1281,7 +1281,9 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
first = TRUE;
for (i = 0; i < n_devices; ++i) {
if ((e = read_entry(u, devices[i]->device)) && ENTRY_VERSION == e->version) {
- if (e->priority[role_index] != idx) {
+ if (e->priority[role_index] == idx)
+ idx++;
+ else {
e->priority[role_index] = idx;
key.data = (char *) devices[i]->device;
commit 3a20cf0b9f69e5f9b1012cc46b0918dd5f8173dd
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Oct 1 21:30:24 2009 +0100
device-manager: Misc fixes.
* Fix a s/sink/source/ copy paste issue when dumping the database.
* Only show priority list when routing is enabled (as the list is not updated if not)
* Fix a memory access issue when finding the highest priority sinks/sources
* key name->device name efficiency fix.
* Silence noisy debug on reorder - it seems to work :)
* Reroute after reordering.
* Initialise preferred lists to PA_INVALID_INDEX
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 6b815bd..5b5b6ca 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -202,7 +202,7 @@ static void dump_database_helper(struct userdata *u, uint32_t role_index, const
pa_log_debug(" %s No sink specified", human);
} else {
pa_source *s;
- if (PA_INVALID_INDEX != u->preferred_sinks[role_index] && (s = pa_idxset_get_by_index(u->core->sinks, u->preferred_sinks[role_index])))
+ if (PA_INVALID_INDEX != u->preferred_sources[role_index] && (s = pa_idxset_get_by_index(u->core->sources, u->preferred_sources[role_index])))
pa_log_debug(" %s %s (%s)", human, pa_strnull(pa_proplist_gets(s->proplist, PA_PROP_DEVICE_DESCRIPTION)), s->name);
else
pa_log_debug(" %s No source specified", human);
@@ -243,26 +243,28 @@ static void dump_database(struct userdata *u) {
key = next_key;
}
- pa_log_debug(" Highest priority devices per-role:");
-
- pa_log_debug(" Sinks:");
- for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
- char name[13];
- uint32_t len = PA_MIN(12u, strlen(role_names[role]));
- strncpy(name, role_names[role], len);
- for (int i = len+1; i < 12; ++i) name[i] = ' ';
- name[len] = ':'; name[0] -= 32; name[12] = '\0';
- dump_database_helper(u, role, name, TRUE);
- }
+ if (u->do_routing) {
+ pa_log_debug(" Highest priority devices per-role:");
+
+ pa_log_debug(" Sinks:");
+ for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
+ char name[13];
+ uint32_t len = PA_MIN(12u, strlen(role_names[role]));
+ strncpy(name, role_names[role], len);
+ for (int i = len+1; i < 12; ++i) name[i] = ' ';
+ name[len] = ':'; name[0] -= 32; name[12] = '\0';
+ dump_database_helper(u, role, name, TRUE);
+ }
- pa_log_debug(" Sources:");
- for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
- char name[13];
- uint32_t len = PA_MIN(12u, strlen(role_names[role]));
- strncpy(name, role_names[role], len);
- for (int i = len+1; i < 12; ++i) name[i] = ' ';
- name[len] = ':'; name[0] -= 32; name[12] = '\0';
- dump_database_helper(u, role, name, FALSE);
+ pa_log_debug(" Sources:");
+ for (uint32_t role = ROLE_NONE; role < NUM_ROLES; ++role) {
+ char name[13];
+ uint32_t len = PA_MIN(12u, strlen(role_names[role]));
+ strncpy(name, role_names[role], len);
+ for (int i = len+1; i < 12; ++i) name[i] = ' ';
+ name[len] = ':'; name[0] -= 32; name[12] = '\0';
+ dump_database_helper(u, role, name, FALSE);
+ }
}
pa_log_debug("Completed database dump");
@@ -427,7 +429,7 @@ static void update_highest_priority_device_indexes(struct userdata *u, const cha
indexes = &u->preferred_sources;
for (uint32_t i = 0; i < NUM_ROLES; ++i) {
- *indexes[i] = PA_INVALID_INDEX;
+ (*indexes)[i] = PA_INVALID_INDEX;
}
pa_zero(highest_priority_available);
@@ -440,19 +442,19 @@ static void update_highest_priority_device_indexes(struct userdata *u, const cha
done = !pa_database_next(u->database, &key, &next_key, NULL);
if (key.size > strlen(prefix) && strncmp(key.data, prefix, strlen(prefix)) == 0) {
- char *name;
+ char *name, *device_name;
struct entry *e;
name = pa_xstrndup(key.data, key.size);
+ device_name = get_name(name, prefix);
- if ((e = read_entry(u, name))) {
+ if ((e = read_entry(u, name)) && ENTRY_VERSION == e->version) {
for (uint32_t i = 0; i < NUM_ROLES; ++i) {
- if (highest_priority_available[i] && e->priority[i] < highest_priority_available[i]) {
+ if (!highest_priority_available[i] || e->priority[i] < highest_priority_available[i]) {
/* We've found a device with a higher priority than that we've currently got,
so see if it is currently available or not and update our list */
uint32_t idx;
pa_bool_t found = FALSE;
- char *device_name = get_name(name, prefix);
if (sink_mode) {
pa_sink *sink;
@@ -481,10 +483,9 @@ static void update_highest_priority_device_indexes(struct userdata *u, const cha
}
if (found) {
highest_priority_available[i] = e->priority[i];
- *indexes[i] = idx;
+ (*indexes)[i] = idx;
}
- pa_xfree(device_name);
}
}
@@ -492,6 +493,7 @@ static void update_highest_priority_device_indexes(struct userdata *u, const cha
}
pa_xfree(name);
+ pa_xfree(device_name);
}
pa_datum_free(&key);
@@ -1132,7 +1134,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
struct device_t **devices;
uint32_t i, idx, offset;
pa_hashmap *h;
- void *state;
+ /*void *state;*/
pa_bool_t first;
if (pa_tagstruct_gets(t, &role) < 0 ||
@@ -1201,10 +1203,10 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
}
}
- pa_log_debug("Hashmap contents (received from client)");
+ /*pa_log_debug("Hashmap contents (received from client)");
PA_HASHMAP_FOREACH(device, h, state) {
pa_log_debug(" - %s (%d)", device->device, device->prio);
- }
+ }*/
/* Now cycle through our list and add all the devices.
This has the effect of addign in any in our DB,
@@ -1245,10 +1247,10 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
key = next_key;
}
- pa_log_debug("Hashmap contents (combined with database)");
+ /*pa_log_debug("Hashmap contents (combined with database)");
PA_HASHMAP_FOREACH(device, h, state) {
pa_log_debug(" - %s (%d)", device->device, device->prio);
- }
+ }*/
/* Now we put all the entries in a simple list for sorting it. */
n_devices = pa_hashmap_size(h);
@@ -1271,10 +1273,10 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
}
}
- pa_log_debug("Sorted device list");
+ /*pa_log_debug("Sorted device list");
for (i = 0; i < n_devices; ++i) {
pa_log_debug(" - %s (%d)", devices[i]->device, devices[i]->prio);
- }
+ }*/
/* Go through in order and write the new entry and cleanup our own list */
idx = 1;
@@ -1292,9 +1294,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
data.data = e;
data.size = sizeof(*e);
- pa_log_debug("Attempting to write record: %d. %s", e->priority[role_index], e->description);
if (pa_database_set(u->database, &key, &data, TRUE) == 0) {
- pa_log_debug("..... write successfull");
first = FALSE;
idx++;
}
@@ -1306,9 +1306,15 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_xfree(devices[i]);
}
- if (!first)
+ if (!first) {
trigger_save(u);
+ if (sink_mode)
+ route_sink_inputs(u, NULL);
+ else
+ route_source_outputs(u, NULL);
+ }
+
break;
}
@@ -1431,6 +1437,10 @@ int pa__init(pa_module*m) {
subscribe_callback(m->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_NEW, source->index, u);
/* Perform the routing (if it's enabled) which will update our priority list cache too */
+ for (uint32_t i = 0; i < NUM_ROLES; ++i) {
+ u->preferred_sinks[i] = u->preferred_sources[i] = PA_INVALID_INDEX;
+ }
+
route_sink_inputs(u, NULL);
route_source_outputs(u, NULL);
commit 20eedb24163884612c0fe81846ccf2983f336b7c
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Oct 1 22:12:16 2009 +0100
device-manager: Misc fixes to co-exist with other stream management/routing modules.
* Do not read or set the save_sink/save_source flags. This seems to be for module-stream-restore only...
* Even if a sink is already set by an earlier module, still move it to the sink we dictate.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 5b5b6ca..86ea95d 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -510,9 +510,6 @@ static void route_sink_input(struct userdata *u, pa_sink_input *si) {
pa_assert(u);
pa_assert(u->do_routing);
- if (si->save_sink)
- return;
-
/* Skip this if it is already in the process of being moved anyway */
if (!si->sink)
return;
@@ -568,9 +565,6 @@ static void route_source_output(struct userdata *u, pa_source_output *so) {
pa_assert(u);
pa_assert(u->do_routing);
- if (so->save_source)
- return;
-
if (so->direct_on_input)
return;
@@ -779,6 +773,9 @@ static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data
}
static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
+ const char *role;
+ uint32_t role_index;
+
pa_assert(c);
pa_assert(new_data);
pa_assert(u);
@@ -787,27 +784,22 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
return PA_HOOK_OK;
if (new_data->sink)
- pa_log_debug("Not restoring device for stream, because already set.");
- else {
- const char *role;
- uint32_t role_index;
+ pa_log_debug("Overriding device for stream, even although it is already set. I am evil that way...");
- if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
- else
- role_index = get_role_index(role);
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("none");
+ else
+ role_index = get_role_index(role);
- if (PA_INVALID_INDEX != role_index) {
- uint32_t device_index;
+ if (PA_INVALID_INDEX != role_index) {
+ uint32_t device_index;
- device_index = u->preferred_sinks[role_index];
- if (PA_INVALID_INDEX != device_index) {
- pa_sink *sink;
+ device_index = u->preferred_sinks[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_sink *sink;
- if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
- new_data->sink = sink;
- new_data->save_sink = TRUE;
- }
+ if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
+ new_data->sink = sink;
}
}
}
@@ -816,6 +808,9 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
}
static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
+ const char *role;
+ uint32_t role_index;
+
pa_assert(c);
pa_assert(new_data);
pa_assert(u);
@@ -827,27 +822,22 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
return PA_HOOK_OK;
if (new_data->source)
- pa_log_debug("Not restoring device for stream, because already set");
- else {
- const char *role;
- uint32_t role_index;
+ pa_log_debug("Overriding device for stream, even although it is already set. I am evil that way...");
- if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("");
- else
- role_index = get_role_index(role);
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("none");
+ else
+ role_index = get_role_index(role);
- if (PA_INVALID_INDEX != role_index) {
- uint32_t device_index;
+ if (PA_INVALID_INDEX != role_index) {
+ uint32_t device_index;
- device_index = u->preferred_sources[role_index];
- if (PA_INVALID_INDEX != device_index) {
- pa_source *source;
+ device_index = u->preferred_sources[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_source *source;
- if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
- new_data->source = source;
- new_data->save_source = TRUE;
- }
+ if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
+ new_data->source = source;
}
}
}
commit 42e28ce31c583ae9d431d2f1dd033d82cc63eb36
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Oct 1 22:33:22 2009 +0100
device-manager: Add some scripts that are only run under KDE to load/initialise module-device-manager with routing turned on.
diff --git a/src/Makefile.am b/src/Makefile.am
index 8ed7482..3f874f7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -117,9 +117,11 @@ EXTRA_DIST = \
depmod.py \
daemon/esdcompat.in \
daemon/start-pulseaudio-x11.in \
+ daemon/start-pulseaudio-kde.in \
utils/padsp \
modules/module-defs.h.m4 \
daemon/pulseaudio.desktop.in \
+ daemon/pulseaudio-kde.desktop.in \
map-file \
daemon/pulseaudio-system.conf \
modules/alsa/mixer/profile-sets/default.conf \
@@ -153,7 +155,8 @@ dbuspolicy_DATA = \
if HAVE_X11
xdgautostart_in_files = \
- daemon/pulseaudio.desktop.in
+ daemon/pulseaudio.desktop.in \
+ daemon/pulseaudio-kde.desktop.in
endif
xdgautostart_DATA = $(xdgautostart_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
@@ -215,7 +218,7 @@ if HAVE_AVAHI
bin_PROGRAMS += pabrowse
endif
-bin_SCRIPTS = esdcompat start-pulseaudio-x11
+bin_SCRIPTS = esdcompat start-pulseaudio-x11 start-pulseaudio-kde
pacat_SOURCES = utils/pacat.c
pacat_LDADD = $(AM_LDADD) libpulse.la libpulsecommon- at PA_MAJORMINORMICRO@.la $(LIBSNDFILE_LIBS)
@@ -1711,7 +1714,7 @@ module_rygel_media_server_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
# Some minor stuff #
###################################
-CLEANFILES = esdcompat client.conf default.pa system.pa daemon.conf start-pulseaudio-x11 daemon/pulseaudio.desktop
+CLEANFILES = esdcompat client.conf default.pa system.pa daemon.conf start-pulseaudio-x11 start-pulseaudio-kde daemon/pulseaudio.desktop daemon/pulseaudio-kde.desktop
esdcompat: daemon/esdcompat.in Makefile
sed -e 's, at PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
@@ -1724,6 +1727,11 @@ start-pulseaudio-x11: daemon/start-pulseaudio-x11.in Makefile
-e 's, at PACTL_BINARY\@,$(bindir)/pactl,g' < $< > $@
chmod +x start-pulseaudio-x11
+start-pulseaudio-kde: daemon/start-pulseaudio-kde.in Makefile
+ sed -e 's, at PA_BINARY\@,$(PA_BINARY),g' \
+ -e 's, at PACTL_BINARY\@,$(bindir)/pactl,g' < $< > $@
+ chmod +x start-pulseaudio-kde
+
client.conf: pulse/client.conf.in Makefile
sed -e 's, at PA_BINARY\@,$(PA_BINARY),g' < $< > $@
diff --git a/src/daemon/pulseaudio-kde.desktop.in b/src/daemon/pulseaudio-kde.desktop.in
new file mode 100644
index 0000000..0684642
--- /dev/null
+++ b/src/daemon/pulseaudio-kde.desktop.in
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+_Name=PulseAudio Sound System KDE Routing Policy
+_Comment=Start the PulseAudio Sound System with KDE Routing Policy
+Exec=start-pulseaudio-kde
+Terminal=false
+Type=Application
+Categories=
+GenericName=
+OnlyShowIn=KDE;
diff --git a/src/daemon/start-pulseaudio-kde.in b/src/daemon/start-pulseaudio-kde.in
new file mode 100755
index 0000000..a79a50b
--- /dev/null
+++ b/src/daemon/start-pulseaudio-kde.in
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# 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.
+
+set -e
+
+[ -z "$PULSE_SERVER" ]
+
+ at PA_BINARY@ --start "$@"
+
+if [ x"$DISPLAY" != x ] ; then
+
+ @PACTL_BINARY@ load-module module-module-device-manager "do_routing=1" > /dev/null
+
+fi
commit 50db81c8603e1274b1bfe8836d134bf8ad6fb0a1
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Oct 2 00:49:50 2009 +0100
device-manager: Fix typo in module loading script.
diff --git a/src/daemon/start-pulseaudio-kde.in b/src/daemon/start-pulseaudio-kde.in
index a79a50b..c319e7d 100755
--- a/src/daemon/start-pulseaudio-kde.in
+++ b/src/daemon/start-pulseaudio-kde.in
@@ -25,6 +25,6 @@ set -e
if [ x"$DISPLAY" != x ] ; then
- @PACTL_BINARY@ load-module module-module-device-manager "do_routing=1" > /dev/null
+ @PACTL_BINARY@ load-module module-device-manager "do_routing=1" > /dev/null
fi
commit a434f4c6af1ba421f8c689fa8bf9e040268205b2
Author: Jason Newton <nevion at gmail.com>
Date: Wed Aug 26 01:15:49 2009 -0700
module-equalizer-sink: resyncing with head and fix invalid writes
* pa_log->debug for default equalizer notification
* partially fixed infinite rewind bug
* set max_request to window_size first iteration
* swap order inside ROUND_UP calls
* resync pa_sink_input_new changes
* change pa_sample_clamp parameters to be correct to fix invalid writes
* reenable proper reset logic + proper request size
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index f634d5e..f556be7 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -99,10 +99,10 @@ struct userdata {
* the latency of the filter, calculated from window_size
* based on constraints of COLA and window function
*/
- size_t latency;//Really just R but made into it's own variable
//for twiddling with pulseaudio
size_t overlap_size;//window_size-R
size_t samples_gathered;
+ size_t input_buffer_max;
//message
float *W;//windowing function (time domain)
float *work_buffer, **input, **overlap_accum;
@@ -198,6 +198,34 @@ static int is_monotonic(const uint32_t *xs,size_t length){
return 1;
}
+//ensure's memory allocated is a multiple of v_size
+//and aligned
+static void * alloc(size_t x,size_t s){
+ size_t f = PA_ROUND_UP(x*s, sizeof(float)*v_size);
+ float *t;
+ pa_assert(f >= x*s);
+ t = fftwf_malloc(f);
+ memset(t, 0, f);
+ return t;
+}
+
+static void alloc_input_buffers(struct userdata *u, size_t min_buffer_length){
+ if(min_buffer_length <= u->input_buffer_max){
+ return;
+ }
+ pa_assert(min_buffer_length >= u->window_size);
+ for(size_t c = 0; c < u->channels; ++c){
+ float *tmp = alloc(min_buffer_length, sizeof(float));
+ if(u->input[c]){
+ if(!u->first_iteration){
+ memcpy(tmp, u->input[c], u->overlap_size * sizeof(float));
+ }
+ free(u->input[c]);
+ }
+ u->input[c] = tmp;
+ }
+ u->input_buffer_max = min_buffer_length;
+}
/* Called from I/O thread context */
static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
@@ -359,7 +387,7 @@ static void dsp_logic(
//preseve the needed input for the next window's overlap
memmove(src, src + u->R,
- u->overlap_size * sizeof(float)
+ (u->samples_gathered - u->R) * sizeof(float)
);
}
@@ -470,71 +498,64 @@ typedef union float_vector {
//}
static void process_samples(struct userdata *u, pa_memchunk *tchunk){
- size_t fs=pa_frame_size(&(u->sink->sample_spec));
+ size_t fs = pa_frame_size(&(u->sink->sample_spec));
float *dst;
unsigned a_i;
float *H, X;
- pa_assert(u->samples_gathered >= u->R);
+ size_t iterations, offset;
+ pa_assert(u->samples_gathered >= u->window_size);
+ iterations = (u->samples_gathered - u->overlap_size) / u->R;
tchunk->index = 0;
- tchunk->length = u->R * fs;
+ tchunk->length = iterations * u->R * fs;
tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
- dst = ((float*)pa_memblock_acquire(tchunk->memblock));
-
- for(size_t c=0;c < u->channels; c++) {
- a_i = pa_aupdate_read_begin(u->a_H[c]);
- X = u->Xs[c][a_i];
- H = u->Hs[c][a_i];
- dsp_logic(
- u->work_buffer,
- u->input[c],
- u->overlap_accum[c],
- X,
- H,
- u->W,
- u->output_window,
- u
- );
- pa_aupdate_read_end(u->a_H[c]);
- if(u->first_iteration){
- /* The windowing function will make the audio ramped in, as a cheap fix we can
- * undo the windowing (for non-zero window values)
- */
- for(size_t i = 0;i < u->overlap_size; ++i){
- u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->work_buffer[i] : u->work_buffer[i] / u->W[i];
+ dst = ((float*) pa_memblock_acquire(tchunk->memblock));
+ for(size_t iter = 0; iter < iterations; ++iter){
+ offset = iter * u->R * fs;
+ for(size_t c = 0;c < u->channels; c++) {
+ a_i = pa_aupdate_read_begin(u->a_H[c]);
+ X = u->Xs[c][a_i];
+ H = u->Hs[c][a_i];
+ dsp_logic(
+ u->work_buffer,
+ u->input[c],
+ u->overlap_accum[c],
+ X,
+ H,
+ u->W,
+ u->output_window,
+ u
+ );
+ pa_aupdate_read_end(u->a_H[c]);
+ if(u->first_iteration){
+ /* The windowing function will make the audio ramped in, as a cheap fix we can
+ * undo the windowing (for non-zero window values)
+ */
+ for(size_t i = 0; i < u->overlap_size; ++i){
+ u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->work_buffer[i] : u->work_buffer[i] / u->W[i];
+ }
}
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, (uint8_t *) (dst + c) + offset, fs, u->work_buffer, sizeof(float), u->R);
}
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, dst + c, fs, u->work_buffer, sizeof(float), u->R);
+ if(u->first_iteration){
+ u->first_iteration = FALSE;
+ }
+ u->samples_gathered -= u->R;
}
pa_memblock_release(tchunk->memblock);
- u->samples_gathered -= u->R;
-}
-
-static void initialize_buffer(struct userdata *u, pa_memchunk *in){
- size_t fs = pa_frame_size(&u->sink->sample_spec);
- size_t samples = in->length / fs;
- float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
- pa_assert_se(u->samples_gathered + samples <= u->window_size);
- for(size_t c = 0; c < u->channels; c++) {
- //buffer with an offset after the overlap from previous
- //iterations
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c] + u->samples_gathered, sizeof(float), src + c, fs, samples);
- }
- u->samples_gathered += samples;
- pa_memblock_release(in->memblock);
}
static void input_buffer(struct userdata *u, pa_memchunk *in){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
size_t samples = in->length/fs;
float *src = (float*) ((uint8_t*) pa_memblock_acquire(in->memblock) + in->index);
- pa_assert_se(samples <= u->window_size - u->samples_gathered);
+ pa_assert(u->samples_gathered + samples <= u->input_buffer_max);
for(size_t c = 0; c < u->channels; c++) {
//buffer with an offset after the overlap from previous
//iterations
pa_assert_se(
- u->input[c]+u->samples_gathered+samples <= u->input[c]+u->window_size
+ u->input[c] + u->samples_gathered + samples <= u->input[c] + u->input_buffer_max
);
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c]+u->samples_gathered, sizeof(float), src + c, fs, samples);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, u->input[c] + u->samples_gathered, sizeof(float), src + c, fs, samples);
}
u->samples_gathered += samples;
pa_memblock_release(in->memblock);
@@ -543,7 +564,7 @@ static void input_buffer(struct userdata *u, pa_memchunk *in){
/* Called from I/O thread context */
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
- size_t fs;
+ size_t fs, target_samples;
struct timeval start, end;
pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
@@ -551,6 +572,16 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(chunk);
pa_assert(u->sink);
fs = pa_frame_size(&(u->sink->sample_spec));
+ target_samples = PA_ROUND_UP(nbytes / fs, u->R);
+ if(u->first_iteration){
+ //allocate request_size
+ target_samples = PA_MAX(target_samples, u->window_size);
+ }else{
+ //allocate request_size + overlap
+ target_samples += u->overlap_size;
+ alloc_input_buffers(u, target_samples);
+ }
+ alloc_input_buffers(u, target_samples);
chunk->memblock = NULL;
/* Hmm, process any rewind request that might be queued up */
@@ -559,18 +590,11 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_log_debug("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
pa_rtclock_get(&start);
do{
- size_t input_remaining = u->window_size - u->samples_gathered;
+ size_t input_remaining = target_samples - u->samples_gathered;
pa_assert(input_remaining > 0);
- //collect samples
-
- //buffer = &u->conv_buffer;
- //buffer->length = input_remaining*fs;
- //buffer->index = 0;
- //pa_memblock_ref(buffer->memblock);
- //pa_sink_render_into(u->sink, buffer);
while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
- pa_sink_render(u->sink, input_remaining*fs, &tchunk);
- //pa_sink_render_full(u->sink, input_remaining*fs, &tchunk);
+ //pa_sink_render(u->sink, input_remaining * fs, &tchunk);
+ pa_sink_render_full(u->sink, input_remaining * fs, &tchunk);
pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
@@ -581,15 +605,12 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
//pa_rtclock_get(start);
- if(u->first_iteration){
- initialize_buffer(u, &tchunk);
- }else{
- input_buffer(u, &tchunk);
- }
+ input_buffer(u, &tchunk);
//pa_rtclock_get(&end);
//pa_log_debug("Took %0.5f seconds to setup", pa_timeval_diff(end, start) / (double) PA_USEC_PER_SEC);
pa_memblock_unref(tchunk.memblock);
- }while(u->samples_gathered < u->window_size);
+ }while(u->samples_gathered < target_samples);
+
pa_rtclock_get(&end);
pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
@@ -605,9 +626,6 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(chunk->memblock);
//pa_log_debug("gave %ld", chunk->length/fs);
//pa_log_debug("end pop");
- if(u->first_iteration){
- u->first_iteration = FALSE;
- }
return 0;
}
@@ -632,11 +650,17 @@ static void sink_input_mute_changed_cb(pa_sink_input *i) {
}
static void reset_filter(struct userdata *u){
+ size_t fs = pa_frame_size(&u->sink->sample_spec);
+ size_t max_request;
u->samples_gathered = 0;
- for(size_t i = 0;i < u->channels; ++i){
+ for(size_t i = 0; i < u->channels; ++i){
memset(u->overlap_accum[i], 0, u->overlap_size * sizeof(float));
}
u->first_iteration = TRUE;
+ //set buffer size to max request, no overlap copy
+ max_request = PA_ROUND_UP(pa_sink_input_get_max_request(u->sink_input) / fs , u->R);
+ max_request = PA_MAX(max_request, u->window_size);
+ pa_sink_set_max_request_within_thread(u->sink, max_request * fs);
}
/* Called from I/O thread context */
@@ -658,11 +682,8 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
u->sink->thread_info.rewind_nbytes = 0;
if (amount > 0) {
- //pa_sample_spec *ss = &u->sink->sample_spec;
//invalidate the output q
pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
- //pa_memblockq_drop(u->input_q, pa_memblockq_get_length(u->input_q));
- //pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log("Resetting filter");
reset_filter(u);
}
@@ -689,11 +710,11 @@ static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
size_t fs;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
-
+ //if(u->first_iteration){
+ // return;
+ //}
fs = pa_frame_size(&(u->sink->sample_spec));
- //pa_sink_set_max_request_within_thread(u->sink, nbytes);
- //pa_sink_set_max_request_within_thread(u->sink, u->R*fs);
- pa_sink_set_max_request_within_thread(u->sink, ((nbytes+u->R*fs-1)/(u->R*fs))*(u->R*fs));
+ pa_sink_set_max_request_within_thread(u->sink, PA_ROUND_UP(nbytes / fs, u->R) * fs);
}
/* Called from I/O thread context */
@@ -703,8 +724,6 @@ static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
- //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
- //pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs );
pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
}
@@ -733,7 +752,7 @@ static void sink_input_detach_cb(pa_sink_input *i) {
/* Called from I/O thread context */
static void sink_input_attach_cb(pa_sink_input *i) {
struct userdata *u;
- size_t fs;
+ size_t fs, max_request;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
@@ -741,19 +760,15 @@ static void sink_input_attach_cb(pa_sink_input *i) {
pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
- fs = pa_frame_size(&(u->sink->sample_spec));
- pa_sink_set_max_request_within_thread(u->sink, PA_ROUND_UP(pa_sink_input_get_max_request(i), u->R*fs));
-
- //pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->latency*fs);
- //pa_sink_set_latency_range_within_thread(u->sink, u->latency*fs, u->master->thread_info.max_latency);
- //TODO: setting this guy minimizes drop outs but doesn't get rid
- //of them completely, figure out why
- //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->latency*fs);
- //TODO: this guy causes dropouts constantly+rewinds, it's unusable
- //pa_sink_set_latency_range_within_thread(u->sink, u->master->thread_info.min_latency, u->master->thread_info.max_latency);
+ fs = pa_frame_size(&u->sink->sample_spec);
+ //set buffer size to max request, no overlap copy
+ max_request = PA_ROUND_UP(pa_sink_input_get_max_request(u->sink_input) / fs , u->R);
+ max_request = PA_MAX(max_request, u->window_size);
+ pa_sink_set_max_request_within_thread(u->sink, max_request * fs);
+ pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
pa_sink_attach_within_thread(u->sink);
if(u->set_default){
- pa_log("Setting default sink to %s", u->sink->name);
+ pa_log_debug("Setting default sink to %s", u->sink->name);
pa_namereg_set_default_sink(u->module->core, u->sink);
}
}
@@ -1005,17 +1020,6 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
pa_sink_set_asyncmsgq(u->sink, NULL);
}
-//ensure's memory allocated is a multiple of v_size
-//and aligned
-static void * alloc(size_t x,size_t s){
- size_t f = PA_ROUND_UP(x*s, sizeof(float)*v_size);
- float *t;
- pa_assert(f >= x*s);
- t = fftwf_malloc(f);
- memset(t, 0, f);
- return t;
-}
-
int pa__init(pa_module*m) {
struct userdata *u;
pa_sample_spec ss;
@@ -1068,15 +1072,15 @@ int pa__init(pa_module*m) {
u->R = (u->window_size + 1) / 2;
u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
+ u->input_buffer_max = 0;
u->a_H = pa_xnew0(pa_aupdate *, u->channels);
- u->latency = u->window_size - u->R;
u->Xs = pa_xnew0(float *, u->channels);
u->Hs = pa_xnew0(float **, u->channels);
for(size_t c = 0; c < u->channels; ++c){
u->Xs[c] = pa_xnew0(float, 2);
u->Hs[c] = pa_xnew0(float *, 2);
for(size_t i = 0; i < 2; ++i){
- u->Hs[c][i] = alloc((FILTER_SIZE), sizeof(float));
+ u->Hs[c][i] = alloc(FILTER_SIZE, sizeof(float));
}
}
u->W = alloc(u->window_size, sizeof(float));
@@ -1086,8 +1090,7 @@ int pa__init(pa_module*m) {
u->overlap_accum = pa_xnew0(float *, u->channels);
for(size_t c = 0; c < u->channels; ++c){
u->a_H[c] = pa_aupdate_new();
- u->input[c] = alloc(u->window_size, sizeof(float));
- memset(u->input[c], 0, (u->window_size)*sizeof(float));
+ u->input[c] = NULL;
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
@@ -1151,7 +1154,7 @@ int pa__init(pa_module*m) {
pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
- pa_sink_input_new(&u->sink_input, m->core, &sink_input_data, 0);
+ pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
pa_sink_input_new_data_done(&sink_input_data);
if (!u->sink_input)
commit 97056d2a0e4364fad86f4be5e26625592aef3d55
Author: Jason Newton <nevion at gmail.com>
Date: Fri Sep 18 05:48:01 2009 -0700
module-equalizer-sink: *added client initiated sync support for filter state *added note of possible unstable behavior with next-power-of-2 sample rate calculation
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index f556be7..74d7497 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -837,13 +837,10 @@ static void unpack(char *str, size_t length, char ***strs, size_t *len){
size_t l = *((uint16_t *)(str+offset));
size_t e = PA_MIN(offset + l, length) - offset;
offset = PA_MIN(offset + sizeof(uint16_t), length);
- if(e > 0){
- (*strs)[i] = pa_xnew(char, e + 1);
- memcpy((*strs)[i], strs + offset, e);
- (*strs)[i][e] = '\0';
- }else{
- (*strs)[i]=NULL;
- }
+ (*strs)[i] = pa_xnew(char, e + 1);
+ memcpy((*strs)[i], str + offset, e);
+ (*strs)[i][e] = '\0';
+ offset += l;
}
}
static void save_profile(struct userdata *u, size_t channel, char *name){
@@ -905,7 +902,7 @@ static void save_state(struct userdata *u){
data.data = state;
data.size = filter_state_size + packed_length;
//thread safety for 0.9.17?
- pa_assert_se(dbname = pa_state_path(EQ_STATE_DB, TRUE));
+ pa_assert_se(dbname = pa_state_path(EQ_STATE_DB, FALSE));
pa_assert_se(database = pa_database_open(dbname, TRUE));
pa_xfree(dbname);
@@ -936,12 +933,10 @@ static const char* load_profile(struct userdata *u, size_t channel, char *name){
float *profile = (float *) value.data;
a_i = pa_aupdate_write_begin(u->a_H[channel]);
u->Xs[channel][a_i] = profile[0];
- memcpy(u->Hs[channel][a_i], profile + 1, CHANNEL_PROFILE_SIZE * sizeof(float));
+ memcpy(u->Hs[channel][a_i], profile + 1, FILTER_SIZE * sizeof(float));
fix_filter(u->Hs[channel][a_i], u->fft_size);
pa_aupdate_write_end(u->a_H[channel]);
- if(u->base_profiles[channel]){
- pa_xfree(u->base_profiles[channel]);
- }
+ pa_xfree(u->base_profiles[channel]);
u->base_profiles[channel] = pa_xstrdup(name);
}else{
return "incompatible size";
@@ -964,6 +959,7 @@ static void load_state(struct userdata *u){
database = pa_database_open(dbname, FALSE);
pa_xfree(dbname);
if(!database){
+ pa_log("No resume state");
return;
}
@@ -985,14 +981,14 @@ static void load_state(struct userdata *u){
unpack(((char *)value.data) + FILTER_STATE_SIZE, value.size - FILTER_STATE_SIZE, &names, &n_profs);
n_profs = PA_MIN(n_profs, u->channels);
for(size_t c = 0; c < n_profs; ++c){
- if(u->base_profiles[c]){
- pa_xfree(u->base_profiles[c]);
- }
+ pa_xfree(u->base_profiles[c]);
u->base_profiles[c] = names[c];
}
pa_xfree(names);
}
pa_datum_free(&value);
+ }else{
+ pa_log("resume state exists but is wrong size!");
}
pa_database_close(database);
}
@@ -1066,7 +1062,7 @@ int pa__init(pa_module*m) {
pa_modargs_get_value_boolean(ma, "set_default", &u->set_default);
u->channels = ss.channels;
- u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));
+ u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));//probably unstable near corner cases of powers of 2
pa_log_debug("fft size: %ld", u->fft_size);
u->window_size = 15999;
u->R = (u->window_size + 1) / 2;
@@ -1102,6 +1098,9 @@ int pa__init(pa_module*m) {
u->first_iteration = TRUE;
u->base_profiles = pa_xnew0(char *, u->channels);
+ for(size_t c = 0; c < u->channels; ++c){
+ u->base_profiles[c] = pa_xstrdup("default");
+ }
/* Create sink */
pa_sink_new_data_init(&sink_data);
@@ -1233,9 +1232,7 @@ void pa__done(pa_module*m) {
dbus_done(u);
for(size_t c = 0; c < u->channels; ++c){
- if(u->base_profiles[c]){
- pa_xfree(u->base_profiles[c]);
- }
+ pa_xfree(u->base_profiles[c]);
}
pa_xfree(u->base_profiles);
@@ -1308,6 +1305,7 @@ static void equalizer_handle_get_filter(DBusConnection *conn, DBusMessage *msg,
static void equalizer_handle_set_filter(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_save_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void *_u);
+static void equalizer_handle_save_state(DBusConnection *conn, DBusMessage *msg, void *_u);
static void equalizer_handle_get_profile_name(DBusConnection *conn, DBusMessage *msg, void *_u);
enum manager_method_index {
MANAGER_METHOD_REMOVE_PROFILE,
@@ -1374,6 +1372,7 @@ enum equalizer_method_index {
EQUALIZER_METHOD_LOAD_PROFILE,
EQUALIZER_METHOD_SET_FILTER,
EQUALIZER_METHOD_GET_FILTER,
+ EQUALIZER_METHOD_SAVE_STATE,
EQUALIZER_METHOD_GET_PROFILE_NAME,
EQUALIZER_METHOD_MAX
};
@@ -1455,6 +1454,11 @@ static pa_dbus_method_handler equalizer_methods[EQUALIZER_METHOD_MAX]={
.arguments=load_profile_args,
.n_arguments=sizeof(load_profile_args)/sizeof(pa_dbus_arg_info),
.receive_cb=equalizer_handle_load_profile},
+ [EQUALIZER_METHOD_SAVE_STATE]{
+ .method_name="SaveState",
+ .arguments=NULL,
+ .n_arguments=0,
+ .receive_cb=equalizer_handle_save_state},
[EQUALIZER_METHOD_GET_PROFILE_NAME]{
.method_name="BaseProfile",
.arguments=base_profile_name_args,
@@ -2037,6 +2041,16 @@ void equalizer_handle_load_profile(DBusConnection *conn, DBusMessage *msg, void
dbus_message_unref(signal);
}
+void equalizer_handle_save_state(DBusConnection *conn, DBusMessage *msg, void *_u) {
+ struct userdata *u = (struct userdata *) _u;
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(u);
+
+ save_state(u);
+ pa_dbus_send_empty_reply(conn, msg);
+}
+
void equalizer_handle_get_profile_name(DBusConnection *conn, DBusMessage *msg, void *_u){
struct userdata *u = (struct userdata *) _u;
DBusError error;
@@ -2060,11 +2074,8 @@ void equalizer_handle_get_profile_name(DBusConnection *conn, DBusMessage *msg, v
return;
}
r_channel = channel == u->channels ? 0 : channel;
- if(u->base_profiles[r_channel]){
- pa_dbus_send_basic_value_reply(conn,msg, DBUS_TYPE_STRING, &u->base_profiles[r_channel]);
- }else{
- pa_dbus_send_empty_reply(conn, msg);
- }
+ pa_assert(u->base_profiles[r_channel]);
+ pa_dbus_send_basic_value_reply(conn,msg, DBUS_TYPE_STRING, &u->base_profiles[r_channel]);
}
void equalizer_get_revision(DBusConnection *conn, DBusMessage *msg, void *_u){
commit e8952001699317952318918835252f63c7a899f9
Author: Jason Newton <nevion at gmail.com>
Date: Sat Sep 19 11:15:05 2009 -0700
module-equalizer-sink: disable active profile name restoration as something in pack/unpack is funky and I don't have time for a
proper fix
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 74d7497..3a28b49 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -978,13 +978,13 @@ static void load_state(struct userdata *u){
memcpy(u->Hs[c][a_i], H, FILTER_SIZE * sizeof(float));
pa_aupdate_write_end(u->a_H[c]);
}
- unpack(((char *)value.data) + FILTER_STATE_SIZE, value.size - FILTER_STATE_SIZE, &names, &n_profs);
- n_profs = PA_MIN(n_profs, u->channels);
- for(size_t c = 0; c < n_profs; ++c){
- pa_xfree(u->base_profiles[c]);
- u->base_profiles[c] = names[c];
- }
- pa_xfree(names);
+ //unpack(((char *)value.data) + FILTER_STATE_SIZE, value.size - FILTER_STATE_SIZE, &names, &n_profs);
+ //n_profs = PA_MIN(n_profs, u->channels);
+ //for(size_t c = 0; c < n_profs; ++c){
+ // pa_xfree(u->base_profiles[c]);
+ // u->base_profiles[c] = names[c];
+ //}
+ //pa_xfree(names);
}
pa_datum_free(&value);
}else{
commit 019331d25b6af107fb8cacc3ada552e7567a64bf
Merge: 5871319 afd1b6d
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Oct 2 17:24:44 2009 +0300
Merge branch 'master' into dbus-work
Conflicts:
src/daemon/daemon-conf.c
diff --cc src/Makefile.am
index 623cef5,6544e2a..69711ac
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@@ -175,11 -175,10 +175,11 @@@ pulseaudio_SOURCES =
daemon/daemon-conf.c daemon/daemon-conf.h \
daemon/dumpmodules.c daemon/dumpmodules.h \
daemon/ltdl-bind-now.c daemon/ltdl-bind-now.h \
- daemon/main.c
+ daemon/main.c \
+ daemon/server-lookup.c daemon/server-lookup.h
- pulseaudio_CFLAGS = $(AM_CFLAGS) $(LIBOIL_CFLAGS) $(LIBSAMPLERATE_CFLAGS) $(LIBSPEEX_CFLAGS) $(LIBSNDFILE_CFLAGS) $(CAP_CFLAGS) $(LIBOIL_CFLAGS) $(DBUS_CFLAGS)
- pulseaudio_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSPEEX_LIBS) $(LIBSNDFILE_LIBS) $(CAP_LIBS) $(LIBOIL_LIBS) $(DBUS_LIBS)
+ pulseaudio_CFLAGS = $(AM_CFLAGS) $(LIBSAMPLERATE_CFLAGS) $(LIBSPEEX_CFLAGS) $(LIBSNDFILE_CFLAGS) $(CAP_CFLAGS) $(DBUS_CFLAGS)
+ pulseaudio_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSPEEX_LIBS) $(LIBSNDFILE_LIBS) $(CAP_LIBS) $(DBUS_LIBS)
# This is needed because automake doesn't properly expand the foreach below
pulseaudio_DEPENDENCIES = libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(PREOPEN_LIBS)
diff --cc src/daemon/daemon-conf.c
index 3428f80,6e7926f..571faae
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@@ -83,10 -83,7 +83,10 @@@ static const pa_daemon_conf default_con
.config_file = NULL,
.use_pid_file = TRUE,
.system_instance = FALSE,
+#ifdef HAVE_DBUS
+ .local_server_type = PA_SERVER_TYPE_UNSET, /* The actual default is _USER, but we have to detect when the user doesn't specify this option. */
+#endif
- .no_cpu_limit = FALSE,
+ .no_cpu_limit = TRUE,
.disable_shm = FALSE,
.lock_memory = FALSE,
.default_n_fragments = 4,
commit 6468dcf9d13c49299eba8c76ee41f4ff5fdba80f
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Oct 2 19:12:10 2009 +0100
device-manager: No need to check the version after calling read_entry()
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 86ea95d..587def4 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -448,7 +448,7 @@ static void update_highest_priority_device_indexes(struct userdata *u, const cha
name = pa_xstrndup(key.data, key.size);
device_name = get_name(name, prefix);
- if ((e = read_entry(u, name)) && ENTRY_VERSION == e->version) {
+ if ((e = read_entry(u, name))) {
for (uint32_t i = 0; i < NUM_ROLES; ++i) {
if (!highest_priority_available[i] || e->priority[i] < highest_priority_available[i]) {
/* We've found a device with a higher priority than that we've currently got,
@@ -1049,7 +1049,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if (!device || !*device || !description || !*description)
goto fail;
- if ((e = read_entry(u, device)) && ENTRY_VERSION == e->version) {
+ if ((e = read_entry(u, device))) {
pa_datum key, data;
pa_strlcpy(e->description, description, sizeof(e->description));
@@ -1217,7 +1217,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
/* Add the device to our hashmap. If it's alredy in it, free it now and carry on */
if (pa_hashmap_put(h, device->device, device) == 0
- && (e = read_entry(u, device->device)) && ENTRY_VERSION == e->version) {
+ && (e = read_entry(u, device->device))) {
/* We add offset on to the existing priorirty so that when we order, the
existing entries are always lower priority than the new ones. */
device->prio = (offset + e->priority[role_index]);
@@ -1272,7 +1272,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
idx = 1;
first = TRUE;
for (i = 0; i < n_devices; ++i) {
- if ((e = read_entry(u, devices[i]->device)) && ENTRY_VERSION == e->version) {
+ if ((e = read_entry(u, devices[i]->device))) {
if (e->priority[role_index] == idx)
idx++;
else {
commit fdbb5500634bbe3481fb60ce373ad4f9c2063f75
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Oct 2 21:01:19 2009 +0100
device-manager: Keep track as to whether or not the user specifically renamed the device.
If the user has not (via our protocol extension) renamed a device, but it happens to now have
a different name (e.g. module-combine automatically updating the description for us or udev-db
getting better etc.) then make sure we update our cache with this updated version.
If the user has set a name, enforce it's use, even if the description is updated by some other
means (e.g. the user manually editing the proplist or another module doing it for them).
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 587def4..776a687 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -133,6 +133,7 @@ struct userdata {
struct entry {
uint8_t version;
char description[PA_NAME_MAX];
+ pa_bool_t user_set_description;
char icon[PA_NAME_MAX];
role_indexes_t priority;
} PA_GCC_PACKED;
@@ -181,6 +182,11 @@ static struct entry* read_entry(struct userdata *u, const char *name) {
goto fail;
}
+ if (!memchr(e->icon, 0, sizeof(e->icon))) {
+ pa_log_warn("Database contains entry for device %s with missing NUL byte in icon", name);
+ goto fail;
+ }
+
return e;
fail:
@@ -329,6 +335,7 @@ static pa_bool_t entries_equal(const struct entry *a, const struct entry *b) {
pa_assert(b);
if (strncmp(a->description, b->description, sizeof(a->description))
+ || a->user_set_description != b->user_set_description
|| strncmp(a->icon, b->icon, sizeof(a->icon)))
return FALSE;
@@ -398,6 +405,7 @@ static inline struct entry *load_or_initialize_entry(struct userdata *u, struct
for (uint32_t i = 0; i < NUM_ROLES; ++i) {
entry->priority[i] = max_priority[i] + 1;
}
+ entry->user_set_description = FALSE;
}
return old;
@@ -672,7 +680,16 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
old = load_or_initialize_entry(u, &entry, name, "sink:");
- pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ if (!entry.user_set_description)
+ pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ else if (strncmp(entry.description, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description)) != 0) {
+ /* Warning: If two modules fight over the description, this could cause an infinite loop.
+ by changing the description here, we retrigger this subscription callback. The only thing stopping us from
+ looping is the fact that the string comparison will fail on the second iteration. If another module tries to manage
+ the description, this will fail... */
+ pa_sink_set_description(sink, entry.description);
+ }
+
pa_strlcpy(entry.icon, pa_strnull(pa_proplist_gets(sink->proplist, PA_PROP_DEVICE_ICON_NAME)), sizeof(entry.icon));
} else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE) {
@@ -690,7 +707,16 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
old = load_or_initialize_entry(u, &entry, name, "source:");
- pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ if (!entry.user_set_description)
+ pa_strlcpy(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description));
+ else if (strncmp(entry.description, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_DESCRIPTION)), sizeof(entry.description)) != 0) {
+ /* Warning: If two modules fight over the description, this could cause an infinite loop.
+ by changing the description here, we retrigger this subscription callback. The only thing stopping us from
+ looping is the fact that the string comparison will fail on the second iteration. If another module tries to manage
+ the description, this will fail... */
+ pa_source_set_description(source, entry.description);
+ }
+
pa_strlcpy(entry.icon, pa_strnull(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_ICON_NAME)), sizeof(entry.icon));
}
@@ -716,11 +742,12 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
pa_log_info("Storing device %s.", name);
- pa_database_set(u->database, &key, &data, TRUE);
+ if (pa_database_set(u->database, &key, &data, TRUE) == 0)
+ trigger_save(u);
+ else
+ pa_log_warn("Could not save device");;
pa_xfree(name);
-
- trigger_save(u);
}
static pa_hook_result_t sink_new_hook_callback(pa_core *c, pa_sink_new_data *new_data, struct userdata *u) {
@@ -734,7 +761,7 @@ static pa_hook_result_t sink_new_hook_callback(pa_core *c, pa_sink_new_data *new
name = pa_sprintf_malloc("sink:%s", new_data->name);
if ((e = read_entry(u, name))) {
- if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
+ if (e->user_set_description && strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
pa_log_info("Restoring description for sink %s.", new_data->name);
pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
}
@@ -758,7 +785,7 @@ static pa_hook_result_t source_new_hook_callback(pa_core *c, pa_source_new_data
name = pa_sprintf_malloc("source:%s", new_data->name);
if ((e = read_entry(u, name))) {
- if (strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
+ if (e->user_set_description && strncmp(e->description, pa_proplist_gets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION), sizeof(e->description)) != 0) {
/* NB, We cannot detect if we are a monitor here... this could mess things up a bit... */
pa_log_info("Restoring description for source %s.", new_data->name);
pa_proplist_sets(new_data->proplist, PA_PROP_DEVICE_DESCRIPTION, e->description);
@@ -911,13 +938,16 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
pa_assert(name);
pa_assert(e);
+ if (!e->user_set_description)
+ return;
+
if ((n = get_name(name, "sink:"))) {
for (sink = pa_idxset_first(u->core->sinks, &idx); sink; sink = pa_idxset_next(u->core->sinks, &idx)) {
if (!pa_streq(sink->name, n)) {
continue;
}
- pa_log_info("Setting description for sink %s.", sink->name);
+ pa_log_info("Setting description for sink %s to '%s'", sink->name, e->description);
pa_sink_set_description(sink, e->description);
}
pa_xfree(n);
@@ -933,7 +963,7 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
continue;
}
- pa_log_info("Setting description for source %s.", source->name);
+ pa_log_info("Setting description for source %s to '%s'", source->name, e->description);
pa_source_set_description(source, e->description);
}
pa_xfree(n);
@@ -1053,6 +1083,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_datum key, data;
pa_strlcpy(e->description, description, sizeof(e->description));
+ e->user_set_description = TRUE;
key.data = (char *) device;
key.size = strlen(device);
commit cc31d7c35a509d398494e13a9020513ddf8b667f
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Oct 2 21:04:03 2009 +0100
device-manager: Make use of PA_IDXSET_FOREACH when applying entries.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 776a687..8d17bb0 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -929,8 +929,6 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
- pa_sink *sink;
- pa_source *source;
uint32_t idx;
char *n;
@@ -942,29 +940,31 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
return;
if ((n = get_name(name, "sink:"))) {
- for (sink = pa_idxset_first(u->core->sinks, &idx); sink; sink = pa_idxset_next(u->core->sinks, &idx)) {
- if (!pa_streq(sink->name, n)) {
+ pa_sink *s;
+ PA_IDXSET_FOREACH(s, u->core->sinks, idx) {
+ if (!pa_streq(s->name, n)) {
continue;
}
- pa_log_info("Setting description for sink %s to '%s'", sink->name, e->description);
- pa_sink_set_description(sink, e->description);
+ pa_log_info("Setting description for sink %s to '%s'", s->name, e->description);
+ pa_sink_set_description(s, e->description);
}
pa_xfree(n);
}
else if ((n = get_name(name, "source:"))) {
- for (source = pa_idxset_first(u->core->sources, &idx); source; source = pa_idxset_next(u->core->sources, &idx)) {
- if (!pa_streq(source->name, n)) {
+ pa_source *s;
+ PA_IDXSET_FOREACH(s, u->core->sources, idx) {
+ if (!pa_streq(s->name, n)) {
continue;
}
- if (source->monitor_of) {
- pa_log_warn("Cowardly refusing to set the description for monitor source %s.", source->name);
+ if (s->monitor_of) {
+ pa_log_warn("Cowardly refusing to set the description for monitor source %s.", s->name);
continue;
}
- pa_log_info("Setting description for source %s to '%s'", source->name, e->description);
- pa_source_set_description(source, e->description);
+ pa_log_info("Setting description for source %s to '%s'", s->name, e->description);
+ pa_source_set_description(s, e->description);
}
pa_xfree(n);
}
commit 9d7a27ec8867ed7907944dbe52ed67bf252c00ee
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Oct 2 22:44:56 2009 +0100
device-manager: Play nice with module-stream-restore.
If m-s-r sets the device we let it do so. Otherwise we handle the routing. We run before
module-intended-roles as the priority list will likely be configured appropriately
to do the same job, albeit with manual setup.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 8d17bb0..bfcbfea 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -518,6 +518,9 @@ static void route_sink_input(struct userdata *u, pa_sink_input *si) {
pa_assert(u);
pa_assert(u->do_routing);
+ if (si->save_sink)
+ return;
+
/* Skip this if it is already in the process of being moved anyway */
if (!si->sink)
return;
@@ -544,7 +547,7 @@ static void route_sink_input(struct userdata *u, pa_sink_input *si) {
return;
if (si->sink != sink)
- pa_sink_input_move_to(si, sink, TRUE);
+ pa_sink_input_move_to(si, sink, FALSE);
}
static pa_hook_result_t route_sink_inputs(struct userdata *u, pa_sink *ignore_sink) {
@@ -573,6 +576,9 @@ static void route_source_output(struct userdata *u, pa_source_output *so) {
pa_assert(u);
pa_assert(u->do_routing);
+ if (so->save_source)
+ return;
+
if (so->direct_on_input)
return;
@@ -602,7 +608,7 @@ static void route_source_output(struct userdata *u, pa_source_output *so) {
return;
if (so->source != source)
- pa_source_output_move_to(so, source, TRUE);
+ pa_source_output_move_to(so, source, FALSE);
}
static pa_hook_result_t route_source_outputs(struct userdata *u, pa_source* ignore_source) {
@@ -811,22 +817,24 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
return PA_HOOK_OK;
if (new_data->sink)
- pa_log_debug("Overriding device for stream, even although it is already set. I am evil that way...");
-
- if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("none");
- else
- role_index = get_role_index(role);
+ pa_log_debug("Not restoring device for stream because already set.");
+ else {
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("none");
+ else
+ role_index = get_role_index(role);
- if (PA_INVALID_INDEX != role_index) {
- uint32_t device_index;
+ if (PA_INVALID_INDEX != role_index) {
+ uint32_t device_index;
- device_index = u->preferred_sinks[role_index];
- if (PA_INVALID_INDEX != device_index) {
- pa_sink *sink;
+ device_index = u->preferred_sinks[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_sink *sink;
- if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
- new_data->sink = sink;
+ if ((sink = pa_idxset_get_by_index(u->core->sinks, device_index))) {
+ new_data->sink = sink;
+ new_data->save_sink = FALSE;
+ }
}
}
}
@@ -849,22 +857,24 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
return PA_HOOK_OK;
if (new_data->source)
- pa_log_debug("Overriding device for stream, even although it is already set. I am evil that way...");
-
- if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
- role_index = get_role_index("none");
- else
- role_index = get_role_index(role);
+ pa_log_debug("Not restoring device for stream because already set.");
+ else {
+ if (!(role = pa_proplist_gets(new_data->proplist, PA_PROP_MEDIA_ROLE)))
+ role_index = get_role_index("none");
+ else
+ role_index = get_role_index(role);
- if (PA_INVALID_INDEX != role_index) {
- uint32_t device_index;
+ if (PA_INVALID_INDEX != role_index) {
+ uint32_t device_index;
- device_index = u->preferred_sources[role_index];
- if (PA_INVALID_INDEX != device_index) {
- pa_source *source;
+ device_index = u->preferred_sources[role_index];
+ if (PA_INVALID_INDEX != device_index) {
+ pa_source *source;
- if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
- new_data->source = source;
+ if ((source = pa_idxset_get_by_index(u->core->sources, device_index))) {
+ new_data->source = source;
+ new_data->save_source = FALSE;
+ }
}
}
}
@@ -1422,20 +1432,20 @@ int pa__init(pa_module*m) {
u->source_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) source_new_hook_callback, u);
/* The following slots are used to deal with routing */
- /* A little bit later than module-stream-restore, module-intended-roles */
- u->sink_input_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], PA_HOOK_EARLY+15, (pa_hook_cb_t) sink_input_new_hook_callback, u);
- u->source_output_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_NEW], PA_HOOK_EARLY+15, (pa_hook_cb_t) source_output_new_hook_callback, u);
+ /* A little bit later than module-stream-restore, but before module-intended-roles */
+ u->sink_input_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], PA_HOOK_EARLY+5, (pa_hook_cb_t) sink_input_new_hook_callback, u);
+ u->source_output_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_NEW], PA_HOOK_EARLY+5, (pa_hook_cb_t) source_output_new_hook_callback, u);
if (on_hotplug) {
- /* A little bit later than module-stream-restore, module-intended-roles */
- u->sink_put_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_LATE+15, (pa_hook_cb_t) sink_put_hook_callback, u);
- u->source_put_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_PUT], PA_HOOK_LATE+15, (pa_hook_cb_t) source_put_hook_callback, u);
+ /* A little bit later than module-stream-restore, but before module-intended-roles */
+ u->sink_put_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_LATE+5, (pa_hook_cb_t) sink_put_hook_callback, u);
+ u->source_put_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_PUT], PA_HOOK_LATE+5, (pa_hook_cb_t) source_put_hook_callback, u);
}
if (on_rescue) {
- /* A little bit later than module-stream-restore, module-intended-roles, a little bit earlier than module-rescue-streams, ... */
- u->sink_unlink_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_UNLINK], PA_HOOK_LATE+15, (pa_hook_cb_t) sink_unlink_hook_callback, u);
- u->source_unlink_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_UNLINK], PA_HOOK_LATE+15, (pa_hook_cb_t) source_unlink_hook_callback, u);
+ /* A little bit later than module-stream-restore, a little bit earlier than module-intended-roles, module-rescue-streams, ... */
+ u->sink_unlink_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_UNLINK], PA_HOOK_LATE+5, (pa_hook_cb_t) sink_unlink_hook_callback, u);
+ u->source_unlink_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_UNLINK], PA_HOOK_LATE+5, (pa_hook_cb_t) source_unlink_hook_callback, u);
}
if (!(fname = pa_state_path("device-manager", TRUE)))
commit 40c1ca76c48147c7648e1f1a72cc2c747f3d0c9b
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Oct 4 13:00:51 2009 +0200
bluetooth: don't set auto_connect flag when discovering bt devices
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 4592fca..0ba1421 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -74,7 +74,8 @@ PA_MODULE_USAGE(
"profile=<a2dp|hsp> "
"rate=<sample rate> "
"channels=<number of channels> "
- "path=<device object path>");
+ "path=<device object path> "
+ "auto_connect=<automatically connect?>");
/*
#ifdef NOKIA
@@ -98,6 +99,7 @@ static const char* const valid_modargs[] = {
"rate",
"channels",
"path",
+ "auto_connect",
#ifdef NOKIA
"sco_sink",
"sco_source",
@@ -141,6 +143,7 @@ struct userdata {
char *address;
char *path;
pa_bluetooth_discovery *discovery;
+ pa_bool_t auto_connect;
pa_dbus_connection *connection;
@@ -399,7 +402,7 @@ static int get_caps(struct userdata *u, uint8_t seid) {
pa_assert(u->profile == PROFILE_HSP);
msg.getcaps_req.transport = BT_CAPABILITIES_TRANSPORT_SCO;
}
- msg.getcaps_req.flags = BT_FLAG_AUTOCONNECT;
+ msg.getcaps_req.flags = u->auto_connect ? BT_FLAG_AUTOCONNECT : 0;
if (service_send(u, &msg.getcaps_req.h) < 0)
return -1;
@@ -2363,6 +2366,12 @@ int pa__init(pa_module* m) {
goto fail;
}
+ u->auto_connect = TRUE;
+ if (pa_modargs_get_value_boolean(ma, "auto_connect", &u->auto_connect)) {
+ pa_log("Failed to parse auto_connect= argument");
+ goto fail;
+ }
+
channels = u->sample_spec.channels;
if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 ||
channels <= 0 || channels > PA_CHANNELS_MAX) {
diff --git a/src/modules/bluetooth/module-bluetooth-discover.c b/src/modules/bluetooth/module-bluetooth-discover.c
index 02fd424..0085fa8 100644
--- a/src/modules/bluetooth/module-bluetooth-discover.c
+++ b/src/modules/bluetooth/module-bluetooth-discover.c
@@ -117,7 +117,7 @@ static pa_hook_result_t load_module_for_device(pa_bluetooth_discovery *y, const
#endif
if (d->audio_source_state >= PA_BT_AUDIO_STATE_CONNECTED)
- args = pa_sprintf_malloc("%s profile=\"a2dp_source\"", args);
+ args = pa_sprintf_malloc("%s profile=\"a2dp_source\" auto_connect=no", args);
pa_log_debug("Loading module-bluetooth-device %s", args);
m = pa_module_load(u->module->core, "module-bluetooth-device", args);
commit 7b682c969025845f75cbc74a9f830ad2dec8a415
Author: Tor-Björn Claesson <tclaesson at gmail.com>
Date: Fri Oct 2 14:13:59 2009 +0200
loopback: Setting latency of module-loopback
I checked the source code, and latency_msec is missing from the list
of valid module arguments. Attaching a patch to add it.
diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index 29c3dda..bb0182b 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -102,7 +102,7 @@ struct userdata {
static const char* const valid_modargs[] = {
"source",
"sink",
- "latency",
+ "latency_msec",
"format",
"rate",
"channels",
commit c96d2d1117a7e59b351358c8cdd79ef465ddbd49
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Oct 6 00:17:24 2009 +0200
alsa: disable period event only with tsched=1
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 22e88b4..37419d9 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -927,7 +927,7 @@ static int update_sw_params(struct userdata *u) {
pa_log_debug("setting avail_min=%lu", (unsigned long) avail_min);
- if ((err = pa_alsa_set_sw_params(u->pcm_handle, avail_min)) < 0) {
+ if ((err = pa_alsa_set_sw_params(u->pcm_handle, avail_min, !u->use_tsched)) < 0) {
pa_log("Failed to set software parameters: %s", pa_alsa_strerror(err));
return err;
}
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index fa3ac0a..37dd647 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -877,7 +877,7 @@ static int update_sw_params(struct userdata *u) {
pa_log_debug("setting avail_min=%lu", (unsigned long) avail_min);
- if ((err = pa_alsa_set_sw_params(u->pcm_handle, avail_min)) < 0) {
+ if ((err = pa_alsa_set_sw_params(u->pcm_handle, avail_min, !u->use_tsched)) < 0) {
pa_log("Failed to set software parameters: %s", pa_alsa_strerror(err));
return err;
}
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 43a8e82..0e22d17 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -403,7 +403,7 @@ finish:
return ret;
}
-int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min) {
+int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min, pa_bool_t period_event) {
snd_pcm_sw_params_t *swparams;
snd_pcm_uframes_t boundary;
int err;
@@ -417,7 +417,7 @@ 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_period_event(pcm, swparams, 0)) < 0) {
+ if ((err = snd_pcm_sw_params_set_period_event(pcm, swparams, period_event)) < 0) {
pa_log_warn("Unable to disable period event: %s\n", pa_alsa_strerror(err));
return err;
}
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 265cd28..f6206fe 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -51,7 +51,8 @@ int pa_alsa_set_hw_params(
int pa_alsa_set_sw_params(
snd_pcm_t *pcm,
- snd_pcm_uframes_t avail_min);
+ snd_pcm_uframes_t avail_min,
+ pa_bool_t period_event);
/* Picks a working mapping from the profile set based on the specified ss/map */
snd_pcm_t *pa_alsa_open_by_device_id_auto(
commit b3592a160f0d2a28605048a81c0261bf7c45acbb
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Oct 6 23:34:22 2009 +0200
position-event-sounds: never position test sounds in space
diff --git a/src/modules/module-position-event-sounds.c b/src/modules/module-position-event-sounds.c
index 7221b14..ee4c8c8 100644
--- a/src/modules/module-position-event-sounds.c
+++ b/src/modules/module-position-event-sounds.c
@@ -74,7 +74,7 @@ static int parse_pos(const char *pos, double *f) {
}
static pa_hook_result_t sink_input_fixate_hook_callback(pa_core *core, pa_sink_input_new_data *data, struct userdata *u) {
- const char *hpos, *vpos, *role;
+ const char *hpos, *vpos, *role, *id;
double f;
char t[PA_CVOLUME_SNPRINT_MAX];
pa_cvolume v;
@@ -87,6 +87,22 @@ static pa_hook_result_t sink_input_fixate_hook_callback(pa_core *core, pa_sink_i
if (!pa_streq(role, "event"))
return PA_HOOK_OK;
+ if ((id = pa_proplist_gets(data->proplist, PA_PROP_EVENT_ID))) {
+
+ /* The test sounds should never be positioned in space, since
+ * they might be trigered themselves to configure the speakers
+ * in space, which we don't want to mess up. */
+
+ if (pa_startswith(id, "audio-channel-"))
+ return PA_HOOK_OK;
+
+ if (pa_streq(id, "audio-volume-change"))
+ return PA_HOOK_OK;
+
+ if (pa_streq(id, "audio-test-signal"))
+ return PA_HOOK_OK;
+ }
+
if (!(hpos = pa_proplist_gets(data->proplist, PA_PROP_EVENT_MOUSE_HPOS)))
hpos = pa_proplist_gets(data->proplist, PA_PROP_WINDOW_HPOS);
commit 692ce73899285c6ed07e93084a5f830a9a8effcc
Merge: b3592a1 019331d
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 7 03:39:30 2009 +0200
Merge remote branch 'tanuk/dbus-work'
commit 9f226d25d6c088627fbccefab5867b596a7d31f9
Merge: 692ce73 e895200
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 7 03:43:24 2009 +0200
Merge remote branch 'phish3/master'
commit d0b478e9a6ecb5c6b74180b1845069946d8f6f10
Merge: 9f226d2 9d7a27e
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 7 03:46:06 2009 +0200
Merge remote branch 'coling/history'
diff --cc src/modules/module-stream-restore.c
index 1e2dc4d,b7b36be..788f458
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@@ -1122,21 -281,10 +1122,21 @@@ static pa_bool_t entries_equal(const st
static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
struct userdata *u = userdata;
- struct entry entry, *old;
- char *name;
+ struct entry entry, *old = NULL;
+ char *name = NULL;
pa_datum key, data;
+ /* These are only used when D-Bus is enabled, but in order to reduce ifdef
+ * clutter these are defined here unconditionally. */
+ pa_bool_t created_new_entry = TRUE;
+ pa_bool_t device_updated = FALSE;
+ pa_bool_t volume_updated = FALSE;
+ pa_bool_t mute_updated = FALSE;
+
+#ifdef HAVE_DBUS
+ struct dbus_entry *de = NULL;
+#endif
+
pa_assert(c);
pa_assert(u);
commit b64b6bbf4c5eda8d4c80dd956987234d1378d055
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Wed Oct 7 19:29:33 2009 +0200
Fix out-of-tree builds when dbus module is enabled.
diff --git a/src/Makefile.am b/src/Makefile.am
index 35941a6..b277a9a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -70,6 +70,8 @@ AM_CFLAGS = \
-I$(top_builddir)/src/modules/x11 \
-I$(top_srcdir)/src/modules/jack \
-I$(top_builddir)/src/modules/jack \
+ -I$(top_srcdir)/src/modules/dbus \
+ -I$(top_builddir)/src/modules/dbus \
$(PTHREAD_CFLAGS) -D_POSIX_PTHREAD_SEMANTICS \
$(LIBSAMPLERATE_CFLAGS) \
$(LIBSNDFILE_CFLAGS) \
commit f55357cd0bcbc0a86f4ea9056584885897a8ec6c
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Wed Oct 7 19:30:11 2009 +0200
Add check for FFTW, and add option to disable it at build-time.
This way there will be a message at configure if FFTW is not found, and
this gets in-line with the rest of the modules' dependencies.
diff --git a/configure.ac b/configure.ac
index fd10c83..77ec884 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1273,6 +1273,16 @@ AC_SUBST(OPENSSL_LIBS)
AC_SUBST(HAVE_OPENSSL)
AM_CONDITIONAL([HAVE_OPENSSL], [test "x$HAVE_OPENSSL" = x1])
+#### FFTW (optional) ####
+AC_ARG_WITH(
+ [fftw],
+ AS_HELP_STRING([--without-fftw], [Omit FFTW-using modules (equalizer)]))
+
+if test "x${with_fftw}" != "xno"; then
+ PKG_CHECK_MODULES([FFTW], [fftw3f], [HAVE_FFTW=1], [HAVE_FFTW=0])
+fi
+AM_CONDITIONAL([HAVE_FFTW], [test "x$HAVE_FFTW" = "x1"])
+
### Build and Install man pages ###
AC_ARG_ENABLE(manpages,
AS_HELP_STRING([--disable-manpages],[Disable building and installation of man pages]),
diff --git a/src/Makefile.am b/src/Makefile.am
index b277a9a..c5d3ab7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1017,7 +1017,6 @@ modlibexec_LTLIBRARIES += \
module-combine.la \
module-remap-sink.la \
module-ladspa-sink.la \
- module-equalizer-sink.la \
module-esound-sink.la \
module-tunnel-sink.la \
module-tunnel-source.la \
@@ -1195,6 +1194,11 @@ modlibexec_LTLIBRARIES += \
endif
endif
+if HAVE_FFTW
+modlibexec_LTLIBRARIES += \
+ module-equalizer-sink.la
+endif
+
# These are generated by an M4 script
SYMDEF_FILES = \
modules/module-cli-symdef.h \
@@ -1415,9 +1419,9 @@ module_ladspa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
module_ladspa_sink_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_equalizer_sink_la_SOURCES = modules/module-equalizer-sink.c
-module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS)
+module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS) $(FFTW_CFLAGS)
module_equalizer_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
-module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) -lfftw3f libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_equalizer_sink_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) $(FFTW_LIBS) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_match_la_SOURCES = modules/module-match.c
module_match_la_LDFLAGS = $(MODULE_LDFLAGS)
commit 8ec304d2d1e956cc3f5f35437ac4fe580b36f004
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Wed Oct 7 19:31:11 2009 +0200
Fix build when using -fweb, accept both register and memory constraints.
This was reported as Gentoo bug #287391 by Torsten Kaiser, and the fix was
suggested by Mike Frysinger.
diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c
index 1768eb5..745c7de 100644
--- a/src/pulsecore/svolume_mmx.c
+++ b/src/pulsecore/svolume_mmx.c
@@ -152,7 +152,7 @@ pa_volume_s16ne_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi
" emms \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
- : "X" ((pa_reg_x86)channels)
+ : "rm" ((pa_reg_x86)channels)
: "cc"
);
}
@@ -228,7 +228,7 @@ pa_volume_s16re_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsi
" emms \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
- : "X" ((pa_reg_x86)channels)
+ : "rm" ((pa_reg_x86)channels)
: "cc"
);
}
diff --git a/src/pulsecore/svolume_sse.c b/src/pulsecore/svolume_sse.c
index ab9394f..1cc4e0a 100644
--- a/src/pulsecore/svolume_sse.c
+++ b/src/pulsecore/svolume_sse.c
@@ -149,7 +149,7 @@ pa_volume_s16ne_sse2 (int16_t *samples, int32_t *volumes, unsigned channels, uns
"8: \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
- : "X" ((pa_reg_x86)channels)
+ : "rm" ((pa_reg_x86)channels)
: "cc"
);
}
@@ -237,7 +237,7 @@ pa_volume_s16re_sse2 (int16_t *samples, int32_t *volumes, unsigned channels, uns
"8: \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
- : "X" ((pa_reg_x86)channels)
+ : "rm" ((pa_reg_x86)channels)
: "cc"
);
}
commit 0b388bff522f689fdb4d98529a39f3701db57c08
Merge: 94aa909 8ec304d
Author: Daniel Mack <daniel at caiaq.de>
Date: Thu Oct 8 14:19:47 2009 +0800
Merge branch 'master' of git://0pointer.de/pulseaudio
commit ce033e7f3a0b6073f8f1423deb656656cfe94bbb
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Fri Oct 9 19:44:37 2009 +0300
dbusiface-client: Fix the destructor (stop leaking stuff).
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index 546370f..2b6f0d0 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -446,7 +446,9 @@ void pa_dbusiface_client_free(pa_dbusiface_client *c) {
pa_assert_se(pa_dbus_protocol_remove_interface(c->dbus_protocol, c->path, client_interface_info.name) >= 0);
+ pa_proplist_free(c->proplist);
pa_dbus_protocol_unref(c->dbus_protocol);
+ pa_subscription_free(c->subscription);
pa_xfree(c->path);
pa_xfree(c);
commit 0ff2a6b434dec1a694f4cde64469ca19d97d9897
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Sat Oct 10 14:19:39 2009 +0100
device-manager: Rather than flagging the device as available, just include the sink/source index with PA_INVALID_INDEX meaning unavailable
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index bfcbfea..e315864 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -1033,13 +1033,13 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if ((e = read_entry(u, name))) {
uint32_t idx;
char *devname;
- pa_bool_t available = FALSE;
+ uint32_t index = PA_INVALID_INDEX;
if ((devname = get_name(name, "sink:"))) {
pa_sink* s;
PA_IDXSET_FOREACH(s, u->core->sinks, idx) {
if (strcmp(s->name, devname) == 0) {
- available = TRUE;
+ index = s->index;
break;
}
}
@@ -1048,7 +1048,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_source* s;
PA_IDXSET_FOREACH(s, u->core->sources, idx) {
if (strcmp(s->name, devname) == 0) {
- available = TRUE;
+ index = s->index;
break;
}
}
@@ -1058,7 +1058,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_tagstruct_puts(reply, name);
pa_tagstruct_puts(reply, e->description);
pa_tagstruct_puts(reply, e->icon);
- pa_tagstruct_put_boolean(reply, available);
+ pa_tagstruct_putu32(reply, index);
pa_tagstruct_putu32(reply, NUM_ROLES);
for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i) {
diff --git a/src/pulse/ext-device-manager.c b/src/pulse/ext-device-manager.c
index 138ed83..57cb57c 100644
--- a/src/pulse/ext-device-manager.c
+++ b/src/pulse/ext-device-manager.c
@@ -128,21 +128,18 @@ static void ext_device_manager_read_cb(pa_pdispatch *pd, uint32_t command, uint3
while (!pa_tagstruct_eof(t)) {
pa_ext_device_manager_info i;
- pa_bool_t available;
memset(&i, 0, sizeof(i));
- available = FALSE;
if (pa_tagstruct_gets(t, &i.name) < 0 ||
pa_tagstruct_gets(t, &i.description) < 0 ||
pa_tagstruct_gets(t, &i.icon) < 0 ||
- pa_tagstruct_get_boolean(t, &available) < 0 ||
+ pa_tagstruct_getu32(t, &i.index) < 0 ||
pa_tagstruct_getu32(t, &i.n_role_priorities) < 0) {
pa_context_fail(o->context, PA_ERR_PROTOCOL);
goto finish;
}
- i.available = (uint8_t)available;
if (i.n_role_priorities > 0) {
uint32_t j;
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 13538f0..1442a1a 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -44,7 +44,7 @@ typedef struct pa_ext_device_manager_info {
const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
const char *description; /**< The description of the device when it was last seen, if applicable and saved */
const char *icon; /**< The icon given to the device */
- uint8_t available; /**< Is the device currently available? */
+ uint32_t index; /**< The device index if it is currently available or PA_INVALID_INDEX */
uint32_t n_role_priorities; /**< How many role priorities do we have? */
pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */
} pa_ext_device_manager_info;
commit e5ac4b5ee738c1e766a250b85854fa3b9c1a70ed
Author: Daniel Mack <daniel at caiaq.de>
Date: Thu Oct 8 08:45:34 2009 +0200
buil-sys: fix build w/o DBus
The current git head does not build without DBus libraries installed.
Does the patch below look suitable?
Thanks,
Daniel
>From f69145fc603c56cef02134ceeba10e1727fa217e Mon Sep 17 00:00:00 2001
From: Daniel Mack <daniel at caiaq.de>
Date: Thu, 8 Oct 2009 14:41:21 +0800
Subject: [PATCH] Makefile.am: fix builds without DBus
Signed-off-by: Daniel Mack <daniel at caiaq.de>
diff --git a/src/Makefile.am b/src/Makefile.am
index c5d3ab7..98c0468 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -180,14 +180,19 @@ pulseaudio_SOURCES = \
daemon/daemon-conf.c daemon/daemon-conf.h \
daemon/dumpmodules.c daemon/dumpmodules.h \
daemon/ltdl-bind-now.c daemon/ltdl-bind-now.h \
- daemon/main.c \
- daemon/server-lookup.c daemon/server-lookup.h
+ daemon/main.c
-pulseaudio_CFLAGS = $(AM_CFLAGS) $(LIBSAMPLERATE_CFLAGS) $(LIBSPEEX_CFLAGS) $(LIBSNDFILE_CFLAGS) $(CAP_CFLAGS) $(DBUS_CFLAGS)
-pulseaudio_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSPEEX_LIBS) $(LIBSNDFILE_LIBS) $(CAP_LIBS) $(DBUS_LIBS)
+pulseaudio_CFLAGS = $(AM_CFLAGS) $(LIBSAMPLERATE_CFLAGS) $(LIBSPEEX_CFLAGS) $(LIBSNDFILE_CFLAGS) $(CAP_CFLAGS)
+pulseaudio_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSPEEX_LIBS) $(LIBSNDFILE_LIBS) $(CAP_LIBS)
# This is needed because automake doesn't properly expand the foreach below
pulseaudio_DEPENDENCIES = libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la $(PREOPEN_LIBS)
+if HAVE_DBUS
+pulseaudio_CFLAGS += $(DBUS_CFLAGS)
+pulseaudio_SOURCES += daemon/server-lookup.c daemon/server-lookup.h
+pulseaudio_LDADD += $(DBUS_LIBS)
+endif
+
if PREOPEN_MODS
PREOPEN_LIBS = $(PREOPEN_MODS)
else
commit c9375aa5e936cf896946f1f7bd80cce9cfe5d9a1
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Oct 12 21:20:45 2009 +0200
libpulse: add missing includes
diff --git a/src/pulse/ext-stream-restore.h b/src/pulse/ext-stream-restore.h
index 0b5d8eb..54516f6 100644
--- a/src/pulse/ext-stream-restore.h
+++ b/src/pulse/ext-stream-restore.h
@@ -24,6 +24,8 @@
#include <pulse/context.h>
#include <pulse/version.h>
+#include <pulse/volume.h>
+#include <pulse/channelmap.h>
/** \file
*
diff --git a/src/pulse/stream.h b/src/pulse/stream.h
index 21dd0a8..2e8e71a 100644
--- a/src/pulse/stream.h
+++ b/src/pulse/stream.h
@@ -31,6 +31,8 @@
#include <pulse/def.h>
#include <pulse/cdecl.h>
#include <pulse/operation.h>
+#include <pulse/context.h>
+#include <pulse/proplist.h>
/** \page streams Audio Streams
*
commit e11cd135aa345dc39db16340702bfc8bc2673983
Merge: 0b388bf c9375aa
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Oct 13 08:56:49 2009 +0800
Merge branch 'master' of git://0pointer.de/pulseaudio
commit e064d270049ba9e6e4e82649eff245470a75c939
Merge: ce033e7 c9375aa
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Tue Oct 13 18:42:47 2009 +0300
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 781eb594bb77ea814976c6628483b7ba9de2db70
Author: Jason Newton <nevion at gmail.com>
Date: Thu Oct 8 20:46:52 2009 -0700
module-equalizer-sink: fixed equalizer state save/restore
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 3a28b49..f5c1fb7 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -814,33 +814,35 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
static void pack(char **strs, size_t len, char **packed, size_t *length){
size_t t_len = 0;
size_t headers = (1+len) * sizeof(uint16_t);
- size_t offset = sizeof(uint16_t);
+ char *p;
for(size_t i = 0; i < len; ++i){
t_len += strlen(strs[i]);
}
*length = headers + t_len;
- *packed = pa_xmalloc0(*length);
- ((uint16_t *) *packed)[0] = (uint16_t) len;
+ p = *packed = pa_xmalloc0(*length);
+ *((uint16_t *) p) = (uint16_t) len;
+ p += sizeof(uint16_t);
for(size_t i = 0; i < len; ++i){
uint16_t l = strlen(strs[i]);
- *((uint16_t *)(*packed + offset)) = l;
- offset += sizeof(uint16_t);
- memcpy(*packed + offset, strs[i], l);
- offset += l;
+ *((uint16_t *) p) = (uint16_t) l;
+ p += sizeof(uint16_t);
+ memcpy(p, strs[i], l);
+ p += l;
}
}
static void unpack(char *str, size_t length, char ***strs, size_t *len){
- size_t offset = sizeof(uint16_t);
- *len = ((uint16_t *)str)[0];
+ char *p = str;
+ *len = *((uint16_t *) p);
+ p += sizeof(uint16_t);
*strs = pa_xnew(char *, *len);
+
for(size_t i = 0; i < *len; ++i){
- size_t l = *((uint16_t *)(str+offset));
- size_t e = PA_MIN(offset + l, length) - offset;
- offset = PA_MIN(offset + sizeof(uint16_t), length);
- (*strs)[i] = pa_xnew(char, e + 1);
- memcpy((*strs)[i], str + offset, e);
- (*strs)[i][e] = '\0';
- offset += l;
+ size_t l = *((uint16_t *) p);
+ p += sizeof(uint16_t);
+ (*strs)[i] = pa_xnew(char, l + 1);
+ memcpy((*strs)[i], p, l);
+ (*strs)[i][l] = '\0';
+ p += l;
}
}
static void save_profile(struct userdata *u, size_t channel, char *name){
@@ -885,17 +887,17 @@ static void save_state(struct userdata *u){
pack(u->base_profiles, u->channels, &packed, &packed_length);
state = (float *) pa_xmalloc0(filter_state_size + packed_length);
+ memcpy(state + FILTER_STATE_SIZE, packed, packed_length);
+ pa_xfree(packed);
for(size_t c = 0; c < u->channels; ++c){
a_i = pa_aupdate_read_begin(u->a_H[c]);
- state[c * CHANNEL_PROFILE_SIZE] = u->Xs[a_i][c];
+ state[c * CHANNEL_PROFILE_SIZE] = u->Xs[c][a_i];
H = u->Hs[c][a_i];
- H_n = state + c * CHANNEL_PROFILE_SIZE + 1;
+ H_n = &state[c * CHANNEL_PROFILE_SIZE + 1];
memcpy(H_n, H, FILTER_SIZE * sizeof(float));
pa_aupdate_read_end(u->a_H[c]);
}
- memcpy(((char *)state) + filter_state_size, packed, packed_length);
- pa_xfree(packed);
key.data = state_name;
key.size = strlen(key.data);
@@ -978,13 +980,13 @@ static void load_state(struct userdata *u){
memcpy(u->Hs[c][a_i], H, FILTER_SIZE * sizeof(float));
pa_aupdate_write_end(u->a_H[c]);
}
- //unpack(((char *)value.data) + FILTER_STATE_SIZE, value.size - FILTER_STATE_SIZE, &names, &n_profs);
- //n_profs = PA_MIN(n_profs, u->channels);
- //for(size_t c = 0; c < n_profs; ++c){
- // pa_xfree(u->base_profiles[c]);
- // u->base_profiles[c] = names[c];
- //}
- //pa_xfree(names);
+ unpack(((char *)value.data) + FILTER_STATE_SIZE * sizeof(float), value.size - FILTER_STATE_SIZE * sizeof(float), &names, &n_profs);
+ n_profs = PA_MIN(n_profs, u->channels);
+ for(size_t c = 0; c < n_profs; ++c){
+ pa_xfree(u->base_profiles[c]);
+ u->base_profiles[c] = names[c];
+ }
+ pa_xfree(names);
}
pa_datum_free(&value);
}else{
commit 8f2289c563090562d194c6336ccf4ba75a1eacd0
Author: Jason Newton <nevion at gmail.com>
Date: Sun Oct 18 14:52:32 2009 -0700
module-equalizer-sink:
*fixed SSE2 optimized dsp logic (default if available)
*cleaned up whitespace formatting (again)
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index f5c1fb7..814a00f 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -337,7 +337,7 @@ static void sink_set_mute_cb(pa_sink *s) {
pa_sink_input_set_mute(u->sink_input, s->muted, s->save_muted);
}
-
+#ifndef __SSE2__
//reference implementation
static void dsp_logic(
float * restrict dst,//used as a temp array too, needs to be fft_length!
@@ -351,12 +351,12 @@ static void dsp_logic(
fftwf_complex * restrict output_window,//The transformed window'd src
struct userdata *u){
//use a linear-phase sliding STFT and overlap-add method (for each channel)
- //zero padd the data
- memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//window the data
for(size_t j = 0; j < u->window_size; ++j){
dst[j] = X * W[j] * src[j];
}
+ //zero padd the the remaining fft window
+ memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//Processing is done here!
//do fft
fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
@@ -390,112 +390,104 @@ static void dsp_logic(
(u->samples_gathered - u->R) * sizeof(float)
);
}
-
+#else
typedef float v4sf __attribute__ ((__aligned__(v_size * sizeof(float))));
typedef union float_vector {
float f[v_size];
v4sf v;
-#ifdef __SSE2__
__m128 m;
-#endif
} float_vector_t;
-////regardless of sse enabled, the loops in here assume
-////16 byte aligned addresses and memory allocations divisible by v_size
-//void dsp_logic(
-// float * restrict dst,//used as a temp array too, needs to be fft_length!
-// float * restrict src,/*input data w/ overlap at start,
-// *automatically cycled in routine
-// */
-// float * restrict overlap,//The size of the overlap
-// const float X,//multipliar
-// const float * restrict H,//The freq. magnitude scalers filter
-// const float * restrict W,//The windowing function
-// fftwf_complex * restrict output_window,//The transformed window'd src
-// struct userdata *u){//Collection of constants
- //float_vector_t x = {X, X, X, X};
-// const size_t window_size = PA_ROUND_UP(u->window_size,v_size);
-// const size_t fft_h = PA_ROUND_UP(FILTER_SIZE, v_size / 2);
-// //const size_t R = PA_ROUND_UP(u->R, v_size);
-// const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
-// overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
-//
-// //assert(u->samples_gathered >= u->R);
-// //zero out the bit beyond the real overlap so we don't add garbage
-// for(size_t j = overlap_size; j > u->overlap_size; --j){
-// overlap[j-1] = 0;
-// }
-// //use a linear-phase sliding STFT and overlap-add method
-// //zero padd the data
-// memset(dst + u->window_size, 0, (u->fft_size - u->window_size)*sizeof(float));
-// //window the data
-// for(size_t j = 0; j < window_size; j += v_size){
-// //dst[j] = W[j]*src[j];
-// float_vector_t *d = (float_vector_t*) (dst+j);
-// float_vector_t *w = (float_vector_t*) (W+j);
-// float_vector_t *s = (float_vector_t*) (src+j);
+//regardless of sse enabled, the loops in here assume
+//16 byte aligned addresses and memory allocations divisible by v_size
+static void dsp_logic(
+ float * restrict dst,//used as a temp array too, needs to be fft_length!
+ float * restrict src,/*input data w/ overlap at start,
+ *automatically cycled in routine
+ */
+ float * restrict overlap,//The size of the overlap
+ const float X,//multipliar
+ const float * restrict H,//The freq. magnitude scalers filter
+ const float * restrict W,//The windowing function
+ fftwf_complex * restrict output_window,//The transformed window'd src
+ struct userdata *u){//Collection of constants
+ const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
+
+
+ //assert(u->samples_gathered >= u->R);
+ //use a linear-phase sliding STFT and overlap-add method
+ for(size_t j = 0; j < u->window_size; j += v_size){
+ //dst[j] = W[j] * src[j];
+ float_vector_t *d = (float_vector_t*) (dst + j);
+ float_vector_t *w = (float_vector_t*) (W + j);
+ float_vector_t *s = (float_vector_t*) (src + j);
//#if __SSE2__
-// d->m = _mm_mul_ps(x->m, _mm_mul_ps(w->m, s->m));
+ d->m = _mm_mul_ps(w->m, s->m);
//#else
-// d->v = x->v * w->v * s->v;
+// d->v = w->v * s->v;
//#endif
-// }
-// //Processing is done here!
-// //do fft
-// fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
-//
-//
-// //perform filtering - purely magnitude based
-// for(size_t j = 0;j < fft_h; j+=v_size/2){
-// //output_window[j][0]*=H[j];
-// //output_window[j][1]*=H[j];
-// float_vector_t *d = (float_vector_t*)(output_window+j);
-// float_vector_t h;
-// h.f[0] = h.f[1] = H[j];
-// h.f[2] = h.f[3] = H[j+1];
+ }
+ //zero padd the the remaining fft window
+ memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
+
+ //Processing is done here!
+ //do fft
+ fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
+ //perform filtering - purely magnitude based
+ for(size_t j = 0; j < FILTER_SIZE; j += v_size / 2){
+ //output_window[j][0]*=H[j];
+ //output_window[j][1]*=H[j];
+ float_vector_t *d = (float_vector_t*)( ((float *) output_window) + 2 * j);
+ float_vector_t h;
+ h.f[0] = h.f[1] = H[j];
+ h.f[2] = h.f[3] = H[j + 1];
//#if __SSE2__
-// d->m = _mm_mul_ps(d->m, h.m);
+ d->m = _mm_mul_ps(d->m, h.m);
//#else
-// d->v = d->v*h->v;
+// d->v = d->v * h.v;
//#endif
-// }
-// //inverse fft
-// fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
-//
-// ////debug: tests overlaping add
-// ////and negates ALL PREVIOUS processing
-// ////yields a perfect reconstruction if COLA is held
-// //for(size_t j = 0; j < u->window_size; ++j){
-// // dst[j] = W[j]*src[j];
-// //}
-//
-// //overlap add and preserve overlap component from this window (linear phase)
-// for(size_t j = 0; j < overlap_size; j+=v_size){
-// //dst[j]+=overlap[j];
-// //overlap[j]+=dst[j+R];
-// float_vector_t *d = (float_vector_t*)(dst+j);
-// float_vector_t *o = (float_vector_t*)(overlap+j);
+ }
+
+ //inverse fft
+ fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
+
+ ////debug: tests overlaping add
+ ////and negates ALL PREVIOUS processing
+ ////yields a perfect reconstruction if COLA is held
+ //for(size_t j = 0; j < u->window_size; ++j){
+ // dst[j] = W[j] * src[j];
+ //}
+
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j = 0; j < overlap_size; j += v_size){
+ //dst[j]+=overlap[j];
+ //overlap[j]+=dst[j+R];
+ float_vector_t *d = (float_vector_t*)(dst + j);
+ float_vector_t *o = (float_vector_t*)(overlap + j);
//#if __SSE2__
-// d->m = _mm_add_ps(d->m, o->m);
-// o->m = ((float_vector_t*)(dst+u->R+j))->m;
+ d->m = _mm_add_ps(d->m, o->m);
+ o->m = ((float_vector_t*)(dst + u->R + j))->m;
//#else
-// d->v = d->v+o->v;
-// o->v = ((float_vector_t*)(dst+u->R+j))->v;
+// d->v = d->v + o->v;
+// o->v = ((float_vector_t*)(dst + u->R + j))->v;
//#endif
-// }
-// //memcpy(overlap, dst+u->R, u->overlap_size*sizeof(float));
-//
-// //////debug: tests if basic buffering works
-// //////shouldn't modify the signal AT ALL (beyond roundoff)
-// //for(size_t j = 0; j < u->window_size; ++j){
-// // dst[j] = src[j];
-// //}
-//
-// //preseve the needed input for the next window's overlap
-// memmove(src, src + u->R,
-// u->overlap_size * sizeof(float)
-// );
-//}
+ }
+ //memcpy(overlap, dst+u->R, u->overlap_size * sizeof(float)); //overlap preserve (debug)
+ //zero out the bit beyond the real overlap so we don't add garbage next iteration
+ memset(overlap + u->overlap_size, 0, overlap_size - u->overlap_size);
+
+ ////debug: tests if basic buffering works
+ ////shouldn't modify the signal AT ALL (beyond roundoff)
+ //for(size_t j = 0; j < u->window_size; ++j){
+ // dst[j] = src[j];
+ //}
+
+ //preseve the needed input for the next window's overlap
+ memmove(src, src + u->R,
+ (u->samples_gathered - u->R) * sizeof(float)
+ );
+}
+#endif
static void process_samples(struct userdata *u, pa_memchunk *tchunk){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
@@ -685,7 +677,7 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
//invalidate the output q
pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log("Resetting filter");
- reset_filter(u);
+ //reset_filter(u); //this is the "proper" thing to do...
}
}
@@ -1064,9 +1056,12 @@ int pa__init(pa_module*m) {
pa_modargs_get_value_boolean(ma, "set_default", &u->set_default);
u->channels = ss.channels;
- u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));//probably unstable near corner cases of powers of 2
+ u->fft_size = pow(2, ceil(log(ss.rate) / log(2)));//probably unstable near corner cases of powers of 2
pa_log_debug("fft size: %ld", u->fft_size);
u->window_size = 15999;
+ if(u->window_size % 2 == 0){
+ u->window_size--;
+ }
u->R = (u->window_size + 1) / 2;
u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
@@ -1090,7 +1085,6 @@ int pa__init(pa_module*m) {
u->a_H[c] = pa_aupdate_new();
u->input[c] = NULL;
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
- memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
u->output_window = alloc((FILTER_SIZE), sizeof(fftwf_complex));
u->forward_plan = fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
commit bec67cd75f10643ca20cbf512531f05c3338ee8e
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Oct 19 21:50:03 2009 +0100
device-manager: Fix compiler warning.
Do not use a variable called 'index' as it clashes with string.h
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index e315864..3991043 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -1033,13 +1033,13 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if ((e = read_entry(u, name))) {
uint32_t idx;
char *devname;
- uint32_t index = PA_INVALID_INDEX;
+ uint32_t found_index = PA_INVALID_INDEX;
if ((devname = get_name(name, "sink:"))) {
pa_sink* s;
PA_IDXSET_FOREACH(s, u->core->sinks, idx) {
if (strcmp(s->name, devname) == 0) {
- index = s->index;
+ found_index = s->index;
break;
}
}
@@ -1048,7 +1048,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_source* s;
PA_IDXSET_FOREACH(s, u->core->sources, idx) {
if (strcmp(s->name, devname) == 0) {
- index = s->index;
+ found_index = s->index;
break;
}
}
@@ -1058,7 +1058,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
pa_tagstruct_puts(reply, name);
pa_tagstruct_puts(reply, e->description);
pa_tagstruct_puts(reply, e->icon);
- pa_tagstruct_putu32(reply, index);
+ pa_tagstruct_putu32(reply, found_index);
pa_tagstruct_putu32(reply, NUM_ROLES);
for (uint32_t i = ROLE_NONE; i < NUM_ROLES; ++i) {
commit d25b9eab0fff1040713cf297f40450e0f7641870
Author: Jason Newton <jason at archer.wyred.org>
Date: Mon Oct 19 18:28:25 2009 -0700
module-equalizer-sink: drop source executable permissions configure.ac: add enable/disable + summary line for fftw
diff --git a/configure.ac b/configure.ac
index 77ec884..b34821a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1513,6 +1513,11 @@ if test "x${HAVE_SIMPLEDB}" = "x1" ; then
ENABLE_SIMPLEDB=yes
fi
+ENABLE_FFTW=no
+if test "x${HAVE_FFTW}" = "x1" ; then
+ ENABLE_FFTW=yes
+fi
+
ENABLE_OPENSSL=no
if test "x${HAVE_OPENSSL}" = "x1" ; then
ENABLE_OPENSSL=yes
@@ -1563,6 +1568,7 @@ echo "
Enable tdb: ${ENABLE_TDB}
Enable gdbm: ${ENABLE_GDBM}
Enable simple database: ${ENABLE_SIMPLEDB}
+ Enable fftw: ${ENABLE_FFTW}
System User: ${PA_SYSTEM_USER}
System Group: ${PA_SYSTEM_GROUP}
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
old mode 100755
new mode 100644
commit ff903ef542375e9b87ed920a7165379d5d754f96
Author: Jason Newton <nevion at gmail.com>
Date: Thu Oct 8 20:46:52 2009 -0700
module-equalizer-sink: fixed equalizer state save/restore
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 3a28b49..f5c1fb7 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -814,33 +814,35 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
static void pack(char **strs, size_t len, char **packed, size_t *length){
size_t t_len = 0;
size_t headers = (1+len) * sizeof(uint16_t);
- size_t offset = sizeof(uint16_t);
+ char *p;
for(size_t i = 0; i < len; ++i){
t_len += strlen(strs[i]);
}
*length = headers + t_len;
- *packed = pa_xmalloc0(*length);
- ((uint16_t *) *packed)[0] = (uint16_t) len;
+ p = *packed = pa_xmalloc0(*length);
+ *((uint16_t *) p) = (uint16_t) len;
+ p += sizeof(uint16_t);
for(size_t i = 0; i < len; ++i){
uint16_t l = strlen(strs[i]);
- *((uint16_t *)(*packed + offset)) = l;
- offset += sizeof(uint16_t);
- memcpy(*packed + offset, strs[i], l);
- offset += l;
+ *((uint16_t *) p) = (uint16_t) l;
+ p += sizeof(uint16_t);
+ memcpy(p, strs[i], l);
+ p += l;
}
}
static void unpack(char *str, size_t length, char ***strs, size_t *len){
- size_t offset = sizeof(uint16_t);
- *len = ((uint16_t *)str)[0];
+ char *p = str;
+ *len = *((uint16_t *) p);
+ p += sizeof(uint16_t);
*strs = pa_xnew(char *, *len);
+
for(size_t i = 0; i < *len; ++i){
- size_t l = *((uint16_t *)(str+offset));
- size_t e = PA_MIN(offset + l, length) - offset;
- offset = PA_MIN(offset + sizeof(uint16_t), length);
- (*strs)[i] = pa_xnew(char, e + 1);
- memcpy((*strs)[i], str + offset, e);
- (*strs)[i][e] = '\0';
- offset += l;
+ size_t l = *((uint16_t *) p);
+ p += sizeof(uint16_t);
+ (*strs)[i] = pa_xnew(char, l + 1);
+ memcpy((*strs)[i], p, l);
+ (*strs)[i][l] = '\0';
+ p += l;
}
}
static void save_profile(struct userdata *u, size_t channel, char *name){
@@ -885,17 +887,17 @@ static void save_state(struct userdata *u){
pack(u->base_profiles, u->channels, &packed, &packed_length);
state = (float *) pa_xmalloc0(filter_state_size + packed_length);
+ memcpy(state + FILTER_STATE_SIZE, packed, packed_length);
+ pa_xfree(packed);
for(size_t c = 0; c < u->channels; ++c){
a_i = pa_aupdate_read_begin(u->a_H[c]);
- state[c * CHANNEL_PROFILE_SIZE] = u->Xs[a_i][c];
+ state[c * CHANNEL_PROFILE_SIZE] = u->Xs[c][a_i];
H = u->Hs[c][a_i];
- H_n = state + c * CHANNEL_PROFILE_SIZE + 1;
+ H_n = &state[c * CHANNEL_PROFILE_SIZE + 1];
memcpy(H_n, H, FILTER_SIZE * sizeof(float));
pa_aupdate_read_end(u->a_H[c]);
}
- memcpy(((char *)state) + filter_state_size, packed, packed_length);
- pa_xfree(packed);
key.data = state_name;
key.size = strlen(key.data);
@@ -978,13 +980,13 @@ static void load_state(struct userdata *u){
memcpy(u->Hs[c][a_i], H, FILTER_SIZE * sizeof(float));
pa_aupdate_write_end(u->a_H[c]);
}
- //unpack(((char *)value.data) + FILTER_STATE_SIZE, value.size - FILTER_STATE_SIZE, &names, &n_profs);
- //n_profs = PA_MIN(n_profs, u->channels);
- //for(size_t c = 0; c < n_profs; ++c){
- // pa_xfree(u->base_profiles[c]);
- // u->base_profiles[c] = names[c];
- //}
- //pa_xfree(names);
+ unpack(((char *)value.data) + FILTER_STATE_SIZE * sizeof(float), value.size - FILTER_STATE_SIZE * sizeof(float), &names, &n_profs);
+ n_profs = PA_MIN(n_profs, u->channels);
+ for(size_t c = 0; c < n_profs; ++c){
+ pa_xfree(u->base_profiles[c]);
+ u->base_profiles[c] = names[c];
+ }
+ pa_xfree(names);
}
pa_datum_free(&value);
}else{
commit 16e77f3ab2bd3e180f4a16432845bbe64db8aa48
Author: Jason Newton <nevion at gmail.com>
Date: Sun Oct 18 14:52:32 2009 -0700
module-equalizer-sink:
*fixed SSE2 optimized dsp logic (default if available)
*cleaned up whitespace formatting (again)
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index f5c1fb7..814a00f 100755
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -337,7 +337,7 @@ static void sink_set_mute_cb(pa_sink *s) {
pa_sink_input_set_mute(u->sink_input, s->muted, s->save_muted);
}
-
+#ifndef __SSE2__
//reference implementation
static void dsp_logic(
float * restrict dst,//used as a temp array too, needs to be fft_length!
@@ -351,12 +351,12 @@ static void dsp_logic(
fftwf_complex * restrict output_window,//The transformed window'd src
struct userdata *u){
//use a linear-phase sliding STFT and overlap-add method (for each channel)
- //zero padd the data
- memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//window the data
for(size_t j = 0; j < u->window_size; ++j){
dst[j] = X * W[j] * src[j];
}
+ //zero padd the the remaining fft window
+ memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
//Processing is done here!
//do fft
fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
@@ -390,112 +390,104 @@ static void dsp_logic(
(u->samples_gathered - u->R) * sizeof(float)
);
}
-
+#else
typedef float v4sf __attribute__ ((__aligned__(v_size * sizeof(float))));
typedef union float_vector {
float f[v_size];
v4sf v;
-#ifdef __SSE2__
__m128 m;
-#endif
} float_vector_t;
-////regardless of sse enabled, the loops in here assume
-////16 byte aligned addresses and memory allocations divisible by v_size
-//void dsp_logic(
-// float * restrict dst,//used as a temp array too, needs to be fft_length!
-// float * restrict src,/*input data w/ overlap at start,
-// *automatically cycled in routine
-// */
-// float * restrict overlap,//The size of the overlap
-// const float X,//multipliar
-// const float * restrict H,//The freq. magnitude scalers filter
-// const float * restrict W,//The windowing function
-// fftwf_complex * restrict output_window,//The transformed window'd src
-// struct userdata *u){//Collection of constants
- //float_vector_t x = {X, X, X, X};
-// const size_t window_size = PA_ROUND_UP(u->window_size,v_size);
-// const size_t fft_h = PA_ROUND_UP(FILTER_SIZE, v_size / 2);
-// //const size_t R = PA_ROUND_UP(u->R, v_size);
-// const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
-// overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
-//
-// //assert(u->samples_gathered >= u->R);
-// //zero out the bit beyond the real overlap so we don't add garbage
-// for(size_t j = overlap_size; j > u->overlap_size; --j){
-// overlap[j-1] = 0;
-// }
-// //use a linear-phase sliding STFT and overlap-add method
-// //zero padd the data
-// memset(dst + u->window_size, 0, (u->fft_size - u->window_size)*sizeof(float));
-// //window the data
-// for(size_t j = 0; j < window_size; j += v_size){
-// //dst[j] = W[j]*src[j];
-// float_vector_t *d = (float_vector_t*) (dst+j);
-// float_vector_t *w = (float_vector_t*) (W+j);
-// float_vector_t *s = (float_vector_t*) (src+j);
+//regardless of sse enabled, the loops in here assume
+//16 byte aligned addresses and memory allocations divisible by v_size
+static void dsp_logic(
+ float * restrict dst,//used as a temp array too, needs to be fft_length!
+ float * restrict src,/*input data w/ overlap at start,
+ *automatically cycled in routine
+ */
+ float * restrict overlap,//The size of the overlap
+ const float X,//multipliar
+ const float * restrict H,//The freq. magnitude scalers filter
+ const float * restrict W,//The windowing function
+ fftwf_complex * restrict output_window,//The transformed window'd src
+ struct userdata *u){//Collection of constants
+ const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
+
+
+ //assert(u->samples_gathered >= u->R);
+ //use a linear-phase sliding STFT and overlap-add method
+ for(size_t j = 0; j < u->window_size; j += v_size){
+ //dst[j] = W[j] * src[j];
+ float_vector_t *d = (float_vector_t*) (dst + j);
+ float_vector_t *w = (float_vector_t*) (W + j);
+ float_vector_t *s = (float_vector_t*) (src + j);
//#if __SSE2__
-// d->m = _mm_mul_ps(x->m, _mm_mul_ps(w->m, s->m));
+ d->m = _mm_mul_ps(w->m, s->m);
//#else
-// d->v = x->v * w->v * s->v;
+// d->v = w->v * s->v;
//#endif
-// }
-// //Processing is done here!
-// //do fft
-// fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
-//
-//
-// //perform filtering - purely magnitude based
-// for(size_t j = 0;j < fft_h; j+=v_size/2){
-// //output_window[j][0]*=H[j];
-// //output_window[j][1]*=H[j];
-// float_vector_t *d = (float_vector_t*)(output_window+j);
-// float_vector_t h;
-// h.f[0] = h.f[1] = H[j];
-// h.f[2] = h.f[3] = H[j+1];
+ }
+ //zero padd the the remaining fft window
+ memset(dst + u->window_size, 0, (u->fft_size - u->window_size) * sizeof(float));
+
+ //Processing is done here!
+ //do fft
+ fftwf_execute_dft_r2c(u->forward_plan, dst, output_window);
+ //perform filtering - purely magnitude based
+ for(size_t j = 0; j < FILTER_SIZE; j += v_size / 2){
+ //output_window[j][0]*=H[j];
+ //output_window[j][1]*=H[j];
+ float_vector_t *d = (float_vector_t*)( ((float *) output_window) + 2 * j);
+ float_vector_t h;
+ h.f[0] = h.f[1] = H[j];
+ h.f[2] = h.f[3] = H[j + 1];
//#if __SSE2__
-// d->m = _mm_mul_ps(d->m, h.m);
+ d->m = _mm_mul_ps(d->m, h.m);
//#else
-// d->v = d->v*h->v;
+// d->v = d->v * h.v;
//#endif
-// }
-// //inverse fft
-// fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
-//
-// ////debug: tests overlaping add
-// ////and negates ALL PREVIOUS processing
-// ////yields a perfect reconstruction if COLA is held
-// //for(size_t j = 0; j < u->window_size; ++j){
-// // dst[j] = W[j]*src[j];
-// //}
-//
-// //overlap add and preserve overlap component from this window (linear phase)
-// for(size_t j = 0; j < overlap_size; j+=v_size){
-// //dst[j]+=overlap[j];
-// //overlap[j]+=dst[j+R];
-// float_vector_t *d = (float_vector_t*)(dst+j);
-// float_vector_t *o = (float_vector_t*)(overlap+j);
+ }
+
+ //inverse fft
+ fftwf_execute_dft_c2r(u->inverse_plan, output_window, dst);
+
+ ////debug: tests overlaping add
+ ////and negates ALL PREVIOUS processing
+ ////yields a perfect reconstruction if COLA is held
+ //for(size_t j = 0; j < u->window_size; ++j){
+ // dst[j] = W[j] * src[j];
+ //}
+
+ //overlap add and preserve overlap component from this window (linear phase)
+ for(size_t j = 0; j < overlap_size; j += v_size){
+ //dst[j]+=overlap[j];
+ //overlap[j]+=dst[j+R];
+ float_vector_t *d = (float_vector_t*)(dst + j);
+ float_vector_t *o = (float_vector_t*)(overlap + j);
//#if __SSE2__
-// d->m = _mm_add_ps(d->m, o->m);
-// o->m = ((float_vector_t*)(dst+u->R+j))->m;
+ d->m = _mm_add_ps(d->m, o->m);
+ o->m = ((float_vector_t*)(dst + u->R + j))->m;
//#else
-// d->v = d->v+o->v;
-// o->v = ((float_vector_t*)(dst+u->R+j))->v;
+// d->v = d->v + o->v;
+// o->v = ((float_vector_t*)(dst + u->R + j))->v;
//#endif
-// }
-// //memcpy(overlap, dst+u->R, u->overlap_size*sizeof(float));
-//
-// //////debug: tests if basic buffering works
-// //////shouldn't modify the signal AT ALL (beyond roundoff)
-// //for(size_t j = 0; j < u->window_size; ++j){
-// // dst[j] = src[j];
-// //}
-//
-// //preseve the needed input for the next window's overlap
-// memmove(src, src + u->R,
-// u->overlap_size * sizeof(float)
-// );
-//}
+ }
+ //memcpy(overlap, dst+u->R, u->overlap_size * sizeof(float)); //overlap preserve (debug)
+ //zero out the bit beyond the real overlap so we don't add garbage next iteration
+ memset(overlap + u->overlap_size, 0, overlap_size - u->overlap_size);
+
+ ////debug: tests if basic buffering works
+ ////shouldn't modify the signal AT ALL (beyond roundoff)
+ //for(size_t j = 0; j < u->window_size; ++j){
+ // dst[j] = src[j];
+ //}
+
+ //preseve the needed input for the next window's overlap
+ memmove(src, src + u->R,
+ (u->samples_gathered - u->R) * sizeof(float)
+ );
+}
+#endif
static void process_samples(struct userdata *u, pa_memchunk *tchunk){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
@@ -685,7 +677,7 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
//invalidate the output q
pa_memblockq_seek(u->input_q, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
pa_log("Resetting filter");
- reset_filter(u);
+ //reset_filter(u); //this is the "proper" thing to do...
}
}
@@ -1064,9 +1056,12 @@ int pa__init(pa_module*m) {
pa_modargs_get_value_boolean(ma, "set_default", &u->set_default);
u->channels = ss.channels;
- u->fft_size = pow(2, ceil(log(ss.rate)/log(2)));//probably unstable near corner cases of powers of 2
+ u->fft_size = pow(2, ceil(log(ss.rate) / log(2)));//probably unstable near corner cases of powers of 2
pa_log_debug("fft size: %ld", u->fft_size);
u->window_size = 15999;
+ if(u->window_size % 2 == 0){
+ u->window_size--;
+ }
u->R = (u->window_size + 1) / 2;
u->overlap_size = u->window_size - u->R;
u->samples_gathered = 0;
@@ -1090,7 +1085,6 @@ int pa__init(pa_module*m) {
u->a_H[c] = pa_aupdate_new();
u->input[c] = NULL;
u->overlap_accum[c] = alloc(u->overlap_size, sizeof(float));
- memset(u->overlap_accum[c], 0, u->overlap_size*sizeof(float));
}
u->output_window = alloc((FILTER_SIZE), sizeof(fftwf_complex));
u->forward_plan = fftwf_plan_dft_r2c_1d(u->fft_size, u->work_buffer, u->output_window, FFTW_ESTIMATE);
commit e9ccc61a2f561c37939e34a192bd7bd953eb8cbc
Author: Jason Newton <jason at archer.wyred.org>
Date: Mon Oct 19 18:28:25 2009 -0700
module-equalizer-sink: drop source executable permissions configure.ac: add enable/disable + summary line for fftw
diff --git a/configure.ac b/configure.ac
index 77ec884..b34821a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1513,6 +1513,11 @@ if test "x${HAVE_SIMPLEDB}" = "x1" ; then
ENABLE_SIMPLEDB=yes
fi
+ENABLE_FFTW=no
+if test "x${HAVE_FFTW}" = "x1" ; then
+ ENABLE_FFTW=yes
+fi
+
ENABLE_OPENSSL=no
if test "x${HAVE_OPENSSL}" = "x1" ; then
ENABLE_OPENSSL=yes
@@ -1563,6 +1568,7 @@ echo "
Enable tdb: ${ENABLE_TDB}
Enable gdbm: ${ENABLE_GDBM}
Enable simple database: ${ENABLE_SIMPLEDB}
+ Enable fftw: ${ENABLE_FFTW}
System User: ${PA_SYSTEM_USER}
System Group: ${PA_SYSTEM_GROUP}
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
old mode 100755
new mode 100644
commit 9c61465c796f3369c7cc57c094489fb383216a1b
Merge: e11cd13 e9ccc61
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Oct 27 13:00:08 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 744490a681be7356efba4160bfb29a3e76e85888
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 21:29:01 2009 +0100
memblock: decrease tile size to 64k again
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index eac4a59..f38b17c 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -54,7 +54,7 @@
* stored in SHM and our OS does not commit the memory before we use
* it for the first time. */
#define PA_MEMPOOL_SLOTS_MAX 1024
-#define PA_MEMPOOL_SLOT_SIZE (128*1024)
+#define PA_MEMPOOL_SLOT_SIZE (64*1024)
#define PA_MEMEXPORT_SLOTS_MAX 128
commit 4538523a2999ee36e19f3f09a8ca5328185f9a67
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:26:48 2009 +0100
libpulse: introduce pa_context_get_tile_size() call
diff --git a/src/map-file b/src/map-file
index 6f7bdac..5011122 100644
--- a/src/map-file
+++ b/src/map-file
@@ -66,6 +66,7 @@ pa_context_get_source_info_list;
pa_context_get_source_output_info;
pa_context_get_source_output_info_list;
pa_context_get_state;
+pa_context_get_tile_size;
pa_context_is_local;
pa_context_is_pending;
pa_context_kill_client;
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 7468d0a..e33143d 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -1488,6 +1488,7 @@ pa_time_event* pa_context_rttime_new(pa_context *c, pa_usec_t usec, pa_time_even
struct timeval tv;
pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
pa_assert(c->mainloop);
if (usec == PA_USEC_INVALID)
@@ -1502,8 +1503,10 @@ void pa_context_rttime_restart(pa_context *c, pa_time_event *e, pa_usec_t usec)
struct timeval tv;
pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
pa_assert(c->mainloop);
+
if (usec == PA_USEC_INVALID)
c->mainloop->time_restart(e, NULL);
else {
@@ -1511,3 +1514,17 @@ void pa_context_rttime_restart(pa_context *c, pa_time_event *e, pa_usec_t usec)
c->mainloop->time_restart(e, &tv);
}
}
+
+size_t pa_context_get_tile_size(pa_context *c, const pa_sample_spec *ss) {
+ size_t fs, mbs;
+
+ pa_assert(c);
+ pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+ PA_CHECK_VALIDITY_RETURN_ANY(c, !pa_detect_fork(), PA_ERR_FORKED, (size_t) -1);
+ PA_CHECK_VALIDITY_RETURN_ANY(c, !ss || pa_sample_spec_valid(ss), PA_ERR_INVALID, (size_t) -1);
+
+ fs = ss ? pa_frame_size(ss) : 1;
+ mbs = PA_ROUND_DOWN(pa_mempool_block_size_max(c->mempool), fs);
+ return PA_MAX(mbs, fs);
+}
diff --git a/src/pulse/context.h b/src/pulse/context.h
index ecff58d..6ac8ee5 100644
--- a/src/pulse/context.h
+++ b/src/pulse/context.h
@@ -255,12 +255,28 @@ pa_operation *pa_context_proplist_remove(pa_context *c, const char *const keys[]
uint32_t pa_context_get_index(pa_context *s);
/** Create a new timer event source for the specified time (wrapper
- for mainloop->time_new). \since 0.9.16 */
+ * for mainloop->time_new). \since 0.9.16 */
pa_time_event* pa_context_rttime_new(pa_context *c, pa_usec_t usec, pa_time_event_cb_t cb, void *userdata);
-/** Restart a running or expired timer event source (wrapper
- for mainloop->time_restart). \since 0.9.16 */
+
+/** Restart a running or expired timer event source (wrapper for
+ * mainloop->time_restart). \since 0.9.16 */
void pa_context_rttime_restart(pa_context *c, pa_time_event *e, pa_usec_t usec);
+/* Return the optimal block size for passing around audio buffers. It
+ * is recommended to allocate buffers of the size returned here when
+ * writing audio data to playback streams, if the latency constraints
+ * permit this. It is not recommended writing larger blocks than this
+ * because usually they will then be split up internally into chunks
+ * of this size. It is not recommended writing smaller blocks than
+ * this (unless required due to latency demands) because this
+ * increases CPU usage. If ss is NULL you will be returned the
+ * byte-exact tile size. If you pass a valid ss, then the tile size
+ * will be rounded down to multiple of the frame size. This is
+ * supposed to be used in a construct such as
+ * pa_context_get_tile_size(pa_stream_get_context(s),
+ * pa_stream_get_sample_spec(ss)); \since 0.9.20 */
+size_t pa_context_get_tile_size(pa_context *c, const pa_sample_spec *ss);
+
PA_C_DECL_END
#endif
commit 7c55d6e91d21971e187bf9602dce38cb49666cc4
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:27:14 2009 +0100
clients: drop definition of BUFSIZE which is unused
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 141ab5b..51de120 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -44,8 +44,6 @@
#include <pulsecore/log.h>
#include <pulsecore/sndfile-util.h>
-#define BUFSIZE (16*1024)
-
static pa_context *context = NULL;
static pa_mainloop_api *mainloop_api = NULL;
diff --git a/src/utils/pasuspender.c b/src/utils/pasuspender.c
index c327ee4..534b77b 100644
--- a/src/utils/pasuspender.c
+++ b/src/utils/pasuspender.c
@@ -45,8 +45,6 @@
#include <pulse/pulseaudio.h>
#include <pulsecore/macro.h>
-#define BUFSIZE 1024
-
static pa_context *context = NULL;
static pa_mainloop_api *mainloop_api = NULL;
static char **child_argv = NULL;
commit 8678f565322ccc1bfbaa0f21024f7255ed58b933
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:27:50 2009 +0100
pactl: include information about client context in pactl stat output
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 51de120..7ef02ec 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -156,10 +156,23 @@ static void get_server_info_callback(pa_context *c, const pa_server_info *i, voi
return;
}
+ printf(_("Server String: %s\n"
+ "Library Protocol Version: %u\n"
+ "Server Protocol Version: %u\n"
+ "Is Local: %s\n"
+ "Client Index: %u\n"
+ "Tile Size: %zu\n"),
+ pa_context_get_server(c),
+ pa_context_get_protocol_version(c),
+ pa_context_get_server_protocol_version(c),
+ pa_yes_no(pa_context_is_local(c)),
+ pa_context_get_index(c),
+ pa_context_get_tile_size(c, NULL));
+
pa_sample_spec_snprint(ss, sizeof(ss), &i->sample_spec);
pa_channel_map_snprint(cm, sizeof(cm), &i->channel_map);
- printf(_("User name: %s\n"
+ printf(_("User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
commit 78984e439553f5e6eeb97c90ec1df9141fbe91d8
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:28:12 2009 +0100
pactl: format cookie a little bit nicer
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 7ef02ec..ee67c42 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -180,7 +180,7 @@ static void get_server_info_callback(pa_context *c, const pa_server_info *i, voi
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
- "Cookie: %08x\n"),
+ "Cookie: %04x:%04x\n"),
i->user_name,
i->host_name,
i->server_name,
@@ -189,7 +189,8 @@ static void get_server_info_callback(pa_context *c, const pa_server_info *i, voi
cm,
i->default_sink_name,
i->default_source_name,
- i->cookie);
+ i->cookie >> 16,
+ i->cookie & 0xFFFFU);
complete_action();
}
commit 27c6a80ccb9ccfdd00524360938599cf2d14d4b6
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:47:21 2009 +0100
protocol-native: declare that user configured volumes are always absolute
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index d06dd4e..b7471c0 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1047,8 +1047,10 @@ static playback_stream* playback_stream_new(
data.sink = sink;
pa_sink_input_new_data_set_sample_spec(&data, ss);
pa_sink_input_new_data_set_channel_map(&data, map);
- if (volume)
+ if (volume) {
pa_sink_input_new_data_set_volume(&data, volume);
+ data.volume_is_absolute = TRUE;
+ }
if (muted_set)
pa_sink_input_new_data_set_muted(&data, muted);
data.sync_base = ssync ? ssync->sink_input : NULL;
commit 2501687579e359d5032a4d165b2ffc8f5b1b8ba6
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:47:50 2009 +0100
libpulse: explain semantics of pa_stream_connect_playback() in more detail
diff --git a/src/pulse/stream.h b/src/pulse/stream.h
index 2e8e71a..bc54a11 100644
--- a/src/pulse/stream.h
+++ b/src/pulse/stream.h
@@ -401,7 +401,22 @@ int pa_stream_is_suspended(pa_stream *s);
* not, and negative on error. \since 0.9.11 */
int pa_stream_is_corked(pa_stream *s);
-/** Connect the stream to a sink */
+/** Connect the stream to a sink. It is strongly recommended to pass
+ * NULL in both dev and volume and not to set either
+ * PA_STREAM_START_MUTED nor PA_STREAM_START_UNMUTED -- unless these
+ * options are directly dependant on user input or configuration. If
+ * you follow this rule then the sound server will have the full
+ * flexibility to choose the device, volume and mute status
+ * automatically, based on server-side policies, heuristics and stored
+ * information from previous uses. Also the server may choose to
+ * reconfigure audio devices to make other sinks/sources or
+ * capabilities available to be able to accept the stream. Before
+ * 0.9.20 it was not defined whether the 'volume' parameter was
+ * interpreted relative to the sink's current volume or treated as
+ * absolute device volume. Since 0.9.20 it is an absolute volume when
+ * the sink is in flat volume mode, and relative otherwise, thus
+ * making sure the volume passed here has always the same semantics as
+ * the volume passed to pa_context_set_sink_input_volume(). */
int pa_stream_connect_playback(
pa_stream *s /**< The stream to connect to a sink */,
const char *dev /**< Name of the sink to connect to, or NULL for default */ ,
commit 546bcf3f2f9711f0d08c21c3b775994844e7e2a2
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Oct 28 23:50:42 2009 +0100
protocol-native: if a client set volume/mute/device store it since it is user input
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index b7471c0..010420e 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1044,15 +1044,21 @@ static playback_stream* playback_stream_new(
data.driver = __FILE__;
data.module = c->options->module;
data.client = c->client;
- data.sink = sink;
+ if (sink) {
+ data.sink = sink;
+ data.save_sink = TRUE;
+ }
pa_sink_input_new_data_set_sample_spec(&data, ss);
pa_sink_input_new_data_set_channel_map(&data, map);
if (volume) {
pa_sink_input_new_data_set_volume(&data, volume);
data.volume_is_absolute = TRUE;
+ data.save_volume = TRUE;
}
- if (muted_set)
+ if (muted_set) {
pa_sink_input_new_data_set_muted(&data, muted);
+ data.save_muted = TRUE;
+ }
data.sync_base = ssync ? ssync->sink_input : NULL;
data.flags = flags;
commit f27a50691c8fe45bac7dd6b21fac91a359def3a1
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Oct 29 00:46:22 2009 +0100
libpulse: introduce PA_STREAM_RELATIVE_VOLUME
diff --git a/PROTOCOL b/PROTOCOL
index 92cc283..883b8bb 100644
--- a/PROTOCOL
+++ b/PROTOCOL
@@ -188,3 +188,9 @@ new messages:
PA_COMMAND_SET_SINK_PORT
PA_COMMAND_SET_SOURCE_PORT
+
+## v17, implemented by >= 0.9.20
+
+new flag at end of CREATE_PLAYBACK_STREAM:
+
+ bool relative_volume
diff --git a/configure.ac b/configure.ac
index b34821a..d7f55ac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -40,7 +40,7 @@ AC_SUBST(PA_MAJORMINORMICRO, pa_major.pa_minor.pa_micro)
AC_SUBST(PACKAGE_URL, [http://pulseaudio.org/])
AC_SUBST(PA_API_VERSION, 12)
-AC_SUBST(PA_PROTOCOL_VERSION, 16)
+AC_SUBST(PA_PROTOCOL_VERSION, 17)
# The stable ABI for client applications, for the version info x:y:z
# always will hold y=z
diff --git a/src/pulse/def.h b/src/pulse/def.h
index 5d0a0b4..30a076d 100644
--- a/src/pulse/def.h
+++ b/src/pulse/def.h
@@ -276,11 +276,18 @@ typedef enum pa_stream_flags {
* whether to create the stream in muted or in unmuted
* state. \since 0.9.15 */
- PA_STREAM_FAIL_ON_SUSPEND = 0x20000U
+ PA_STREAM_FAIL_ON_SUSPEND = 0x20000U,
/**< If the sink/source this stream is connected to is suspended
* during the creation of this stream, cause it to fail. If the
* sink/source is being suspended during creation of this stream,
* make sure this stream is terminated. \since 0.9.15 */
+
+ PA_STREAM_RELATIVE_VOLUME = 0x40000U,
+ /**< If a volume is passed when this stream is created, consider
+ * it relative to the sink's current volume, never as absolute
+ * device volume. If this is not specified the volume will be
+ * consider absolute when the sink is in flat volume mode,
+ * relative otherwise. \since 0.9.20 */
} pa_stream_flags_t;
/** \cond fulldocs */
@@ -307,6 +314,7 @@ typedef enum pa_stream_flags {
#define PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND
#define PA_STREAM_START_UNMUTED PA_STREAM_START_UNMUTED
#define PA_STREAM_FAIL_ON_SUSPEND PA_STREAM_FAIL_ON_SUSPEND
+#define PA_STREAM_RELATIVE_VOLUME PA_STREAM_RELATIVE_VOLUME
/** \endcond */
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 2bc2b1e..2997962 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -1025,7 +1025,8 @@ static int create_stream(
PA_STREAM_EARLY_REQUESTS|
PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND|
PA_STREAM_START_UNMUTED|
- PA_STREAM_FAIL_ON_SUSPEND)), PA_ERR_INVALID);
+ PA_STREAM_FAIL_ON_SUSPEND|
+ PA_STREAM_RELATIVE_VOLUME)), PA_ERR_INVALID);
PA_CHECK_VALIDITY(s->context, s->context->version >= 12 || !(flags & PA_STREAM_VARIABLE_RATE), PA_ERR_NOTSUPPORTED);
PA_CHECK_VALIDITY(s->context, s->context->version >= 13 || !(flags & PA_STREAM_PEAK_DETECT), PA_ERR_NOTSUPPORTED);
@@ -1158,6 +1159,13 @@ static int create_stream(
pa_tagstruct_put_boolean(t, flags & PA_STREAM_FAIL_ON_SUSPEND);
}
+ if (s->context->version >= 17) {
+
+ if (s->direction == PA_STREAM_PLAYBACK)
+ pa_tagstruct_put_boolean(t, flags & PA_STREAM_RELATIVE_VOLUME);
+
+ }
+
pa_pstream_send_tagstruct(s->context->pstream, t);
pa_pdispatch_register_reply(s->context->pdispatch, tag, DEFAULT_TIMEOUT, pa_create_stream_callback, s, NULL);
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 010420e..bb29a19 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1002,6 +1002,7 @@ static playback_stream* playback_stream_new(
pa_proplist *p,
pa_bool_t adjust_latency,
pa_bool_t early_requests,
+ pa_bool_t relative_volume,
int *ret) {
playback_stream *s, *ssync;
@@ -1052,7 +1053,7 @@ static playback_stream* playback_stream_new(
pa_sink_input_new_data_set_channel_map(&data, map);
if (volume) {
pa_sink_input_new_data_set_volume(&data, volume);
- data.volume_is_absolute = TRUE;
+ data.volume_is_absolute = !relative_volume;
data.save_volume = TRUE;
}
if (muted_set) {
@@ -1846,7 +1847,8 @@ static void command_create_playback_stream(pa_pdispatch *pd, uint32_t command, u
early_requests = FALSE,
dont_inhibit_auto_suspend = FALSE,
muted_set = FALSE,
- fail_on_suspend = FALSE;
+ fail_on_suspend = FALSE,
+ relative_volume = FALSE;
pa_sink_input_flags_t flags = 0;
pa_proplist *p;
pa_bool_t volume_set = TRUE;
@@ -1939,6 +1941,15 @@ static void command_create_playback_stream(pa_pdispatch *pd, uint32_t command, u
}
}
+ if (c->version >= 17) {
+
+ if (pa_tagstruct_get_boolean(t, &relative_volume) < 0) {
+ protocol_error(c);
+ pa_proplist_free(p);
+ return;
+ }
+ }
+
if (!pa_tagstruct_eof(t)) {
protocol_error(c);
pa_proplist_free(p);
@@ -1978,7 +1989,7 @@ static void command_create_playback_stream(pa_pdispatch *pd, uint32_t command, u
* flag. For older versions we synthesize it here */
muted_set = muted_set || muted;
- s = playback_stream_new(c, sink, &ss, &map, &attr, volume_set ? &volume : NULL, muted, muted_set, syncid, &missing, flags, p, adjust_latency, early_requests, &ret);
+ s = playback_stream_new(c, sink, &ss, &map, &attr, volume_set ? &volume : NULL, muted, muted_set, syncid, &missing, flags, p, adjust_latency, early_requests, relative_volume, &ret);
pa_proplist_free(p);
CHECK_VALIDITY(c->pstream, s, tag, ret);
commit 2edb4df175ee69e386ec3923e69af6899f55e2eb
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Oct 29 01:49:40 2009 +0100
smoother: add comments about optimization recommendations from Jason Newton
diff --git a/src/pulsecore/time-smoother.c b/src/pulsecore/time-smoother.c
index d6c3787..1371ad5 100644
--- a/src/pulsecore/time-smoother.c
+++ b/src/pulsecore/time-smoother.c
@@ -196,6 +196,13 @@ static double avg_gradient(pa_smoother *s, pa_usec_t x) {
int64_t ax = 0, ay = 0, k, t;
double r;
+ /* FIXME: Optimization: Jason Newton suggested that instead of
+ * going through the history on each iteration we could calculated
+ * avg_gradient() as we go.
+ *
+ * Second idea: it might make sense to weight history entries:
+ * more recent entries should matter more than old ones. */
+
/* Too few measurements, assume gradient of 1 */
if (s->n_history < s->min_history)
return 1;
commit e7e4e4459e6dad888d1f9a01d0b185221e1a120e
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Oct 29 01:52:39 2009 +0100
simd: update test cases
diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c
index 745c7de..5bf72ed 100644
--- a/src/pulsecore/svolume_mmx.c
+++ b/src/pulsecore/svolume_mmx.c
@@ -25,6 +25,8 @@
#endif
#include <pulse/timeval.h>
+#include <pulse/rtclock.h>
+
#include <pulsecore/random.h>
#include <pulsecore/macro.h>
#include <pulsecore/g711.h>
@@ -287,6 +289,8 @@ static void run_test (void) {
}
stop = pa_rtclock_now();
pa_log_info("ref: %llu usec.", (long long unsigned int)(stop - start));
+
+ pa_assert_se(memcmp(samples_ref, samples, sizeof(samples)) == 0);
}
#endif
diff --git a/src/pulsecore/svolume_sse.c b/src/pulsecore/svolume_sse.c
index 1cc4e0a..620524f 100644
--- a/src/pulsecore/svolume_sse.c
+++ b/src/pulsecore/svolume_sse.c
@@ -25,6 +25,8 @@
#endif
#include <pulse/timeval.h>
+#include <pulse/rtclock.h>
+
#include <pulsecore/random.h>
#include <pulsecore/macro.h>
#include <pulsecore/g711.h>
@@ -261,7 +263,7 @@ static void run_test (void) {
func = pa_get_volume_func (PA_SAMPLE_S16NE);
- printf ("checking SSE %zd\n", sizeof (samples));
+ printf ("checking SSE2 %zd\n", sizeof (samples));
pa_random (samples, sizeof (samples));
memcpy (samples_ref, samples, sizeof (samples));
@@ -273,7 +275,7 @@ static void run_test (void) {
volumes[i] = volumes[padding];
func (samples_ref, volumes, CHANNELS, sizeof (samples));
- pa_volume_s16ne_sse (samples, volumes, CHANNELS, sizeof (samples));
+ pa_volume_s16ne_sse2 (samples, volumes, CHANNELS, sizeof (samples));
for (i = 0; i < SAMPLES; i++) {
if (samples[i] != samples_ref[i]) {
printf ("%d: %04x != %04x (%04x * %04x)\n", i, samples[i], samples_ref[i],
@@ -284,7 +286,7 @@ static void run_test (void) {
start = pa_rtclock_now();
for (j = 0; j < TIMES; j++) {
memcpy (samples, samples_orig, sizeof (samples));
- pa_volume_s16ne_sse (samples, volumes, CHANNELS, sizeof (samples));
+ pa_volume_s16ne_sse2 (samples, volumes, CHANNELS, sizeof (samples));
}
stop = pa_rtclock_now();
pa_log_info("SSE: %llu usec.", (long long unsigned int)(stop - start));
@@ -296,6 +298,8 @@ static void run_test (void) {
}
stop = pa_rtclock_now();
pa_log_info("ref: %llu usec.", (long long unsigned int)(stop - start));
+
+ pa_assert_se(memcmp(samples_ref, samples, sizeof(samples)) == 0);
}
#endif
#endif /* defined (__i386__) || defined (__amd64__) */
commit 754644fa6e1ec83dba85bf586a2b09c2283aa096
Merge: e7e4e44 e9ccc61
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Oct 29 01:54:45 2009 +0100
Merge remote branch 'origin/master'
commit 5c82dd67d05ab12cd74e8d034b89a9bc326f0548
Author: Jason Newton <nevion at gmail.com>
Date: Fri Oct 23 17:06:30 2009 -0700
drop redundant alloc call
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 814a00f..6c060d3 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -571,7 +571,6 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
}else{
//allocate request_size + overlap
target_samples += u->overlap_size;
- alloc_input_buffers(u, target_samples);
}
alloc_input_buffers(u, target_samples);
chunk->memblock = NULL;
commit ebaca56a752f599e10c1a60852c8988c6f2f866c
Author: Jason Newton <nevion at gmail.com>
Date: Mon Oct 26 14:55:11 2009 -0700
module-equalizer-sink: try to limit buffering to mempool's max_block_size and disable debug output
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 6c060d3..ec36160 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -556,15 +556,22 @@ static void input_buffer(struct userdata *u, pa_memchunk *in){
/* Called from I/O thread context */
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
- size_t fs, target_samples;
- struct timeval start, end;
+ size_t fs, target_samples, mbs;
+ //struct timeval start, end;
pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
pa_assert_se(u = i->userdata);
pa_assert(chunk);
pa_assert(u->sink);
fs = pa_frame_size(&(u->sink->sample_spec));
+ nbytes = PA_MIN(nbytes, pa_mempool_block_size_max(u->sink->core->mempool));
target_samples = PA_ROUND_UP(nbytes / fs, u->R);
+ mbs = pa_mempool_block_size_max(u->sink->core->mempool);
+ //pa_log_debug("vanilla mbs = %ld",mbs);
+ mbs = PA_ROUND_DOWN(mbs / fs, u->R);
+ mbs = PA_MAX(mbs, u->R);
+ target_samples = PA_MAX(target_samples, mbs);
+ //pa_log_debug("target samples: %ld", target_samples);
if(u->first_iteration){
//allocate request_size
target_samples = PA_MAX(target_samples, u->window_size);
@@ -573,15 +580,17 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
target_samples += u->overlap_size;
}
alloc_input_buffers(u, target_samples);
+ //pa_log_debug("post target samples: %ld", target_samples);
chunk->memblock = NULL;
/* Hmm, process any rewind request that might be queued up */
pa_sink_process_rewind(u->sink, 0);
//pa_log_debug("start output-buffered %ld, input-buffered %ld, requested %ld",buffered_samples,u->samples_gathered,samples_requested);
- pa_rtclock_get(&start);
+ //pa_rtclock_get(&start);
do{
size_t input_remaining = target_samples - u->samples_gathered;
+ // pa_log_debug("input remaining %ld samples", input_remaining);
pa_assert(input_remaining > 0);
while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
//pa_sink_render(u->sink, input_remaining * fs, &tchunk);
@@ -596,23 +605,23 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
//pa_log_debug("asked for %ld input samples, got %ld samples",input_remaining,buffer->length/fs);
/* copy new input */
//pa_rtclock_get(start);
+ // pa_log_debug("buffering %ld bytes", tchunk.length);
input_buffer(u, &tchunk);
//pa_rtclock_get(&end);
//pa_log_debug("Took %0.5f seconds to setup", pa_timeval_diff(end, start) / (double) PA_USEC_PER_SEC);
pa_memblock_unref(tchunk.memblock);
}while(u->samples_gathered < target_samples);
- pa_rtclock_get(&end);
- pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
+ //pa_rtclock_get(&end);
+ //pa_log_debug("Took %0.6f seconds to get data", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
pa_assert(u->fft_size >= u->window_size);
pa_assert(u->R < u->window_size);
- /* set the H filter */
- pa_rtclock_get(&start);
+ //pa_rtclock_get(&start);
/* process a block */
process_samples(u, chunk);
- pa_rtclock_get(&end);
- pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
+ //pa_rtclock_get(&end);
+ //pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
pa_assert(chunk->memblock);
//pa_log_debug("gave %ld", chunk->length/fs);
commit d83dd5ba13bae800750a408f7f0e8654d7f27bd0
Author: Jason Newton <nevion at gmail.com>
Date: Thu Oct 29 19:10:16 2009 -0700
module-equalizer-sink:
add premultipliar to sse2 dsp_logic implementation
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index ec36160..7c0ccd3 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -412,7 +412,8 @@ static void dsp_logic(
fftwf_complex * restrict output_window,//The transformed window'd src
struct userdata *u){//Collection of constants
const size_t overlap_size = PA_ROUND_UP(u->overlap_size, v_size);
-
+ float_vector_t x;
+ x.f[0] = x.f[1] = x.f[2] = x.f[3] = X;
//assert(u->samples_gathered >= u->R);
//use a linear-phase sliding STFT and overlap-add method
@@ -422,9 +423,8 @@ static void dsp_logic(
float_vector_t *w = (float_vector_t*) (W + j);
float_vector_t *s = (float_vector_t*) (src + j);
//#if __SSE2__
- d->m = _mm_mul_ps(w->m, s->m);
-//#else
-// d->v = w->v * s->v;
+ d->m = _mm_mul_ps(x.m, _mm_mul_ps(w->m, s->m));
+// d->v = x->v * w->v * s->v;
//#endif
}
//zero padd the the remaining fft window
commit 9c1a98953f25aff7f11af80a073c9c46dee2438c
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 03:30:42 2009 +0100
core-util: introduce FD_CLOEXEC wrappers for open/socket/pipe/accept
diff --git a/configure.ac b/configure.ac
index d7f55ac..1022a6e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -445,7 +445,7 @@ AC_CHECK_FUNCS_ONCE([lstat])
# Non-standard
-AC_CHECK_FUNCS_ONCE([setresuid setresgid setreuid setregid seteuid setegid ppoll strsignal sig2str strtof_l])
+AC_CHECK_FUNCS_ONCE([setresuid setresgid setreuid setregid seteuid setegid ppoll strsignal sig2str strtof_l pipe2 accept4])
AC_FUNC_ALLOCA
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 27e09cb..34516ee 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2889,3 +2889,82 @@ const char *pa_get_temp_dir(void) {
return "/tmp";
}
+
+int pa_open_cloexec(const char *fn, int flags, mode_t mode) {
+ int fd;
+
+#ifdef O_NOCTTY
+ flags |= O_NOCTTY;
+#endif
+
+#ifdef O_CLOEXEC
+ if ((fd = open(fn, flags|O_CLOEXEC, mode)) >= 0)
+ return fd;
+
+ if (errno != EINVAL)
+ return fd;
+#endif
+
+ if ((fd = open(fn, flags, mode)) < 0)
+ return fd;
+
+ pa_make_fd_cloexec(fd);
+ return fd;
+}
+
+int pa_socket_cloexec(int domain, int type, int protocol) {
+ int fd;
+
+#ifdef SOCK_CLOEXEC
+ if ((fd = socket(domain, type | SOCK_CLOEXEC, protocol)) >= 0)
+ return fd;
+
+ if (errno != EINVAL)
+ return fd;
+#endif
+
+ if ((fd = socket(domain, type, protocol)) < 0)
+ return fd;
+
+ pa_make_fd_cloexec(fd);
+ return fd;
+}
+
+int pa_pipe_cloexec(int pipefd[2]) {
+ int r;
+
+#ifdef HAVE_PIPE2
+ if ((r = pipe2(pipefd, O_CLOEXEC)) >= 0)
+ return r;
+
+ if (errno != EINVAL && errno != ENOSYS)
+ return r;
+#endif
+
+ if ((r = pipe(pipefd)) < 0)
+ return r;
+
+ pa_make_fd_cloexec(pipefd[0]);
+ pa_make_fd_cloexec(pipefd[1]);
+
+ return 0;
+}
+
+int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
+ int fd;
+
+#ifdef HAVE_ACCEPT4
+ if ((fd = accept4(sockfd, addr, addrlen, SOCK_CLOEXEC)) >= 0)
+ return fd;
+
+ if (errno != EINVAL && errno != ENOSYS)
+ return fd;
+#endif
+
+ if ((fd = accept(sockfd, addr, addrlen)) < 0)
+ return fd;
+
+ pa_make_fd_cloexec(fd);
+
+ return 0;
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 9986b14..323fdcb 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -28,6 +28,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
+#include <sys/socket.h>
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
@@ -258,4 +259,9 @@ pa_bool_t pa_run_from_build_tree(void);
const char *pa_get_temp_dir(void);
+int pa_open_cloexec(const char *fn, int flags, mode_t mode);
+int pa_socket_cloexec(int domain, int type, int protocol);
+int pa_pipe_cloexec(int pipefd[2]);
+int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+
#endif
commit 65e7bc18a9a7b89e55b87a74ae47d45269b51847
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 03:32:38 2009 +0100
use cloexec wrappers wherever applicable
diff --git a/src/daemon/cpulimit.c b/src/daemon/cpulimit.c
index c2877ec..f5042a7 100644
--- a/src/daemon/cpulimit.c
+++ b/src/daemon/cpulimit.c
@@ -188,15 +188,13 @@ int pa_cpu_limit_init(pa_mainloop_api *m) {
last_time = pa_rtclock_now();
/* Prepare the main loop pipe */
- if (pipe(the_pipe) < 0) {
+ if (pa_pipe_cloexec(the_pipe) < 0) {
pa_log("pipe() failed: %s", pa_cstrerror(errno));
return -1;
}
pa_make_fd_nonblock(the_pipe[0]);
pa_make_fd_nonblock(the_pipe[1]);
- pa_make_fd_cloexec(the_pipe[0]);
- pa_make_fd_cloexec(the_pipe[1]);
api = m;
io_event = api->io_new(m, the_pipe[0], PA_IO_EVENT_INPUT, callback, NULL);
diff --git a/src/modules/module-mmkbd-evdev.c b/src/modules/module-mmkbd-evdev.c
index 516bf41..14a9dd3 100644
--- a/src/modules/module-mmkbd-evdev.c
+++ b/src/modules/module-mmkbd-evdev.c
@@ -175,7 +175,7 @@ int pa__init(pa_module*m) {
u->fd = -1;
u->fd_type = 0;
- if ((u->fd = open(pa_modargs_get_value(ma, "device", DEFAULT_DEVICE), O_RDONLY|O_NOCTTY)) < 0) {
+ if ((u->fd = pa_open_cloexec(pa_modargs_get_value(ma, "device", DEFAULT_DEVICE), O_RDONLY, 0)) < 0) {
pa_log("Failed to open evdev device: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c
index 9c16932..10cc341 100644
--- a/src/modules/module-pipe-sink.c
+++ b/src/modules/module-pipe-sink.c
@@ -253,12 +253,11 @@ int pa__init(pa_module*m) {
u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME));
mkfifo(u->filename, 0666);
- if ((u->fd = open(u->filename, O_RDWR|O_NOCTTY)) < 0) {
+ if ((u->fd = pa_open_cloexec(u->filename, O_RDWR, 0)) < 0) {
pa_log("open('%s'): %s", u->filename, pa_cstrerror(errno));
goto fail;
}
- pa_make_fd_cloexec(u->fd);
pa_make_fd_nonblock(u->fd);
if (fstat(u->fd, &st) < 0) {
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index 49104f8..de68093 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -238,12 +238,11 @@ int pa__init(pa_module*m) {
u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME));
mkfifo(u->filename, 0666);
- if ((u->fd = open(u->filename, O_RDWR|O_NOCTTY)) < 0) {
+ if ((u->fd = pa_open_cloexec(u->filename, O_RDWR, 0)) < 0) {
pa_log("open('%s'): %s", u->filename, pa_cstrerror(errno));
goto fail;
}
- pa_make_fd_cloexec(u->fd);
pa_make_fd_nonblock(u->fd);
if (fstat(u->fd, &st) < 0) {
diff --git a/src/modules/module-solaris.c b/src/modules/module-solaris.c
index b0d4db4..955997b 100644
--- a/src/modules/module-solaris.c
+++ b/src/modules/module-solaris.c
@@ -327,7 +327,7 @@ static int open_audio_device(struct userdata *u, pa_sample_spec *ss) {
pa_assert(u);
pa_assert(ss);
- if ((u->fd = open(u->device_name, u->mode | O_NONBLOCK)) < 0) {
+ if ((u->fd = pa_open_cloexec(u->device_name, u->mode | O_NONBLOCK)) < 0) {
pa_log_warn("open %s failed (%s)", u->device_name, pa_cstrerror(errno));
return -1;
}
diff --git a/src/modules/oss/oss-util.c b/src/modules/oss/oss-util.c
index 5a109ae..41af3ba 100644
--- a/src/modules/oss/oss-util.c
+++ b/src/modules/oss/oss-util.c
@@ -55,7 +55,7 @@ int pa_oss_open(const char *device, int *mode, int* pcaps) {
pcaps = ∩︀
if (*mode == O_RDWR) {
- if ((fd = open(device, O_RDWR|O_NDELAY|O_NOCTTY)) >= 0) {
+ if ((fd = pa_open_cloexec(device, O_RDWR|O_NDELAY, 0)) >= 0) {
ioctl(fd, SNDCTL_DSP_SETDUPLEX, 0);
if (ioctl(fd, SNDCTL_DSP_GETCAPS, pcaps) < 0) {
@@ -71,14 +71,14 @@ int pa_oss_open(const char *device, int *mode, int* pcaps) {
pa_close(fd);
}
- if ((fd = open(device, (*mode = O_WRONLY)|O_NDELAY|O_NOCTTY)) < 0) {
- if ((fd = open(device, (*mode = O_RDONLY)|O_NDELAY|O_NOCTTY)) < 0) {
+ if ((fd = pa_open_cloexec(device, (*mode = O_WRONLY)|O_NDELAY, 0)) < 0) {
+ if ((fd = pa_open_cloexec(device, (*mode = O_RDONLY)|O_NDELAY, 0)) < 0) {
pa_log("open('%s'): %s", device, pa_cstrerror(errno));
goto fail;
}
}
} else {
- if ((fd = open(device, *mode|O_NDELAY|O_NOCTTY)) < 0) {
+ if ((fd = pa_open_cloexec(device, *mode|O_NDELAY, 0)) < 0) {
pa_log("open('%s'): %s", device, pa_cstrerror(errno));
goto fail;
}
@@ -145,8 +145,6 @@ success:
pa_log_debug("capabilities:%s", t);
pa_xfree(t);
- pa_make_fd_cloexec(fd);
-
return fd;
fail:
@@ -403,7 +401,7 @@ int pa_oss_get_hw_description(const char *dev, char *name, size_t l) {
static int open_mixer(const char *mixer) {
int fd;
- if ((fd = open(mixer, O_RDWR|O_NDELAY|O_NOCTTY)) >= 0)
+ if ((fd = pa_open_cloexec(mixer, O_RDWR|O_NDELAY, 0)) >= 0)
return fd;
return -1;
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index 1a05f57..7dbb1ef 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -390,7 +390,7 @@ static int mcast_socket(const struct sockaddr* sa, socklen_t salen) {
pa_assert(salen > 0);
af = sa->sa_family;
- if ((fd = socket(af, SOCK_DGRAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(af, SOCK_DGRAM, 0)) < 0) {
pa_log("Failed to create socket: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/rtp/module-rtp-send.c b/src/modules/rtp/module-rtp-send.c
index 8e1cfe3..ab81522 100644
--- a/src/modules/rtp/module-rtp-send.c
+++ b/src/modules/rtp/module-rtp-send.c
@@ -262,7 +262,7 @@ int pa__init(pa_module*m) {
goto fail;
}
- if ((fd = socket(af, SOCK_DGRAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(af, SOCK_DGRAM, 0)) < 0) {
pa_log("socket() failed: %s", pa_cstrerror(errno));
goto fail;
}
@@ -277,7 +277,7 @@ int pa__init(pa_module*m) {
#endif
}
- if ((sap_fd = socket(af, SOCK_DGRAM, 0)) < 0) {
+ if ((sap_fd = pa_socket_cloexec(af, SOCK_DGRAM, 0)) < 0) {
pa_log("socket() failed: %s", pa_cstrerror(errno));
goto fail;
}
@@ -316,8 +316,6 @@ int pa__init(pa_module*m) {
/* If the socket queue is full, let's drop packets */
pa_make_fd_nonblock(fd);
pa_make_udp_socket_low_delay(fd);
- pa_make_fd_cloexec(fd);
- pa_make_fd_cloexec(sap_fd);
pa_source_output_new_data_init(&data);
pa_proplist_sets(data.proplist, PA_PROP_MEDIA_NAME, "RTP Monitor Stream");
diff --git a/src/pulse/mainloop-signal.c b/src/pulse/mainloop-signal.c
index 3dc7439..70c0122 100644
--- a/src/pulse/mainloop-signal.c
+++ b/src/pulse/mainloop-signal.c
@@ -124,15 +124,13 @@ int pa_signal_init(pa_mainloop_api *a) {
pa_assert(signal_pipe[1] == -1);
pa_assert(!io_event);
- if (pipe(signal_pipe) < 0) {
+ if (pa_pipe_cloexec(signal_pipe) < 0) {
pa_log("pipe(): %s", pa_cstrerror(errno));
return -1;
}
pa_make_fd_nonblock(signal_pipe[0]);
pa_make_fd_nonblock(signal_pipe[1]);
- pa_make_fd_cloexec(signal_pipe[0]);
- pa_make_fd_cloexec(signal_pipe[1]);
api = a;
diff --git a/src/pulse/mainloop.c b/src/pulse/mainloop.c
index 090ac8c..6cd089e 100644
--- a/src/pulse/mainloop.c
+++ b/src/pulse/mainloop.c
@@ -482,7 +482,7 @@ pa_mainloop *pa_mainloop_new(void) {
m = pa_xnew0(pa_mainloop, 1);
- if (pipe(m->wakeup_pipe) < 0) {
+ if (pa_pipe_cloexec(m->wakeup_pipe) < 0) {
pa_log_error("ERROR: cannot create wakeup pipe");
pa_xfree(m);
return NULL;
@@ -490,8 +490,6 @@ pa_mainloop *pa_mainloop_new(void) {
pa_make_fd_nonblock(m->wakeup_pipe[0]);
pa_make_fd_nonblock(m->wakeup_pipe[1]);
- pa_make_fd_cloexec(m->wakeup_pipe[0]);
- pa_make_fd_cloexec(m->wakeup_pipe[1]);
m->rebuild_pollfds = TRUE;
diff --git a/src/pulsecore/authkey.c b/src/pulsecore/authkey.c
index 15613e2..d671e36 100644
--- a/src/pulsecore/authkey.c
+++ b/src/pulsecore/authkey.c
@@ -70,10 +70,6 @@ static int generate(int fd, void *ret_data, size_t length) {
#define O_BINARY 0
#endif
-#ifndef O_NOCTTY
-#define O_NOCTTY 0
-#endif
-
/* Load an euthorization cookie from file fn and store it in data. If
* the cookie file doesn't exist, create it */
static int load(const char *fn, void *data, size_t length) {
@@ -86,9 +82,9 @@ static int load(const char *fn, void *data, size_t length) {
pa_assert(data);
pa_assert(length > 0);
- if ((fd = open(fn, O_RDWR|O_CREAT|O_BINARY|O_NOCTTY, S_IRUSR|S_IWUSR)) < 0) {
+ if ((fd = pa_open_cloexec(fn, O_RDWR|O_CREAT|O_BINARY, S_IRUSR|S_IWUSR)) < 0) {
- if (errno != EACCES || (fd = open(fn, O_RDONLY|O_BINARY|O_NOCTTY)) < 0) {
+ if (errno != EACCES || (fd = open(fn, O_RDONLY|O_BINARY)) < 0) {
pa_log_warn("Failed to open cookie file '%s': %s", fn, pa_cstrerror(errno));
goto finish;
} else
@@ -204,7 +200,7 @@ int pa_authkey_save(const char *fn, const void *data, size_t length) {
if (!(p = normalize_path(fn)))
return -2;
- if ((fd = open(p, O_RDWR|O_CREAT|O_NOCTTY, S_IRUSR|S_IWUSR)) < 0) {
+ if ((fd = pa_open_cloexec(p, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR)) < 0) {
pa_log_warn("Failed to open cookie file '%s': %s", fn, pa_cstrerror(errno));
goto finish;
}
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 34516ee..19e1296 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1200,10 +1200,7 @@ int pa_lock_lockfile(const char *fn) {
for (;;) {
struct stat st;
- if ((fd = open(fn, O_CREAT|O_RDWR
-#ifdef O_NOCTTY
- |O_NOCTTY
-#endif
+ if ((fd = pa_open_cloexec(fn, O_CREAT|O_RDWR
#ifdef O_NOFOLLOW
|O_NOFOLLOW
#endif
diff --git a/src/pulsecore/cpu-arm.c b/src/pulsecore/cpu-arm.c
index 453b784..6bb2ead 100644
--- a/src/pulsecore/cpu-arm.c
+++ b/src/pulsecore/cpu-arm.c
@@ -62,7 +62,7 @@ static char *get_cpuinfo(void) {
cpuinfo = pa_xmalloc(MAX_BUFFER);
- if ((fd = open("/proc/cpuinfo", O_RDONLY)) < 0) {
+ if ((fd = pa_open_cloexec("/proc/cpuinfo", O_RDONLY, 0)) < 0) {
pa_xfree(cpuinfo);
return NULL;
}
diff --git a/src/pulsecore/fdsem.c b/src/pulsecore/fdsem.c
index 380f34f..ea14e8a 100644
--- a/src/pulsecore/fdsem.c
+++ b/src/pulsecore/fdsem.c
@@ -62,19 +62,15 @@ pa_fdsem *pa_fdsem_new(void) {
f = pa_xmalloc(PA_ALIGN(sizeof(pa_fdsem)) + PA_ALIGN(sizeof(pa_fdsem_data)));
#ifdef HAVE_SYS_EVENTFD_H
- if ((f->efd = eventfd(0, 0)) >= 0) {
- pa_make_fd_cloexec(f->efd);
+ if ((f->efd = eventfd(0, EFD_CLOEXEC)) >= 0)
f->fds[0] = f->fds[1] = -1;
- } else
+ else
#endif
{
- if (pipe(f->fds) < 0) {
+ if (pa_pipe_cloexec(f->fds) < 0) {
pa_xfree(f);
return NULL;
}
-
- pa_make_fd_cloexec(f->fds[0]);
- pa_make_fd_cloexec(f->fds[1]);
}
f->data = (pa_fdsem_data*) ((uint8_t*) f + PA_ALIGN(sizeof(pa_fdsem)));
@@ -114,12 +110,11 @@ pa_fdsem *pa_fdsem_new_shm(pa_fdsem_data *data, int* event_fd) {
f = pa_xnew(pa_fdsem, 1);
- if ((f->efd = eventfd(0, 0)) < 0) {
+ if ((f->efd = eventfd(0, EFD_CLOEXEC)) < 0) {
pa_xfree(f);
return NULL;
}
- pa_make_fd_cloexec(f->efd);
f->fds[0] = f->fds[1] = -1;
f->data = data;
diff --git a/src/pulsecore/lock-autospawn.c b/src/pulsecore/lock-autospawn.c
index c0df793..65e3563 100644
--- a/src/pulsecore/lock-autospawn.c
+++ b/src/pulsecore/lock-autospawn.c
@@ -87,12 +87,9 @@ static int ref(void) {
pa_assert(pipe_fd[0] < 0);
pa_assert(pipe_fd[1] < 0);
- if (pipe(pipe_fd) < 0)
+ if (pa_pipe_cloexec(pipe_fd) < 0)
return -1;
- pa_make_fd_cloexec(pipe_fd[0]);
- pa_make_fd_cloexec(pipe_fd[1]);
-
pa_make_fd_nonblock(pipe_fd[1]);
pa_make_fd_nonblock(pipe_fd[0]);
diff --git a/src/pulsecore/pid.c b/src/pulsecore/pid.c
index 996946c..c92e831 100644
--- a/src/pulsecore/pid.c
+++ b/src/pulsecore/pid.c
@@ -88,10 +88,7 @@ static int open_pid_file(const char *fn, int mode) {
for (;;) {
struct stat st;
- if ((fd = open(fn, mode
-#ifdef O_NOCTTY
- |O_NOCTTY
-#endif
+ if ((fd = pa_open_cloexec(fn, mode
#ifdef O_NOFOLLOW
|O_NOFOLLOW
#endif
diff --git a/src/pulsecore/random.c b/src/pulsecore/random.c
index 518c281..a87d24e 100644
--- a/src/pulsecore/random.c
+++ b/src/pulsecore/random.c
@@ -62,11 +62,7 @@ static int random_proper(void *ret_data, size_t length) {
while (*device) {
ret = 0;
- if ((fd = open(*device, O_RDONLY
-#ifdef O_NOCTTY
- | O_NOCTTY
-#endif
- )) >= 0) {
+ if ((fd = pa_open_cloexec(*device, O_RDONLY, 0)) >= 0) {
if ((r = pa_loop_read(fd, ret_data, length, NULL)) < 0 || (size_t) r != length)
ret = -1;
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index bda92fc..221b569 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1342,7 +1342,7 @@ static void propagate_reference_volume(pa_sink *s) {
void pa_sink_set_volume(
pa_sink *s,
const pa_cvolume *volume,
- pa_bool_t sendmsg,
+ pa_bool_t send_msg,
pa_bool_t save) {
pa_cvolume old_reference_volume;
@@ -1411,7 +1411,7 @@ void pa_sink_set_volume(
s->soft_volume = s->real_volume;
/* This tells the sink that soft and/or virtual volume changed */
- if (sendmsg)
+ if (send_msg)
pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_SET_VOLUME, NULL, 0, NULL) == 0);
if (reference_changed)
diff --git a/src/pulsecore/socket-client.c b/src/pulsecore/socket-client.c
index b9d6950..ef3c29e 100644
--- a/src/pulsecore/socket-client.c
+++ b/src/pulsecore/socket-client.c
@@ -257,13 +257,11 @@ static int sockaddr_prepare(pa_socket_client *c, const struct sockaddr *sa, size
c->local = pa_socket_address_is_local(sa);
- if ((c->fd = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) {
+ if ((c->fd = pa_socket_cloexec(sa->sa_family, SOCK_STREAM, 0)) < 0) {
pa_log("socket(): %s", pa_cstrerror(errno));
return -1;
}
- pa_make_fd_cloexec(c->fd);
-
#ifdef HAVE_IPV6
if (sa->sa_family == AF_INET || sa->sa_family == AF_INET6)
#else
diff --git a/src/pulsecore/socket-server.c b/src/pulsecore/socket-server.c
index e660700..5d55de3 100644
--- a/src/pulsecore/socket-server.c
+++ b/src/pulsecore/socket-server.c
@@ -104,13 +104,11 @@ static void callback(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io_ev
pa_socket_server_ref(s);
- if ((nfd = accept(fd, NULL, NULL)) < 0) {
+ if ((nfd = pa_accept_cloexec(fd, NULL, NULL)) < 0) {
pa_log("accept(): %s", pa_cstrerror(errno));
goto finish;
}
- pa_make_fd_cloexec(nfd);
-
if (!s->on_connection) {
pa_close(nfd);
goto finish;
@@ -186,13 +184,11 @@ pa_socket_server* pa_socket_server_new_unix(pa_mainloop_api *m, const char *file
pa_assert(m);
pa_assert(filename);
- if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(PF_UNIX, SOCK_STREAM, 0)) < 0) {
pa_log("socket(): %s", pa_cstrerror(errno));
goto fail;
}
- pa_make_fd_cloexec(fd);
-
memset(&sa, 0, sizeof(sa));
sa.sun_family = AF_UNIX;
pa_strlcpy(sa.sun_path, filename, sizeof(sa.sun_path));
@@ -246,13 +242,11 @@ pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address
pa_assert(m);
pa_assert(port);
- if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(PF_INET, SOCK_STREAM, 0)) < 0) {
pa_log("socket(PF_INET): %s", pa_cstrerror(errno));
goto fail;
}
- pa_make_fd_cloexec(fd);
-
#ifdef SO_REUSEADDR
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0)
pa_log("setsockopt(): %s", pa_cstrerror(errno));
@@ -299,13 +293,11 @@ pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t ad
pa_assert(m);
pa_assert(port > 0);
- if ((fd = socket(PF_INET6, SOCK_STREAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(PF_INET6, SOCK_STREAM, 0)) < 0) {
pa_log("socket(PF_INET6): %s", pa_cstrerror(errno));
goto fail;
}
- pa_make_fd_cloexec(fd);
-
#ifdef IPV6_V6ONLY
on = 1;
if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) < 0)
diff --git a/src/pulsecore/socket-util.c b/src/pulsecore/socket-util.c
index 5fd5dd6..651779f 100644
--- a/src/pulsecore/socket-util.c
+++ b/src/pulsecore/socket-util.c
@@ -239,7 +239,7 @@ int pa_unix_socket_is_stale(const char *fn) {
pa_assert(fn);
- if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(PF_UNIX, SOCK_STREAM, 0)) < 0) {
pa_log("socket(): %s", pa_cstrerror(errno));
goto finish;
}
diff --git a/src/pulsecore/sound-file-stream.c b/src/pulsecore/sound-file-stream.c
index 16de492..53674ba 100644
--- a/src/pulsecore/sound-file-stream.c
+++ b/src/pulsecore/sound-file-stream.c
@@ -252,11 +252,7 @@ int pa_play_file(
u->readf_function = NULL;
u->memblockq = NULL;
- if ((fd = open(fname, O_RDONLY
-#ifdef O_NOCTTY
- |O_NOCTTY
-#endif
- )) < 0) {
+ if ((fd = pa_open_cloexec(fname, O_RDONLY, 0)) < 0) {
pa_log("Failed to open file %s: %s", fname, pa_cstrerror(errno));
goto fail;
}
diff --git a/src/pulsecore/sound-file.c b/src/pulsecore/sound-file.c
index 2d9b76a..d8c10b1 100644
--- a/src/pulsecore/sound-file.c
+++ b/src/pulsecore/sound-file.c
@@ -62,11 +62,7 @@ int pa_sound_file_load(
pa_memchunk_reset(chunk);
- if ((fd = open(fname, O_RDONLY
-#ifdef O_NOCTTY
- |O_NOCTTY
-#endif
- )) < 0) {
+ if ((fd = pa_open_cloexec(fname, O_RDONLY, 0)) < 0) {
pa_log("Failed to open file %s: %s", fname, pa_cstrerror(errno));
goto finish;
}
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index 5f29ba3..d348c16 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -906,7 +906,7 @@ int main(int argc, char *argv[]) {
filename = argv[optind];
- if ((fd = open(argv[optind], mode == PLAYBACK ? O_RDONLY : O_WRONLY|O_TRUNC|O_CREAT, 0666)) < 0) {
+ if ((fd = pa_open_cloexec(argv[optind], mode == PLAYBACK ? O_RDONLY : O_WRONLY|O_TRUNC|O_CREAT, 0666)) < 0) {
pa_log(_("open(): %s"), strerror(errno));
goto quit;
}
diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c
index 5ef57e3..ef58e9c 100644
--- a/src/utils/pacmd.c
+++ b/src/utils/pacmd.c
@@ -70,7 +70,7 @@ int main(int argc, char*argv[]) {
goto fail;
}
- if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
+ if ((fd = pa_socket_cloexec(PF_UNIX, SOCK_STREAM, 0)) < 0) {
pa_log(_("socket(PF_UNIX, SOCK_STREAM, 0): %s"), strerror(errno));
goto fail;
}
commit a698ee3f52e9d61b378cb0dad2cfb1bcc31c708a
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 04:16:59 2009 +0100
core-util: make sure to enable FD_CLOEXEC unconditionally to cope with kernels that silently accept but ignore O_CLOEXEC
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 19e1296..a199daa 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2896,7 +2896,7 @@ int pa_open_cloexec(const char *fn, int flags, mode_t mode) {
#ifdef O_CLOEXEC
if ((fd = open(fn, flags|O_CLOEXEC, mode)) >= 0)
- return fd;
+ goto finish;
if (errno != EINVAL)
return fd;
@@ -2905,6 +2905,10 @@ int pa_open_cloexec(const char *fn, int flags, mode_t mode) {
if ((fd = open(fn, flags, mode)) < 0)
return fd;
+finish:
+ /* Some implementations might simply ignore O_CLOEXEC if it is not
+ * understood, make sure FD_CLOEXEC is enabled anyway */
+
pa_make_fd_cloexec(fd);
return fd;
}
@@ -2914,7 +2918,7 @@ int pa_socket_cloexec(int domain, int type, int protocol) {
#ifdef SOCK_CLOEXEC
if ((fd = socket(domain, type | SOCK_CLOEXEC, protocol)) >= 0)
- return fd;
+ goto finish;
if (errno != EINVAL)
return fd;
@@ -2923,6 +2927,10 @@ int pa_socket_cloexec(int domain, int type, int protocol) {
if ((fd = socket(domain, type, protocol)) < 0)
return fd;
+finish:
+ /* Some implementations might simply ignore SOCK_CLOEXEC if it is
+ * not understood, make sure FD_CLOEXEC is enabled anyway */
+
pa_make_fd_cloexec(fd);
return fd;
}
@@ -2932,7 +2940,7 @@ int pa_pipe_cloexec(int pipefd[2]) {
#ifdef HAVE_PIPE2
if ((r = pipe2(pipefd, O_CLOEXEC)) >= 0)
- return r;
+ goto finish;
if (errno != EINVAL && errno != ENOSYS)
return r;
@@ -2941,6 +2949,7 @@ int pa_pipe_cloexec(int pipefd[2]) {
if ((r = pipe(pipefd)) < 0)
return r;
+finish:
pa_make_fd_cloexec(pipefd[0]);
pa_make_fd_cloexec(pipefd[1]);
commit 752727a13d2d55439aefe618677f7e932acc9862
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 04:20:24 2009 +0100
core-util: introduce pa_fopen_cloexec()
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index a199daa..40da8f4 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2961,7 +2961,7 @@ int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
#ifdef HAVE_ACCEPT4
if ((fd = accept4(sockfd, addr, addrlen, SOCK_CLOEXEC)) >= 0)
- return fd;
+ goto finish;
if (errno != EINVAL && errno != ENOSYS)
return fd;
@@ -2970,7 +2970,32 @@ int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
if ((fd = accept(sockfd, addr, addrlen)) < 0)
return fd;
+finish:
pa_make_fd_cloexec(fd);
+ return fd;
+}
- return 0;
+FILE* pa_fopen_cloexec(const char *path, const char *mode) {
+ FILE *f;
+ char *m;
+
+ m = pa_sprintf_malloc("%se", mode);
+
+ errno = 0;
+ if ((f = fopen(path, m))) {
+ pa_xfree(m);
+ goto finish;
+ }
+
+ pa_xfree(m);
+
+ if (errno != EINVAL)
+ return NULL;
+
+ if (!(f = fopen(path, mode)))
+ return NULL;
+
+finish:
+ pa_make_fd_cloexec(fileno(f));
+ return f;
}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 323fdcb..d50f79a 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -263,5 +263,6 @@ int pa_open_cloexec(const char *fn, int flags, mode_t mode);
int pa_socket_cloexec(int domain, int type, int protocol);
int pa_pipe_cloexec(int pipefd[2]);
int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+FILE* pa_fopen_cloexec(const char *path, const char *mode);
#endif
commit 88b72958bebd1770e45a4af2dc9fec75aaf1f2de
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 04:53:15 2009 +0100
tdb: use O_CLOEXEC if available
diff --git a/src/pulsecore/database-tdb.c b/src/pulsecore/database-tdb.c
index b79d283..4e782d6 100644
--- a/src/pulsecore/database-tdb.c
+++ b/src/pulsecore/database-tdb.c
@@ -66,6 +66,39 @@ void pa_datum_free(pa_datum *d) {
pa_zero(d);
}
+static struct tdb_context *tdb_open_cloexec(
+ const char *name,
+ int hash_size,
+ int tdb_flags,
+ int open_flags,
+ mode_t mode) {
+
+ /* Mimics pa_open_cloexec() */
+
+ struct tdb_context *c;
+
+#ifdef O_NOCTTY
+ open_flags |= O_NOCTTY;
+#endif
+
+#ifdef O_CLOEXEC
+ errno = 0;
+ if ((c = tdb_open(name, hash_size, tdb_flags, open_flags | O_CLOEXEC, mode)))
+ goto finish;
+
+ if (errno != EINVAL)
+ return NULL;
+#endif
+
+ errno = 0;
+ if (!(c = tdb_open(name, hash_size, tdb_flags, open_flags, mode)))
+ return NULL;
+
+finish:
+ pa_make_fd_cloexec(tdb_fd(c));
+ return c;
+}
+
pa_database* pa_database_open(const char *fn, pa_bool_t for_write) {
struct tdb_context *c;
char *path;
@@ -73,15 +106,7 @@ pa_database* pa_database_open(const char *fn, pa_bool_t for_write) {
pa_assert(fn);
path = pa_sprintf_malloc("%s.tdb", fn);
- errno = 0;
- c = tdb_open(path, 0, TDB_NOSYNC|TDB_NOLOCK,
- (for_write ? O_RDWR|O_CREAT : O_RDONLY)|O_NOCTTY
-#ifdef O_CLOEXEC
- |O_CLOEXEC
-#endif
- , 0644);
-
- if (c)
+ if ((c = tdb_open_cloexec(path, 0, TDB_NOSYNC|TDB_NOLOCK, (for_write ? O_RDWR|O_CREAT : O_RDONLY), 0644)))
pa_log_debug("Opened TDB database '%s'", path);
pa_xfree(path);
commit 168be3830ae291dd819abebec813f76151487bb3
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 04:54:19 2009 +0100
use pa_fopen_cloexec() where applicable
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index 571faae..bfd5c11 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -577,7 +577,7 @@ int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
c->config_file = NULL;
f = filename ?
- fopen(c->config_file = pa_xstrdup(filename), "r") :
+ pa_fopen_cloexec(c->config_file = pa_xstrdup(filename), "r") :
pa_open_config_file(DEFAULT_CONFIG_FILE, DEFAULT_CONFIG_FILE_USER, ENV_CONFIG_FILE, &c->config_file);
if (!f && errno != ENOENT) {
@@ -652,7 +652,7 @@ FILE *pa_daemon_conf_open_default_script_file(pa_daemon_conf *c) {
else
f = pa_open_config_file(DEFAULT_SCRIPT_FILE, DEFAULT_SCRIPT_FILE_USER, ENV_SCRIPT_FILE, &c->default_script_file);
} else
- f = fopen(c->default_script_file, "r");
+ f = pa_fopen_cloexec(c->default_script_file, "r");
return f;
}
diff --git a/src/modules/module-cli.c b/src/modules/module-cli.c
index 6bd0f4f..c5ff456 100644
--- a/src/modules/module-cli.c
+++ b/src/modules/module-cli.c
@@ -105,7 +105,7 @@ int pa__init(pa_module*m) {
* of log messages, particularly because if stdout and stderr are
* dup'ed they share the same O_NDELAY, too. */
- if ((fd = open("/dev/tty", O_RDWR|O_CLOEXEC|O_NONBLOCK)) >= 0) {
+ if ((fd = pa_open_cloexec("/dev/tty", O_RDWR|O_NONBLOCK, 0)) >= 0) {
io = pa_iochannel_new(m->core->mainloop, fd, fd);
pa_log_debug("Managed to open /dev/tty.");
} else {
diff --git a/src/modules/module-default-device-restore.c b/src/modules/module-default-device-restore.c
index 27ae60e..94f589e 100644
--- a/src/modules/module-default-device-restore.c
+++ b/src/modules/module-default-device-restore.c
@@ -60,7 +60,7 @@ static void load(struct userdata *u) {
if (u->core->default_sink)
pa_log_info("Manually configured default sink, not overwriting.");
- else if ((f = fopen(u->sink_filename, "r"))) {
+ else if ((f = pa_fopen_cloexec(u->sink_filename, "r"))) {
char ln[256] = "";
pa_sink *s;
@@ -81,7 +81,7 @@ static void load(struct userdata *u) {
if (u->core->default_source)
pa_log_info("Manually configured default source, not overwriting.");
- else if ((f = fopen(u->source_filename, "r"))) {
+ else if ((f = pa_fopen_cloexec(u->source_filename, "r"))) {
char ln[256] = "";
pa_source *s;
@@ -108,7 +108,7 @@ static void save(struct userdata *u) {
return;
if (u->sink_filename) {
- if ((f = fopen(u->sink_filename, "w"))) {
+ if ((f = pa_fopen_cloexec(u->sink_filename, "w"))) {
pa_sink *s = pa_namereg_get_default_sink(u->core);
fprintf(f, "%s\n", s ? s->name : "");
fclose(f);
@@ -117,7 +117,7 @@ static void save(struct userdata *u) {
}
if (u->source_filename) {
- if ((f = fopen(u->source_filename, "w"))) {
+ if ((f = pa_fopen_cloexec(u->source_filename, "w"))) {
pa_source *s = pa_namereg_get_default_source(u->core);
fprintf(f, "%s\n", s ? s->name : "");
fclose(f);
diff --git a/src/modules/module-detect.c b/src/modules/module-detect.c
index b1f24e1..1fe8eb8 100644
--- a/src/modules/module-detect.c
+++ b/src/modules/module-detect.c
@@ -63,7 +63,7 @@ static int detect_alsa(pa_core *c, int just_one) {
FILE *f;
int n = 0, n_sink = 0, n_source = 0;
- if (!(f = fopen("/proc/asound/devices", "r"))) {
+ if (!(f = pa_fopen_cloexec("/proc/asound/devices", "r"))) {
if (errno != ENOENT)
pa_log_error("open(\"/proc/asound/devices\") failed: %s", pa_cstrerror(errno));
@@ -124,9 +124,9 @@ static int detect_oss(pa_core *c, int just_one) {
FILE *f;
int n = 0, b = 0;
- if (!(f = fopen("/dev/sndstat", "r")) &&
- !(f = fopen("/proc/sndstat", "r")) &&
- !(f = fopen("/proc/asound/oss/sndstat", "r"))) {
+ if (!(f = pa_fopen_cloexec("/dev/sndstat", "r")) &&
+ !(f = pa_fopen_cloexec("/proc/sndstat", "r")) &&
+ !(f = pa_fopen_cloexec("/proc/asound/oss/sndstat", "r"))) {
if (errno != ENOENT)
pa_log_error("failed to open OSS sndstat device: %s", pa_cstrerror(errno));
diff --git a/src/modules/module-match.c b/src/modules/module-match.c
index 0bd781d..b1693f1 100644
--- a/src/modules/module-match.c
+++ b/src/modules/module-match.c
@@ -85,7 +85,7 @@ static int load_rules(struct userdata *u, const char *filename) {
pa_assert(u);
if (filename)
- f = fopen(fn = pa_xstrdup(filename), "r");
+ f = pa_fopen_cloexec(fn = pa_xstrdup(filename), "r");
else
f = pa_open_config_file(DEFAULT_MATCH_TABLE_FILE, DEFAULT_MATCH_TABLE_FILE_USER, NULL, &fn);
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index 1b1e9c1..a12f7c9 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -172,7 +172,7 @@ static pa_bool_t is_card_busy(const char *id) {
if (status_file)
fclose(status_file);
- if (!(status_file = fopen(sub_status, "r"))) {
+ if (!(status_file = pa_fopen_cloexec(sub_status, "r"))) {
pa_log_warn("Failed to open %s: %s", sub_status, pa_cstrerror(errno));
continue;
}
diff --git a/src/modules/oss/oss-util.c b/src/modules/oss/oss-util.c
index 41af3ba..b95023c 100644
--- a/src/modules/oss/oss-util.c
+++ b/src/modules/oss/oss-util.c
@@ -349,9 +349,9 @@ int pa_oss_get_hw_description(const char *dev, char *name, size_t l) {
if ((n = get_device_number(dev)) < 0)
return -1;
- if (!(f = fopen("/dev/sndstat", "r")) &&
- !(f = fopen("/proc/sndstat", "r")) &&
- !(f = fopen("/proc/asound/oss/sndstat", "r"))) {
+ if (!(f = pa_fopen_cloexec("/dev/sndstat", "r")) &&
+ !(f = pa_fopen_cloexec("/proc/sndstat", "r")) &&
+ !(f = pa_fopen_cloexec("/proc/asound/oss/sndstat", "r"))) {
if (errno != ENOENT)
pa_log_warn("failed to open OSS sndstat device: %s", pa_cstrerror(errno));
diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c
index 62c06f6..3eaca4d 100644
--- a/src/pulse/client-conf.c
+++ b/src/pulse/client-conf.c
@@ -110,7 +110,7 @@ int pa_client_conf_load(pa_client_conf *c, const char *filename) {
if (filename) {
- if (!(f = fopen(filename, "r"))) {
+ if (!(f = pa_fopen_cloexec(filename, "r"))) {
pa_log(_("Failed to open configuration file '%s': %s"), fn, pa_cstrerror(errno));
goto finish;
}
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index b57919a..82a44d8 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -1804,7 +1804,7 @@ int pa_cli_command_execute_file(pa_core *c, const char *fn, pa_strbuf *buf, pa_b
if (!fail)
fail = &_fail;
- if (!(f = fopen(fn, "r"))) {
+ if (!(f = pa_fopen_cloexec(fn, "r"))) {
pa_strbuf_printf(buf, "open('%s') failed: %s\n", fn, pa_cstrerror(errno));
if (!*fail)
ret = 0;
diff --git a/src/pulsecore/conf-parser.c b/src/pulsecore/conf-parser.c
index dd4a99e..34b4d6f 100644
--- a/src/pulsecore/conf-parser.c
+++ b/src/pulsecore/conf-parser.c
@@ -168,7 +168,7 @@ int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, void
pa_assert(filename);
pa_assert(t);
- if (!f && !(f = fopen(filename, "r"))) {
+ if (!f && !(f = pa_fopen_cloexec(filename, "r"))) {
if (errno == ENOENT) {
pa_log_debug("Failed to open configuration file '%s': %s", filename, pa_cstrerror(errno));
r = 0;
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 40da8f4..738bf06 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1600,7 +1600,7 @@ FILE *pa_open_config_file(const char *global, const char *local, const char *env
fn = buf;
#endif
- if ((f = fopen(fn, "r"))) {
+ if ((f = pa_fopen_cloexec(fn, "r"))) {
if (result)
*result = pa_xstrdup(fn);
@@ -1634,7 +1634,7 @@ FILE *pa_open_config_file(const char *global, const char *local, const char *env
fn = buf;
#endif
- if ((f = fopen(fn, "r"))) {
+ if ((f = pa_fopen_cloexec(fn, "r"))) {
if (result)
*result = pa_xstrdup(fn);
@@ -1661,7 +1661,7 @@ FILE *pa_open_config_file(const char *global, const char *local, const char *env
global = buf;
#endif
- if ((f = fopen(global, "r"))) {
+ if ((f = pa_fopen_cloexec(global, "r"))) {
if (result)
*result = pa_xstrdup(global);
@@ -2560,7 +2560,7 @@ char *pa_machine_id(void) {
* since it fits perfectly our needs and is not as volatile as the
* hostname which might be set from dhcp. */
- if ((f = fopen(PA_MACHINE_ID, "r"))) {
+ if ((f = pa_fopen_cloexec(PA_MACHINE_ID, "r"))) {
char ln[34] = "", *r;
r = fgets(ln, sizeof(ln)-1, f);
diff --git a/src/pulsecore/database-simple.c b/src/pulsecore/database-simple.c
index 1f4caf7..754930d 100644
--- a/src/pulsecore/database-simple.c
+++ b/src/pulsecore/database-simple.c
@@ -237,7 +237,7 @@ pa_database* pa_database_open(const char *fn, pa_bool_t for_write) {
path = pa_sprintf_malloc("%s."CANONICAL_HOST".simple", fn);
errno = 0;
- f = fopen(path, "r");
+ f = pa_fopen_cloexec(path, "r");
if (f || errno == ENOENT) { /* file not found is ok */
db = pa_xnew0(simple_data, 1);
@@ -480,7 +480,7 @@ int pa_database_sync(pa_database *database) {
errno = 0;
- f = fopen(db->tmp_filename, "w");
+ f = pa_fopen_cloexec(db->tmp_filename, "w");
if (!f)
goto fail;
diff --git a/src/pulsecore/pid.c b/src/pulsecore/pid.c
index c92e831..213e798 100644
--- a/src/pulsecore/pid.c
+++ b/src/pulsecore/pid.c
@@ -143,7 +143,7 @@ static int proc_name_ours(pid_t pid, const char *procname) {
pa_snprintf(bn, sizeof(bn), "/proc/%lu/stat", (unsigned long) pid);
- if (!(f = fopen(bn, "r"))) {
+ if (!(f = pa_fopen_cloexec(bn, "r"))) {
pa_log_info("Failed to open %s: %s", bn, pa_cstrerror(errno));
return -1;
} else {
diff --git a/src/pulsecore/sample-util.c b/src/pulsecore/sample-util.c
index a26dc87..74600de 100644
--- a/src/pulsecore/sample-util.c
+++ b/src/pulsecore/sample-util.c
@@ -1007,7 +1007,7 @@ void pa_memchunk_dump_to_file(pa_memchunk *c, const char *fn) {
/* Only for debugging purposes */
- f = fopen(fn, "a");
+ f = pa_fopen_cloexec(fn, "a");
if (!f) {
pa_log_warn("Failed to open '%s': %s", fn, pa_cstrerror(errno));
commit 75f7a971db587d554fffc15801a2d8f7497a2124
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 04:54:55 2009 +0100
socket-util: allocate at least sizeof(sockaddr_storage) space
diff --git a/src/pulsecore/socket-util.c b/src/pulsecore/socket-util.c
index 651779f..0d0762d 100644
--- a/src/pulsecore/socket-util.c
+++ b/src/pulsecore/socket-util.c
@@ -85,12 +85,11 @@ void pa_socket_peer_to_string(int fd, char *c, size_t l) {
#ifndef OS_IS_WIN32
pa_assert_se(fstat(fd, &st) == 0);
-#endif
-#ifndef OS_IS_WIN32
if (S_ISSOCK(st.st_mode)) {
#endif
union {
+ struct sockaddr_storage storage;
struct sockaddr sa;
struct sockaddr_in in;
#ifdef HAVE_IPV6
@@ -315,6 +314,7 @@ pa_bool_t pa_socket_address_is_local(const struct sockaddr *sa) {
pa_bool_t pa_socket_is_local(int fd) {
union {
+ struct sockaddr_storage storage;
struct sockaddr sa;
struct sockaddr_in in;
#ifdef HAVE_IPV6
commit a82c6b0cd5fa075b5a750e6416b7a7f0cd2508c7
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 04:55:13 2009 +0100
socket-util: drop redundant casts
diff --git a/src/pulsecore/socket-util.c b/src/pulsecore/socket-util.c
index 0d0762d..2cc9882 100644
--- a/src/pulsecore/socket-util.c
+++ b/src/pulsecore/socket-util.c
@@ -151,7 +151,7 @@ void pa_make_socket_low_delay(int fd) {
pa_assert(fd >= 0);
priority = 6;
- if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, (void*)&priority, sizeof(priority)) < 0)
+ if (setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &priority, sizeof(priority)) < 0)
pa_log_warn("SO_PRIORITY failed: %s", pa_cstrerror(errno));
#endif
}
@@ -165,9 +165,9 @@ void pa_make_tcp_socket_low_delay(int fd) {
{
int on = 1;
#if defined(SOL_TCP)
- if (setsockopt(fd, SOL_TCP, TCP_NODELAY, (void*)&on, sizeof(on)) < 0)
+ if (setsockopt(fd, SOL_TCP, TCP_NODELAY, &on, sizeof(on)) < 0)
#else
- if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&on, sizeof(on)) < 0)
+ if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) < 0)
#endif
pa_log_warn("TCP_NODELAY failed: %s", pa_cstrerror(errno));
}
@@ -177,9 +177,9 @@ void pa_make_tcp_socket_low_delay(int fd) {
{
int tos = IPTOS_LOWDELAY;
#ifdef SOL_IP
- if (setsockopt(fd, SOL_IP, IP_TOS, (void*)&tos, sizeof(tos)) < 0)
+ if (setsockopt(fd, SOL_IP, IP_TOS, &tos, sizeof(tos)) < 0)
#else
- if (setsockopt(fd, IPPROTO_IP, IP_TOS, (void*)&tos, sizeof(tos)) < 0)
+ if (setsockopt(fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0)
#endif
pa_log_warn("IP_TOS failed: %s", pa_cstrerror(errno));
}
@@ -195,9 +195,9 @@ void pa_make_udp_socket_low_delay(int fd) {
{
int tos = IPTOS_LOWDELAY;
#ifdef SOL_IP
- if (setsockopt(fd, SOL_IP, IP_TOS, (void*)&tos, sizeof(tos)) < 0)
+ if (setsockopt(fd, SOL_IP, IP_TOS, &tos, sizeof(tos)) < 0)
#else
- if (setsockopt(fd, IPPROTO_IP, IP_TOS, (void*)&tos, sizeof(tos)) < 0)
+ if (setsockopt(fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) < 0)
#endif
pa_log_warn("IP_TOS failed: %s", pa_cstrerror(errno));
}
@@ -205,11 +205,11 @@ void pa_make_udp_socket_low_delay(int fd) {
}
int pa_socket_set_rcvbuf(int fd, size_t l) {
- int bufsz = (int)l;
+ int bufsz = (int) l;
pa_assert(fd >= 0);
- if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void*)&bufsz, sizeof(bufsz)) < 0) {
+ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsz, sizeof(bufsz)) < 0) {
pa_log_warn("SO_RCVBUF: %s", pa_cstrerror(errno));
return -1;
}
@@ -218,12 +218,12 @@ int pa_socket_set_rcvbuf(int fd, size_t l) {
}
int pa_socket_set_sndbuf(int fd, size_t l) {
- int bufsz = (int)l;
+ int bufsz = (int) l;
pa_assert(fd >= 0);
- if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (void*)&bufsz, sizeof(bufsz)) < 0) {
- pa_log("SO_SNDBUF: %s", pa_cstrerror(errno));
+ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsz, sizeof(bufsz)) < 0) {
+ pa_log_warn("SO_SNDBUF: %s", pa_cstrerror(errno));
return -1;
}
commit aa8ce5bb9b159abb2ffb0f43996340566fc2e9c6
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 05:08:48 2009 +0100
daemon: don't crash if pa_realpath() fails
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 9e5647a..576fc3e 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -425,21 +425,24 @@ int main(int argc, char *argv[]) {
pa_set_env("LD_BIND_NOW", "1");
- canonical_rp = pa_realpath(PA_BINARY);
+ if (!(canonical_rp = pa_realpath(PA_BINARY))) {
- if ((rp = pa_readlink("/proc/self/exe"))) {
+ if ((rp = pa_readlink("/proc/self/exe"))) {
- if (pa_streq(rp, canonical_rp))
- pa_assert_se(execv(rp, argv) == 0);
- else
- pa_log_warn("/proc/self/exe does not point to %s, cannot self execute. Are you playing games?", canonical_rp);
+ if (pa_streq(rp, canonical_rp))
+ pa_assert_se(execv(rp, argv) == 0);
+ else
+ pa_log_warn("/proc/self/exe does not point to %s, cannot self execute. Are you playing games?", canonical_rp);
- pa_xfree(rp);
+ pa_xfree(rp);
- } else
- pa_log_warn("Couldn't read /proc/self/exe, cannot self execute. Running in a chroot()?");
+ } else
+ pa_log_warn("Couldn't read /proc/self/exe, cannot self execute. Running in a chroot()?");
- pa_xfree(canonical_rp);
+ pa_xfree(canonical_rp);
+
+ } else
+ pa_log_warn("Couldn't canonicalize binary path, cannot self execute.");
}
#endif
commit 8a49514f74cacd523117aabcd4514543db63a4ed
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Thu Oct 29 12:47:42 2009 +0100
sink: simplify silence checks
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 221b569..971436d 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -926,18 +926,16 @@ void pa_sink_render(pa_sink*s, size_t length, pa_memchunk *result) {
pa_sw_cvolume_multiply(&volume, &s->thread_info.soft_volume, &info[0].volume);
- if (s->thread_info.soft_muted || !pa_cvolume_is_norm(&volume)) {
- if (s->thread_info.soft_muted || pa_cvolume_is_muted(&volume)) {
- pa_memblock_unref(result->memblock);
- pa_silence_memchunk_get(&s->core->silence_cache,
- s->core->mempool,
- result,
- &s->sample_spec,
- result->length);
- } else {
- pa_memchunk_make_writable(result, 0);
- pa_volume_memchunk(result, &s->sample_spec, &volume);
- }
+ if (s->thread_info.soft_muted || pa_cvolume_is_muted(&volume)) {
+ pa_memblock_unref(result->memblock);
+ pa_silence_memchunk_get(&s->core->silence_cache,
+ s->core->mempool,
+ result,
+ &s->sample_spec,
+ result->length);
+ } else if (!pa_cvolume_is_norm(&volume)) {
+ pa_memchunk_make_writable(result, 0);
+ pa_volume_memchunk(result, &s->sample_spec, &volume);
}
} else {
void *ptr;
commit 056930cbcde117036cdb707ed3e111b7833724ea
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Thu Oct 29 14:49:52 2009 +0100
svolume: fix MMX error
We need to sign extend the lower part of the multiplication before adding it to
the higher part. Makes -1 * 0xffff work again.
diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c
index 5bf72ed..a011789 100644
--- a/src/pulsecore/svolume_mmx.c
+++ b/src/pulsecore/svolume_mmx.c
@@ -62,7 +62,9 @@
" movq "#s", %%mm5 \n\t" \
" pmulhw "#v", "#s" \n\t" /* .. | 0 | vl*p0 | */ \
" paddw %%mm4, "#s" \n\t" /* .. | 0 | vl*p0 | + sign correct */ \
+ " pslld $16, "#s" \n\t" /* .. | vl*p0 | 0 | */ \
" psrld $16, "#v" \n\t" /* .. | 0 | vh | */ \
+ " psrad $16, "#s" \n\t" /* .. | vl*p0 | sign extend */ \
" pmaddwd %%mm5, "#v" \n\t" /* .. | p0 * vh | */ \
" paddd "#s", "#v" \n\t" /* .. | p0 * v0 | */ \
" packssdw "#v", "#v" \n\t" /* .. | p1*v1 | p0*v0 | */
@@ -257,11 +259,14 @@ static void run_test (void) {
printf ("checking MMX %zd\n", sizeof (samples));
pa_random (samples, sizeof (samples));
+ /* for (i = 0; i < SAMPLES; i++)
+ samples[i] = -1; */
memcpy (samples_ref, samples, sizeof (samples));
memcpy (samples_orig, samples, sizeof (samples));
for (i = 0; i < CHANNELS; i++)
volumes[i] = rand() >> 1;
+ /* volumes[i] = 0x0000ffff; */
for (padding = 0; padding < PADDING; padding++, i++)
volumes[i] = volumes[padding];
@@ -269,7 +274,7 @@ static void run_test (void) {
pa_volume_s16ne_mmx (samples, volumes, CHANNELS, sizeof (samples));
for (i = 0; i < SAMPLES; i++) {
if (samples[i] != samples_ref[i]) {
- printf ("%d: %04x != %04x (%04x * %04x)\n", i, samples[i], samples_ref[i],
+ printf ("%d: %04x != %04x (%04x * %08x)\n", i, samples[i], samples_ref[i],
samples_orig[i], volumes[i % CHANNELS]);
}
}
commit 366ab9633be76c920738dc806607d7656dda5191
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Oct 30 05:20:00 2009 +0100
git: ignore kde related files
diff --git a/src/.gitignore b/src/.gitignore
index 6cd173c..64ab297 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -63,4 +63,5 @@ thread-test
utf8-test
voltest
start-pulseaudio-x11
+start-pulseaudio-kde
vector-test
diff --git a/src/daemon/.gitignore b/src/daemon/.gitignore
index 0efa55b..54e4299 100644
--- a/src/daemon/.gitignore
+++ b/src/daemon/.gitignore
@@ -1,2 +1,3 @@
org.pulseaudio.policy
pulseaudio.desktop
+pulseaudio-kde.desktop
commit 65e8078a3bba6360f7918b2a721510d78826eece
Author: Leszek Koltunski <leszek at koltunski.pl>
Date: Tue Oct 27 19:57:43 2009 +0800
X11: attach X11 properties to Screen, not Display
diff --git a/src/pulsecore/x11prop.c b/src/pulsecore/x11prop.c
index 873a76e..dc8ec29 100644
--- a/src/pulsecore/x11prop.c
+++ b/src/pulsecore/x11prop.c
@@ -32,12 +32,12 @@
void pa_x11_set_prop(Display *d, const char *name, const char *data) {
Atom a = XInternAtom(d, name, False);
- XChangeProperty(d, RootWindow(d, 0), a, XA_STRING, 8, PropModeReplace, (const unsigned char*) data, (int) (strlen(data)+1));
+ XChangeProperty(d, DefaultRootWindow(d), a, XA_STRING, 8, PropModeReplace, (const unsigned char*) data, (int) (strlen(data)+1));
}
void pa_x11_del_prop(Display *d, const char *name) {
Atom a = XInternAtom(d, name, False);
- XDeleteProperty(d, RootWindow(d, 0), a);
+ XDeleteProperty(d, DefaultRootWindow(d), a);
}
char* pa_x11_get_prop(Display *d, const char *name, char *p, size_t l) {
@@ -47,13 +47,21 @@ char* pa_x11_get_prop(Display *d, const char *name, char *p, size_t l) {
unsigned long nbytes_after;
unsigned char *prop = NULL;
char *ret = NULL;
+ int window_ret;
Atom a = XInternAtom(d, name, False);
- if (XGetWindowProperty(d, RootWindow(d, 0), a, 0, (long) ((l+2)/4), False, XA_STRING, &actual_type, &actual_format, &nitems, &nbytes_after, &prop) != Success)
- goto finish;
- if (actual_type != XA_STRING)
- goto finish;
+ window_ret = XGetWindowProperty(d, DefaultRootWindow(d), a, 0, (long) ((l+2)/4), False, XA_STRING, &actual_type, &actual_format, &nitems, &nbytes_after, &prop);
+
+ if (window_ret != Success || actual_type != XA_STRING) {
+ if (DefaultScreen(d) != 0) {
+ window_ret = XGetWindowProperty(d, RootWindow(d, 0), a, 0, (long) ((l+2)/4), False, XA_STRING, &actual_type, &actual_format, &nitems, &nbytes_after, &prop);
+
+ if (window_ret != Success || actual_type != XA_STRING)
+ goto finish;
+ } else
+ goto finish;
+ }
memcpy(p, prop, nitems);
p[nitems] = 0;
commit b04fe9b516160f92d016a8bb81a431c74cac2ecd
Author: Daniel Mack <daniel at caiaq.de>
Date: Mon Oct 19 12:45:30 2009 +0200
Wrap clock_gettime and friends
On Wed, Sep 16, 2009 at 11:48:58PM +0200, Lennart Poettering wrote:
> On Wed, 16.09.09 15:15, Daniel Mack (daniel at caiaq.de) wrote:
>
> > From: Kim Lester <kim at dfusion.com.au>
> >
> > OS X does not define clockid_t or clock_gettime() and friends.
> > Add a wrapper to fix this.
>
> Hmpf. I am not particularly happy with this. This adds a lot of
> unnecessary compat code. We don't actually need implementations of
> clock_getres(). All we need is some kind of check whether system
> timers are accurate or whether they are rounded up to scheduling
> slices. On Linux we do that check with clock_getres(), but all the
> information it returns is actually not intertesting at all. We just
> check if this is below some trheshold, that's all.
>
> clock_settime() we don't use at all! We shouldn't carry compat code
> for that.
>
> And clock_gettime we don't really need either. We need some kind of
> accurate system timers (preferably monotonic), and on Linux we use
> clock_gettime() for that. But we already have a fallback there for
> gettimeofday().
>
> Or in other words, the current APIs pa_rtclock_get(),
> pa_rtclock_hrtimer() is supposed to be the abstract API that has
> different backends on different systems. I'd very much prefer if any
> MacOS specific code would simply be plugged in there instead of
> creating various new abstraction interfaces!
Ok - what about the version below? I don't particularily like the
Daniel
>From 9f0a051953ec354ccdb8aa44a9845c408b26ae0b Mon Sep 17 00:00:00 2001
From: Kim Lester <kim at dfusion.com.au>
Date: Wed, 16 Sep 2009 14:40:01 +0800
Subject: [PATCH] Implement pa_rtclock_get() and pa_rtclock_hrtimer() for Darwin
OS X does not define clockid_t or clock_gettime() and friends.
Add wrappers to fix this. Based on a patch from Kim Lester
<kim at dfusion.com.au>.
diff --git a/src/pulsecore/core-rtclock.c b/src/pulsecore/core-rtclock.c
index 1420470..4fe0a47 100644
--- a/src/pulsecore/core-rtclock.c
+++ b/src/pulsecore/core-rtclock.c
@@ -33,6 +33,12 @@
#include <sys/prctl.h>
#endif
+#ifdef OS_IS_DARWIN
+#include <CoreServices/CoreServices.h>
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+#endif
+
#include <pulse/timeval.h>
#include <pulsecore/macro.h>
#include <pulsecore/core-error.h>
@@ -47,7 +53,8 @@ pa_usec_t pa_rtclock_age(const struct timeval *tv) {
}
struct timeval *pa_rtclock_get(struct timeval *tv) {
-#ifdef HAVE_CLOCK_GETTIME
+
+#if defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
#ifdef CLOCK_MONOTONIC
@@ -59,7 +66,7 @@ struct timeval *pa_rtclock_get(struct timeval *tv) {
no_monotonic = TRUE;
if (no_monotonic)
-#endif
+#endif /* CLOCK_MONOTONIC */
pa_assert_se(clock_gettime(CLOCK_REALTIME, &ts) == 0);
pa_assert(tv);
@@ -69,7 +76,30 @@ struct timeval *pa_rtclock_get(struct timeval *tv) {
return tv;
-#else /* HAVE_CLOCK_GETTIME */
+#elif defined(OS_IS_DARWIN)
+ static mach_timebase_info_data_t tbi;
+ uint64_t nticks;
+ uint64_t time_nsec;
+
+ /* Refer Apple ADC QA1398
+ Also: http://devworld.apple.com/documentation/Darwin/Conceptual/KernelProgramming/services/services.html
+
+ Note: argument is timespec NOT timeval (timespec uses nsec, timeval uses usec)
+ */
+
+ /* try and be a mite efficient - maybe I should keep the N/D as a float !? */
+ if (tbi.denom == 0)
+ mach_timebase_info(&tbi);
+
+ nticks = mach_absolute_time();
+ time_nsec = nticks * tbi.numer / tbi.denom; // see above
+
+ tv->tv_sec = time_nsec / PA_NSEC_PER_SEC;
+ tv->tv_usec = time_nsec / PA_NSEC_PER_USEC;
+
+ return tv;
+
+#else /* OS_IS_DARWIN */
return pa_gettimeofday(tv);
@@ -77,19 +107,30 @@ struct timeval *pa_rtclock_get(struct timeval *tv) {
}
pa_bool_t pa_rtclock_hrtimer(void) {
-#ifdef HAVE_CLOCK_GETTIME
+
+#if defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
#ifdef CLOCK_MONOTONIC
+
if (clock_getres(CLOCK_MONOTONIC, &ts) >= 0)
return ts.tv_sec == 0 && ts.tv_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
-#endif
+#endif /* CLOCK_MONOTONIC */
pa_assert_se(clock_getres(CLOCK_REALTIME, &ts) == 0);
return ts.tv_sec == 0 && ts.tv_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
-#else /* HAVE_CLOCK_GETTIME */
+#elif defined (OS_IS_DARWIN)
+ mach_timebase_info_data_t tbi;
+ uint64_t time_nsec;
+
+ mach_timebase_info(&tbi);
+ /* nsec = nticks * (N/D) - we want 1 tick == resolution !? */
+ time_nsec = tbi.numer / tbi.denom;
+ return time_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
+
+#else /* OS_IS_DARWIN */
return FALSE;
#endif
@@ -98,6 +139,7 @@ pa_bool_t pa_rtclock_hrtimer(void) {
#define TIMER_SLACK_NS (int) ((500 * PA_NSEC_PER_USEC))
void pa_rtclock_hrtimer_enable(void) {
+
#ifdef PR_SET_TIMERSLACK
int slack_ns;
commit 542fa468c26c5035485dc73392c57c222183b510
Author: Daniel Mack <daniel at caiaq.de>
Date: Mon Oct 19 12:48:00 2009 +0200
Mac OS X: add semaphore implementation
On Wed, Sep 16, 2009 at 11:57:04PM +0200, Lennart Poettering wrote:
> On Wed, 16.09.09 15:15, Daniel Mack (daniel at caiaq.de) wrote:
>
> > + s = pa_xnew(pa_semaphore, 1);
> > + MPCreateSemaphore(UINT_MAX, value, &(s->sema));
> > + pa_assert(s->sema != 0);
>
> Hmm, I'd prefer if the ret val of MPCreateSemaphore() would be checked
> here.
>
> Also I find it a bit weird checking for s->sema, though not
> initializing it to 0 in the beginning. If the call actually failed,
> then the assert will check uninitialized memory. Also, comparing
> pointers with 0 sucks. That should be NULL.
>
> Given that this can not realisitically fail, only in OOM or OOM-like
> situations in which case we abort anyway it mght be enough just writing:
>
> pa_assert_se(MPCreateSemaphore(UINT_MAX, value, &s->sema) == 0);
>
> (Assuming that success is signalled by retval == 0 on MacOSX)
>
> > +void pa_semaphore_free(pa_semaphore *s) {
> > + pa_assert(s);
> > + MPDeleteSemaphore(s->sema);
>
> Same here.
>
> > + pa_xfree(s);
> > +}
> > +
> > +void pa_semaphore_post(pa_semaphore *s) {
> > + pa_assert(s);
> > + MPSignalSemaphore(s->sema);
>
> And here.
>
> > +}
> > +
> > +void pa_semaphore_wait(pa_semaphore *s) {
> > + pa_assert(s);
> > + /* should probably check return value (-ve is error), noErr is ok. */
> > + MPWaitOnSemaphore(s->sema, kDurationForever);
>
> And here.
Ok, done. See the patch below.
Daniel
>From 26df2fbae6d9215a3ae084876fb5f79e4d9cf4f0 Mon Sep 17 00:00:00 2001
From: Kim Lester <kim at dfusion.com.au>
Date: Wed, 16 Sep 2009 09:23:39 +0800
Subject: [PATCH] Mac OS X: add semaphore implementation
diff --git a/src/pulsecore/semaphore-osx.c b/src/pulsecore/semaphore-osx.c
new file mode 100644
index 0000000..73f4355
--- /dev/null
+++ b/src/pulsecore/semaphore-osx.c
@@ -0,0 +1,63 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Kim Lester <kim at dfusion.com.au>
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <Multiprocessing.h>
+
+#include <pulse/xmalloc.h>
+#include <pulsecore/macro.h>
+
+#include "semaphore.h"
+
+struct pa_semaphore
+{
+ MPSemaphoreID sema;
+};
+
+pa_semaphore* pa_semaphore_new(unsigned int value) {
+ /* NOTE: Can't assume boolean - ie value = 0,1, so use UINT_MAX (boolean more efficient ?) */
+ pa_semaphore *s;
+
+ s = pa_xnew(pa_semaphore, 1);
+ pa_assert_se(MPCreateSemaphore(UINT_MAX, value, &s->sema) == 0);
+
+ return s;
+}
+
+void pa_semaphore_free(pa_semaphore *s) {
+ pa_assert(s);
+ pa_assert_se(MPDeleteSemaphore(s->sema) == 0);
+ pa_xfree(s);
+}
+
+void pa_semaphore_post(pa_semaphore *s) {
+ pa_assert(s);
+ pa_assert_se(MPSignalSemaphore(s->sema) == 0);
+}
+
+void pa_semaphore_wait(pa_semaphore *s) {
+ pa_assert(s);
+ /* should probably check return value (-ve is error), noErr is ok. */
+ pa_assert_se(MPWaitOnSemaphore(s->sema, kDurationForever) == 0);
+}
commit 5c576507693c1d7c4aa8c51656b37c91bcf1289b
Author: David Yoder <davidmyoder at gmail.com>
Date: Fri Oct 30 09:54:08 2009 -0500
daemon: realpath segfault fix
Lennart,
Apparently I was debugging this at the same time as you. I can't figure out
why my Fedora 11 install with glibc-2.10 has a glibc realpath that doesn't
match the gnu documentation and returns null. But it does.
Your commit aa8ce5bb9b159abb2ffb0f43996340566fc2e9c6 almost fixed my
problem, but it needs a tweak.
Thanks,
David Yoder
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 576fc3e..c73e9af 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -425,7 +425,7 @@ int main(int argc, char *argv[]) {
pa_set_env("LD_BIND_NOW", "1");
- if (!(canonical_rp = pa_realpath(PA_BINARY))) {
+ if ((canonical_rp = pa_realpath(PA_BINARY))) {
if ((rp = pa_readlink("/proc/self/exe"))) {
commit b83d7a27cee4a436e4d692a9bba1b426090f4d12
Author: Daniel Mack <daniel at caiaq.de>
Date: Sat Oct 31 01:58:26 2009 +0100
configure.ac: enable check for CoreAudio
diff --git a/configure.ac b/configure.ac
index 1022a6e..2bc068e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -742,6 +742,28 @@ AC_SUBST(HAVE_OSS)
AM_CONDITIONAL([HAVE_OSS_OUTPUT], [test "x$HAVE_OSS" = x1 && test "x${oss_output}" != "xno"])
AM_CONDITIONAL([HAVE_OSS_WRAPPER], [test "x$HAVE_OSS" = x1 && test "x${oss_wrapper}" != "xno"])
+#### CoreAudio support (optional) ####
+
+AC_ARG_ENABLE([coreaudio-output],
+ AS_HELP_STRING([--disable-coreaudio-output],[Disable optional CoreAudio output support]),
+ [
+ case "${enableval}" in
+ yes) coreaudio_enabled=yes ;;
+ no) coreaudio_enabled=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --disable-coreaudio-output) ;;
+ esac
+ ],
+ [coreaudio_enabled=auto])
+
+if test "x${coreaudio_enabled}" != xno ; then
+ AC_CHECK_HEADERS([CoreAudio/CoreAudio.h], HAVE_COREAUDIO=1)
+else
+ HAVE_COREAUDIO=0
+fi
+
+AC_SUBST(HAVE_COREAUDIO)
+AM_CONDITIONAL([HAVE_COREAUDIO], [test "x$HAVE_COREAUDIO" = x1 && test "x${coreaudio_enabled}" != "xno"])
+
#### ALSA support (optional) ####
AC_ARG_ENABLE([alsa],
@@ -1423,6 +1445,11 @@ if test "x$HAVE_OSS" = "x1" ; then
fi
fi
+ENABLE_COREAUDIO=no
+if test "x$HAVE_COREAUDIO" = "x1" ; then
+ ENABLE_COREAUDIO=yes
+fi
+
ENABLE_ALSA=no
if test "x$HAVE_ALSA" = "x1" ; then
ENABLE_ALSA=yes
@@ -1548,6 +1575,7 @@ echo "
Have X11: ${ENABLE_X11}
Enable OSS Output: ${ENABLE_OSS_OUTPUT}
Enable OSS Wrapper: ${ENABLE_OSS_WRAPPER}
+ Enable CoreAudio: ${ENABLE_COREAUDIO}
Enable Alsa: ${ENABLE_ALSA}
Enable Solaris: ${ENABLE_SOLARIS}
Enable GLib 2.0: ${ENABLE_GLIB20}
commit 2dc37e1214f20aab528ae680e9a85fc8ea143313
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 02:05:54 2009 +0100
bluetooth: do not hand out access to devices that are not fully configured yet
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index f8c5b77..47d6200 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -723,12 +723,14 @@ const pa_bluetooth_device* pa_bluetooth_discovery_get_by_address(pa_bluetooth_di
while ((d = pa_hashmap_iterate(y->devices, &state, NULL)))
if (pa_streq(d->address, address))
- return d;
+ return device_is_audio(d) ? d : NULL;
return NULL;
}
const pa_bluetooth_device* pa_bluetooth_discovery_get_by_path(pa_bluetooth_discovery *y, const char* path) {
+ pa_bluetooth_device *d;
+
pa_assert(y);
pa_assert(PA_REFCNT_VALUE(y) > 0);
pa_assert(path);
@@ -736,7 +738,11 @@ const pa_bluetooth_device* pa_bluetooth_discovery_get_by_path(pa_bluetooth_disco
if (!pa_hook_is_firing(&y->hook))
pa_bluetooth_discovery_sync(y);
- return pa_hashmap_get(y->devices, path);
+ if ((d = pa_hashmap_get(y->devices, path)))
+ if (device_is_audio(d))
+ return d;
+
+ return NULL;
}
static int setup_dbus(pa_bluetooth_discovery *y) {
commit c4e276edbd84cbb8c5b594c9f427b0a25a7fb2ab
Merge: 9c61465 2dc37e1
Author: Daniel Mack <daniel at caiaq.de>
Date: Sat Oct 31 02:16:14 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 8e94f653489a0b3d549e61840a5cec711d466ab7
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 02:43:47 2009 +0100
daemon: make sure pa has its own session and process group, but is not its leader so that we cannot acquire a tty ever
diff --git a/src/daemon/main.c b/src/daemon/main.c
index c73e9af..cc6f24b 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -657,7 +657,7 @@ int main(int argc, char *argv[]) {
#ifdef HAVE_FORK
if (pipe(daemon_pipe) < 0) {
- pa_log(_("pipe failed: %s"), pa_cstrerror(errno));
+ pa_log(_("pipe() failed: %s"), pa_cstrerror(errno));
goto finish;
}
@@ -708,22 +708,27 @@ int main(int argc, char *argv[]) {
pa_log_set_target(PA_LOG_SYSLOG);
#ifdef HAVE_SETSID
- setsid();
-#endif
-#ifdef HAVE_SETPGID
- setpgid(0,0);
+ if (setsid() < 0) {
+ pa_log(_("setsid() failed: %s"), pa_cstrerror(errno));
+ goto finish;
+ }
#endif
-#ifndef OS_IS_WIN32
- pa_close(0);
- pa_close(1);
- pa_close(2);
+ /* We now are a session and process group leader. Let's fork
+ * again and let the father die, so that we'll become a
+ * process that can never acquire a TTY again, in a session and
+ * process group without leader */
- pa_assert_se(open("/dev/null", O_RDONLY) == 0);
- pa_assert_se(open("/dev/null", O_WRONLY) == 1);
- pa_assert_se(open("/dev/null", O_WRONLY) == 2);
-#else
- FreeConsole();
+#ifdef HAVE_FORK
+ if ((child = fork()) < 0) {
+ pa_log(_("fork() failed: %s"), pa_cstrerror(errno));
+ goto finish;
+ }
+
+ if (child != 0) {
+ retval = 0;
+ goto finish;
+ }
#endif
#ifdef SIGTTOU
@@ -736,12 +741,7 @@ int main(int argc, char *argv[]) {
signal(SIGTSTP, SIG_IGN);
#endif
-#ifdef TIOCNOTTY
- if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) {
- ioctl(tty_fd, TIOCNOTTY, (char*) 0);
- pa_assert_se(pa_close(tty_fd) == 0);
- }
-#endif
+ pa_nullify_stdfds();
}
pa_set_env_and_record("PULSE_INTERNAL", "1");
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 738bf06..2b0a60a 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2999,3 +2999,19 @@ finish:
pa_make_fd_cloexec(fileno(f));
return f;
}
+
+void pa_nullify_stdfds(void) {
+
+#ifndef OS_IS_WIN32
+ pa_close(STDIN_FILENO);
+ pa_close(STDOUT_FILENO);
+ pa_close(STDERR_FILENO);
+
+ pa_assert_se(open("/dev/null", O_RDONLY) == STDIN_FILENO);
+ pa_assert_se(open("/dev/null", O_WRONLY) == STDOUT_FILENO);
+ pa_assert_se(open("/dev/null", O_WRONLY) == STDERR_FILENO);
+#else
+ FreeConsole();
+#endif
+
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index d50f79a..9c9cf78 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -265,4 +265,6 @@ int pa_pipe_cloexec(int pipefd[2]);
int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
FILE* pa_fopen_cloexec(const char *path, const char *mode);
+void pa_nullify_stdfds(void);
+
#endif
commit 3e115a96b050bb7b74cc10aaa35c6673a6b8cc84
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 02:49:44 2009 +0100
alsa: cover Mic Jack Mode element
As used by some HDA chips:
https://bugzilla.redhat.com/attachment.cgi?id=366816
diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common
index 87af38b..d883b32 100644
--- a/src/modules/alsa/mixer/paths/analog-input.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common
@@ -98,7 +98,7 @@ priority = 18
name = input-docking
priority = 17
-;;; ' Capture Source'
+;;; 'Capture Source'
[Element Capture Source]
enumeration = select
@@ -244,6 +244,17 @@ name = input-docking
[Option Capture Source:Dock Mic]
name = input-docking-microphone
+;;; 'Mic Jack Mode'
+
+[Element Mic Jack Mode]
+enumeration = select
+
+[Option Mic Jack Mode:Mic In]
+name = input-microphone
+
+[Option Mic Jack Mode:Line In]
+name = input-linein
+
;;; Various Boosts
[Element Capture Boost]
commit 430e8e2ee52235f59b015e8e4a3aff9b4abd28b8
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 02:56:57 2009 +0100
alsa: cover 'Digital Input Source' element
As used by some HDA devices:
https://bugzilla.redhat.com/attachment.cgi?id=365290
diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common
index d883b32..007bb21 100644
--- a/src/modules/alsa/mixer/paths/analog-input.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common
@@ -255,6 +255,20 @@ name = input-microphone
[Option Mic Jack Mode:Line In]
name = input-linein
+;;; 'Digital Input Source'
+
+[Element Digital Input Source]
+enumeration = select
+
+[Option Digital Input Source:Analog Inputs]
+name = input
+
+[Option Digital Input Source:Digital Mic 1]
+name = input-microphone
+
+[Option Digital Input Source:Digital Mic 2]
+name = input-microphone
+
;;; Various Boosts
[Element Capture Boost]
commit 220ac0a61a1f3b310a9c49153c56a395ac701e89
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 03:10:00 2009 +0100
alsa: cover Headphone2 mixer element
As seen on some drivers:
https://bugzilla.redhat.com/show_bug.cgi?id=498612
diff --git a/src/Makefile.am b/src/Makefile.am
index 98c0468..aa71d91 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -143,6 +143,7 @@ EXTRA_DIST = \
modules/alsa/mixer/paths/analog-output.conf \
modules/alsa/mixer/paths/analog-output.conf.common \
modules/alsa/mixer/paths/analog-output-headphones.conf \
+ modules/alsa/mixer/paths/analog-output-headphones-2.conf \
modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \
modules/alsa/mixer/paths/analog-output-mono.conf
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
similarity index 94%
copy from src/modules/alsa/mixer/paths/analog-output-headphones.conf
copy to src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
index 61d2e29..8b2968e 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
@@ -14,7 +14,7 @@
# along with PulseAudio; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-; Path for mixers that have a 'Headphone' control
+; Path for mixers that have a 'Headphone2' control
;
; See analog-output.conf.common for an explanation on the directives
@@ -38,6 +38,10 @@ switch = off
volume = off
[Element Headphone]
+switch = off
+volume = off
+
+[Element Headphone2]
required = any
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
index 61d2e29..6e79a78 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
@@ -44,6 +44,10 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
+[Element Headphone2]
+switch = off
+volume = off
+
[Element Speaker]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf
index ac41a8d..ffa1a4f 100644
--- a/src/modules/alsa/mixer/profile-sets/default.conf
+++ b/src/modules/alsa/mixer/profile-sets/default.conf
@@ -62,14 +62,14 @@ auto-profiles = yes
[Mapping analog-mono]
device-strings = hw:%f
channel-map = mono
-paths-output = analog-output analog-output-headphones analog-output-mono analog-output-lfe-on-mono
+paths-output = analog-output analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line
priority = 1
[Mapping analog-stereo]
device-strings = front:%f hw:%f
channel-map = left,right
-paths-output = analog-output analog-output-headphones analog-output-mono analog-output-lfe-on-mono
+paths-output = analog-output analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line
priority = 10
commit 73d9d317b2d74aa81ec3df7b83c48cb175e18c59
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 03:25:32 2009 +0100
alsa: cover Input Source:AUX IN
As seen on some HDA chips:
https://bugzilla.redhat.com/attachment.cgi?id=359804
diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common
index 007bb21..951e11f 100644
--- a/src/modules/alsa/mixer/paths/analog-input.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common
@@ -98,6 +98,10 @@ priority = 18
name = input-docking
priority = 17
+[Option Input Source:AUX IN]
+name = input
+priority = 10
+
;;; 'Capture Source'
[Element Capture Source]
commit 591ade1aca2a444f5a6ba8198535d75290ee267f
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 03:41:21 2009 +0100
alsa: lower priority for Headphone2 path
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
index 8b2968e..d1c3b22 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
@@ -19,7 +19,7 @@
; See analog-output.conf.common for an explanation on the directives
[General]
-priority = 90
+priority = 89
[Element Hardware Master]
switch = mute
commit 73a4f4fdbcb97e42479ec8498c305449e32f8b89
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 03:42:42 2009 +0100
alsa: leave other headphone control enabled if possible
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
index d1c3b22..f2fd31c 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
@@ -37,9 +37,12 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+; This profile path is intended to control the second headphones, not
+; the first headphones. But it should not hurt if we leave the
+; headphone jack enabled nonetheless.
[Element Headphone]
-switch = off
-volume = off
+switch = mute
+volume = zero
[Element Headphone2]
required = any
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
index 6e79a78..2131cfe 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
@@ -44,9 +44,12 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
+; This profile path is intended to control the first headphones, not
+; the second headphones. But it should not hurt if we leave the second
+; headphone jack enabled nonetheless.
[Element Headphone2]
-switch = off
-volume = off
+switch = mute
+volume = zero
[Element Speaker]
switch = off
diff --git a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf
index 911361d..0a43e27 100644
--- a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf
@@ -48,6 +48,10 @@ override-map.2 = lfe,lfe
switch = mute
volume = zero
+[Element Headphone2]
+switch = mute
+volume = zero
+
[Element Speaker]
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/paths/analog-output-mono.conf b/src/modules/alsa/mixer/paths/analog-output-mono.conf
index 2fbc60b..542edc4 100644
--- a/src/modules/alsa/mixer/paths/analog-output-mono.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-mono.conf
@@ -45,6 +45,10 @@ override-map.2 = all-left,all-right
switch = mute
volume = zero
+[Element Headphone2]
+switch = mute
+volume = zero
+
[Element Speaker]
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output.conf
index f71a05a..b10efc2 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf
+++ b/src/modules/alsa/mixer/paths/analog-output.conf
@@ -44,6 +44,10 @@ volume = off
switch = mute
volume = zero
+[Element Headphone2]
+switch = mute
+volume = zero
+
[Element Speaker]
switch = mute
volume = merge
commit 6839ef687410bcf6ef74163688676c518e8e0660
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 03:43:42 2009 +0100
alsa: create a seperate mixer path for Speaker elements
On some cards line-out is independant of Sepaker and it is a good idea
to cover that so that they can independantly be activated.
https://bugzilla.redhat.com/show_bug.cgi?id=520884
diff --git a/src/Makefile.am b/src/Makefile.am
index aa71d91..f0d5a5e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -141,6 +141,7 @@ EXTRA_DIST = \
modules/alsa/mixer/paths/analog-input-tvtuner.conf \
modules/alsa/mixer/paths/analog-input-video.conf \
modules/alsa/mixer/paths/analog-output.conf \
+ modules/alsa/mixer/paths/analog-output-speaker.conf \
modules/alsa/mixer/paths/analog-output.conf.common \
modules/alsa/mixer/paths/analog-output-headphones.conf \
modules/alsa/mixer/paths/analog-output-headphones-2.conf \
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
similarity index 97%
copy from src/modules/alsa/mixer/paths/analog-output.conf
copy to src/modules/alsa/mixer/paths/analog-output-speaker.conf
index b10efc2..aea7853 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
@@ -14,7 +14,7 @@
# along with PulseAudio; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-; Intended for the 'default' output
+; Path for mixers that have a 'Speaker' control
;
; See analog-output.conf.common for an explanation on the directives
@@ -49,6 +49,7 @@ switch = mute
volume = zero
[Element Speaker]
+required = any
switch = mute
volume = merge
override-map.1 = all
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output.conf
index b10efc2..d7c1223 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf
+++ b/src/modules/alsa/mixer/paths/analog-output.conf
@@ -14,12 +14,13 @@
# along with PulseAudio; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-; Intended for the 'default' output
+; Intended for the 'default' output. Note that a-o-speaker.conf has a
+; higher priority than this
;
; See analog-output.conf.common for an explanation on the directives
[General]
-priority = 100
+priority = 99
[Element Hardware Master]
switch = mute
@@ -37,7 +38,7 @@ override-map.2 = all-left,all-right
switch = off
volume = off
-; This profile path is intended to control the speaker, not the
+; This profile path is intended to control the default output, not the
; headphones. But it should not hurt if we leave the headphone jack
; enabled nonetheless.
[Element Headphone]
@@ -50,9 +51,7 @@ volume = zero
[Element Speaker]
switch = mute
-volume = merge
-override-map.1 = all
-override-map.2 = all-left,all-right
+volume = off
[Element Front]
switch = mute
diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf
index ffa1a4f..046938f 100644
--- a/src/modules/alsa/mixer/profile-sets/default.conf
+++ b/src/modules/alsa/mixer/profile-sets/default.conf
@@ -62,42 +62,42 @@ auto-profiles = yes
[Mapping analog-mono]
device-strings = hw:%f
channel-map = mono
-paths-output = analog-output analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line
priority = 1
[Mapping analog-stereo]
device-strings = front:%f hw:%f
channel-map = left,right
-paths-output = analog-output analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line
priority = 10
[Mapping analog-surround-40]
device-strings = surround40:%f
channel-map = front-left,front-right,rear-left,rear-right
-paths-output = analog-output analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
priority = 7
direction = output
[Mapping analog-surround-41]
device-strings = surround41:%f
channel-map = front-left,front-right,rear-left,rear-right,lfe
-paths-output = analog-output analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
priority = 8
direction = output
[Mapping analog-surround-50]
device-strings = surround50:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center
-paths-output = analog-output analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
priority = 7
direction = output
[Mapping analog-surround-51]
device-strings = surround51:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
-paths-output = analog-output analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
priority = 8
direction = output
@@ -105,7 +105,7 @@ direction = output
device-strings = surround71:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
description = Analog Surround 7.1
-paths-output = analog-output analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
priority = 7
direction = output
commit 7938442f77fafbc6c14d5072d14b773b289dc809
Merge: 6839ef6 d83dd5b
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Oct 31 03:49:02 2009 +0100
Merge remote branch 'phish3/master'
commit 21ffcd55a5a425870f8f4c3b4933bc7cb352e339
Merge: c4e276e 7938442
Author: Daniel Mack <daniel at caiaq.de>
Date: Mon Nov 2 18:09:57 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 83b181f92af6a06ad5f127fea36323d7277ad6cf
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Nov 4 00:15:47 2009 +0100
alsa: cover 'Analog Output' control
http://pulseaudio.org/ticket/702
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common
index 3c6ce80..fd7f0cf 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common
@@ -109,3 +109,20 @@ priority = 10
[Option External Amplifier:off]
name = output-amplifier-off
priority = 0
+
+;;; 'Analog Output'
+
+[Element Analog Output]
+enumeration = select
+
+[Option Analog Output:Speakers]
+name = output-speaker
+priority = 10
+
+[Option Analog Output:Headphones]
+name = output-headphones
+priority = 9
+
+[Option Analog Output:FP Headphones]
+name = output-headphones
+priority = 8
commit 19516d4e7f4b6db205681931ad1c4bc1b6bef363
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 03:21:10 2009 +0100
alsa: introduce more standard path names
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index f3ce681..8b13239 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -1712,7 +1712,9 @@ static int option_verify(pa_alsa_option *o) {
{ "input-boost-on", N_("Boost") },
{ "input-boost-off", N_("No Boost") },
{ "output-amplifier-on", N_("Amplifier") },
- { "output-amplifier-off", N_("No Amplifier") }
+ { "output-amplifier-off", N_("No Amplifier") },
+ { "output-speaker", N_("Speaker") },
+ { "output-headphones", N_("Headphones") }
};
pa_assert(o);
@@ -1770,15 +1772,17 @@ static int element_verify(pa_alsa_element *e) {
static int path_verify(pa_alsa_path *p) {
static const struct description_map well_known_descriptions[] = {
- { "analog-input", N_("Analog Input") },
- { "analog-input-microphone", N_("Analog Microphone") },
- { "analog-input-linein", N_("Analog Line-In") },
- { "analog-input-radio", N_("Analog Radio") },
- { "analog-input-video", N_("Analog Video") },
- { "analog-output", N_("Analog Output") },
- { "analog-output-headphones", N_("Analog Headphones") },
- { "analog-output-lfe-on-mono", N_("Analog Output (LFE)") },
- { "analog-output-mono", N_("Analog Mono Output") }
+ { "analog-input", N_("Analog Input") },
+ { "analog-input-microphone", N_("Analog Microphone") },
+ { "analog-input-linein", N_("Analog Line-In") },
+ { "analog-input-radio", N_("Analog Radio") },
+ { "analog-input-video", N_("Analog Video") },
+ { "analog-output", N_("Analog Output") },
+ { "analog-output-headphones", N_("Analog Headphones") },
+ { "analog-output-lfe-on-mono", N_("Analog Output (LFE)") },
+ { "analog-output-mono", N_("Analog Mono Output") },
+ { "analog-output-headphones-2", N_("Analog Headphones 2") },
+ { "analog-output-speaker", N_("Analog Speaker") }
};
pa_alsa_element *e;
commit 642c69bed85ce7c0be57bd08af0cf7243228f08b
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 03:22:15 2009 +0100
core-util: add call to detect if we are called from within a VM
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 2b0a60a..93ddf30 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2944,6 +2944,7 @@ int pa_pipe_cloexec(int pipefd[2]) {
if (errno != EINVAL && errno != ENOSYS)
return r;
+
#endif
if ((r = pipe(pipefd)) < 0)
@@ -2965,6 +2966,7 @@ int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
if (errno != EINVAL && errno != ENOSYS)
return fd;
+
#endif
if ((fd = accept(sockfd, addr, addrlen)) < 0)
@@ -3015,3 +3017,90 @@ void pa_nullify_stdfds(void) {
#endif
}
+
+char *pa_read_line_from_file(const char *fn) {
+ FILE *f;
+ char ln[256] = "", *r;
+
+ if (!(f = pa_fopen_cloexec(fn, "r")))
+ return NULL;
+
+ r = fgets(ln, sizeof(ln)-1, f);
+ fclose(f);
+
+ if (!r) {
+ errno = EIO;
+ return NULL;
+ }
+
+ pa_strip_nl(ln);
+ return pa_xstrdup(ln);
+}
+
+pa_bool_t pa_running_in_vm(void) {
+
+#if defined(__i386__) || defined(__x86_64__)
+
+ /* Both CPUID and DMI are x86 specific interfaces... */
+
+ uint32_t eax = 0x40000000;
+ union {
+ uint32_t sig32[3];
+ char text[13];
+ } sig;
+
+#ifdef __linux__
+ const char *const dmi_vendors[] = {
+ "/sys/class/dmi/id/sys_vendor",
+ "/sys/class/dmi/id/board_vendor",
+ "/sys/class/dmi/id/bios_vendor"
+ };
+
+ unsigned i;
+
+ for (i = 0; i < PA_ELEMENTSOF(dmi_vendors); i++) {
+ char *s;
+
+ if ((s = pa_read_line_from_file(dmi_vendors[i]))) {
+
+ if (pa_startswith(s, "QEMU") ||
+ /* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
+ pa_startswith(s, "VMware") ||
+ pa_startswith(s, "VMW") ||
+ pa_startswith(s, "Microsoft Corporation") ||
+ pa_startswith(s, "innotek GmbH") ||
+ pa_startswith(s, "Xen")) {
+
+ pa_xfree(s);
+ return TRUE;
+ }
+
+ pa_xfree(s);
+ }
+ }
+
+#endif
+
+ /* http://lwn.net/Articles/301888/ */
+ pa_zero(sig);
+
+ __asm__ __volatile__ (
+ " xor %%ebx, %%ebx \n\t"
+ " cpuid \n\t"
+
+ : "=a" (eax), "=b" (sig.sig32[0]), "=c" (sig.sig32[1]), "=d" (sig.sig32[2])
+ : "0" (eax)
+ );
+
+ if (pa_streq(sig.text, "XenVMMXenVMM") ||
+ pa_streq(sig.text, "KVMKVMKVM") ||
+ /* http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458 */
+ pa_streq(sig.text, "VMwareVMware") ||
+ /* http://msdn.microsoft.com/en-us/library/bb969719.aspx */
+ pa_streq(sig.text, "Microsoft Hv"))
+ return TRUE;
+
+#endif
+
+ return FALSE;
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 9c9cf78..31a83bc 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -267,4 +267,7 @@ FILE* pa_fopen_cloexec(const char *path, const char *mode);
void pa_nullify_stdfds(void);
+char *pa_read_line_from_file(const char *fn);
+pa_bool_t pa_running_in_vm(void);
+
#endif
commit c079ceeba00c77a93c613ecf4a3f2cb516db0753
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 03:22:48 2009 +0100
daemon: during startup say whether we run in a VM
diff --git a/src/daemon/main.c b/src/daemon/main.c
index cc6f24b..4891182 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -648,7 +648,6 @@ int main(int argc, char *argv[]) {
if (conf->daemonize) {
pid_t child;
- int tty_fd;
if (pa_stdio_acquire() < 0) {
pa_log(_("Failed to acquire stdio."));
@@ -781,6 +780,8 @@ int main(int argc, char *argv[]) {
pa_log_debug(_("Running in valgrind mode: %s"), pa_yes_no(pa_in_valgrind()));
+ pa_log_debug(_("Running in VM: %s"), pa_yes_no(pa_running_in_vm()));
+
#ifdef __OPTIMIZE__
pa_log_debug(_("Optimized build: yes"));
#else
commit 53b046d5c9593d848270e85017c2999a61256e0e
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 03:23:08 2009 +0100
alsa: disable timer-based scheduling inside a VM
In virtual machines sound card clocks and OS scheduling tend to become
unreliable, adding various 'uneven' latencies. The adaptive algorithm
that handles drop-outs does not handle it this well: in contrast to
drop-outs on real machines that are evenly distributed, small and can
easily be encountered via the adpative algorithms, drop-outs in VMs tend
to happen abruptly, and massively, which is not easy to counter.
This patch simply disables timer based scheduling in VMs reverting to
classic IO based scheduling. This should help make PA perform better in
VMs.
https://bugzilla.redhat.com/show_bug.cgi?id=532775
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 37419d9..856adb1 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1698,10 +1698,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
goto fail;
}
- if (use_tsched && !pa_rtclock_hrtimer()) {
- pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel.");
- use_tsched = FALSE;
- }
+ use_tsched = pa_alsa_may_tsched(use_tsched);
u = pa_xnew0(struct userdata, 1);
u->core = m->core;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 37dd647..e775b20 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1541,10 +1541,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
goto fail;
}
- if (use_tsched && !pa_rtclock_hrtimer()) {
- pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel.");
- use_tsched = FALSE;
- }
+ use_tsched = pa_alsa_may_tsched(use_tsched);
u = pa_xnew0(struct userdata, 1);
u->core = m->core;
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 0e22d17..b8d1357 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -43,6 +43,7 @@
#include <pulsecore/once.h>
#include <pulsecore/thread.h>
#include <pulsecore/conf-parser.h>
+#include <pulsecore/core-rtclock.h>
#include "alsa-util.h"
#include "alsa-mixer.h"
@@ -1308,3 +1309,26 @@ const char* pa_alsa_strerror(int errnum) {
return translated;
}
+
+pa_bool_t pa_alsa_may_tsched(pa_bool_t want) {
+
+ if (!want)
+ return FALSE;
+
+ if (!pa_rtclock_hrtimer()) {
+ /* We cannot depend on being woken up in time when the timers
+ are inaccurate, so let's fallback to classic IO based playback
+ then. */
+ pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel.");
+ return FALSE; }
+
+ if (pa_running_in_vm()) {
+ /* We cannot depend on being woken up when we ask for in a VM,
+ * so let's fallback to classic IO based playback then. */
+ pa_log_notice("Disabling timer-based scheduling because running inside a VM.");
+ return FALSE;
+ }
+
+
+ return TRUE;
+}
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index f6206fe..1d1256b 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -142,4 +142,6 @@ pa_bool_t pa_alsa_pcm_is_modem(snd_pcm_t *pcm);
const char* pa_alsa_strerror(int errnum);
+pa_bool_t pa_alsa_may_tsched(pa_bool_t want);
+
#endif
commit d2c59354d554f136739be7bbcd326f1d254f778e
Author: Vladimir Kokarev <matrix47 at gmail.com>
Date: Sat Sep 19 19:43:24 2009 +0400
volume: add pa_cvolume_inc_clamp function
added function to increase volume not exceeding specified limit
simply changed PA_VOLUME_MAX to 'limit' in pa_cvolume_inc
pa_cvolume_inc now calls pa_cvolume_inc_clamp with PA_VOLUME_MAX limit
diff --git a/src/map-file b/src/map-file
index 5011122..1fffaff 100644
--- a/src/map-file
+++ b/src/map-file
@@ -130,6 +130,7 @@ pa_cvolume_get_balance;
pa_cvolume_get_fade;
pa_cvolume_get_position;
pa_cvolume_inc;
+pa_cvolume_inc_clamp;
pa_cvolume_init;
pa_cvolume_max;
pa_cvolume_max_mask;
diff --git a/src/pulse/volume.c b/src/pulse/volume.c
index 2d2bba2..59e9a18 100644
--- a/src/pulse/volume.c
+++ b/src/pulse/volume.c
@@ -885,7 +885,7 @@ pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvo
return dest;
}
-pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc) {
+pa_cvolume* pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit) {
pa_volume_t m;
pa_assert(v);
@@ -895,14 +895,18 @@ pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc) {
m = pa_cvolume_max(v);
- if (m >= PA_VOLUME_MAX - inc)
- m = PA_VOLUME_MAX;
+ if (m >= limit - inc)
+ m = limit;
else
m += inc;
return pa_cvolume_scale(v, m);
}
+pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc){
+ return pa_cvolume_inc_clamp(v, inc, PA_VOLUME_MAX);
+}
+
pa_cvolume* pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec) {
pa_volume_t m;
diff --git a/src/pulse/volume.h b/src/pulse/volume.h
index c964020..ded4422 100644
--- a/src/pulse/volume.h
+++ b/src/pulse/volume.h
@@ -348,6 +348,10 @@ pa_volume_t pa_cvolume_get_position(pa_cvolume *cv, const pa_channel_map *map, p
* and dest may point to the same structure. \since 0.9.16 */
pa_cvolume* pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
+/** Increase the volume passed in by 'inc', but not exceeding 'limit'.
+ * The proportions between the channels are kept. \since 0.9.19 */
+pa_cvolume* pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit);
+
/** Increase the volume passed in by 'inc'. The proportions between
* the channels are kept. \since 0.9.16 */
pa_cvolume* pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc);
commit 7793da371bbf70e23c0b45de1e188f5dd58f3324
Author: Vladimir Kokarev <matrix47 at gmail.com>
Date: Thu Nov 5 04:55:21 2009 +0100
lirc,mmkvd: added module parameters volume_limit, volume_step
volume_limit sets maximum volume that can be set from the module
default is PA_VOLUME_NORM*3/2 (150%)
volume_step sets step in volume changing
default is PA_VOLUME_NORM/20
values are of raw pa_volume_t type
diff --git a/src/modules/module-lirc.c b/src/modules/module-lirc.c
index d0e902f..e977862 100644
--- a/src/modules/module-lirc.c
+++ b/src/modules/module-lirc.c
@@ -45,12 +45,14 @@ PA_MODULE_AUTHOR("Lennart Poettering");
PA_MODULE_DESCRIPTION("LIRC volume control");
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(TRUE);
-PA_MODULE_USAGE("config=<config file> sink=<sink name> appname=<lirc application name>");
+PA_MODULE_USAGE("config=<config file> sink=<sink name> appname=<lirc application name> volume_limit=<volume limit> volume_step=<volume change step>");
static const char* const valid_modargs[] = {
"config",
"sink",
"appname",
+ "volume_limit",
+ "volume_step",
NULL,
};
@@ -61,10 +63,10 @@ struct userdata {
char *sink_name;
pa_module *module;
float mute_toggle_save;
+ pa_volume_t volume_limit;
+ pa_volume_t volume_step;
};
-#define DELTA (PA_VOLUME_NORM/20)
-
static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void*userdata) {
struct userdata *u = userdata;
char *name = NULL, *code = NULL;
@@ -125,12 +127,12 @@ static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event
switch (volchange) {
case UP:
- pa_cvolume_inc(&cv, DELTA);
+ pa_cvolume_inc_clamp(&cv, u->volume_step, u->volume_limit);
pa_sink_set_volume(s, &cv, TRUE, TRUE);
break;
case DOWN:
- pa_cvolume_dec(&cv, DELTA);
+ pa_cvolume_dec(&cv, u->volume_step);
pa_sink_set_volume(s, &cv, TRUE, TRUE);
break;
@@ -170,6 +172,8 @@ fail:
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
+ pa_volume_t volume_limit = PA_VOLUME_NORM*3/2;
+ pa_volume_t volume_step = PA_VOLUME_NORM/20;
pa_assert(m);
@@ -178,6 +182,16 @@ int pa__init(pa_module*m) {
goto fail;
}
+ if (pa_modargs_get_value_u32(ma, "volume_limit", &volume_limit) < 0) {
+ pa_log("Failed to parse volume limit");
+ goto fail;
+ }
+
+ if (pa_modargs_get_value_u32(ma, "volume_step", &volume_step) < 0) {
+ pa_log("Failed to parse volume step");
+ goto fail;
+ }
+
m->userdata = u = pa_xnew(struct userdata, 1);
u->module = m;
u->io = NULL;
@@ -185,6 +199,8 @@ int pa__init(pa_module*m) {
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->lirc_fd = -1;
u->mute_toggle_save = 0;
+ u->volume_limit = volume_limit;
+ u->volume_step = volume_step;
if ((u->lirc_fd = lirc_init((char*) pa_modargs_get_value(ma, "appname", "pulseaudio"), 1)) < 0) {
pa_log("lirc_init() failed.");
diff --git a/src/modules/module-mmkbd-evdev.c b/src/modules/module-mmkbd-evdev.c
index 14a9dd3..193c1f4 100644
--- a/src/modules/module-mmkbd-evdev.c
+++ b/src/modules/module-mmkbd-evdev.c
@@ -48,13 +48,15 @@ PA_MODULE_AUTHOR("Lennart Poettering");
PA_MODULE_DESCRIPTION("Multimedia keyboard support via Linux evdev");
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(FALSE);
-PA_MODULE_USAGE("device=<evdev device> sink=<sink name>");
+PA_MODULE_USAGE("device=<evdev device> sink=<sink name> volume_limit=<volume limit> volume_step=<volume change step>");
#define DEFAULT_DEVICE "/dev/input/event0"
static const char* const valid_modargs[] = {
"device",
"sink",
+ "volume_limit",
+ "volume_step",
NULL,
};
@@ -63,10 +65,10 @@ struct userdata {
pa_io_event *io;
char *sink_name;
pa_module *module;
+ pa_volume_t volume_limit;
+ pa_volume_t volume_step;
};
-#define DELTA (PA_VOLUME_NORM/20)
-
static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void*userdata) {
struct userdata *u = userdata;
@@ -120,12 +122,12 @@ static void io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event
switch (volchange) {
case UP:
- pa_cvolume_inc(&cv, DELTA);
+ pa_cvolume_inc_clamp(&cv, u->volume_step, u->volume_limit);
pa_sink_set_volume(s, &cv, TRUE, TRUE);
break;
case DOWN:
- pa_cvolume_dec(&cv, DELTA);
+ pa_cvolume_dec(&cv, u->volume_step);
pa_sink_set_volume(s, &cv, TRUE, TRUE);
break;
@@ -160,6 +162,8 @@ int pa__init(pa_module*m) {
struct input_id input_id;
char name[256];
uint8_t evtype_bitmask[EV_MAX/8 + 1];
+ pa_volume_t volume_limit = PA_VOLUME_NORM*3/2;
+ pa_volume_t volume_step = PA_VOLUME_NORM/20;
pa_assert(m);
@@ -168,12 +172,24 @@ int pa__init(pa_module*m) {
goto fail;
}
+ if (pa_modargs_get_value_u32(ma, "volume_limit", &volume_limit) < 0) {
+ pa_log("Failed to parse volume limit");
+ goto fail;
+ }
+
+ if (pa_modargs_get_value_u32(ma, "volume_step", &volume_step) < 0) {
+ pa_log("Failed to parse volume step");
+ goto fail;
+ }
+
m->userdata = u = pa_xnew(struct userdata, 1);
u->module = m;
u->io = NULL;
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->fd = -1;
u->fd_type = 0;
+ u->volume_limit = volume_limit;
+ u->volume_step = volume_step;
if ((u->fd = pa_open_cloexec(pa_modargs_get_value(ma, "device", DEFAULT_DEVICE), O_RDONLY, 0)) < 0) {
pa_log("Failed to open evdev device: %s", pa_cstrerror(errno));
commit 38a03c1e4f14ad6edfd0b7d95c8d7440c3a950e2
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 05:08:50 2009 +0100
man: fix build with --disable-manpages
http://pulseaudio.org/ticket/698
diff --git a/man/Makefile.am b/man/Makefile.am
index 9b229f5..7793fe7 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -20,21 +20,6 @@ pulseconfdir=$(sysconfdir)/pulse
CLEANFILES = \
$(noinst_DATA)
-dist_man_MANS = \
- pulseaudio.1 \
- esdcompat.1 \
- pax11publish.1 \
- paplay.1 \
- pacat.1 \
- pacmd.1 \
- pactl.1 \
- pasuspender.1 \
- padsp.1 \
- pabrowse.1 \
- pulse-daemon.conf.5 \
- pulse-client.conf.5 \
- default.pa.5
-
noinst_DATA = \
pulseaudio.1.xml \
esdcompat.1.xml \
@@ -50,24 +35,39 @@ noinst_DATA = \
pulse-client.conf.5.xml \
default.pa.5.xml
-if BUILD_MANPAGES
-
-CLEANFILES += \
- $(dist_man_MANS)
-
%.xml: %.xml.in Makefile
sed -e 's, at pulseconfdir\@,$(pulseconfdir),g' \
-e 's, at PACKAGE_BUGREPORT\@,$(PACKAGE_BUGREPORT),g' \
-e 's, at PACKAGE_URL\@,$(PACKAGE_URL),g' $< > $@
-%: %.xml Makefile
- perl $(srcdir)/xmltoman $< > $@ || rm -f $@
-
xmllint: $(noinst_DATA)
for f in $(noinst_DATA) ; do \
xmllint --noout --valid "$$f" || exit 1 ; \
done
+if BUILD_MANPAGES
+
+dist_man_MANS = \
+ pulseaudio.1 \
+ esdcompat.1 \
+ pax11publish.1 \
+ paplay.1 \
+ pacat.1 \
+ pacmd.1 \
+ pactl.1 \
+ pasuspender.1 \
+ padsp.1 \
+ pabrowse.1 \
+ pulse-daemon.conf.5 \
+ pulse-client.conf.5 \
+ default.pa.5
+
+CLEANFILES += \
+ $(dist_man_MANS)
+
+%: %.xml Makefile
+ perl $(srcdir)/xmltoman $< > $@ || rm -f $@
+
endif
EXTRA_DIST = \
commit 721e32b473ca821d5551a3d93ac04f84c5988c8f
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 05:18:10 2009 +0100
jack: never try to autoconnect to MIDI ports
Original patch supplied by 'adi'
http://pulseaudio.org/ticket/669
diff --git a/src/modules/jack/module-jack-sink.c b/src/modules/jack/module-jack-sink.c
index fc976fa..9f3e071 100644
--- a/src/modules/jack/module-jack-sink.c
+++ b/src/modules/jack/module-jack-sink.c
@@ -334,7 +334,7 @@ int pa__init(pa_module*m) {
goto fail;
}
- ports = jack_get_ports(u->client, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
+ ports = jack_get_ports(u->client, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical|JackPortIsInput);
channels = 0;
for (p = ports; *p; p++)
diff --git a/src/modules/jack/module-jack-source.c b/src/modules/jack/module-jack-source.c
index a898e0e..6c68527 100644
--- a/src/modules/jack/module-jack-source.c
+++ b/src/modules/jack/module-jack-source.c
@@ -286,7 +286,7 @@ int pa__init(pa_module*m) {
goto fail;
}
- ports = jack_get_ports(u->client, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
+ ports = jack_get_ports(u->client, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical|JackPortIsOutput);
channels = 0;
for (p = ports; *p; p++)
commit 4d62f159a74c6e5b46be5823483a7dedd5691b45
Merge: 721e32b 897ef86
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 22:54:42 2009 +0100
Merge remote branch 'origin/merge-queue'
Conflicts:
src/pulsecore/sink-input.c
src/pulsecore/sink.c
diff --cc src/pulsecore/sink-input.c
index 1af2823,2acaa08..216edd4
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@@ -44,10 -45,14 +45,15 @@@
#define MEMBLOCKQ_MAXLENGTH (32*1024*1024)
#define CONVERT_BUFFER_LENGTH (PA_PAGE_SIZE)
-static PA_DEFINE_CHECK_TYPE(pa_sink_input, pa_msgobject);
+PA_DEFINE_PUBLIC_CLASS(pa_sink_input, pa_msgobject);
static void sink_input_free(pa_object *o);
+static void set_real_ratio(pa_sink_input *i, const pa_cvolume *v);
+ static void sink_input_set_ramping_info(pa_sink_input* i, pa_volume_t pre_virtual_volume, pa_volume_t target_virtual_volume, pa_usec_t t);
+ static void sink_input_set_ramping_info_for_mute(pa_sink_input* i, pa_bool_t mute, pa_usec_t t);
+ static void sink_input_volume_ramping(pa_sink_input* i, pa_memchunk* chunk);
+ static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes);
+ static void sink_input_release_envelope(pa_sink_input *i);
pa_sink_input_new_data* pa_sink_input_new_data_init(pa_sink_input_new_data *data) {
pa_assert(data);
@@@ -505,11 -494,14 +521,17 @@@ static void sink_input_free(pa_object *
pa_log_info("Freeing input %u \"%s\"", i->index, pa_strnull(pa_proplist_gets(i->proplist, PA_PROP_MEDIA_NAME)));
- pa_assert(!i->thread_info.attached);
+ /* Side note: this function must be able to destruct properly any
+ * kind of sink input in any state, even those which are
+ * "half-moved" or are connected to sinks that have no asyncmsgq
+ * and are hence half-destructed themselves! */
+ if (i->thread_info.ramp_info.envelope) {
+ pa_log_debug ("Freeing envelope\n");
+ pa_envelope_free(i->thread_info.ramp_info.envelope);
+ i->thread_info.ramp_info.envelope = NULL;
+ }
+
if (i->thread_info.render_memblockq)
pa_memblockq_free(i->thread_info.render_memblockq);
@@@ -595,8 -585,9 +617,9 @@@ pa_usec_t pa_sink_input_get_latency(pa_
/* Called from thread context */
void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, pa_memchunk *chunk, pa_cvolume *volume) {
- pa_bool_t do_volume_adj_here;
+ pa_bool_t do_volume_adj_here, need_volume_factor_sink;
pa_bool_t volume_is_norm;
+ pa_bool_t ramping;
size_t block_size_max_sink, block_size_max_sink_input;
size_t ilength;
@@@ -641,9 -631,8 +664,9 @@@
* to adjust the volume *before* we resample. Otherwise we can do
* it after and leave it for the sink code */
- do_volume_adj_here = !pa_channel_map_equal(&i->channel_map, &i->sink->channel_map);
+ do_volume_adj_here = !pa_channel_map_equal(&i->channel_map, &i->sink->channel_map) || i->thread_info.ramp_info.is_ramping;
volume_is_norm = pa_cvolume_is_norm(&i->thread_info.soft_volume) && !i->thread_info.muted;
+ need_volume_factor_sink = !pa_cvolume_is_norm(&i->volume_factor_sink);
while (!pa_memblockq_is_readable(i->thread_info.render_memblockq)) {
pa_memchunk tchunk;
@@@ -684,24 -672,12 +707,24 @@@
wchunk.length = block_size_max_sink_input;
/* It might be necessary to adjust the volume here */
- if (do_volume_adj_here && !volume_is_norm) {
+ if (do_volume_adj_here && !volume_is_norm && !i->thread_info.ramp_info.is_ramping) {
pa_memchunk_make_writable(&wchunk, 0);
- if (i->thread_info.muted)
+ if (i->thread_info.muted) {
pa_silence_memchunk(&wchunk, &i->thread_info.sample_spec);
- else
+ nvfs = FALSE;
+
+ } else if (!i->thread_info.resampler && nvfs) {
+ pa_cvolume v;
+
+ /* If we don't need a resampler we can merge the
+ * post and the pre volume adjustment into one */
+
+ pa_sw_cvolume_multiply(&v, &i->thread_info.soft_volume, &i->volume_factor_sink);
+ pa_volume_memchunk(&wchunk, &i->thread_info.sample_spec, &v);
+ nvfs = FALSE;
+
+ } else
pa_volume_memchunk(&wchunk, &i->thread_info.sample_spec, &i->thread_info.soft_volume);
}
@@@ -977,60 -934,22 +1018,9 @@@ static void set_real_ratio(pa_sink_inpu
}
/* Called from main context */
-pa_cvolume *pa_sink_input_get_relative_volume(pa_sink_input *i, pa_cvolume *v) {
- unsigned c;
-
- pa_sink_input_assert_ref(i);
- pa_assert(v);
- pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
-
- /* This always returns the relative volume. Converts the float
- * version into a pa_cvolume */
-
- v->channels = i->sample_spec.channels;
-
- for (c = 0; c < v->channels; c++)
- v->values[c] = pa_sw_volume_from_linear(i->relative_volume[c]);
-
- return v;
+void pa_sink_input_set_volume(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute) {
- pa_cvolume v;
-
- pa_sink_input_assert_ref(i);
- pa_assert_ctl_context();
- pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
- pa_assert(volume);
- pa_assert(pa_cvolume_valid(volume));
- pa_assert(volume->channels == 1 || pa_cvolume_compatible(volume, &i->sample_spec));
-
- if ((i->sink->flags & PA_SINK_FLAT_VOLUME) && !absolute) {
- v = i->sink->reference_volume;
- pa_cvolume_remap(&v, &i->sink->channel_map, &i->channel_map);
-
- if (pa_cvolume_compatible(volume, &i->sample_spec))
- volume = pa_sw_cvolume_multiply(&v, &v, volume);
- else
- volume = pa_sw_cvolume_multiply_scalar(&v, &v, pa_cvolume_max(volume));
- } else {
-
- if (!pa_cvolume_compatible(volume, &i->sample_spec)) {
- v = i->volume;
- volume = pa_cvolume_scale(&v, pa_cvolume_max(volume));
- }
- }
-
- if (pa_cvolume_equal(volume, &i->volume)) {
- i->save_volume = i->save_volume || save;
- return;
- }
-
- i->volume = *volume;
- i->save_volume = save;
-
- if (i->sink->flags & PA_SINK_FLAT_VOLUME)
- /* We are in flat volume mode, so let's update all sink input
- * volumes and update the flat volume of the sink */
-
- pa_sink_set_volume(i->sink, NULL, TRUE, save);
-
- else {
- /* OK, we are in normal volume mode. The volume only affects
- * ourselves */
- set_real_ratio(i, volume);
-
- /* Copy the new soft_volume to the thread_info struct */
- pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);
- }
-
- /* The volume changed, let's tell people so */
- if (i->volume_changed)
- i->volume_changed(i);
-
- pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
++ /* test ramping -> return pa_sink_input_set_volume_with_ramping(i, volume, save, absolute, 2000 * PA_USEC_PER_MSEC); */
++ return pa_sink_input_set_volume_with_ramping(i, volume, save, absolute, 0);
}
/* Called from main context */
@@@ -1659,3 -1567,217 +1662,227 @@@ finish
if (pl)
pa_proplist_free(pl);
}
+
+ /* Called from IO context */
+ static void sink_input_volume_ramping(pa_sink_input* i, pa_memchunk* chunk) {
+ pa_assert(i);
+ pa_assert(chunk);
+ pa_assert(chunk->memblock);
+ pa_assert(i->thread_info.ramp_info.is_ramping);
+
+ /* Volume is adjusted with ramping effect here */
+ pa_envelope_apply(i->thread_info.ramp_info.envelope, chunk);
+
+ if (pa_envelope_is_finished(i->thread_info.ramp_info.envelope)) {
+ i->thread_info.ramp_info.is_ramping = FALSE;
+ if (pa_atomic_load(&i->before_ramping_v)) {
+ i->thread_info.soft_volume = i->thread_info.future_soft_volume;
+ pa_atomic_store(&i->before_ramping_v, 0);
+ }
+ else if (pa_atomic_load(&i->before_ramping_m)) {
+ i->thread_info.muted = i->thread_info.future_muted;
+ pa_atomic_store(&i->before_ramping_m, 0);
+ }
+ }
+ }
+
+ /*
+ * Called from main context
+ * This function should be called inside pa_sink_input_set_volume_with_ramping
+ * should be called after soft_volume of sink_input and sink are all adjusted
+ */
+ static void sink_input_set_ramping_info(pa_sink_input* i, pa_volume_t pre_virtual_volume, pa_volume_t target_virtual_volume, pa_usec_t t) {
+
+ int32_t target_abs_vol, target_apply_vol, pre_apply_vol;
+ pa_assert(i);
+
+ pa_log_debug("Sink input's soft volume is %d= %f ", pa_cvolume_avg(&i->soft_volume), pa_sw_volume_to_linear(pa_cvolume_avg(&i->soft_volume)));
+
+ /* Calculation formula are target_abs_vol := i->soft_volume
+ * target_apply_vol := lrint(pa_sw_volume_to_linear(target_abs_vol) * 0x10000)
+ * pre_apply_vol := ( previous_virtual_volume / target_virtual_volume ) * target_apply_vol
+ *
+ * Will do volume adjustment inside pa_sink_input_peek
+ */
+ target_abs_vol = pa_cvolume_avg(&i->soft_volume);
+ target_apply_vol = (int32_t) lrint(pa_sw_volume_to_linear(target_abs_vol) * 0x10000);
+ pre_apply_vol = (int32_t) ((pa_sw_volume_to_linear(pre_virtual_volume) / pa_sw_volume_to_linear(target_virtual_volume)) * target_apply_vol);
+
+ i->using_def.n_points = 2;
+ i->using_def.points_x[0] = 0;
+ i->using_def.points_x[1] = t;
+ i->using_def.points_y.i[0] = pre_apply_vol;
+ i->using_def.points_y.i[1] = target_apply_vol;
+ i->using_def.points_y.f[0] = ((float) i->using_def.points_y.i[0]) /0x10000;
+ i->using_def.points_y.f[1] = ((float) i->using_def.points_y.i[1]) /0x10000;
+
+ pa_log_debug("Volume Ramping: Point 1 is %d=%f, Point 2 is %d=%f\n", i->using_def.points_y.i[0], i->using_def.points_y.f[0],
+ i->using_def.points_y.i[1], i->using_def.points_y.f[1]);
+
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_ENVELOPE, NULL, 0, NULL) == 0);
+ }
+
+ /* Called from main context */
+ static void sink_input_set_ramping_info_for_mute(pa_sink_input* i, pa_bool_t mute, pa_usec_t t) {
+
+ int32_t cur_vol;
+ pa_assert(i);
+
+ i->using_def.n_points = 2;
+ i->using_def.points_x[0] = 0;
+ i->using_def.points_x[1] = t;
+ cur_vol = (int32_t) lrint( pa_sw_volume_to_linear(pa_cvolume_avg(&i->soft_volume)) * 0x10000);
+
+ if (mute) {
+ i->using_def.points_y.i[0] = cur_vol;
+ i->using_def.points_y.i[1] = 0;
+ } else {
+ i->using_def.points_y.i[0] = 0;
+ i->using_def.points_y.i[1] = cur_vol;
+ }
+
+ i->using_def.points_y.f[0] = ((float) i->using_def.points_y.i[0]) /0x10000;
+ i->using_def.points_y.f[1] = ((float) i->using_def.points_y.i[1]) /0x10000;
+
+ pa_log_debug("Mute Ramping: Point 1 is %d=%f, Point 2 is %d=%f\n", i->using_def.points_y.i[0], i->using_def.points_y.f[0],
+ i->using_def.points_y.i[1], i->using_def.points_y.f[1]);
+
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_ENVELOPE, NULL, 0, NULL) == 0);
+ }
+
+ /* Called from IO context */
+ static void sink_input_release_envelope(pa_sink_input *i) {
+ pa_assert(i);
+ pa_assert(!i->thread_info.ramp_info.is_ramping);
+ pa_assert(i->thread_info.ramp_info.envelope_dead);
+
+ pa_envelope_free(i->thread_info.ramp_info.envelope);
+ i->thread_info.ramp_info.envelope = NULL;
+ i->thread_info.ramp_info.item = NULL;
+ }
+
+ /* Called from IO context */
+ static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {
+ pa_assert(i);
+
+ if (!i->thread_info.ramp_info.envelope_dead) {
+ pa_assert(i->thread_info.ramp_info.envelope);
+
+ int32_t envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
+
+ if (i->thread_info.ramp_info.envelope_dying > envelope_length) {
+ if ((i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length) {
+ pa_log_debug("Envelope Become Alive");
+ pa_envelope_rewind(i->thread_info.ramp_info.envelope, envelope_length - (i->thread_info.ramp_info.envelope_dying - nbytes));
+ i->thread_info.ramp_info.is_ramping = TRUE;
+ }
+ } else if (i->thread_info.ramp_info.envelope_dying < envelope_length) {
+ if ((i->thread_info.ramp_info.envelope_dying - nbytes) <= 0) {
+ pa_log_debug("Envelope Restart");
+ pa_envelope_restart(i->thread_info.ramp_info.envelope);
+ }
+ else {
+ pa_log_debug("Envelope Simple Rewind");
+ pa_envelope_rewind(i->thread_info.ramp_info.envelope, nbytes);
+ }
+ }
+
+ i->thread_info.ramp_info.envelope_dying -= nbytes;
+ if (i->thread_info.ramp_info.envelope_dying <= 0)
+ i->thread_info.ramp_info.envelope_dying = 0;
+ }
+ }
+
+ void pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute, pa_usec_t t){
+ pa_cvolume v;
+ pa_volume_t previous_virtual_volume, target_virtual_volume;
- pa_sink_input_assert_ref(i);
+
++ pa_sink_input_assert_ref(i);
++ pa_assert_ctl_context();
+ pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
+ pa_assert(volume);
+ pa_assert(pa_cvolume_valid(volume));
- pa_assert(pa_cvolume_compatible(volume, &i->sample_spec));
++ pa_assert(volume->channels == 1 || pa_cvolume_compatible(volume, &i->sample_spec));
+
+ if ((i->sink->flags & PA_SINK_FLAT_VOLUME) && !absolute) {
+ v = i->sink->reference_volume;
+ pa_cvolume_remap(&v, &i->sink->channel_map, &i->channel_map);
- volume = pa_sw_cvolume_multiply(&v, &v, volume);
++
++ if (pa_cvolume_compatible(volume, &i->sample_spec))
++ volume = pa_sw_cvolume_multiply(&v, &v, volume);
++ else
++ volume = pa_sw_cvolume_multiply_scalar(&v, &v, pa_cvolume_max(volume));
++ } else {
++ if (!pa_cvolume_compatible(volume, &i->sample_spec)) {
++ v = i->volume;
++ volume = pa_cvolume_scale(&v, pa_cvolume_max(volume));
++ }
+ }
+
- if (pa_cvolume_equal(volume, &i->virtual_volume))
++ if (pa_cvolume_equal(volume, &i->volume)) {
++ i->save_volume = i->save_volume || save;
+ return;
++ }
+
- previous_virtual_volume = pa_cvolume_avg(&i->virtual_volume);
++ previous_virtual_volume = pa_cvolume_avg(&i->volume);
+ target_virtual_volume = pa_cvolume_avg(volume);
++
+ if (t > 0 && target_virtual_volume > 0)
+ pa_log_debug("SetVolumeWithRamping: Virtual Volume From %u=%f to %u=%f\n", previous_virtual_volume, pa_sw_volume_to_linear(previous_virtual_volume),
+ target_virtual_volume, pa_sw_volume_to_linear(target_virtual_volume));
+
- i->virtual_volume = *volume;
++ i->volume = *volume;
+ i->save_volume = save;
+
+ /* Set this flag before the following code modify i->thread_info.soft_volume */
+ if (t > 0 && target_virtual_volume > 0)
+ pa_atomic_store(&i->before_ramping_v, 1);
+
+ if (i->sink->flags & PA_SINK_FLAT_VOLUME) {
- pa_cvolume new_volume;
-
+ /* We are in flat volume mode, so let's update all sink input
+ * volumes and update the flat volume of the sink */
+
- pa_sink_update_flat_volume(i->sink, &new_volume);
- pa_sink_set_volume(i->sink, &new_volume, FALSE, TRUE, FALSE, FALSE);
++ pa_sink_set_volume(i->sink, NULL, TRUE, save);
+
+ } else {
-
+ /* OK, we are in normal volume mode. The volume only affects
+ * ourselves */
- pa_sink_input_set_relative_volume(i, volume);
-
- /* Hooks have the ability to play games with i->soft_volume */
- pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
++ set_real_ratio(i, volume);
+
+ /* Copy the new soft_volume to the thread_info struct */
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);
+ }
+
+ if (t > 0 && target_virtual_volume > 0)
+ sink_input_set_ramping_info(i, previous_virtual_volume, target_virtual_volume, t);
+
++ /* The volume changed, let's tell people so */
++ if (i->volume_changed)
++ i->volume_changed(i);
++
+ /* The virtual volume changed, let's tell people so */
+ pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+ }
+
+ void pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t save, pa_usec_t t){
+
+ pa_assert(i);
+ pa_sink_input_assert_ref(i);
+ pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
+
+ if (!i->muted == !mute)
+ return;
+
+ i->muted = mute;
+ i->save_muted = save;
+ /* Set this flag before the following code modify i->thread_info.muted, otherwise distortion will be heard */
+ if (t > 0)
+ pa_atomic_store(&i->before_ramping_m, 1);
+
+ pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_MUTE, NULL, 0, NULL) == 0);
+
+ if (t > 0)
+ sink_input_set_ramping_info_for_mute(i, mute, t);
+
+ pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
+ }
diff --cc src/pulsecore/sink-input.h
index 415a801,036806f..56ac3d6
--- a/src/pulsecore/sink-input.h
+++ b/src/pulsecore/sink-input.h
@@@ -381,7 -373,11 +398,11 @@@ pa_bool_t pa_sink_input_safe_to_remove(
pa_memchunk* pa_sink_input_get_silence(pa_sink_input *i, pa_memchunk *ret);
-/* To be used by sink.c only */
-void pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v);
+#define pa_sink_input_assert_io_context(s) \
+ pa_assert(pa_thread_mq_get() || !PA_SINK_INPUT_IS_LINKED((s)->state))
+ /* Volume ramping*/
+ void pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume *volume, pa_bool_t save, pa_bool_t absolute, pa_usec_t t);
+ void pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t save, pa_usec_t t);
+
#endif
diff --cc src/pulsecore/sink.c
index 971436d,2950071..24fad34
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@@ -1728,9 -1597,11 +1728,12 @@@ static void sync_input_volumes_within_t
void *state = NULL;
pa_sink_assert_ref(s);
+ pa_sink_assert_io_context(s);
- while ((i = PA_SINK_INPUT(pa_hashmap_iterate(s->thread_info.inputs, &state, NULL)))) {
+ PA_HASHMAP_FOREACH(i, s->thread_info.inputs, state) {
+ if (pa_atomic_load(&i->before_ramping_v))
+ i->thread_info.future_soft_volume = i->soft_volume;
+
if (pa_cvolume_equal(&i->thread_info.soft_volume, &i->soft_volume))
continue;
commit f202af17b717f5b383ac072f80a6c1327bc3143b
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Nov 5 22:55:14 2009 +0100
ramping: minor cleanups
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 216edd4..177d330 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -1813,6 +1813,7 @@ void pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume *v
else
volume = pa_sw_cvolume_multiply_scalar(&v, &v, pa_cvolume_max(volume));
} else {
+
if (!pa_cvolume_compatible(volume, &i->sample_spec)) {
v = i->volume;
volume = pa_cvolume_scale(&v, pa_cvolume_max(volume));
@@ -1866,15 +1867,18 @@ void pa_sink_input_set_volume_with_ramping(pa_sink_input *i, const pa_cvolume *v
void pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bool_t save, pa_usec_t t){
- pa_assert(i);
pa_sink_input_assert_ref(i);
+ pa_assert_ctl_context();
pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
- if (!i->muted == !mute)
+ if (!i->muted == !mute) {
+ i->save_muted = i->save_muted || mute;
return;
+ }
i->muted = mute;
i->save_muted = save;
+
/* Set this flag before the following code modify i->thread_info.muted, otherwise distortion will be heard */
if (t > 0)
pa_atomic_store(&i->before_ramping_m, 1);
@@ -1884,5 +1888,9 @@ void pa_sink_input_set_mute_with_ramping(pa_sink_input *i, pa_bool_t mute, pa_bo
if (t > 0)
sink_input_set_ramping_info_for_mute(i, mute, t);
+ /* The mute status changed, let's tell people so */
+ if (i->mute_changed)
+ i->mute_changed(i);
+
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
}
commit 9e45f198d00591714f100431c5e7832b46ff4abd
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Nov 9 21:56:33 2009 +0000
device-manager: Update docs version -> 0.9.20
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 1442a1a..8264b8f 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -39,7 +39,7 @@ typedef struct pa_ext_device_manager_role_priority_info {
} pa_ext_device_manager_role_priority_info;
/** Stores information about one device in the device database that is
- * maintained by module-device-manager. \since 0.9.19 */
+ * maintained by module-device-manager. \since 0.9.20 */
typedef struct pa_ext_device_manager_info {
const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
const char *description; /**< The description of the device when it was last seen, if applicable and saved */
@@ -49,32 +49,32 @@ typedef struct pa_ext_device_manager_info {
pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */
} pa_ext_device_manager_info;
-/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.19 */
+/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.20 */
typedef void (*pa_ext_device_manager_test_cb_t)(
pa_context *c,
uint32_t version,
void *userdata);
-/** Test if this extension module is available in the server. \since 0.9.19 */
+/** Test if this extension module is available in the server. \since 0.9.20 */
pa_operation *pa_ext_device_manager_test(
pa_context *c,
pa_ext_device_manager_test_cb_t cb,
void *userdata);
-/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.19 */
+/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.20 */
typedef void (*pa_ext_device_manager_read_cb_t)(
pa_context *c,
const pa_ext_device_manager_info *info,
int eol,
void *userdata);
-/** Read all entries from the device database. \since 0.9.19 */
+/** Read all entries from the device database. \since 0.9.20 */
pa_operation *pa_ext_device_manager_read(
pa_context *c,
pa_ext_device_manager_read_cb_t cb,
void *userdata);
-/** Sets the description for a device. \since 0.9.19 */
+/** Sets the description for a device. \since 0.9.20 */
pa_operation *pa_ext_device_manager_set_device_description(
pa_context *c,
const char* device,
@@ -82,21 +82,21 @@ pa_operation *pa_ext_device_manager_set_device_description(
pa_context_success_cb_t cb,
void *userdata);
-/** Delete entries from the device database. \since 0.9.19 */
+/** Delete entries from the device database. \since 0.9.20 */
pa_operation *pa_ext_device_manager_delete(
pa_context *c,
const char *const s[],
pa_context_success_cb_t cb,
void *userdata);
-/** Enable the role-based device-priority routing mode. \since 0.9.19 */
+/** Enable the role-based device-priority routing mode. \since 0.9.20 */
pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
pa_context *c,
int enable,
pa_context_success_cb_t cb,
void *userdata);
-/** Prefer a given device in the priority list. \since 0.9.19 */
+/** Prefer a given device in the priority list. \since 0.9.20 */
pa_operation *pa_ext_device_manager_reorder_devices_for_role(
pa_context *c,
const char* role,
@@ -104,20 +104,20 @@ pa_operation *pa_ext_device_manager_reorder_devices_for_role(
pa_context_success_cb_t cb,
void *userdata);
-/** Subscribe to changes in the device database. \since 0.9.19 */
+/** Subscribe to changes in the device database. \since 0.9.20 */
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
pa_context_success_cb_t cb,
void *userdata);
-/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.19 */
+/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.20 */
typedef void (*pa_ext_device_manager_subscribe_cb_t)(
pa_context *c,
void *userdata);
/** Set the subscription callback that is called when
- * pa_ext_device_manager_subscribe() was called. \since 0.9.19 */
+ * pa_ext_device_manager_subscribe() was called. \since 0.9.20 */
void pa_ext_device_manager_set_subscribe_cb(
pa_context *c,
pa_ext_device_manager_subscribe_cb_t cb,
commit f3866f263539578517ef36a670e04ca48fa2d1d3
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Tue Nov 10 13:21:55 2009 +0100
protocol: use the right sample rate for sources
Use the correct sample rate for reporting about the timing.
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index bb29a19..d49a78e 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -2631,7 +2631,7 @@ static void command_get_record_latency(pa_pdispatch *pd, uint32_t command, uint3
pa_tagstruct_put_usec(reply, s->current_monitor_latency);
pa_tagstruct_put_usec(reply,
s->current_source_latency +
- pa_bytes_to_usec(s->on_the_fly_snapshot, &s->source_output->sample_spec));
+ pa_bytes_to_usec(s->on_the_fly_snapshot, &s->source_output->source->sample_spec));
pa_tagstruct_put_boolean(reply,
pa_source_get_state(s->source_output->source) == PA_SOURCE_RUNNING &&
pa_source_output_get_state(s->source_output) == PA_SOURCE_OUTPUT_RUNNING);
commit d9b5bbca017a8e578434e62ab6daeec24f2c11e1
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Nov 11 04:18:10 2009 +0100
core: adjust volume only when there is actually a memory block
Fixes an assert that is hit in somne niche cases:
https://bugzilla.redhat.com/show_bug.cgi?id=533482
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 1af2823..aa84ccb 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -717,14 +717,15 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p
pa_memchunk rchunk;
pa_resampler_run(i->thread_info.resampler, &wchunk, &rchunk);
- if (nvfs) {
- pa_memchunk_make_writable(&rchunk, 0);
- pa_volume_memchunk(&rchunk, &i->sink->sample_spec, &i->volume_factor_sink);
- }
-
/* pa_log_debug("pushing %lu", (unsigned long) rchunk.length); */
if (rchunk.memblock) {
+
+ if (nvfs) {
+ pa_memchunk_make_writable(&rchunk, 0);
+ pa_volume_memchunk(&rchunk, &i->sink->sample_spec, &i->volume_factor_sink);
+ }
+
pa_memblockq_push_align(i->thread_info.render_memblockq, &rchunk);
pa_memblock_unref(rchunk.memblock);
}
commit 22946427624afde1d53973fa5a2e9e2041ffc5b7
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Nov 11 04:50:32 2009 +0100
core: make cpuid code compile cleanly with 32bit PIC
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 93ddf30..d596c48 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -117,6 +117,7 @@
#include <pulsecore/strbuf.h>
#include <pulsecore/usergroup.h>
#include <pulsecore/strlist.h>
+#include <pulsecore/cpu-x86.h>
#include "core-util.h"
@@ -3085,10 +3086,13 @@ pa_bool_t pa_running_in_vm(void) {
pa_zero(sig);
__asm__ __volatile__ (
- " xor %%ebx, %%ebx \n\t"
+ /* ebx/rbx is being used for PIC! */
+ " push %%"PA_REG_b" \n\t"
" cpuid \n\t"
+ " mov %%ebx, %1 \n\t"
+ " pop %%"PA_REG_b" \n\t"
- : "=a" (eax), "=b" (sig.sig32[0]), "=c" (sig.sig32[1]), "=d" (sig.sig32[2])
+ : "=a" (eax), "=r" (sig.sig32[0]), "=c" (sig.sig32[1]), "=d" (sig.sig32[2])
: "0" (eax)
);
commit ed7642ebac32bde8d9c47f3a1d8eabf75c3ea986
Merge: 21ffcd5 2294642
Author: Daniel Mack <daniel at caiaq.de>
Date: Wed Nov 11 10:48:39 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit dad36acea34f91cc1d4a7f8e4909369d2225525b
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Wed Nov 11 17:24:57 2009 +0000
device-manager: Update docs version -> 0.9.20
Third time is a charm... maybe.
diff --git a/src/pulse/ext-device-manager.h b/src/pulse/ext-device-manager.h
index 8264b8f..df0ab92 100644
--- a/src/pulse/ext-device-manager.h
+++ b/src/pulse/ext-device-manager.h
@@ -39,7 +39,7 @@ typedef struct pa_ext_device_manager_role_priority_info {
} pa_ext_device_manager_role_priority_info;
/** Stores information about one device in the device database that is
- * maintained by module-device-manager. \since 0.9.20 */
+ * maintained by module-device-manager. \since 0.9.21 */
typedef struct pa_ext_device_manager_info {
const char *name; /**< Identifier string of the device. A string like "sink:" or similar followed by the name of the device. */
const char *description; /**< The description of the device when it was last seen, if applicable and saved */
@@ -49,32 +49,32 @@ typedef struct pa_ext_device_manager_info {
pa_ext_device_manager_role_priority_info *role_priorities; /**< An array of role priority structures or NULL */
} pa_ext_device_manager_info;
-/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.20 */
+/** Callback prototype for pa_ext_device_manager_test(). \since 0.9.21 */
typedef void (*pa_ext_device_manager_test_cb_t)(
pa_context *c,
uint32_t version,
void *userdata);
-/** Test if this extension module is available in the server. \since 0.9.20 */
+/** Test if this extension module is available in the server. \since 0.9.21 */
pa_operation *pa_ext_device_manager_test(
pa_context *c,
pa_ext_device_manager_test_cb_t cb,
void *userdata);
-/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.20 */
+/** Callback prototype for pa_ext_device_manager_read(). \since 0.9.21 */
typedef void (*pa_ext_device_manager_read_cb_t)(
pa_context *c,
const pa_ext_device_manager_info *info,
int eol,
void *userdata);
-/** Read all entries from the device database. \since 0.9.20 */
+/** Read all entries from the device database. \since 0.9.21 */
pa_operation *pa_ext_device_manager_read(
pa_context *c,
pa_ext_device_manager_read_cb_t cb,
void *userdata);
-/** Sets the description for a device. \since 0.9.20 */
+/** Sets the description for a device. \since 0.9.21 */
pa_operation *pa_ext_device_manager_set_device_description(
pa_context *c,
const char* device,
@@ -82,21 +82,21 @@ pa_operation *pa_ext_device_manager_set_device_description(
pa_context_success_cb_t cb,
void *userdata);
-/** Delete entries from the device database. \since 0.9.20 */
+/** Delete entries from the device database. \since 0.9.21 */
pa_operation *pa_ext_device_manager_delete(
pa_context *c,
const char *const s[],
pa_context_success_cb_t cb,
void *userdata);
-/** Enable the role-based device-priority routing mode. \since 0.9.20 */
+/** Enable the role-based device-priority routing mode. \since 0.9.21 */
pa_operation *pa_ext_device_manager_enable_role_device_priority_routing(
pa_context *c,
int enable,
pa_context_success_cb_t cb,
void *userdata);
-/** Prefer a given device in the priority list. \since 0.9.20 */
+/** Prefer a given device in the priority list. \since 0.9.21 */
pa_operation *pa_ext_device_manager_reorder_devices_for_role(
pa_context *c,
const char* role,
@@ -104,20 +104,20 @@ pa_operation *pa_ext_device_manager_reorder_devices_for_role(
pa_context_success_cb_t cb,
void *userdata);
-/** Subscribe to changes in the device database. \since 0.9.20 */
+/** Subscribe to changes in the device database. \since 0.9.21 */
pa_operation *pa_ext_device_manager_subscribe(
pa_context *c,
int enable,
pa_context_success_cb_t cb,
void *userdata);
-/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.20 */
+/** Callback prototype for pa_ext_device_manager_set_subscribe_cb(). \since 0.9.21 */
typedef void (*pa_ext_device_manager_subscribe_cb_t)(
pa_context *c,
void *userdata);
/** Set the subscription callback that is called when
- * pa_ext_device_manager_subscribe() was called. \since 0.9.20 */
+ * pa_ext_device_manager_subscribe() was called. \since 0.9.21 */
void pa_ext_device_manager_set_subscribe_cb(
pa_context *c,
pa_ext_device_manager_subscribe_cb_t cb,
commit 14eaf245c63de8b4ec0f0b6845284e52d5f8bcd4
Author: Sjoerd Simons <sjoerd.simons at collabora.co.uk>
Date: Sat Nov 14 22:23:10 2009 +0000
build-sys: Make sure all alsa path config files are installed
While all alsa path configuration files were in EXTRA_DIST not all of them were
in in alsapaths_DATA. Fixed by only defining the list in one place
diff --git a/src/Makefile.am b/src/Makefile.am
index f0d5a5e..9860bbe 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -109,27 +109,12 @@ MODULE_LDFLAGS = -module -disable-static -avoid-version $(LDFLAGS_NOUNDEFINED)
# Extra files #
###################################
-EXTRA_DIST = \
- pulse/client.conf.in \
- pulse/version.h.in \
- daemon/daemon.conf.in \
- daemon/default.pa.in \
- daemon/system.pa.in \
- daemon/default.pa.win32 \
- depmod.py \
- daemon/esdcompat.in \
- daemon/start-pulseaudio-x11.in \
- daemon/start-pulseaudio-kde.in \
- utils/padsp \
- modules/module-defs.h.m4 \
- daemon/pulseaudio.desktop.in \
- daemon/pulseaudio-kde.desktop.in \
- map-file \
- daemon/pulseaudio-system.conf \
+ALSA_PROFILES = \
modules/alsa/mixer/profile-sets/default.conf \
modules/alsa/mixer/profile-sets/native-instruments-audio4dj.conf \
- modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf \
- modules/alsa/mixer/profile-sets/90-pulseaudio.rules \
+ modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf
+
+ALSA_PATHS = \
modules/alsa/mixer/paths/analog-input-aux.conf \
modules/alsa/mixer/paths/analog-input.conf \
modules/alsa/mixer/paths/analog-input.conf.common \
@@ -148,6 +133,27 @@ EXTRA_DIST = \
modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \
modules/alsa/mixer/paths/analog-output-mono.conf
+EXTRA_DIST = \
+ pulse/client.conf.in \
+ pulse/version.h.in \
+ daemon/daemon.conf.in \
+ daemon/default.pa.in \
+ daemon/system.pa.in \
+ daemon/default.pa.win32 \
+ depmod.py \
+ daemon/esdcompat.in \
+ daemon/start-pulseaudio-x11.in \
+ daemon/start-pulseaudio-kde.in \
+ utils/padsp \
+ modules/module-defs.h.m4 \
+ daemon/pulseaudio.desktop.in \
+ daemon/pulseaudio-kde.desktop.in \
+ map-file \
+ daemon/pulseaudio-system.conf \
+ modules/alsa/mixer/profile-sets/90-pulseaudio.rules
+ ${ALSA_PROFILES} \
+ ${ALSA_PATHS}
+
pulseconf_DATA = \
default.pa \
system.pa \
@@ -1088,32 +1094,14 @@ modlibexec_LTLIBRARIES += \
module-alsa-source.la \
module-alsa-card.la
-alsaprofilesets_DATA = \
- modules/alsa/mixer/profile-sets/default.conf \
- modules/alsa/mixer/profile-sets/native-instruments-audio4dj.conf \
- modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf
+alsaprofilesets_DATA = ${ALSA_PROFILES}
if HAVE_UDEV
udevrules_DATA = \
modules/alsa/mixer/profile-sets/90-pulseaudio.rules
endif
-alsapaths_DATA = \
- modules/alsa/mixer/paths/analog-input-aux.conf \
- modules/alsa/mixer/paths/analog-input.conf \
- modules/alsa/mixer/paths/analog-input.conf.common \
- modules/alsa/mixer/paths/analog-input-fm.conf \
- modules/alsa/mixer/paths/analog-input-linein.conf \
- modules/alsa/mixer/paths/analog-input-mic.conf \
- modules/alsa/mixer/paths/analog-input-mic.conf.common \
- modules/alsa/mixer/paths/analog-input-mic-line.conf \
- modules/alsa/mixer/paths/analog-input-tvtuner.conf \
- modules/alsa/mixer/paths/analog-input-video.conf \
- modules/alsa/mixer/paths/analog-output.conf \
- modules/alsa/mixer/paths/analog-output.conf.common \
- modules/alsa/mixer/paths/analog-output-headphones.conf \
- modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \
- modules/alsa/mixer/paths/analog-output-mono.conf
+alsapaths_DATA = ${ALSA_PATHS}
endif
commit eb5562637beab22f3f906a116775cb98c752320f
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Nov 16 23:36:44 2009 +0000
build-sys: Fix missing trailing slash in 14eaf2
diff --git a/src/Makefile.am b/src/Makefile.am
index 9860bbe..b45908b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -150,7 +150,7 @@ EXTRA_DIST = \
daemon/pulseaudio-kde.desktop.in \
map-file \
daemon/pulseaudio-system.conf \
- modules/alsa/mixer/profile-sets/90-pulseaudio.rules
+ modules/alsa/mixer/profile-sets/90-pulseaudio.rules \
${ALSA_PROFILES} \
${ALSA_PATHS}
commit 9033140f18db820f3be9a6acae88a118d9154cf6
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Nov 18 21:41:38 2009 +0100
rygel: fix itemCount property for sources
Fixes http://pulseaudio.org/ticket/721
diff --git a/src/modules/module-rygel-media-server.c b/src/modules/module-rygel-media-server.c
index 4c02e95..82bcd14 100644
--- a/src/modules/module-rygel-media-server.c
+++ b/src/modules/module-rygel-media-server.c
@@ -464,8 +464,18 @@ static char **child_array(struct userdata *u, const char *path, unsigned *n) {
if (pa_streq(path, OBJECT_SINKS))
m = pa_idxset_size(u->core->sinks);
- else
+ else {
+ unsigned k;
+
m = pa_idxset_size(u->core->sources);
+ k = pa_idxset_size(u->core->sinks);
+
+ pa_assert(m >= k);
+
+ /* Subtract the monitor sources from the numbers of
+ * sources. There is one monitor source for each sink */
+ m -= k;
+ }
array = pa_xnew(char*, m);
*n = 0;
@@ -473,14 +483,20 @@ static char **child_array(struct userdata *u, const char *path, unsigned *n) {
if (pa_streq(path, OBJECT_SINKS)) {
pa_sink *sink;
- PA_IDXSET_FOREACH(sink, u->core->sinks, idx)
+ PA_IDXSET_FOREACH(sink, u->core->sinks, idx) {
+ pa_assert((*n) < m);
array[(*n)++] = pa_sprintf_malloc(OBJECT_SINKS "/%u", sink->index);
+ }
} else {
pa_source *source;
- PA_IDXSET_FOREACH(source, u->core->sources, idx)
- if (!source->monitor_of)
+ PA_IDXSET_FOREACH(source, u->core->sources, idx) {
+
+ if (!source->monitor_of) {
+ pa_assert((*n) < m);
array[(*n)++] = pa_sprintf_malloc(OBJECT_SOURCES "/%u", source->index);
+ }
+ }
}
pa_assert((*n) <= m);
@@ -529,16 +545,20 @@ static DBusHandlerResult sinks_and_sources_handler(DBusConnection *c, DBusMessag
free_child_array(array, n);
} else if (message_is_property_get(m, "org.gnome.UPnP.MediaContainer1", "ItemCount")) {
+ unsigned n, k;
+
+ n = pa_idxset_size(u->core->sinks);
+ k = pa_idxset_size(u->core->sources);
+ pa_assert(k >= n);
+
pa_assert_se(r = dbus_message_new_method_return(m));
append_variant_unsigned(r, NULL,
- pa_streq(path, OBJECT_SINKS) ?
- pa_idxset_size(u->core->sinks) :
- pa_idxset_size(u->core->sources));
+ pa_streq(path, OBJECT_SINKS) ? n : k - n);
} else if (message_is_property_get_all(m, "org.gnome.UPnP.MediaContainer1")) {
DBusMessageIter iter, sub;
char **array;
- unsigned n;
+ unsigned n, k;
pa_assert_se(r = dbus_message_new_method_return(m));
dbus_message_iter_init_append(r, &iter);
@@ -550,10 +570,13 @@ static DBusHandlerResult sinks_and_sources_handler(DBusConnection *c, DBusMessag
array = child_array(u, path, &n);
append_property_dict_entry_object_array(r, &sub, "Items", (const char**) array, n);
free_child_array(array, n);
+
+ n = pa_idxset_size(u->core->sinks);
+ k = pa_idxset_size(u->core->sources);
+ pa_assert(k >= n);
+
append_property_dict_entry_unsigned(r, &sub, "ItemCount",
- pa_streq(path, OBJECT_SINKS) ?
- pa_idxset_size(u->core->sinks) :
- pa_idxset_size(u->core->sources));
+ pa_streq(path, OBJECT_SINKS) ? n : k - n);
pa_assert_se(dbus_message_iter_close_container(&iter, &sub));
commit 9708ecd6483ac9037c82a2a2a935e97d027f6b1b
Merge: f202af1 9033140
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 01:02:01 2009 +0100
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
commit c6c933b4ec9eadc361471d4022f8833a930c241c
Author: Jason Newton <nevion at gmail.com>
Date: Thu Oct 29 18:44:04 2009 -0700
module-equalizer-sink: (re)added output memblockq commented out timing debug statements
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 7c0ccd3..c2dcbe3 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -113,8 +113,11 @@ struct userdata {
float **Xs;
float ***Hs;//thread updatable copies of the freq response filters (magintude based)
pa_aupdate **a_H;
- pa_memchunk conv_buffer;
pa_memblockq *input_q;
+ char *output_buffer;
+ size_t output_buffer_length;
+ size_t output_buffer_max_length;
+ pa_memblockq *output_q;
pa_bool_t first_iteration;
pa_dbus_protocol *dbus_protocol;
@@ -489,18 +492,42 @@ static void dsp_logic(
}
#endif
-static void process_samples(struct userdata *u, pa_memchunk *tchunk){
+static void flatten_to_memblockq(struct userdata *u){
+ size_t mbs = pa_mempool_block_size_max(u->sink->core->mempool);
+ pa_memchunk tchunk;
+ char *dst;
+ size_t i = 0;
+ while(i < u->output_buffer_length){
+ tchunk.index = 0;
+ tchunk.length = PA_MIN((u->output_buffer_length - i), mbs);
+ tchunk.memblock = pa_memblock_new(u->sink->core->mempool, tchunk.length);
+ //pa_log_debug("pushing %ld into the q", tchunk.length);
+ dst = pa_memblock_acquire(tchunk.memblock);
+ memcpy(dst, u->output_buffer + i, tchunk.length);
+ pa_memblock_release(tchunk.memblock);
+ pa_memblockq_push(u->output_q, &tchunk);
+ pa_memblock_unref(tchunk.memblock);
+ i += tchunk.length;
+ }
+}
+
+static void process_samples(struct userdata *u){
size_t fs = pa_frame_size(&(u->sink->sample_spec));
- float *dst;
unsigned a_i;
float *H, X;
size_t iterations, offset;
pa_assert(u->samples_gathered >= u->window_size);
iterations = (u->samples_gathered - u->overlap_size) / u->R;
- tchunk->index = 0;
- tchunk->length = iterations * u->R * fs;
- tchunk->memblock = pa_memblock_new(u->sink->core->mempool, tchunk->length);
- dst = ((float*) pa_memblock_acquire(tchunk->memblock));
+ //make sure there is enough buffer memory allocated
+ if(iterations * u->R * fs > u->output_buffer_max_length){
+ u->output_buffer_max_length = iterations * u->R * fs;
+ if(u->output_buffer){
+ pa_xfree(u->output_buffer);
+ }
+ u->output_buffer = pa_xmalloc(u->output_buffer_max_length);
+ }
+ u->output_buffer_length = iterations * u->R * fs;
+
for(size_t iter = 0; iter < iterations; ++iter){
offset = iter * u->R * fs;
for(size_t c = 0;c < u->channels; c++) {
@@ -526,14 +553,14 @@ static void process_samples(struct userdata *u, pa_memchunk *tchunk){
u->work_buffer[i] = u->W[i] <= FLT_EPSILON ? u->work_buffer[i] : u->work_buffer[i] / u->W[i];
}
}
- pa_sample_clamp(PA_SAMPLE_FLOAT32NE, (uint8_t *) (dst + c) + offset, fs, u->work_buffer, sizeof(float), u->R);
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE, (uint8_t *) (((float *)u->output_buffer) + c) + offset, fs, u->work_buffer, sizeof(float), u->R);
}
if(u->first_iteration){
u->first_iteration = FALSE;
}
u->samples_gathered -= u->R;
}
- pa_memblock_release(tchunk->memblock);
+ flatten_to_memblockq(u);
}
static void input_buffer(struct userdata *u, pa_memchunk *in){
@@ -556,7 +583,8 @@ static void input_buffer(struct userdata *u, pa_memchunk *in){
/* Called from I/O thread context */
static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
struct userdata *u;
- size_t fs, target_samples, mbs;
+ size_t fs, target_samples;
+ size_t mbs;
//struct timeval start, end;
pa_memchunk tchunk;
pa_sink_input_assert_ref(i);
@@ -564,13 +592,17 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(chunk);
pa_assert(u->sink);
fs = pa_frame_size(&(u->sink->sample_spec));
- nbytes = PA_MIN(nbytes, pa_mempool_block_size_max(u->sink->core->mempool));
- target_samples = PA_ROUND_UP(nbytes / fs, u->R);
mbs = pa_mempool_block_size_max(u->sink->core->mempool);
- //pa_log_debug("vanilla mbs = %ld",mbs);
- mbs = PA_ROUND_DOWN(mbs / fs, u->R);
- mbs = PA_MAX(mbs, u->R);
- target_samples = PA_MAX(target_samples, mbs);
+ if(pa_memblockq_get_length(u->output_q) > 0){
+ //pa_log_debug("qsize is %ld", pa_memblockq_get_length(u->output_q));
+ goto END;
+ }
+ //nbytes = PA_MIN(nbytes, pa_mempool_block_size_max(u->sink->core->mempool));
+ target_samples = PA_ROUND_UP(nbytes / fs, u->R);
+ ////pa_log_debug("vanilla mbs = %ld",mbs);
+ //mbs = PA_ROUND_DOWN(mbs / fs, u->R);
+ //mbs = PA_MAX(mbs, u->R);
+ //target_samples = PA_MAX(target_samples, mbs);
//pa_log_debug("target samples: %ld", target_samples);
if(u->first_iteration){
//allocate request_size
@@ -594,7 +626,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(input_remaining > 0);
while(pa_memblockq_peek(u->input_q, &tchunk) < 0){
//pa_sink_render(u->sink, input_remaining * fs, &tchunk);
- pa_sink_render_full(u->sink, input_remaining * fs, &tchunk);
+ pa_sink_render_full(u->sink, PA_MIN(input_remaining * fs, mbs), &tchunk);
pa_assert(tchunk.memblock);
pa_memblockq_push(u->input_q, &tchunk);
pa_memblock_unref(tchunk.memblock);
@@ -619,11 +651,13 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
pa_assert(u->R < u->window_size);
//pa_rtclock_get(&start);
/* process a block */
- process_samples(u, chunk);
+ process_samples(u);
//pa_rtclock_get(&end);
//pa_log_debug("Took %0.6f seconds to process", (double) pa_timeval_diff(&end, &start) / PA_USEC_PER_SEC);
-
+END:
+ pa_assert_se(pa_memblockq_peek(u->output_q, chunk) >= 0);
pa_assert(chunk->memblock);
+ pa_memblockq_drop(u->output_q, chunk->length);
//pa_log_debug("gave %ld", chunk->length/fs);
//pa_log_debug("end pop");
return 0;
@@ -1143,6 +1177,10 @@ int pa__init(pa_module*m) {
u->sink->set_mute = sink_set_mute_cb;
u->sink->userdata = u;
u->input_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, &u->sink->silence);
+ u->output_q = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, fs, 1, 1, 0, NULL);
+ u->output_buffer = NULL;
+ u->output_buffer_length = 0;
+ u->output_buffer_max_length = 0;
pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
//pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->R*fs, &ss));
@@ -1255,6 +1293,10 @@ void pa__done(pa_module*m) {
if (u->sink)
pa_sink_unref(u->sink);
+ if(u->output_buffer){
+ pa_xfree(u->output_buffer);
+ }
+ pa_memblockq_free(u->output_q);
pa_memblockq_free(u->input_q);
fftwf_destroy_plan(u->inverse_plan);
commit 1178f61280227a399708ea8e5cff9b4204181612
Author: Jason Newton <nevion at gmail.com>
Date: Wed Nov 11 23:16:14 2009 -0800
module-equalizer-sink: switch back to reference dsp implementation - cpu usage doesn't really change and there may be
a bug in the vectorized version
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index c2dcbe3..bbbeb06 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -340,7 +340,7 @@ static void sink_set_mute_cb(pa_sink *s) {
pa_sink_input_set_mute(u->sink_input, s->muted, s->save_muted);
}
-#ifndef __SSE2__
+#if 1
//reference implementation
static void dsp_logic(
float * restrict dst,//used as a temp array too, needs to be fft_length!
commit 493d8b2fb7915786578daeb9dba9c55b581fcce1
Author: Jason Newton <nevion at gmail.com>
Date: Wed Nov 11 22:52:52 2009 -0800
module-equalizer-sink: add latency of output_q and input_q to get latency calculation
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index bbbeb06..0a2860b 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -253,10 +253,11 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
pa_sink_get_latency_within_thread(u->sink_input->sink) +
/* Add the latency internal to our sink input on top */
- pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
+ pa_bytes_to_usec(pa_memblockq_get_length(u->output_q), &u->sink_input->sink->sample_spec) +
+ pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec) +
+ pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), &u->sink_input->sink->sample_spec);
// pa_bytes_to_usec(u->samples_gathered * fs, &u->sink->sample_spec);
//+ pa_bytes_to_usec(u->latency * fs, ss)
- //+ pa_bytes_to_usec(pa_memblockq_get_length(u->input_q), ss);
return 0;
}
}
commit b8acf5586f3f8e2af61b81569a53749f4afd090b
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 17:48:04 2009 +0100
daemon: complain if user passes too many arguments
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 4891182..e656836 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -537,6 +537,12 @@ int main(int argc, char *argv[]) {
goto finish;
case PA_CMD_DUMP_CONF: {
+
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
s = pa_daemon_conf_dump(conf);
fputs(s, stdout);
pa_xfree(s);
@@ -547,6 +553,11 @@ int main(int argc, char *argv[]) {
case PA_CMD_DUMP_RESAMPLE_METHODS: {
int i;
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
for (i = 0; i < PA_RESAMPLER_MAX; i++)
if (pa_resample_method_supported(i))
printf("%s\n", pa_resample_method_to_string(i));
@@ -561,6 +572,12 @@ int main(int argc, char *argv[]) {
goto finish;
case PA_CMD_VERSION :
+
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
printf(PACKAGE_NAME" "PACKAGE_VERSION"\n");
retval = 0;
goto finish;
@@ -568,6 +585,11 @@ int main(int argc, char *argv[]) {
case PA_CMD_CHECK: {
pid_t pid;
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
if (pa_pid_file_check_running(&pid, "pulseaudio") < 0)
pa_log_info(_("Daemon not running"));
else {
@@ -580,6 +602,11 @@ int main(int argc, char *argv[]) {
}
case PA_CMD_KILL:
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
if (pa_pid_file_kill(SIGINT, NULL, "pulseaudio") < 0)
pa_log(_("Failed to kill daemon: %s"), pa_cstrerror(errno));
else
@@ -589,6 +616,11 @@ int main(int argc, char *argv[]) {
case PA_CMD_CLEANUP_SHM:
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
if (pa_shm_cleanup() >= 0)
retval = 0;
@@ -598,6 +630,11 @@ int main(int argc, char *argv[]) {
pa_assert(conf->cmd == PA_CMD_DAEMON || conf->cmd == PA_CMD_START);
}
+ if (d < argc) {
+ pa_log("Too many arguments.\n");
+ goto finish;
+ }
+
if (getuid() == 0 && !conf->system_instance)
pa_log_warn(_("This program is not intended to be run as root (unless --system is specified)."));
#ifndef HAVE_DBUS /* A similar, only a notice worthy check was done earlier, if D-Bus is enabled. */
commit a3b5a944885ff92233aa02e390312fbc04671686
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 17:49:30 2009 +0100
pulse: try to fix inaccuracy with uncork timing for streams that are created in corked state
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 2997962..04a4242 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -376,6 +376,22 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t
if (!s->smoother)
return;
+ if (!s->timing_info_valid &&
+ !aposteriori &&
+ !force_start &&
+ !force_stop &&
+ s->context->version >= 13) {
+
+ /* If the server supports STARTED and UNDERFLOW events we take
+ * them as indications when audio really starts/stops playing,
+ * if we don't have any timing info yet -- instead of trying
+ * to be smart and guessing the server time. Otherwise the
+ * unknown transport delay we don't know might add too much
+ * noise to our time calculations. */
+
+ return;
+ }
+
x = pa_rtclock_now();
if (s->timing_info_valid) {
@@ -390,7 +406,6 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t
else if (force_start || s->buffer_attr.prebuf == 0)
pa_smoother_resume(s->smoother, x, TRUE);
-
/* Please note that we have no idea if playback actually started
* if prebuf is non-zero! */
}
commit f05ae357b6dee91b4d80c1c09bcf2bbf1a8802fa
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 19:48:08 2009 +0100
pulse: delay smoother update only when unpausing, not when pausing, since we don't want the timer to advance when we are supposedly already paused
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 04a4242..4a44c31 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -376,22 +376,6 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t
if (!s->smoother)
return;
- if (!s->timing_info_valid &&
- !aposteriori &&
- !force_start &&
- !force_stop &&
- s->context->version >= 13) {
-
- /* If the server supports STARTED and UNDERFLOW events we take
- * them as indications when audio really starts/stops playing,
- * if we don't have any timing info yet -- instead of trying
- * to be smart and guessing the server time. Otherwise the
- * unknown transport delay we don't know might add too much
- * noise to our time calculations. */
-
- return;
- }
-
x = pa_rtclock_now();
if (s->timing_info_valid) {
@@ -403,8 +387,26 @@ static void check_smoother_status(pa_stream *s, pa_bool_t aposteriori, pa_bool_t
if (s->suspended || s->corked || force_stop)
pa_smoother_pause(s->smoother, x);
- else if (force_start || s->buffer_attr.prebuf == 0)
+ else if (force_start || s->buffer_attr.prebuf == 0) {
+
+ if (!s->timing_info_valid &&
+ !aposteriori &&
+ !force_start &&
+ !force_stop &&
+ s->context->version >= 13) {
+
+ /* If the server supports STARTED events we take them as
+ * indications when audio really starts/stops playing, if
+ * we don't have any timing info yet -- instead of trying
+ * to be smart and guessing the server time. Otherwise the
+ * unknown transport delay add too much noise to our time
+ * calculations. */
+
+ return;
+ }
+
pa_smoother_resume(s->smoother, x, TRUE);
+ }
/* Please note that we have no idea if playback actually started
* if prebuf is non-zero! */
commit ba95b1939d581bc6f647616bd12bd673370f3be5
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 19:55:47 2009 +0100
pulse: ask for timing updates both *before* and *after* triggering a stream state change so that in the STARTED/UNDERFLOW callbacks we accurate transport latency information
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 4a44c31..4dea567 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -1482,6 +1482,11 @@ pa_operation * pa_stream_drain(pa_stream *s, pa_stream_success_cb_t cb, void *us
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction == PA_STREAM_PLAYBACK, PA_ERR_BADSTATE);
+ /* Ask for a timing update before we cork/uncork to get the best
+ * accuracy for the transport latency suitable for the
+ * check_smoother_status() call in the started callback */
+ request_auto_timing_update(s, TRUE);
+
o = pa_operation_new(s->context, s, (pa_operation_cb_t) cb, userdata);
t = pa_tagstruct_command(s->context, PA_COMMAND_DRAIN_PLAYBACK_STREAM, &tag);
@@ -1489,6 +1494,10 @@ pa_operation * pa_stream_drain(pa_stream *s, pa_stream_success_cb_t cb, void *us
pa_pstream_send_tagstruct(s->context->pstream, t);
pa_pdispatch_register_reply(s->context->pdispatch, tag, DEFAULT_TIMEOUT, pa_stream_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+ /* This might cause the read index to conitnue again, hence
+ * let's request a timing update */
+ request_auto_timing_update(s, TRUE);
+
return o;
}
@@ -2037,6 +2046,11 @@ pa_operation* pa_stream_cork(pa_stream *s, int b, pa_stream_success_cb_t cb, voi
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);
+ /* Ask for a timing update before we cork/uncork to get the best
+ * accuracy for the transport latency suitable for the
+ * check_smoother_status() call in the started callback */
+ request_auto_timing_update(s, TRUE);
+
s->corked = b;
o = pa_operation_new(s->context, s, (pa_operation_cb_t) cb, userdata);
@@ -2052,8 +2066,8 @@ pa_operation* pa_stream_cork(pa_stream *s, int b, pa_stream_success_cb_t cb, voi
check_smoother_status(s, FALSE, FALSE, FALSE);
- /* This might cause the indexes to hang/start again, hence
- * let's request a timing update */
+ /* This might cause the indexes to hang/start again, hence let's
+ * request a timing update, after the cork/uncork, too */
request_auto_timing_update(s, TRUE);
return o;
@@ -2090,6 +2104,11 @@ pa_operation* pa_stream_flush(pa_stream *s, pa_stream_success_cb_t cb, void *use
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);
+ /* Ask for a timing update *before* the flush, so that the
+ * transport usec is as up to date as possible when we get the
+ * underflow message and update the smoother status*/
+ request_auto_timing_update(s, TRUE);
+
if (!(o = stream_send_simple_command(s, (uint32_t) (s->direction == PA_STREAM_PLAYBACK ? PA_COMMAND_FLUSH_PLAYBACK_STREAM : PA_COMMAND_FLUSH_RECORD_STREAM), cb, userdata)))
return NULL;
@@ -2124,6 +2143,11 @@ pa_operation* pa_stream_prebuf(pa_stream *s, pa_stream_success_cb_t cb, void *us
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction == PA_STREAM_PLAYBACK, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->buffer_attr.prebuf > 0, PA_ERR_BADSTATE);
+ /* Ask for a timing update before we cork/uncork to get the best
+ * accuracy for the transport latency suitable for the
+ * check_smoother_status() call in the started callback */
+ request_auto_timing_update(s, TRUE);
+
if (!(o = stream_send_simple_command(s, PA_COMMAND_PREBUF_PLAYBACK_STREAM, cb, userdata)))
return NULL;
@@ -2145,6 +2169,11 @@ pa_operation* pa_stream_trigger(pa_stream *s, pa_stream_success_cb_t cb, void *u
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction == PA_STREAM_PLAYBACK, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->buffer_attr.prebuf > 0, PA_ERR_BADSTATE);
+ /* Ask for a timing update before we cork/uncork to get the best
+ * accuracy for the transport latency suitable for the
+ * check_smoother_status() call in the started callback */
+ request_auto_timing_update(s, TRUE);
+
if (!(o = stream_send_simple_command(s, PA_COMMAND_TRIGGER_PLAYBACK_STREAM, cb, userdata)))
return NULL;
@@ -2396,6 +2425,11 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->context->version >= 12, PA_ERR_NOTSUPPORTED);
+ /* Ask for a timing update before we cork/uncork to get the best
+ * accuracy for the transport latency suitable for the
+ * check_smoother_status() call in the started callback */
+ request_auto_timing_update(s, TRUE);
+
o = pa_operation_new(s->context, s, (pa_operation_cb_t) cb, userdata);
t = pa_tagstruct_command(
commit bd3467ff2f982c87db4618cc6ac98780bef407cc
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 20:00:26 2009 +0100
alsa: fix log output when the audio device refuses to give us again the same period settings we had before
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 856adb1..ed16c83 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -983,7 +983,7 @@ static int unsuspend(struct userdata *u) {
buffer_size*u->frame_size != u->hwbuf_size) {
pa_log_warn("Resume failed, couldn't restore original fragment settings. (Old: %lu/%lu, New %lu/%lu)",
(unsigned long) u->hwbuf_size, (unsigned long) u->fragment_size,
- (unsigned long) (buffer_size*u->fragment_size), (unsigned long) (period_size*u->frame_size));
+ (unsigned long) (buffer_size*u->frame_size), (unsigned long) (period_size*u->frame_size));
goto fail;
}
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index e775b20..157698e 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -930,7 +930,7 @@ static int unsuspend(struct userdata *u) {
buffer_size*u->frame_size != u->hwbuf_size) {
pa_log_warn("Resume failed, couldn't restore original fragment settings. (Old: %lu/%lu, New %lu/%lu)",
(unsigned long) u->hwbuf_size, (unsigned long) u->fragment_size,
- (unsigned long) (buffer_size*u->fragment_size), (unsigned long) (period_size*u->frame_size));
+ (unsigned long) (buffer_size*u->frame_size), (unsigned long) (period_size*u->frame_size));
goto fail;
}
commit 6daf112ce0116e7edacd83c538e5c3099c90a774
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Nov 20 20:27:03 2009 +0100
alsa: fix minor sampling rate deviations before adjusting the buffer size
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index b8d1357..52f1259 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -259,6 +259,10 @@ int pa_alsa_set_hw_params(
goto finish;
}
+ /* We ignore very small sampling rate deviations */
+ if (_ss.rate >= ss->rate*.95 && _ss.rate <= ss->rate*1.05)
+ _ss.rate = ss->rate;
+
if (require_exact_channel_number) {
if ((ret = snd_pcm_hw_params_set_channels(pcm_handle, hwparams, _ss.channels)) < 0) {
pa_log_debug("snd_pcm_hw_params_set_channels(%u) failed: %s", _ss.channels, pa_alsa_strerror(ret));
@@ -303,7 +307,7 @@ int pa_alsa_set_hw_params(
if (set_buffer_size(pcm_handle, hwparams_copy, _buffer_size) >= 0 &&
set_period_size(pcm_handle, hwparams_copy, _period_size) >= 0 &&
snd_pcm_hw_params(pcm_handle, hwparams_copy) >= 0) {
- pa_log_debug("Set buffer size first, period size second.");
+ pa_log_debug("Set buffer size first (to %lu samples), period size second (to %lu samples).", (unsigned long) _buffer_size, (unsigned long) _period_size);
goto success;
}
@@ -311,7 +315,7 @@ int pa_alsa_set_hw_params(
if (set_period_size(pcm_handle, hwparams_copy, _period_size) >= 0 &&
set_buffer_size(pcm_handle, hwparams_copy, _buffer_size) >= 0 &&
snd_pcm_hw_params(pcm_handle, hwparams_copy) >= 0) {
- pa_log_debug("Set period size first, buffer size second.");
+ pa_log_debug("Set period size first (to %lu samples), buffer size second (to %lu samples).", (unsigned long) _period_size, (unsigned long) _buffer_size);
goto success;
}
}
@@ -322,7 +326,7 @@ int pa_alsa_set_hw_params(
/* Third try: set only buffer size */
if (set_buffer_size(pcm_handle, hwparams_copy, _buffer_size) >= 0 &&
snd_pcm_hw_params(pcm_handle, hwparams_copy) >= 0) {
- pa_log_debug("Set only buffer size second.");
+ pa_log_debug("Set only buffer size (to %lu samples).", (unsigned long) _buffer_size);
goto success;
}
}
@@ -333,7 +337,7 @@ int pa_alsa_set_hw_params(
/* Fourth try: set only period size */
if (set_period_size(pcm_handle, hwparams_copy, _period_size) >= 0 &&
snd_pcm_hw_params(pcm_handle, hwparams_copy) >= 0) {
- pa_log_debug("Set only period size second.");
+ pa_log_debug("Set only period size (to %lu samples).", (unsigned long) _period_size);
goto success;
}
}
@@ -374,9 +378,7 @@ success:
goto finish;
}
- /* If the sample rate deviates too much, we need to resample */
- if (_ss.rate < ss->rate*.95 || _ss.rate > ss->rate*1.05)
- ss->rate = _ss.rate;
+ ss->rate = _ss.rate;
ss->channels = _ss.channels;
ss->format = _ss.format;
commit 70ba21e78a90b60f38ce524c49907b1f5daa2fba
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Fri Nov 20 21:08:05 2009 +0100
Move the platform-specific defines after the compiler has been found.
Without this change, on OpenSolaris, it's possible that the compiler will
be reported, by default, as failing to produce executables, since
_XOPEN_SOURCE=600 requires a C99 compiler to compile even the simples of
the programs.
diff --git a/configure.ac b/configure.ac
index 2bc068e..a3a97a6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,19 +66,6 @@ if type -p stow > /dev/null && test -d /usr/local/stow ; then
ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}"
fi
-#### Platform hacks ####
-
-case $host in
- *-*-solaris* )
- AC_DEFINE(_XOPEN_SOURCE, 600, Needed to get declarations for msg_control and msg_controllen on Solaris)
- AC_DEFINE(__EXTENSIONS__, 1, Needed to get declarations for msg_control and msg_controllen on Solaris)
- ;;
- *-*-darwin* )
- AC_DEFINE([_POSIX_C_SOURCE], [200112L], [Needed to get clock_gettime on Mac OS X])
- AC_DEFINE([_DARWIN_C_SOURCE], [200112L], [Needed to get NSIG on Mac OS X])
- ;;
-esac
-
AM_SILENT_RULES([yes])
#### Checks for programs. ####
@@ -95,6 +82,19 @@ AM_PROG_CC_C_O
AC_PROG_GCC_TRADITIONAL
AC_USE_SYSTEM_EXTENSIONS
+#### Platform hacks ####
+
+case $host in
+ *-*-solaris* )
+ AC_DEFINE(_XOPEN_SOURCE, 600, Needed to get declarations for msg_control and msg_controllen on Solaris)
+ AC_DEFINE(__EXTENSIONS__, 1, Needed to get declarations for msg_control and msg_controllen on Solaris)
+ ;;
+ *-*-darwin* )
+ AC_DEFINE([_POSIX_C_SOURCE], [200112L], [Needed to get clock_gettime on Mac OS X])
+ AC_DEFINE([_DARWIN_C_SOURCE], [200112L], [Needed to get NSIG on Mac OS X])
+ ;;
+esac
+
# M4
AC_CHECK_PROGS([M4], gm4 m4, no)
commit 71ebbfb6ef0a8c368b9c424c3be4fda2519a5770
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Fri Nov 20 21:22:24 2009 +0100
Fix build on Solaris: pass the third parameter to pa_cloexec_open.
diff --git a/src/modules/module-solaris.c b/src/modules/module-solaris.c
index 955997b..396094c 100644
--- a/src/modules/module-solaris.c
+++ b/src/modules/module-solaris.c
@@ -327,7 +327,7 @@ static int open_audio_device(struct userdata *u, pa_sample_spec *ss) {
pa_assert(u);
pa_assert(ss);
- if ((u->fd = pa_open_cloexec(u->device_name, u->mode | O_NONBLOCK)) < 0) {
+ if ((u->fd = pa_open_cloexec(u->device_name, u->mode | O_NONBLOCK, 0)) < 0) {
pa_log_warn("open %s failed (%s)", u->device_name, pa_cstrerror(errno));
return -1;
}
commit 09a58b6813c078a64cf61be4d2ba98e26b4c88b3
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Fri Nov 20 21:24:46 2009 +0100
Don't declare the variable l if FIONREAD is not defined.
This avoids two warnings due to FIONREAD not being defined.
diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c
index 10cc341..f06d1ee 100644
--- a/src/modules/module-pipe-sink.c
+++ b/src/modules/module-pipe-sink.c
@@ -101,9 +101,10 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
case PA_SINK_MESSAGE_GET_LATENCY: {
size_t n = 0;
- int l;
#ifdef FIONREAD
+ int l;
+
if (ioctl(u->fd, FIONREAD, &l) >= 0 && l > 0)
n = (size_t) l;
#endif
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index de68093..c5eba43 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -105,9 +105,10 @@ static int source_process_msg(
case PA_SOURCE_MESSAGE_GET_LATENCY: {
size_t n = 0;
- int l;
#ifdef FIONREAD
+ int l;
+
if (ioctl(u->fd, FIONREAD, &l) >= 0 && l > 0)
n = (size_t) l;
#endif
commit 4923f3ca773662b2d147bc374995571b5dacdc7f
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Fri Nov 20 21:25:33 2009 +0100
Include sys/filio.h if present; this makes use of FIONREAD on Solaris.
FIONREAD on OpenSolaris is declared in sys/filio.h. The RTP modules already
rely on the presence of FIONREAD, and check for the header, so this brings
the pipe source and sink modules on par with them.
diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c
index f06d1ee..7a4e730 100644
--- a/src/modules/module-pipe-sink.c
+++ b/src/modules/module-pipe-sink.c
@@ -34,6 +34,10 @@
#include <sys/ioctl.h>
#include <poll.h>
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
+
#include <pulse/xmalloc.h>
#include <pulsecore/core-error.h>
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index c5eba43..933f029 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -34,6 +34,10 @@
#include <sys/ioctl.h>
#include <sys/poll.h>
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
+
#include <pulse/xmalloc.h>
#include <pulsecore/core-error.h>
commit 5150a101efbf46d5235813e4bb6651a3a108bb78
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Fri Nov 20 21:37:16 2009 +0100
Check for stow using AC_CHECK_PROG rather than type -p.
The type -p check is not compatible with POSIX shells, and indeed fails
when used with the FreeBSD 8 default shell. Instead the AC_CHECK_PROG macro
is written properly to look for the command.
diff --git a/configure.ac b/configure.ac
index a3a97a6..fdc6662 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,10 +61,12 @@ AC_SUBST(LIBPULSE_MAINLOOP_GLIB_VERSION_INFO, [0:4:0])
AC_CANONICAL_HOST
AC_DEFINE_UNQUOTED([CANONICAL_HOST], "$host", [Canonical host string.])
-if type -p stow > /dev/null && test -d /usr/local/stow ; then
+AC_CHECK_PROG([STOW], [stow], [yes], [no])
+
+AS_IF([test "x$STOW" = "xyes" && test -d /usr/local/stow], [
AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***])
ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}"
-fi
+])
AM_SILENT_RULES([yes])
commit 41853cc7c01d3b400e781bb9db8c09befd04685b
Author: Jason Newton <nevion at gmail.com>
Date: Fri Nov 20 14:56:07 2009 -0800
added qpaeq script for GUI equalizer control to src/util
diff --git a/src/utils/qpaeq.py b/src/utils/qpaeq.py
new file mode 100755
index 0000000..dca0701
--- /dev/null
+++ b/src/utils/qpaeq.py
@@ -0,0 +1,546 @@
+#!/usr/bin/env python
+# qpaeq is a equalizer interface for pulseaudio's equalizer sinks
+# Copyright (C) 2009 Jason Newton <nevion at gmail.com
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import os,math,sys
+import PyQt4,sip
+from PyQt4 import QtGui,QtCore
+from functools import partial
+
+import dbus.mainloop.qt
+import dbus
+
+import signal
+signal.signal(signal.SIGINT, signal.SIG_DFL)
+SYNC_TIMEOUT = 4*1000
+
+CORE_PATH = "/org/pulseaudio/core1"
+CORE_IFACE = "org.PulseAudio.Core1"
+def connect():
+ if 'PULSE_DBUS_SERVER' in os.environ:
+ address = os.environ['PULSE_DBUS_SERVER']
+ else:
+ bus = dbus.SessionBus() # Should be UserBus, but D-Bus doesn't implement that yet.
+ server_lookup = bus.get_object('org.PulseAudio1', '/org/pulseaudio/server_lookup1')
+ address = server_lookup.Get('org.PulseAudio.ServerLookup1', 'Address', dbus_interface='org.freedesktop.DBus.Properties')
+ return dbus.connection.Connection(address)
+
+
+#TODO: signals: sink Filter changed, sink reconfigured (window size) (sink iface)
+#TODO: manager signals: new sink, removed sink, new profile, removed profile
+#TODO: add support for changing of window_size 1000-fft_size (adv option)
+#TODO: reconnect support loop 1 second trying to reconnect
+#TODO: just resample the filters for profiles when loading to different sizes
+#TODO: add preamp
+prop_iface='org.freedesktop.DBus.Properties'
+eq_iface='org.PulseAudio.Ext.Equalizing1.Equalizer'
+device_iface='org.PulseAudio.Core1.Device'
+class QPaeq(QtGui.QWidget):
+ manager_path='/org/pulseaudio/equalizing1'
+ manager_iface='org.PulseAudio.Ext.Equalizing1.Manager'
+ core_iface='org.PulseAudio.Core1'
+ core_path='/org/pulseaudio/core1'
+ def __init__(self):
+ QtGui.QWidget.__init__(self)
+ self.setWindowTitle('qpaeq')
+ self.slider_widget=None
+ self.sink_name=None
+ self.filter_state=None
+
+ self.create_layout()
+
+ self.set_connection()
+ self.connect_to_sink(self.sinks[0])
+ self.set_callbacks()
+ self.setMinimumSize(self.sizeHint())
+
+ def create_layout(self):
+ self.main_layout=QtGui.QVBoxLayout()
+ self.setLayout(self.main_layout)
+ toprow_layout=QtGui.QHBoxLayout()
+ sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ #sizePolicy.setHeightForWidth(self.profile_box.sizePolicy().hasHeightForWidth())
+
+ toprow_layout.addWidget(QtGui.QLabel('Sink'))
+ self.sink_box = QtGui.QComboBox()
+ self.sink_box.setSizePolicy(sizePolicy)
+ self.sink_box.setDuplicatesEnabled(False)
+ self.sink_box.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically)
+ #self.sink_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
+ toprow_layout.addWidget(self.sink_box)
+
+ toprow_layout.addWidget(QtGui.QLabel('Channel'))
+ self.channel_box = QtGui.QComboBox()
+ self.channel_box.setSizePolicy(sizePolicy)
+ toprow_layout.addWidget(self.channel_box)
+
+ toprow_layout.addWidget(QtGui.QLabel('Preset'))
+ self.profile_box = QtGui.QComboBox()
+ self.profile_box.setSizePolicy(sizePolicy)
+ self.profile_box.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically)
+ #self.profile_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
+ toprow_layout.addWidget(self.profile_box)
+
+ large_icon_size=self.style().pixelMetric(QtGui.QStyle.PM_LargeIconSize)
+ large_icon_size=QtCore.QSize(large_icon_size,large_icon_size)
+ save_profile=QtGui.QToolButton()
+ save_profile.setIcon(self.style().standardIcon(QtGui.QStyle.SP_DriveFDIcon))
+ save_profile.setIconSize(large_icon_size)
+ save_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
+ save_profile.clicked.connect(self.save_profile)
+ remove_profile=QtGui.QToolButton()
+ remove_profile.setIcon(self.style().standardIcon(QtGui.QStyle.SP_TrashIcon))
+ remove_profile.setIconSize(large_icon_size)
+ remove_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
+ remove_profile.clicked.connect(self.remove_profile)
+ toprow_layout.addWidget(save_profile)
+ toprow_layout.addWidget(remove_profile)
+
+ reset_button = QtGui.QPushButton('Reset')
+ reset_button.clicked.connect(self.reset)
+ toprow_layout.addStretch()
+ toprow_layout.addWidget(reset_button)
+ self.layout().addLayout(toprow_layout)
+
+ self.profile_box.activated.connect(self.load_profile)
+ self.channel_box.activated.connect(self.select_channel)
+ def connect_to_sink(self,name):
+ #TODO: clear slots for profile buttons
+
+ #flush any pending saves for other sinks
+ if self.filter_state is not None:
+ self.filter_state.flush_state()
+ sink=self.connection.get_object(object_path=name)
+ self.sink_props=dbus.Interface(sink,dbus_interface=prop_iface)
+ self.sink=dbus.Interface(sink,dbus_interface=eq_iface)
+ self.filter_state=FilterState(sink)
+ #sample_rate,filter_rate,channels,channel)
+
+ self.channel_box.clear()
+ self.channel_box.addItem('All',self.filter_state.channels)
+ for i in xrange(self.filter_state.channels):
+ self.channel_box.addItem('%d' %(i+1,),i)
+ self.setMinimumSize(self.sizeHint())
+
+ self.set_slider_widget(SliderArray(self.filter_state))
+
+ self.sink_name=name
+ #set the signal listener for this sink
+ core=self._get_core()
+ #temporary hack until signal filtering works properly
+ core.ListenForSignal('',[dbus.ObjectPath(self.sink_name),dbus.ObjectPath(self.manager_path)])
+ #for x in ['FilterChanged']:
+ # core.ListenForSignal("%s.%s" %(self.eq_iface,x),[dbus.ObjectPath(self.sink_name)])
+ #core.ListenForSignal(self.eq_iface,[dbus.ObjectPath(self.sink_name)])
+ self.sink.connect_to_signal('FilterChanged',self.read_filter)
+
+ def set_slider_widget(self,widget):
+ layout=self.layout()
+ if self.slider_widget is not None:
+ i=layout.indexOf(self.slider_widget)
+ layout.removeWidget(self.slider_widget)
+ self.slider_widget.deleteLater()
+ layout.insertWidget(i,self.slider_widget)
+ else:
+ layout.addWidget(widget)
+ self.slider_widget=widget
+ self.read_filter()
+ def _get_core(self):
+ core_obj=self.connection.get_object(object_path=self.core_path)
+ core=dbus.Interface(core_obj,dbus_interface=self.core_iface)
+ return core
+ def sink_added(self,sink):
+ #TODO: preserve selected sink
+ self.update_sinks()
+ def sink_removed(self,sink):
+ #TODO: preserve selected sink, try connecting to backup otherwise
+ if sink==self.sink_name:
+ #connect to new sink?
+ pass
+ self.update_sinks()
+ def save_profile(self):
+ #popup dialog box for name
+ current=self.profile_box.currentIndex()
+ profile,ok=QtGui.QInputDialog.getItem(self,'Preset Name','Preset',self.profiles,current)
+ if not ok or profile=='':
+ return
+ if profile in self.profiles:
+ mbox=QtGui.QMessageBox(self)
+ mbox.setText('%s preset already exists'%(profile,))
+ mbox.setInformativeText('Do you want to save over it?')
+ mbox.setStandardButtons(mbox.Save|mbox.Discard|mbox.Cancel)
+ mbox.setDefaultButton(mbox.Save)
+ ret=mbox.exec_()
+ if ret!=mbox.Save:
+ return
+ self.sink.SaveProfile(self.filter_state.channel,dbus.String(profile))
+ if self.filter_state.channel==self.filter_state.channels:
+ for x in range(1,self.filter_state.channels):
+ self.sink.LoadProfile(x,dbus.String(profile))
+ def remove_profile(self):
+ #find active profile name, remove it
+ profile=self.profile_box.currentText()
+ manager=dbus.Interface(self.manager_obj,dbus_interface=self.manager_iface)
+ manager.RemoveProfile(dbus.String(profile))
+ def load_profile(self,x):
+ profile=self.profile_box.itemText(x)
+ self.filter_state.load_profile(profile)
+ def select_channel(self,x):
+ self.filter_state.channel = self.channel_box.itemData(x).toPyObject()
+ self._set_profile_name()
+ self.filter_state.readback()
+
+ #TODO: add back in preamp!
+ #print frequencies
+ #main_layout.addLayout(self.create_slider(partial(self.update_coefficient,0),
+ # 'Preamp')[0]
+ #)
+ def set_connection(self):
+ self.connection=connect()
+ self.manager_obj=self.connection.get_object(object_path=self.manager_path)
+ manager_props=dbus.Interface(self.manager_obj,dbus_interface=prop_iface)
+ self.sinks=manager_props.Get(self.manager_iface,'EqualizedSinks')
+ def set_callbacks(self):
+ manager=dbus.Interface(self.manager_obj,dbus_interface=self.manager_iface)
+ manager.connect_to_signal('ProfilesChanged',self.update_profiles)
+ manager.connect_to_signal('SinkAdded',self.sink_added)
+ manager.connect_to_signal('SinkRemoved',self.sink_removed)
+ #self._get_core().ListenForSignal(self.manager_iface,[])
+ #self._get_core().ListenForSignal(self.manager_iface,[dbus.ObjectPath(self.manager_path)])
+ #core=self._get_core()
+ #for x in ['ProfilesChanged','SinkAdded','SinkRemoved']:
+ # core.ListenForSignal("%s.%s" %(self.manager_iface,x),[dbus.ObjectPath(self.manager_path)])
+ self.update_profiles()
+ self.update_sinks()
+ def update_profiles(self):
+ #print 'update profiles called!'
+ manager_props=dbus.Interface(self.manager_obj,dbus_interface=prop_iface)
+ self.profiles=manager_props.Get(self.manager_iface,'Profiles')
+ self.profile_box.blockSignals(True)
+ self.profile_box.clear()
+ self.profile_box.addItems(self.profiles)
+ self.profile_box.blockSignals(False)
+ self._set_profile_name()
+ def update_sinks(self):
+ self.sink_box.blockSignals(True)
+ self.sink_box.clear()
+ for x in self.sinks:
+ sink=self.connection.get_object(object_path=x)
+ sink_props=dbus.Interface(sink,dbus_interface=prop_iface)
+ simple_name=sink_props.Get(device_iface,'Name')
+ self.sink_box.addItem(simple_name,x)
+ self.sink_box.blockSignals(False)
+ self.sink_box.setMinimumSize(self.sink_box.sizeHint())
+ def read_filter(self):
+ #print self.filter_frequencies
+ self.filter_state.readback()
+ def reset(self):
+ coefs=dbus.Array([1/math.sqrt(2.0)]*(self.filter_state.filter_rate//2+1))
+ preamp=1.0
+ self.filter_state.set_filter(preamp,coefs)
+ def _set_profile_name(self):
+ self.profile_box.blockSignals(True)
+ profile_name=self.sink.BaseProfile(self.filter_state.channel)
+ if profile_name is not None:
+ i=self.profile_box.findText(profile_name)
+ if i>=0:
+ self.profile_box.setCurrentIndex(i)
+ self.profile_box.blockSignals(False)
+
+
+class SliderArray(QtGui.QWidget):
+ def __init__(self,filter_state,parent=None):
+ super(SliderArray,self).__init__(parent)
+ #self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;')
+ #self.setStyleSheet('font-size: 7pt; font-family: monospace;'+outline%('blue'))
+ self.filter_state=filter_state
+ self.setLayout(QtGui.QHBoxLayout())
+ self.sub_array=None
+ self.set_sub_array(SliderArraySub(self.filter_state))
+ self.inhibit_resize=0
+ def set_sub_array(self,widget):
+ if self.sub_array is not None:
+ self.layout().removeWidget(self.sub_array)
+ self.sub_array.disconnect_signals()
+ self.sub_array.deleteLater()
+ self.sub_array=widget
+ self.layout().addWidget(self.sub_array)
+ self.sub_array.connect_signals()
+ self.filter_state.readback()
+ def resizeEvent(self,event):
+ super(SliderArray,self).resizeEvent(event)
+ if self.inhibit_resize==0:
+ self.inhibit_resize+=1
+ #self.add_sliders_to_fit()
+ t=QtCore.QTimer(self)
+ t.setSingleShot(True)
+ t.setInterval(0)
+ t.timeout.connect(partial(self.add_sliders_to_fit,event))
+ t.start()
+ def add_sliders_to_fit(self,event):
+ if event.oldSize().width()>0 and event.size().width()>0:
+ i=len(self.filter_state.frequencies)*int(round(float(event.size().width())/event.oldSize().width()))
+ else:
+ i=len(self.filter_state.frequencies)
+
+ t_w=self.size().width()
+ def evaluate(filter_state, target, variable):
+ base_freqs=self.filter_state.freq_proper(self.filter_state.DEFAULT_FREQUENCIES)
+ filter_state._set_frequency_values(subdivide(base_freqs,variable))
+ new_widget=SliderArraySub(filter_state)
+ w=new_widget.sizeHint().width()
+ return w-target
+ def searcher(initial,evaluator):
+ i=initial
+ def d(e): return 1 if e>=0 else -1
+ error=evaluator(i)
+ old_direction=d(error)
+ i-=old_direction
+ while True:
+ error=evaluator(i)
+ direction=d(error)
+ if direction!=old_direction:
+ k=i-1
+ #while direction<0 and error!=0:
+ # k-=1
+ # error=evaluator(i)
+ # direction=d(error)
+ return k, evaluator(k)
+ i-=direction
+ old_direction=direction
+ searcher(i,partial(evaluate,self.filter_state,t_w))
+ self.set_sub_array(SliderArraySub(self.filter_state))
+ self.inhibit_resize-=1
+
+class SliderArraySub(QtGui.QWidget):
+ def __init__(self,filter_state,parent=None):
+ super(SliderArraySub,self).__init__(parent)
+ self.filter_state=filter_state
+ self.setLayout(QtGui.QGridLayout())
+ self.slider=[None]*len(self.filter_state.frequencies)
+ self.label=[None]*len(self.slider)
+ #self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;')
+ #self.setStyleSheet('font-size: 7pt; font-family: monospace;'+outline%('blue'))
+ qt=QtCore.Qt
+ #self.layout().setHorizontalSpacing(1)
+ def add_slider(slider,label, c):
+ self.layout().addWidget(slider,0,c,qt.AlignHCenter)
+ self.layout().addWidget(label,1,c,qt.AlignHCenter)
+ self.layout().setColumnMinimumWidth(c,max(label.sizeHint().width(),slider.sizeHint().width()))
+ def create_slider(slider_label):
+ slider=QtGui.QSlider(QtCore.Qt.Vertical,self)
+ label=SliderLabel(slider_label,filter_state,self)
+ slider.setRange(-1000,2000)
+ slider.setSingleStep(1)
+ return (slider,label)
+ self.preamp_slider,self.preamp_label=create_slider('Preamp')
+ add_slider(self.preamp_slider,self.preamp_label,0)
+ for i,hz in enumerate(self.filter_state.frequencies):
+ slider,label=create_slider(self.hz2label(hz))
+ self.slider[i]=slider
+ #slider.setStyleSheet('font-size: 7pt; font-family: monospace;'+outline%('red',))
+ self.label[i]=label
+ c=i+1
+ add_slider(slider,label,i+1)
+ def hz2label(self, hz):
+ if hz==0:
+ label_text='DC'
+ elif hz==self.filter_state.sample_rate//2:
+ label_text='Coda'
+ else:
+ label_text=hz2str(hz)
+ return label_text
+
+ def connect_signals(self):
+ def connect(writer,reader,slider,label):
+ slider.valueChanged.connect(writer)
+ self.filter_state.readFilter.connect(reader)
+ label_cb=partial(slider.setValue,0)
+ label.clicked.connect(label_cb)
+ return label_cb
+
+ self.preamp_writer_cb=self.write_preamp
+ self.preamp_reader_cb=self.sync_preamp
+ self.preamp_label_cb=connect(self.preamp_writer_cb,
+ self.preamp_reader_cb,
+ self.preamp_slider,
+ self.preamp_label)
+ self.writer_callbacks=[None]*len(self.slider)
+ self.reader_callbacks=[None]*len(self.slider)
+ self.label_callbacks=[None]*len(self.label)
+ for i in range(len(self.slider)):
+ self.writer_callbacks[i]=partial(self.write_coefficient,i)
+ self.reader_callbacks[i]=partial(self.sync_coefficient,i)
+ self.label_callbacks[i]=connect(self.writer_callbacks[i],
+ self.reader_callbacks[i],
+ self.slider[i],
+ self.label[i])
+ def disconnect_signals(self):
+ def disconnect(writer,reader,label_cb,slider,label):
+ slider.valueChanged.disconnect(writer)
+ self.filter_state.readFilter.disconnect(reader)
+ label.clicked.disconnect(label_cb)
+ disconnect(self.preamp_writer_cb, self.preamp_reader_cb,
+ self.preamp_label_cb, self.preamp_slider, self.preamp_label)
+ for i in range(len(self.slider)):
+ disconnect(self.writer_callbacks[i],
+ self.reader_callbacks[i],
+ self.label_callbacks[i],
+ self.slider[i],
+ self.label[i])
+
+ def write_preamp(self, v):
+ self.filter_state.preamp=self.slider2coef(v)
+ self.filter_state.seed()
+ def sync_preamp(self):
+ self.preamp_slider.blockSignals(True)
+ self.preamp_slider.setValue(self.coef2slider(self.filter_state.preamp))
+ self.preamp_slider.blockSignals(False)
+
+
+ def write_coefficient(self,i,v):
+ self.filter_state.coefficients[i]=self.slider2coef(v)/math.sqrt(2.0)
+ self.filter_state.seed()
+ def sync_coefficient(self,i):
+ slider=self.slider[i]
+ slider.blockSignals(True)
+ slider.setValue(self.coef2slider(math.sqrt(2.0)*self.filter_state.coefficients[i]))
+ slider.blockSignals(False)
+ @staticmethod
+ def slider2coef(x):
+ return (1.0+(x/1000.0))
+ @staticmethod
+ def coef2slider(x):
+ return int((x-1.0)*1000)
+outline='border-width: 1px; border-style: solid; border-color: %s;'
+
+class SliderLabel(QtGui.QLabel):
+ clicked=QtCore.pyqtSignal()
+ def __init__(self,label_text,filter_state,parent=None):
+ super(SliderLabel,self).__init__(parent)
+ self.setStyleSheet('font-size: 7pt; font-family: monospace;')
+ self.setText(label_text)
+ self.setMinimumSize(self.sizeHint())
+ def mouseDoubleClickEvent(self, event):
+ self.clicked.emit()
+ super(SliderLabel,self).mouseDoubleClickEvent(event)
+
+#until there are server side state savings, do it in the client but try and avoid
+#simulaneous broadcasting situations
+class FilterState(QtCore.QObject):
+ #DEFAULT_FREQUENCIES=map(float,[25,50,75,100,150,200,300,400,500,800,1e3,1.5e3,3e3,5e3,7e3,10e3,15e3,20e3])
+ DEFAULT_FREQUENCIES=[31.75,63.5,125,250,500,1e3,2e3,4e3,8e3,16e3]
+ readFilter=QtCore.pyqtSignal()
+ def __init__(self,sink):
+ super(FilterState,self).__init__()
+ self.sink_props=dbus.Interface(sink,dbus_interface=prop_iface)
+ self.sink=dbus.Interface(sink,dbus_interface=eq_iface)
+ self.sample_rate=self.get_eq_attr('SampleRate')
+ self.filter_rate=self.get_eq_attr('FilterSampleRate')
+ self.channels=self.get_eq_attr('NChannels')
+ self.channel=self.channels
+ self.set_frequency_values(self.DEFAULT_FREQUENCIES)
+ self.sync_timer=QtCore.QTimer()
+ self.sync_timer.setSingleShot(True)
+ self.sync_timer.timeout.connect(self.save_state)
+
+ def get_eq_attr(self,attr):
+ return self.sink_props.Get(eq_iface,attr)
+ def freq_proper(self,xs):
+ return [0]+xs+[self.sample_rate//2]
+ def _set_frequency_values(self,freqs):
+ self.frequencies=freqs
+ #print 'base',self.frequencies
+ self.filter_frequencies=map(lambda x: int(round(x)), \
+ self.translate_rates(self.filter_rate,self.sample_rate,
+ self.frequencies) \
+ )
+ self.coefficients=[0.0]*len(self.frequencies)
+ self.preamp=1.0
+ def set_frequency_values(self,freqs):
+ self._set_frequency_values(self.freq_proper(freqs))
+ @staticmethod
+ def translate_rates(dst,src,rates):
+ return list(map(lambda x: x*dst/src,rates))
+ def seed(self):
+ self.sink.SeedFilter(self.channel,self.filter_frequencies,self.coefficients,self.preamp)
+ self.sync_timer.start(SYNC_TIMEOUT)
+ def readback(self):
+ coefs,preamp=self.sink.FilterAtPoints(self.channel,self.filter_frequencies)
+ self.coefficients=coefs
+ self.preamp=preamp
+ self.readFilter.emit()
+ def set_filter(self,preamp,coefs):
+ self.sink.SetFilter(self.channel,dbus.Array(coefs),self.preamp)
+ self.sync_timer.start(SYNC_TIMEOUT)
+ def save_state(self):
+ print 'saving state'
+ self.sink.SaveState()
+ def load_profile(self,profile):
+ self.sink.LoadProfile(self.channel,dbus.String(profile))
+ self.sync_timer.start(SYNC_TIMEOUT)
+ def flush_state(self):
+ if self.sync_timer.isActive():
+ self.sync_timer.stop()
+ self.save_state()
+
+
+def safe_log(k,b):
+ i=0
+ while k//b!=0:
+ i+=1
+ k=k//b
+ return i
+def hz2str(hz):
+ p=safe_log(hz,10.0)
+ if p<3:
+ return '%dHz' %(hz,)
+ elif hz%1000==0:
+ return '%dKHz' %(hz/(10.0**3),)
+ else:
+ return '%.1fKHz' %(hz/(10.0**3),)
+
+def subdivide(xs, t_points):
+ while len(xs)<t_points:
+ m=[0]*(2*len(xs)-1)
+ m[0:len(m):2]=xs
+ for i in range(1,len(m),2):
+ m[i]=(m[i-1]+m[i+1])//2
+ xs=m
+ p_drop=len(xs)-t_points
+ p_drop_left=p_drop//2
+ p_drop_right=p_drop-p_drop_left
+ #print 'xs',xs
+ #print 'dropping %d, %d left, %d right' %(p_drop,p_drop_left,p_drop_right)
+ c=len(xs)//2
+ left=xs[0:p_drop_left*2:2]+xs[p_drop_left*2:c]
+ right=list(reversed(xs[c:]))
+ right=right[0:p_drop_right*2:2]+right[p_drop_right*2:]
+ right=list(reversed(right))
+ return left+right
+
+def main():
+ dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True)
+ app=QtGui.QApplication(sys.argv)
+ qpaeq_main=QPaeq()
+ qpaeq_main.show()
+ sys.exit(app.exec_())
+
+if __name__=='__main__':
+ main()
commit f5d8aef0ac5716ccddce2467efb517abf6d4335a
Author: Joe Marcus Clarke <marcus at FreeBSD.org>
Date: Sat Nov 21 00:02:33 2009 +0100
freebsd: fix atomic ops implementations
Stole from
http://www.freebsd.org/cgi/cvsweb.cgi/ports/audio/pulseaudio/files/patch-src_pulsecore_atomic.h?rev=1.6
diff --git a/src/pulsecore/atomic.h b/src/pulsecore/atomic.h
index 119c445..51d0821 100644
--- a/src/pulsecore/atomic.h
+++ b/src/pulsecore/atomic.h
@@ -180,6 +180,110 @@ static inline pa_bool_t pa_atomic_ptr_cmpxchg(pa_atomic_ptr_t *a, void *old_p, v
return r == old_p;
}
+#elif defined(__FreeBSD__)
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <machine/atomic.h>
+
+#if __FreeBSD_version < 600000
+#if defined(__i386__) || defined(__amd64__)
+#if defined(__amd64__)
+#define atomic_load_acq_64 atomic_load_acq_long
+#endif
+static inline u_int atomic_fetchadd_int(volatile u_int *p, u_int v) {
+ __asm __volatile(
+ " " __XSTRING(MPLOCKED) " "
+ " xaddl %0, %1 ; "
+ "# atomic_fetchadd_int"
+ : "+r" (v),
+ "=m" (*p)
+ : "m" (*p));
+
+ return (v);
+}
+#elif defined(__sparc64__)
+#define atomic_load_acq_64 atomic_load_acq_long
+#define atomic_fetchadd_int atomic_add_int
+#elif defined(__ia64__)
+#define atomic_load_acq_64 atomic_load_acq_long
+static inline uint32_t
+atomic_fetchadd_int(volatile uint32_t *p, uint32_t v) {
+ uint32_t value;
+
+ do {
+ value = *p;
+ } while (!atomic_cmpset_32(p, value, value + v));
+ return (value);
+}
+#endif
+#endif
+
+typedef struct pa_atomic {
+ volatile unsigned long value;
+} pa_atomic_t;
+
+#define PA_ATOMIC_INIT(v) { .value = (v) }
+
+static inline int pa_atomic_load(const pa_atomic_t *a) {
+ return (int) atomic_load_acq_int((unsigned int *) &a->value);
+}
+
+static inline void pa_atomic_store(pa_atomic_t *a, int i) {
+ atomic_store_rel_int((unsigned int *) &a->value, i);
+}
+
+static inline int pa_atomic_add(pa_atomic_t *a, int i) {
+ return atomic_fetchadd_int((unsigned int *) &a->value, i);
+}
+
+static inline int pa_atomic_sub(pa_atomic_t *a, int i) {
+ return atomic_fetchadd_int((unsigned int *) &a->value, -(i));
+}
+
+static inline int pa_atomic_inc(pa_atomic_t *a) {
+ return atomic_fetchadd_int((unsigned int *) &a->value, 1);
+}
+
+static inline int pa_atomic_dec(pa_atomic_t *a) {
+ return atomic_fetchadd_int((unsigned int *) &a->value, -1);
+}
+
+static inline int pa_atomic_cmpxchg(pa_atomic_t *a, int old_i, int new_i) {
+ return atomic_cmpset_int((unsigned int *) &a->value, old_i, new_i);
+}
+
+typedef struct pa_atomic_ptr {
+ volatile unsigned long value;
+} pa_atomic_ptr_t;
+
+#define PA_ATOMIC_PTR_INIT(v) { .value = (unsigned long) (v) }
+
+static inline void* pa_atomic_ptr_load(const pa_atomic_ptr_t *a) {
+#ifdef atomic_load_acq_64
+ return (void*) atomic_load_acq_ptr((unsigned long *) &a->value);
+#else
+ return (void*) atomic_load_acq_ptr((unsigned int *) &a->value);
+#endif
+}
+
+static inline void pa_atomic_ptr_store(pa_atomic_ptr_t *a, void *p) {
+#ifdef atomic_load_acq_64
+ atomic_store_rel_ptr(&a->value, (unsigned long) p);
+#else
+ atomic_store_rel_ptr((unsigned int *) &a->value, (unsigned int) p);
+#endif
+}
+
+static inline int pa_atomic_ptr_cmpxchg(pa_atomic_ptr_t *a, void *old_p, void* new_p) {
+#ifdef atomic_load_acq_64
+ return atomic_cmpset_ptr(&a->value, (unsigned long) old_p, (unsigned long) new_p);
+#else
+ return atomic_cmpset_ptr((unsigned int *) &a->value, (unsigned int) old_p, (unsigned int) new_p);
+#endif
+}
+
#elif defined(__GNUC__) && (defined(__amd64__) || defined(__x86_64__))
#warn "The native atomic operations implementation for AMD64 has not been tested thoroughly. libatomic_ops is known to not work properly on AMD64 and your gcc version is too old for the gcc-builtin atomic ops support. You have three options now: test the native atomic operations implementation for AMD64, fix libatomic_ops, or upgrade your GCC."
commit fc4cf275696c05345ae2e609eac1ad3b05570ca1
Merge: f5d8aef 41853cc
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Nov 21 00:05:02 2009 +0100
Merge remote branch 'phish3/master'
commit 77c6b696560f460e74af85d069863e8337e99d33
Author: Jason Newton <nevion at gmail.com>
Date: Fri Nov 20 15:07:47 2009 -0800
remove .py extension from qpaeq
diff --git a/src/utils/qpaeq.py b/src/utils/qpaeq
similarity index 100%
rename from src/utils/qpaeq.py
rename to src/utils/qpaeq
commit 40aee60bfaed1875cd5f1a1d03c5babac3999b14
Merge: 5150a10 fc4cf27
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Sat Nov 21 00:10:37 2009 +0100
Merge branch 'master' of git://git.0pointer.de/pulseaudio
commit ca637e5ba42b7f667ade252cc8b21085e6e13967
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Sat Nov 21 00:17:33 2009 +0100
Simplify handling of NetBSD atomic ops discovery.
Instead of having a parameter to enable/disable them (which was also
ignored by the source code side), simply identify NetBSD 5 (when the atomic
ops were implemented the first time) in a $host switch and ignore checking
for libatomic_ops.
diff --git a/configure.ac b/configure.ac
index fdc6662..7c52766 100644
--- a/configure.ac
+++ b/configure.ac
@@ -166,27 +166,12 @@ AC_ARG_ENABLE([atomic-arm-memory-barrier],
esac
],)
-AC_ARG_ENABLE([netbsd-atomic-ops],
- AS_HELP_STRING([--enable-netbsd-atomic-ops],[Use the native NetBSD atomic_ops implementation]),
- [
- case "${enableval}" in
- yes) atomic_netbsd_helpers=yes ;;
- no) atomic_netbsd_helpers=no ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --enable-netbsd-atomic-ops) ;;
- esac
- ],
- [atomic_netbsd_helpers=auto])
-
AC_MSG_CHECKING([target operating system])
case $host in
*-*-linux*)
AC_MSG_RESULT([linux])
pulse_target_os=linux
;;
- *-*-netbsd*)
- AC_MSG_RESULT([netbsd])
- pulse_target_os=netbsd
- ;;
*)
AC_MSG_RESULT([unknown])
pulse_target_os=unknown
@@ -210,7 +195,7 @@ if test "$pulseaudio_cv_sync_bool_compare_and_swap" = "yes" ; then
else
# HW specific atomic ops stuff
AC_MSG_CHECKING([architecture for native atomic operations])
- case $host_cpu in
+ case $host in
arm*)
AC_MSG_RESULT([arm])
AC_MSG_CHECKING([whether we can use Linux kernel helpers])
@@ -246,14 +231,12 @@ else
])
fi
;;
+ *-netbsdelf5*)
+ AC_MSG_RESULT([yes])
+ need_libatomic_ops=no
+ ;;
*)
- if test "x$pulse_target_os" = "xnetbsd" && test "x$atomic_netbsd_helpers" = "xyes"; then
- AC_MSG_RESULT([yes])
- AC_DEFINE_UNQUOTED(NETBSD_ATOMIC_OPS, 1, [netbsd implementation])
- need_libatomic_ops=no
- else
- AC_MSG_RESULT([unknown])
- fi
+ AC_MSG_RESULT([unknown])
;;
esac
fi
commit 2caf59d49f9879831f93a181dc9c03841287cdd2
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Sat Nov 21 00:27:35 2009 +0100
Since now we have FreeBSD atomic operations, don't require libatomic_ops.
This lets the original configure script to pass on FreeBSD.
diff --git a/configure.ac b/configure.ac
index 7c52766..dfbd9bc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -235,6 +235,10 @@ else
AC_MSG_RESULT([yes])
need_libatomic_ops=no
;;
+ *-freebsd*)
+ AC_MSG_RESULT([yes])
+ need_libatomic_ops=no
+ ;;
*)
AC_MSG_RESULT([unknown])
;;
commit d963998676397e14cfd0fa04e98cdca21abed4ef
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Sat Nov 21 00:30:46 2009 +0100
Rename all the signal parameters and variables to something more explicit.
Without this change, on FreeBSD you'll be bothered by tons of warnings
about overshadowing signal(2).
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 1714df3..d99c8b9 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -452,7 +452,7 @@ static void handle_get_profile_by_name(DBusConnection *conn, DBusMessage *msg, v
static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_card *c = userdata;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
pa_assert(core);
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CARD);
@@ -472,14 +472,14 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
c->active_profile = c->card->active_profile;
object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
- pa_assert_se(signal = dbus_message_new_signal(c->path,
- PA_DBUSIFACE_CARD_INTERFACE,
- signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CARD_INTERFACE,
+ signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
if (!pa_proplist_equal(c->proplist, c->card->proplist)) {
@@ -487,15 +487,15 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_proplist_update(c->proplist, PA_UPDATE_SET, c->card->proplist);
- pa_assert_se(signal = dbus_message_new_signal(c->path,
- PA_DBUSIFACE_CARD_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CARD_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_dbus_append_proplist(&msg_iter, c->proplist);
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
diff --git a/src/modules/dbus/iface-client.c b/src/modules/dbus/iface-client.c
index 546370f..3192448 100644
--- a/src/modules/dbus/iface-client.c
+++ b/src/modules/dbus/iface-client.c
@@ -391,7 +391,7 @@ static void handle_remove_properties(DBusConnection *conn, DBusMessage *msg, voi
static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_client *c = userdata;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
pa_assert(core);
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CLIENT);
@@ -410,15 +410,15 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_proplist_update(c->proplist, PA_UPDATE_SET, c->client->proplist);
- pa_assert_se(signal = dbus_message_new_signal(c->path,
- PA_DBUSIFACE_CLIENT_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(c->path,
+ PA_DBUSIFACE_CLIENT_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_dbus_append_proplist(&msg_iter, c->proplist);
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 169e8e5..497b59b 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -1488,7 +1488,7 @@ static void handle_exit(DBusConnection *conn, DBusMessage *msg, void *userdata)
static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_core *c = userdata;
- const char *signal;
+ const char *signal_str;
char **objects = NULL;
int n_objects;
@@ -1497,11 +1497,11 @@ static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, voi
pa_assert(c);
pa_assert_se(dbus_message_get_args(msg, NULL,
- DBUS_TYPE_STRING, &signal,
+ DBUS_TYPE_STRING, &signal_str,
DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, &n_objects,
DBUS_TYPE_INVALID));
- pa_dbus_protocol_add_signal_listener(c->dbus_protocol, conn, *signal ? signal : NULL, objects, n_objects);
+ pa_dbus_protocol_add_signal_listener(c->dbus_protocol, conn, *signal_str ? signal_str : NULL, objects, n_objects);
pa_dbus_send_empty_reply(conn, msg);
@@ -1510,15 +1510,15 @@ static void handle_listen_for_signal(DBusConnection *conn, DBusMessage *msg, voi
static void handle_stop_listening_for_signal(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbusiface_core *c = userdata;
- const char *signal;
+ const char *signal_str;
pa_assert(conn);
pa_assert(msg);
pa_assert(c);
- pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &signal, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &signal_str, DBUS_TYPE_INVALID));
- pa_dbus_protocol_remove_signal_listener(c->dbus_protocol, conn, *signal ? signal : NULL);
+ pa_dbus_protocol_remove_signal_listener(c->dbus_protocol, conn, *signal_str ? signal_str : NULL);
pa_dbus_send_empty_reply(conn, msg);
}
@@ -1531,7 +1531,7 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_dbusiface_sample *sample_iface = NULL;
pa_dbusiface_module *module_iface = NULL;
pa_dbusiface_client *client_iface = NULL;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
const char *object_path = NULL;
pa_sink *new_fallback_sink = NULL;
pa_source *new_fallback_source = NULL;
@@ -1552,21 +1552,21 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
&& (device_iface = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(new_fallback_sink->index)))) {
object_path = pa_dbusiface_device_get_path(device_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
} else if (!new_fallback_sink) {
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_FALLBACK_SINK_UNSET].name)));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SINK_UNSET].name)));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
@@ -1579,21 +1579,21 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
&& (device_iface = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(new_fallback_source->index)))) {
object_path = pa_dbusiface_device_get_path(device_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
} else if (!new_fallback_source) {
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_FALLBACK_SOURCE_UNSET].name)));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SOURCE_UNSET].name)));
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
break;
@@ -1612,10 +1612,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_CARD].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_CARD].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
if (!(card_iface = pa_hashmap_remove(c->cards, PA_UINT32_TO_PTR(idx))))
@@ -1623,10 +1623,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_card_get_path(card_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_CARD_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_CARD_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_card_free(card_iface);
}
@@ -1647,28 +1647,28 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_SINK].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_SINK].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
if (c->fallback_sink && pa_streq(c->fallback_sink->name, sink->name)) {
/* We have got default sink change event, but at that point
* the D-Bus sink object wasn't created yet. Now that the
* object is created, let's send the fallback sink change
* signal. */
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
-
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SINK_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1678,10 +1678,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se(pa_hashmap_remove(c->sinks_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_SINK_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_SINK_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device_iface);
}
@@ -1702,28 +1702,28 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_SOURCE].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_SOURCE].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
if (c->fallback_source && pa_streq(c->fallback_source->name, source->name)) {
/* We have got default source change event, but at that
* point the D-Bus source object wasn't created yet. Now
* that the object is created, let's send the fallback
* source change signal. */
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
-
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_FALLBACK_SOURCE_UPDATED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
@@ -1733,10 +1733,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_device_get_path(device_iface);
pa_assert_se(pa_hashmap_remove(c->sources_by_path, object_path));
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_SOURCE_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_SOURCE_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_device_free(device_iface);
}
@@ -1756,10 +1756,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_PLAYBACK_STREAM].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
if (!(stream_iface = pa_hashmap_remove(c->playback_streams, PA_UINT32_TO_PTR(idx))))
@@ -1767,10 +1767,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_PLAYBACK_STREAM_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream_iface);
}
@@ -1790,10 +1790,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_RECORD_STREAM].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_RECORD_STREAM].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
if (!(stream_iface = pa_hashmap_remove(c->record_streams, PA_UINT32_TO_PTR(idx))))
@@ -1801,10 +1801,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_stream_get_path(stream_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_RECORD_STREAM_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_stream_free(stream_iface);
}
@@ -1824,10 +1824,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_SAMPLE].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_SAMPLE].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
if (!(sample_iface = pa_hashmap_remove(c->samples, PA_UINT32_TO_PTR(idx))))
@@ -1835,10 +1835,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_sample_get_path(sample_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_SAMPLE_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_SAMPLE_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_sample_free(sample_iface);
}
@@ -1858,10 +1858,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_MODULE].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_MODULE].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
if (!(module_iface = pa_hashmap_remove(c->modules, PA_UINT32_TO_PTR(idx))))
@@ -1869,10 +1869,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_module_get_path(module_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_MODULE_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_MODULE_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_module_free(module_iface);
}
@@ -1892,10 +1892,10 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_CLIENT].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_CLIENT].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
} else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) {
if (!(client_iface = pa_hashmap_remove(c->clients, PA_UINT32_TO_PTR(idx))))
@@ -1903,37 +1903,37 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
object_path = pa_dbusiface_client_get_path(client_iface);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_CLIENT_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_CLIENT_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
pa_dbusiface_client_free(client_iface);
}
break;
}
- if (signal) {
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
+ if (signal_msg) {
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
}
}
static pa_hook_result_t extension_registered_cb(void *hook_data, void *call_data, void *slot_data) {
pa_dbusiface_core *c = slot_data;
const char *ext_name = call_data;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_NEW_EXTENSION].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_NEW_EXTENSION].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
return PA_HOOK_OK;
}
@@ -1941,18 +1941,18 @@ static pa_hook_result_t extension_registered_cb(void *hook_data, void *call_data
static pa_hook_result_t extension_unregistered_cb(void *hook_data, void *call_data, void *slot_data) {
pa_dbusiface_core *c = slot_data;
const char *ext_name = call_data;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
pa_assert(c);
pa_assert(ext_name);
- pa_assert_se((signal = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
- PA_DBUS_CORE_INTERFACE,
- signals[SIGNAL_EXTENSION_REMOVED].name)));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
+ pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+ PA_DBUS_CORE_INTERFACE,
+ signals[SIGNAL_EXTENSION_REMOVED].name)));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_STRING, &ext_name, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(c->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
return PA_HOOK_OK;
}
diff --git a/src/modules/dbus/iface-device.c b/src/modules/dbus/iface-device.c
index 3a747a4..bb91d71 100644
--- a/src/modules/dbus/iface-device.c
+++ b/src/modules/dbus/iface-device.c
@@ -1063,7 +1063,7 @@ static void handle_source_get_all(DBusConnection *conn, DBusMessage *msg, void *
static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_device *d = userdata;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
const pa_cvolume *new_volume = NULL;
pa_bool_t new_mute = FALSE;
pa_sink_state_t new_sink_state = 0;
@@ -1099,16 +1099,16 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
for (i = 0; i < d->volume.channels; ++i)
volume[i] = d->volume.values[i];
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_VOLUME_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal,
+ pa_assert_se(signal_msg = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_VOLUME_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg,
DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, d->volume.channels,
DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
new_mute = (d->type == DEVICE_TYPE_SINK) ? pa_sink_get_mute(d->sink, FALSE) : pa_source_get_mute(d->source, FALSE);
@@ -1116,14 +1116,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
if (d->mute != new_mute) {
d->mute = new_mute;
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &d->mute, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_BOOLEAN, &d->mute, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
if (d->type == DEVICE_TYPE_SINK)
@@ -1142,14 +1142,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
state = (d->type == DEVICE_TYPE_SINK) ? d->sink_state : d->source_state;
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_STATE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_STATE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_UINT32, &state, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
new_active_port = (d->type == DEVICE_TYPE_SINK) ? d->sink->active_port : d->source->active_port;
@@ -1160,14 +1160,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
d->active_port = new_active_port;
object_path = pa_dbusiface_device_port_get_path(pa_hashmap_get(d->ports, d->active_port->name));
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_ACTIVE_PORT_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_ACTIVE_PORT_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
new_proplist = (d->type == DEVICE_TYPE_SINK) ? d->sink->proplist : d->source->proplist;
@@ -1177,15 +1177,15 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
pa_proplist_update(d->proplist, PA_UPDATE_SET, new_proplist);
- pa_assert_se(signal = dbus_message_new_signal(d->path,
- PA_DBUSIFACE_DEVICE_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(d->path,
+ PA_DBUSIFACE_DEVICE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_dbus_append_proplist(&msg_iter, d->proplist);
- pa_dbus_protocol_send_signal(d->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(d->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
diff --git a/src/modules/dbus/iface-module.c b/src/modules/dbus/iface-module.c
index e8aea50..9973166 100644
--- a/src/modules/dbus/iface-module.c
+++ b/src/modules/dbus/iface-module.c
@@ -268,7 +268,7 @@ static void handle_unload(DBusConnection *conn, DBusMessage *msg, void *userdata
static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_module *m = userdata;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
pa_assert(core);
pa_assert((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_MODULE);
@@ -287,15 +287,15 @@ static void subscription_cb(pa_core *core, pa_subscription_event_type_t t, uint3
pa_proplist_update(m->proplist, PA_UPDATE_SET, m->module->proplist);
- pa_assert_se(signal = dbus_message_new_signal(m->path,
- PA_DBUSIFACE_MODULE_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(m->path,
+ PA_DBUSIFACE_MODULE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_dbus_append_proplist(&msg_iter, m->proplist);
- pa_dbus_protocol_send_signal(m->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(m->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
index b0542a6..c1fa193 100644
--- a/src/modules/dbus/iface-sample.c
+++ b/src/modules/dbus/iface-sample.c
@@ -450,7 +450,7 @@ static void handle_remove(DBusConnection *conn, DBusMessage *msg, void *userdata
static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_sample *s = userdata;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
pa_assert(c);
pa_assert(s);
@@ -468,15 +468,15 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
pa_proplist_update(s->proplist, PA_UPDATE_SET, s->sample->proplist);
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_SAMPLE_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_SAMPLE_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_dbus_append_proplist(&msg_iter, s->proplist);
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
diff --git a/src/modules/dbus/iface-stream.c b/src/modules/dbus/iface-stream.c
index 04a45e6..0255be4 100644
--- a/src/modules/dbus/iface-stream.c
+++ b/src/modules/dbus/iface-stream.c
@@ -632,7 +632,7 @@ static void handle_kill(DBusConnection *conn, DBusMessage *msg, void *userdata)
static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
pa_dbusiface_stream *s = userdata;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
const char *new_device_path = NULL;
uint32_t new_sample_rate = 0;
pa_proplist *new_proplist = NULL;
@@ -662,14 +662,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
new_device_path = pa_dbusiface_core_get_sink_path(s->core, new_sink);
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_DEVICE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &new_device_path, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_DEVICE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &new_device_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
} else {
pa_source *new_source = s->source_output->source;
@@ -680,14 +680,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
new_device_path = pa_dbusiface_core_get_source_path(s->core, new_source);
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_DEVICE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &new_device_path, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_DEVICE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &new_device_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
@@ -696,14 +696,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
if (s->sample_rate != new_sample_rate) {
s->sample_rate = new_sample_rate;
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_SAMPLE_RATE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_UINT32, &s->sample_rate, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_SAMPLE_RATE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_UINT32, &s->sample_rate, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
if (s->type == STREAM_TYPE_PLAYBACK) {
@@ -721,16 +721,16 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
for (i = 0; i < s->volume.channels; ++i)
volume[i] = s->volume.values[i];
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_VOLUME_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal,
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_VOLUME_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg,
DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &volume_ptr, s->volume.channels,
DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
new_mute = pa_sink_input_get_mute(s->sink_input);
@@ -738,14 +738,14 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
if (s->mute != new_mute) {
s->mute = new_mute;
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &s->mute, DBUS_TYPE_INVALID));
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_BOOLEAN, &s->mute, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
@@ -756,21 +756,21 @@ static void subscription_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t
pa_proplist_update(s->proplist, PA_UPDATE_SET, new_proplist);
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_PROPERTY_LIST_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_dbus_append_proplist(&msg_iter, s->proplist);
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
- signal = NULL;
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
+ signal_msg = NULL;
}
}
static pa_hook_result_t send_event_cb(void *hook_data, void *call_data, void *slot_data) {
pa_dbusiface_stream *s = slot_data;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
DBusMessageIter msg_iter;
const char *name = NULL;
pa_proplist *property_list = NULL;
@@ -796,15 +796,15 @@ static pa_hook_result_t send_event_cb(void *hook_data, void *call_data, void *sl
property_list = data->data;
}
- pa_assert_se(signal = dbus_message_new_signal(s->path,
- PA_DBUSIFACE_STREAM_INTERFACE,
- signals[SIGNAL_STREAM_EVENT].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(s->path,
+ PA_DBUSIFACE_STREAM_INTERFACE,
+ signals[SIGNAL_STREAM_EVENT].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_assert_se(dbus_message_iter_append_basic(&msg_iter, DBUS_TYPE_STRING, &name));
pa_dbus_append_proplist(&msg_iter, property_list);
- pa_dbus_protocol_send_signal(s->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_dbus_protocol_send_signal(s->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
return PA_HOOK_OK;
}
diff --git a/src/modules/dbus/module-dbus-protocol.c b/src/modules/dbus/module-dbus-protocol.c
index 11064c3..acc6ca0 100644
--- a/src/modules/dbus/module-dbus-protocol.c
+++ b/src/modules/dbus/module-dbus-protocol.c
@@ -126,7 +126,7 @@ static void client_kill_cb(pa_client *c) {
/* Called from pa_client_send_event(). */
static void client_send_event_cb(pa_client *c, const char *name, pa_proplist *data) {
struct connection *conn = NULL;
- DBusMessage *signal = NULL;
+ DBusMessage *signal_msg = NULL;
DBusMessageIter msg_iter;
pa_assert(c);
@@ -136,15 +136,15 @@ static void client_send_event_cb(pa_client *c, const char *name, pa_proplist *da
conn = c->userdata;
- pa_assert_se(signal = dbus_message_new_signal(pa_dbusiface_core_get_client_path(conn->server->userdata->core_iface, c),
- PA_DBUSIFACE_CLIENT_INTERFACE,
- "ClientEvent"));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(pa_dbusiface_core_get_client_path(conn->server->userdata->core_iface, c),
+ PA_DBUSIFACE_CLIENT_INTERFACE,
+ "ClientEvent"));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
pa_assert_se(dbus_message_iter_append_basic(&msg_iter, DBUS_TYPE_STRING, &name));
pa_dbus_append_proplist(&msg_iter, data);
- pa_assert_se(dbus_connection_send(pa_dbus_wrap_connection_get(conn->wrap_conn), signal, NULL));
- dbus_message_unref(signal);
+ pa_assert_se(dbus_connection_send(pa_dbus_wrap_connection_get(conn->wrap_conn), signal_msg, NULL));
+ dbus_message_unref(signal_msg);
}
/* Called by D-Bus at the authentication phase. */
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 788f458..02c312e 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -433,29 +433,29 @@ static void append_volume_variant(DBusMessageIter *iter, struct entry *e) {
}
static void send_new_entry_signal(struct dbus_entry *entry) {
- DBusMessage *signal;
+ DBusMessage *signal_msg;
pa_assert(entry);
- pa_assert_se(signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_STREAM_RESTORE, signals[SIGNAL_NEW_ENTRY].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &entry->object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(entry->userdata->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_assert_se(signal_msg = dbus_message_new_signal(OBJECT_PATH, INTERFACE_STREAM_RESTORE, signals[SIGNAL_NEW_ENTRY].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &entry->object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(entry->userdata->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
}
static void send_entry_removed_signal(struct dbus_entry *entry) {
- DBusMessage *signal;
+ DBusMessage *signal_msg;
pa_assert(entry);
- pa_assert_se(signal = dbus_message_new_signal(OBJECT_PATH, INTERFACE_STREAM_RESTORE, signals[SIGNAL_ENTRY_REMOVED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_OBJECT_PATH, &entry->object_path, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(entry->userdata->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_assert_se(signal_msg = dbus_message_new_signal(OBJECT_PATH, INTERFACE_STREAM_RESTORE, signals[SIGNAL_ENTRY_REMOVED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &entry->object_path, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(entry->userdata->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
}
static void send_device_updated_signal(struct dbus_entry *de, struct entry *e) {
- DBusMessage *signal;
+ DBusMessage *signal_msg;
const char *device;
pa_assert(de);
@@ -463,28 +463,28 @@ static void send_device_updated_signal(struct dbus_entry *de, struct entry *e) {
device = e->device_valid ? e->device : "";
- pa_assert_se(signal = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_DEVICE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_STRING, &device, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_assert_se(signal_msg = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_DEVICE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_STRING, &device, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
}
static void send_volume_updated_signal(struct dbus_entry *de, struct entry *e) {
- DBusMessage *signal;
+ DBusMessage *signal_msg;
DBusMessageIter msg_iter;
pa_assert(de);
pa_assert(e);
- pa_assert_se(signal = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_VOLUME_UPDATED].name));
- dbus_message_iter_init_append(signal, &msg_iter);
+ pa_assert_se(signal_msg = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_VOLUME_UPDATED].name));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
append_volume(&msg_iter, e);
- pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
}
static void send_mute_updated_signal(struct dbus_entry *de, struct entry *e) {
- DBusMessage *signal;
+ DBusMessage *signal_msg;
dbus_bool_t muted;
pa_assert(de);
@@ -494,10 +494,10 @@ static void send_mute_updated_signal(struct dbus_entry *de, struct entry *e) {
muted = e->muted;
- pa_assert_se(signal = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_MUTE_UPDATED].name));
- pa_assert_se(dbus_message_append_args(signal, DBUS_TYPE_BOOLEAN, &muted, DBUS_TYPE_INVALID));
- pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal);
- dbus_message_unref(signal);
+ pa_assert_se(signal_msg = dbus_message_new_signal(de->object_path, INTERFACE_ENTRY, entry_signals[ENTRY_SIGNAL_MUTE_UPDATED].name));
+ pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_BOOLEAN, &muted, DBUS_TYPE_INVALID));
+ pa_dbus_protocol_send_signal(de->userdata->dbus_protocol, signal_msg);
+ dbus_message_unref(signal_msg);
}
static void handle_get_interface_revision(DBusConnection *conn, DBusMessage *msg, void *userdata) {
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 5c1127b..e427bb1 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -958,7 +958,7 @@ pa_client *pa_dbus_protocol_get_client(pa_dbus_protocol *p, DBusConnection *conn
void pa_dbus_protocol_add_signal_listener(
pa_dbus_protocol *p,
DBusConnection *conn,
- const char *signal,
+ const char *signal_name,
char **objects,
unsigned n_objects) {
struct connection_entry *conn_entry;
@@ -978,18 +978,18 @@ void pa_dbus_protocol_add_signal_listener(
while ((object_path = pa_idxset_steal_first(conn_entry->all_signals_objects, NULL)))
pa_xfree(object_path);
- if (signal) {
+ if (signal_name) {
conn_entry->listening_for_all_signals = FALSE;
/* Replace the old object list with a new one. */
- if ((object_set = pa_hashmap_remove(conn_entry->listening_signals, signal)))
+ if ((object_set = pa_hashmap_remove(conn_entry->listening_signals, signal_name)))
pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
object_set = pa_idxset_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
for (i = 0; i < n_objects; ++i)
pa_idxset_put(object_set, pa_xstrdup(objects[i]), NULL);
- pa_hashmap_put(conn_entry->listening_signals, signal, object_set);
+ pa_hashmap_put(conn_entry->listening_signals, signal_name, object_set);
} else {
conn_entry->listening_for_all_signals = TRUE;
@@ -1004,7 +1004,7 @@ void pa_dbus_protocol_add_signal_listener(
}
}
-void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal) {
+void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection *conn, const char *signal_name) {
struct connection_entry *conn_entry;
pa_idxset *object_set;
@@ -1013,8 +1013,8 @@ void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection
pa_assert_se((conn_entry = pa_hashmap_get(p->connections, conn)));
- if (signal) {
- if ((object_set = pa_hashmap_get(conn_entry->listening_signals, signal)))
+ if (signal_name) {
+ if ((object_set = pa_hashmap_get(conn_entry->listening_signals, signal_name)))
pa_idxset_free(object_set, free_listened_object_name_cb, NULL);
} else {
@@ -1030,7 +1030,7 @@ void pa_dbus_protocol_remove_signal_listener(pa_dbus_protocol *p, DBusConnection
}
}
-void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
+void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal_name) {
struct connection_entry *conn_entry;
void *state = NULL;
pa_idxset *object_set;
@@ -1038,24 +1038,24 @@ void pa_dbus_protocol_send_signal(pa_dbus_protocol *p, DBusMessage *signal) {
char *signal_string;
pa_assert(p);
- pa_assert(signal);
- pa_assert(dbus_message_get_type(signal) == DBUS_MESSAGE_TYPE_SIGNAL);
- pa_assert_se(dbus_message_get_interface(signal));
- pa_assert_se(dbus_message_get_member(signal));
+ pa_assert(signal_name);
+ pa_assert(dbus_message_get_type(signal_name) == DBUS_MESSAGE_TYPE_SIGNAL);
+ pa_assert_se(dbus_message_get_interface(signal_name));
+ pa_assert_se(dbus_message_get_member(signal_name));
- signal_string = pa_sprintf_malloc("%s.%s", dbus_message_get_interface(signal), dbus_message_get_member(signal));
+ signal_string = pa_sprintf_malloc("%s.%s", dbus_message_get_interface(signal_name), dbus_message_get_member(signal_name));
PA_HASHMAP_FOREACH(conn_entry, p->connections, state) {
if ((conn_entry->listening_for_all_signals /* Case 1: listening for all signals */
- && (pa_idxset_get_by_data(conn_entry->all_signals_objects, dbus_message_get_path(signal), NULL)
+ && (pa_idxset_get_by_data(conn_entry->all_signals_objects, dbus_message_get_path(signal_name), NULL)
|| pa_idxset_isempty(conn_entry->all_signals_objects)))
|| (!conn_entry->listening_for_all_signals /* Case 2: not listening for all signals */
&& (object_set = pa_hashmap_get(conn_entry->listening_signals, signal_string))
- && (pa_idxset_get_by_data(object_set, dbus_message_get_path(signal), NULL)
+ && (pa_idxset_get_by_data(object_set, dbus_message_get_path(signal_name), NULL)
|| pa_idxset_isempty(object_set)))) {
- pa_assert_se(signal_copy = dbus_message_copy(signal));
+ pa_assert_se(signal_copy = dbus_message_copy(signal_name));
pa_assert_se(dbus_connection_send(conn_entry->connection, signal_copy, NULL));
dbus_message_unref(signal_copy);
}
commit 62278b4b94212c5ab2f3041cac8b68e6c2bd35fe
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Sat Nov 21 00:47:44 2009 +0100
Avoid using devname as a variable name.
On FreeBSD, devname() is a system function, and was overshadowed.
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 3991043..8d61ff4 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -1032,27 +1032,27 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
if ((e = read_entry(u, name))) {
uint32_t idx;
- char *devname;
+ char *device_name;
uint32_t found_index = PA_INVALID_INDEX;
- if ((devname = get_name(name, "sink:"))) {
+ if ((device_name = get_name(name, "sink:"))) {
pa_sink* s;
PA_IDXSET_FOREACH(s, u->core->sinks, idx) {
- if (strcmp(s->name, devname) == 0) {
+ if (strcmp(s->name, device_name) == 0) {
found_index = s->index;
break;
}
}
- pa_xfree(devname);
- } else if ((devname = get_name(name, "source:"))) {
+ pa_xfree(device_name);
+ } else if ((device_name = get_name(name, "source:"))) {
pa_source* s;
PA_IDXSET_FOREACH(s, u->core->sources, idx) {
- if (strcmp(s->name, devname) == 0) {
+ if (strcmp(s->name, device_name) == 0) {
found_index = s->index;
break;
}
}
- pa_xfree(devname);
+ pa_xfree(device_name);
}
pa_tagstruct_puts(reply, name);
commit fe0b393f7ac2f50131d187cc31a74ced52c15bd1
Author: Diego Elio 'Flameeyes' Pettenò <flameeyes at gmail.com>
Date: Sat Nov 21 00:53:00 2009 +0100
Simplify Makefile.am handling of ALSA-related files.
Instead of declaring extra variables for the ALSA profiles and PATHS, and
using EXTRA_DIST for the udev rule, use the dist_ prefix when declaring
them for conditional installation.
This relies on the fact that automake *is* smart enough to know that there
exist *no* conditional dist, and will always distribute all of them.
diff --git a/src/Makefile.am b/src/Makefile.am
index b45908b..5db6b39 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -109,30 +109,6 @@ MODULE_LDFLAGS = -module -disable-static -avoid-version $(LDFLAGS_NOUNDEFINED)
# Extra files #
###################################
-ALSA_PROFILES = \
- modules/alsa/mixer/profile-sets/default.conf \
- modules/alsa/mixer/profile-sets/native-instruments-audio4dj.conf \
- modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf
-
-ALSA_PATHS = \
- modules/alsa/mixer/paths/analog-input-aux.conf \
- modules/alsa/mixer/paths/analog-input.conf \
- modules/alsa/mixer/paths/analog-input.conf.common \
- modules/alsa/mixer/paths/analog-input-fm.conf \
- modules/alsa/mixer/paths/analog-input-linein.conf \
- modules/alsa/mixer/paths/analog-input-mic.conf \
- modules/alsa/mixer/paths/analog-input-mic.conf.common \
- modules/alsa/mixer/paths/analog-input-mic-line.conf \
- modules/alsa/mixer/paths/analog-input-tvtuner.conf \
- modules/alsa/mixer/paths/analog-input-video.conf \
- modules/alsa/mixer/paths/analog-output.conf \
- modules/alsa/mixer/paths/analog-output-speaker.conf \
- modules/alsa/mixer/paths/analog-output.conf.common \
- modules/alsa/mixer/paths/analog-output-headphones.conf \
- modules/alsa/mixer/paths/analog-output-headphones-2.conf \
- modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \
- modules/alsa/mixer/paths/analog-output-mono.conf
-
EXTRA_DIST = \
pulse/client.conf.in \
pulse/version.h.in \
@@ -149,10 +125,7 @@ EXTRA_DIST = \
daemon/pulseaudio.desktop.in \
daemon/pulseaudio-kde.desktop.in \
map-file \
- daemon/pulseaudio-system.conf \
- modules/alsa/mixer/profile-sets/90-pulseaudio.rules \
- ${ALSA_PROFILES} \
- ${ALSA_PATHS}
+ daemon/pulseaudio-system.conf
pulseconf_DATA = \
default.pa \
@@ -1094,14 +1067,34 @@ modlibexec_LTLIBRARIES += \
module-alsa-source.la \
module-alsa-card.la
-alsaprofilesets_DATA = ${ALSA_PROFILES}
+dist_alsaprofilesets_DATA = \
+ modules/alsa/mixer/profile-sets/default.conf \
+ modules/alsa/mixer/profile-sets/native-instruments-audio4dj.conf \
+ modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf
if HAVE_UDEV
-udevrules_DATA = \
+dist_udevrules_DATA = \
modules/alsa/mixer/profile-sets/90-pulseaudio.rules
endif
-alsapaths_DATA = ${ALSA_PATHS}
+dist_alsapaths_DATA = \
+ modules/alsa/mixer/paths/analog-input-aux.conf \
+ modules/alsa/mixer/paths/analog-input.conf \
+ modules/alsa/mixer/paths/analog-input.conf.common \
+ modules/alsa/mixer/paths/analog-input-fm.conf \
+ modules/alsa/mixer/paths/analog-input-linein.conf \
+ modules/alsa/mixer/paths/analog-input-mic.conf \
+ modules/alsa/mixer/paths/analog-input-mic.conf.common \
+ modules/alsa/mixer/paths/analog-input-mic-line.conf \
+ modules/alsa/mixer/paths/analog-input-tvtuner.conf \
+ modules/alsa/mixer/paths/analog-input-video.conf \
+ modules/alsa/mixer/paths/analog-output.conf \
+ modules/alsa/mixer/paths/analog-output-speaker.conf \
+ modules/alsa/mixer/paths/analog-output.conf.common \
+ modules/alsa/mixer/paths/analog-output-headphones.conf \
+ modules/alsa/mixer/paths/analog-output-headphones-2.conf \
+ modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \
+ modules/alsa/mixer/paths/analog-output-mono.conf
endif
commit f69e81f226e1f165bfe7d792b3c7895a55d43983
Author: Jason Newton <nevion at gmail.com>
Date: Fri Nov 20 15:34:02 2009 -0800
Makefile.am: added qpaeq to installed scripts
diff --git a/src/Makefile.am b/src/Makefile.am
index b45908b..fc8803c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1192,6 +1192,7 @@ endif
if HAVE_FFTW
modlibexec_LTLIBRARIES += \
module-equalizer-sink.la
+bin_SCRIPTS += utils/qpaeq
endif
# These are generated by an M4 script
commit 4eb65a0a46bd880faf620db3dff94f82f966bd61
Author: Jason Newton <nevion at gmail.com>
Date: Fri Nov 20 15:18:59 2009 -0800
src/utils/qpaeq: added more friendly error messages to common errors
diff --git a/src/utils/qpaeq b/src/utils/qpaeq
index dca0701..a8a9fda 100755
--- a/src/utils/qpaeq
+++ b/src/utils/qpaeq
@@ -17,12 +17,20 @@
import os,math,sys
-import PyQt4,sip
-from PyQt4 import QtGui,QtCore
-from functools import partial
+try:
+ import PyQt4,sip
+ from PyQt4 import QtGui,QtCore
+ import dbus.mainloop.qt
+ import dbus
+except ImportError,e:
+ print 'There was an error importing need libraries'
+ print 'Make sure you haveqt4 and dbus forthon installed'
+ print 'The error that occured was'
+ print '\t%s' %(str(e))
+ import sys
+ sys.exit(-1)
-import dbus.mainloop.qt
-import dbus
+from functools import partial
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
@@ -31,13 +39,19 @@ SYNC_TIMEOUT = 4*1000
CORE_PATH = "/org/pulseaudio/core1"
CORE_IFACE = "org.PulseAudio.Core1"
def connect():
- if 'PULSE_DBUS_SERVER' in os.environ:
- address = os.environ['PULSE_DBUS_SERVER']
- else:
- bus = dbus.SessionBus() # Should be UserBus, but D-Bus doesn't implement that yet.
- server_lookup = bus.get_object('org.PulseAudio1', '/org/pulseaudio/server_lookup1')
- address = server_lookup.Get('org.PulseAudio.ServerLookup1', 'Address', dbus_interface='org.freedesktop.DBus.Properties')
- return dbus.connection.Connection(address)
+ try:
+ if 'PULSE_DBUS_SERVER' in os.environ:
+ address = os.environ['PULSE_DBUS_SERVER']
+ else:
+ bus = dbus.SessionBus() # Should be UserBus, but D-Bus doesn't implement that yet.
+ server_lookup = bus.get_object('org.PulseAudio1', '/org/pulseaudio/server_lookup1')
+ address = server_lookup.Get('org.PulseAudio.ServerLookup1', 'Address', dbus_interface='org.freedesktop.DBus.Properties')
+ return dbus.connection.Connection(address)
+ except Exception,e:
+ print 'There was an error connecting to pulseaudio, please make sure you have the pulseaudio dbus'
+ print 'and equalizer modules loaded, exiting...'
+ import sys
+ sys.exit(-1)
#TODO: signals: sink Filter changed, sink reconfigured (window size) (sink iface)
commit 5aa5c6c196b23acabca3e2c8a6724cb08485acdc
Author: Joe Marcus Clarke <marcus at FreeBSD.org>
Date: Sat Nov 21 01:13:35 2009 +0100
freebsd: implement pa_get_binary_name
Stolen from
http://www.freebsd.org/cgi/cvsweb.cgi/ports/audio/pulseaudio/files/patch-src_pulse_util.c?rev=1.1
and fixed for indentation.
diff --git a/src/pulse/util.c b/src/pulse/util.c
index 9440f5d..ca766da 100644
--- a/src/pulse/util.c
+++ b/src/pulse/util.c
@@ -189,7 +189,18 @@ char *pa_get_binary_name(char *s, size_t l) {
return s;
}
}
+#endif
+#ifdef __FreeBSD__
+ {
+ char *rp;
+
+ if ((rp = pa_readlink("/proc/curproc/file"))) {
+ pa_strlcpy(s, pa_path_get_filename(rp), l);
+ pa_xfree(rp);
+ return s;
+ }
+ }
#endif
#if defined(HAVE_SYS_PRCTL_H) && defined(PR_GET_NAME)
commit 675957b9e41d5a92d8cbff3d4fcbcec4965806da
Merge: 9708ecd 5aa5c6c
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Nov 22 21:40:15 2009 +0100
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
commit c815441ba19e92f88395de8763df4a1e57950f7b
Merge: 5aa5c6c 4eb65a0
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Nov 23 04:48:31 2009 +0100
Merge remote branch 'phish3/master'
commit 0fcdc3d15d759e576ba3d71cc874c1036dcd36a0
Merge: 675957b c815441
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Nov 23 05:45:33 2009 +0100
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
commit d5d488e33d85549c81d007497c8301c920d0a6e4
Merge: ed7642e 0fcdc3d
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Nov 24 17:38:25 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 118466638aa651eac0d20513d348ddcc446bb5e6
Merge: 0fcdc3d e064d27
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Mon Nov 30 14:55:57 2009 +0000
Merge remote branch 'tanuk/master'
commit 1b2cbe92dbffc1d8be12c64fdc647e3cb5e5c58c
Merge: d5d488e 1184666
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Dec 1 02:22:39 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 4c793cfc76360676b3881d7943b49adf892594d2
Author: Tanu Kaskinen <ext-tanu.kaskinen at nokia.com>
Date: Thu Dec 3 13:22:05 2009 +0200
libpulse: Store pa_stream pointers to hashmaps instead of dynarrays.
Since the stream identifiers (channels) are monotonically growing integer, it
isn't a good idea to use them as index to a dynamic array, because the array
will grow all the time. This is not a problem with client connections that
don't create many streams, but, for example, long-running clients that use
libcanberra for playing event sounds, this means that the client connection
effectively leaks memory.
diff --git a/src/pulse/context.c b/src/pulse/context.c
index e33143d..0018492 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -63,7 +63,7 @@
#include <pulsecore/native-common.h>
#include <pulsecore/pdispatch.h>
#include <pulsecore/pstream.h>
-#include <pulsecore/dynarray.h>
+#include <pulsecore/hashmap.h>
#include <pulsecore/socket-client.h>
#include <pulsecore/pstream-util.h>
#include <pulsecore/core-rtclock.h>
@@ -160,8 +160,8 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *
c->client = NULL;
c->pstream = NULL;
c->pdispatch = NULL;
- c->playback_streams = pa_dynarray_new();
- c->record_streams = pa_dynarray_new();
+ c->playback_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+ c->record_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
c->client_index = PA_INVALID_INDEX;
c->use_rtclock = pa_mainloop_is_our_api(mainloop);
@@ -266,9 +266,9 @@ static void context_free(pa_context *c) {
#endif
if (c->record_streams)
- pa_dynarray_free(c->record_streams, NULL, NULL);
+ pa_hashmap_free(c->record_streams, NULL, NULL);
if (c->playback_streams)
- pa_dynarray_free(c->playback_streams, NULL, NULL);
+ pa_hashmap_free(c->playback_streams, NULL, NULL);
if (c->mempool)
pa_mempool_free(c->mempool);
@@ -375,7 +375,7 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
pa_context_ref(c);
- if ((s = pa_dynarray_get(c->record_streams, channel))) {
+ if ((s = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(channel)))) {
if (chunk->memblock) {
pa_memblockq_seek(s->record_memblockq, offset, seek, TRUE);
diff --git a/src/pulse/internal.h b/src/pulse/internal.h
index b371bfc..9545d50 100644
--- a/src/pulse/internal.h
+++ b/src/pulse/internal.h
@@ -34,7 +34,6 @@
#include <pulsecore/socket-client.h>
#include <pulsecore/pstream.h>
#include <pulsecore/pdispatch.h>
-#include <pulsecore/dynarray.h>
#include <pulsecore/llist.h>
#include <pulsecore/native-common.h>
#include <pulsecore/strlist.h>
@@ -66,7 +65,7 @@ struct pa_context {
pa_pstream *pstream;
pa_pdispatch *pdispatch;
- pa_dynarray *record_streams, *playback_streams;
+ pa_hashmap *record_streams, *playback_streams;
PA_LLIST_HEAD(pa_stream, streams);
PA_LLIST_HEAD(pa_operation, operations);
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 4dea567..4081256 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -199,7 +199,7 @@ static void stream_unlink(pa_stream *s) {
pa_pdispatch_unregister_reply(s->context->pdispatch, s);
if (s->channel_valid) {
- pa_dynarray_put((s->direction == PA_STREAM_PLAYBACK) ? s->context->playback_streams : s->context->record_streams, s->channel, NULL);
+ pa_hashmap_remove((s->direction == PA_STREAM_PLAYBACK) ? s->context->playback_streams : s->context->record_streams, PA_UINT32_TO_PTR(s->channel));
s->channel = 0;
s->channel_valid = FALSE;
}
@@ -354,7 +354,7 @@ void pa_command_stream_killed(pa_pdispatch *pd, uint32_t command, uint32_t tag,
goto finish;
}
- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_KILLED ? c->playback_streams : c->record_streams, channel)))
+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_KILLED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -474,7 +474,7 @@ void pa_command_stream_moved(pa_pdispatch *pd, uint32_t command, uint32_t tag, p
goto finish;
}
- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_MOVED ? c->playback_streams : c->record_streams, channel)))
+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_MOVED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -557,7 +557,7 @@ void pa_command_stream_buffer_attr(pa_pdispatch *pd, uint32_t command, uint32_t
goto finish;
}
- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED ? c->playback_streams : c->record_streams, channel)))
+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -609,7 +609,7 @@ void pa_command_stream_suspended(pa_pdispatch *pd, uint32_t command, uint32_t ta
goto finish;
}
- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_SUSPENDED ? c->playback_streams : c->record_streams, channel)))
+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_SUSPENDED ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -651,7 +651,7 @@ void pa_command_stream_started(pa_pdispatch *pd, uint32_t command, uint32_t tag,
goto finish;
}
- if (!(s = pa_dynarray_get(c->playback_streams, channel)))
+ if (!(s = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -697,7 +697,7 @@ void pa_command_stream_event(pa_pdispatch *pd, uint32_t command, uint32_t tag, p
goto finish;
}
- if (!(s = pa_dynarray_get(command == PA_COMMAND_PLAYBACK_STREAM_EVENT ? c->playback_streams : c->record_streams, channel)))
+ if (!(s = pa_hashmap_get(command == PA_COMMAND_PLAYBACK_STREAM_EVENT ? c->playback_streams : c->record_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -733,7 +733,7 @@ void pa_command_request(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tag
goto finish;
}
- if (!(s = pa_dynarray_get(c->playback_streams, channel)))
+ if (!(s = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -767,7 +767,7 @@ void pa_command_overflow_or_underflow(pa_pdispatch *pd, uint32_t command, uint32
goto finish;
}
- if (!(s = pa_dynarray_get(c->playback_streams, channel)))
+ if (!(s = pa_hashmap_get(c->playback_streams, PA_UINT32_TO_PTR(channel))))
goto finish;
if (s->state != PA_STREAM_READY)
@@ -997,7 +997,7 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, uint32_t tag,
}
s->channel_valid = TRUE;
- pa_dynarray_put((s->direction == PA_STREAM_RECORD) ? s->context->record_streams : s->context->playback_streams, s->channel, s);
+ pa_hashmap_put((s->direction == PA_STREAM_RECORD) ? s->context->record_streams : s->context->playback_streams, PA_UINT32_TO_PTR(s->channel), s);
create_stream_complete(s);
commit 7b1b68ce2cfbc735065f1af45811f33a8a6bf6ea
Author: Tanu Kaskinen <ext-tanu.kaskinen at nokia.com>
Date: Thu Dec 3 15:28:36 2009 +0200
dbus: Handle the cases when a non-existing interface is detected in an incoming message.
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index e427bb1..95518a1 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -552,10 +552,18 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
pa_dbus_send_error(connection, message, DBUS_ERROR_UNKNOWN_METHOD, "No such method: %s", call_info.method);
break;
+ case NO_SUCH_INTERFACE:
+ pa_dbus_send_error(connection, message, PA_DBUS_ERROR_NO_SUCH_INTERFACE, "No such interface: %s", call_info.interface);
+ break;
+
case NO_SUCH_PROPERTY:
pa_dbus_send_error(connection, message, PA_DBUS_ERROR_NO_SUCH_PROPERTY, "No such property: %s", call_info.property);
break;
+ case NO_SUCH_PROPERTY_INTERFACE:
+ pa_dbus_send_error(connection, message, PA_DBUS_ERROR_NO_SUCH_INTERFACE, "No such property interface: %s", call_info.property_interface);
+ break;
+
case INVALID_METHOD_SIG:
pa_dbus_send_error(connection, message, DBUS_ERROR_INVALID_ARGS,
"Invalid signature for method %s: '%s'. Expected '%s'.",
diff --git a/src/pulsecore/protocol-dbus.h b/src/pulsecore/protocol-dbus.h
index 6d100f7..8999933 100644
--- a/src/pulsecore/protocol-dbus.h
+++ b/src/pulsecore/protocol-dbus.h
@@ -35,6 +35,7 @@
#define PA_DBUS_CORE_INTERFACE "org.PulseAudio.Core1"
#define PA_DBUS_CORE_OBJECT_PATH "/org/pulseaudio/core1"
+#define PA_DBUS_ERROR_NO_SUCH_INTERFACE PA_DBUS_CORE_INTERFACE ".NoSuchInterfaceError"
#define PA_DBUS_ERROR_NO_SUCH_PROPERTY PA_DBUS_CORE_INTERFACE ".NoSuchPropertyError"
#define PA_DBUS_ERROR_NOT_FOUND PA_DBUS_CORE_INTERFACE ".NotFoundError"
commit e785f728a54b5dc4ad25373b262d35babe8221f6
Author: Tanu Kaskinen <ext-tanu.kaskinen at nokia.com>
Date: Thu Dec 3 15:30:01 2009 +0200
dbus: Add a missing break statement in handle_message_cb().
diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c
index 95518a1..582bc65 100644
--- a/src/pulsecore/protocol-dbus.c
+++ b/src/pulsecore/protocol-dbus.c
@@ -574,6 +574,7 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa
pa_dbus_send_error(connection, message, DBUS_ERROR_INVALID_ARGS,
"Invalid signature for property %s: '%s'. Expected '%s'.",
call_info.property, call_info.property_sig, call_info.expected_property_sig);
+ break;
default:
pa_assert_not_reached();
commit a6b7ac68268e55ec8b4ee7fa9e930b86e17fae85
Author: Tanu Kaskinen <ext-tanu.kaskinen at nokia.com>
Date: Thu Dec 3 15:31:11 2009 +0200
stream-restore: Fix a few assertion misuses with the D-Bus code.
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 02c312e..ce92362 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -647,7 +647,7 @@ static void handle_add_entry(DBusConnection *conn, DBusMessage *msg, void *userd
} else {
dbus_entry = dbus_entry_new(u, name);
- pa_assert(pa_hashmap_put(u->dbus_entries, dbus_entry->entry_name, dbus_entry) >= 0);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, dbus_entry->entry_name, dbus_entry) == 0);
e->muted_valid = TRUE;
e->volume_valid = !!map.channels;
@@ -1245,10 +1245,10 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
#ifdef HAVE_DBUS
if (created_new_entry) {
de = dbus_entry_new(u, name);
- pa_hashmap_put(u->dbus_entries, de->entry_name, de);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) == 0);
send_new_entry_signal(de);
} else {
- pa_assert((de = pa_hashmap_get(u->dbus_entries, name)));
+ pa_assert_se(de = pa_hashmap_get(u->dbus_entries, name));
if (device_updated)
send_device_updated_signal(de, &entry);
@@ -1859,7 +1859,7 @@ static int extension_cb(pa_native_protocol *p, pa_module *m, pa_native_connectio
} else {
de = dbus_entry_new(u, name);
- pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de));
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) == 0);
send_new_entry_signal(de);
}
#endif
@@ -2050,7 +2050,7 @@ int pa__init(pa_module*m) {
pa_datum_free(&key);
de = dbus_entry_new(u, name);
- pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) >= 0);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) == 0);
pa_xfree(name);
commit 00debf42437402dadbe5f0a5ff284582c4399aec
Author: Tanu Kaskinen <ext-tanu.kaskinen at nokia.com>
Date: Thu Dec 3 15:32:23 2009 +0200
stream-restore: Add a missing pa_xnew0() call in handle_add_entry().
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index ce92362..a1273fe 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -649,6 +649,7 @@ static void handle_add_entry(DBusConnection *conn, DBusMessage *msg, void *userd
dbus_entry = dbus_entry_new(u, name);
pa_assert_se(pa_hashmap_put(u->dbus_entries, dbus_entry->entry_name, dbus_entry) == 0);
+ e = pa_xnew0(struct entry, 1);
e->muted_valid = TRUE;
e->volume_valid = !!map.channels;
e->device_valid = !!device[0];
commit f42022a7d3157a3f3346b49c749d2262abea34c4
Author: Tanu Kaskinen <ext-tanu.kaskinen at nokia.com>
Date: Thu Dec 3 15:34:26 2009 +0200
stream-restore: At startup, create dbus entries only for valid database entries.
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index a1273fe..becdb54 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -2044,14 +2044,19 @@ int pa__init(pa_module*m) {
pa_datum next_key;
char *name;
struct dbus_entry *de;
+ struct entry *e;
done = !pa_database_next(u->database, &key, &next_key, NULL);
name = pa_xstrndup(key.data, key.size);
pa_datum_free(&key);
- de = dbus_entry_new(u, name);
- pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) == 0);
+ /* Use read_entry() for checking that the entry is valid. */
+ if ((e = read_entry(u, name))) {
+ de = dbus_entry_new(u, name);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de) == 0);
+ pa_xfree(e);
+ }
pa_xfree(name);
commit 978d33b609969c3b9bbbd759e0f11aaf856c80cf
Author: Arun Raghavan <arun.raghavan at collabora.co.uk>
Date: Sun Dec 6 12:20:53 2009 +0530
Mark shared variables as volatile
'n_waiting' and 'n_waiting_for_accept' may be accessed from mulitple
threads, and thus need to be marked as volatile to suppres certain
compiler optimisations. All uses are protected by a mutex, so we don't
need to worry about cache issues (added documentation for this as well).
This addresses bug #738.
diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c
index a2b98ce..14ed926 100644
--- a/src/pulse/thread-mainloop.c
+++ b/src/pulse/thread-mainloop.c
@@ -51,7 +51,7 @@
struct pa_threaded_mainloop {
pa_mainloop *real_mainloop;
- int n_waiting, n_waiting_for_accept;
+ volatile int n_waiting, n_waiting_for_accept;
pa_thread* thread;
pa_mutex* mutex;
@@ -185,6 +185,7 @@ void pa_threaded_mainloop_unlock(pa_threaded_mainloop *m) {
pa_mutex_unlock(m->mutex);
}
+/* Called with the lock taken */
void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) {
pa_assert(m);
@@ -198,6 +199,7 @@ void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) {
}
}
+/* Called with the lock taken */
void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) {
pa_assert(m);
@@ -212,6 +214,7 @@ void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) {
m->n_waiting --;
}
+/* Called with the lock taken */
void pa_threaded_mainloop_accept(pa_threaded_mainloop *m) {
pa_assert(m);
commit e8a5746f2fcae59bfd18d39b621509b3ef130453
Author: Arun Raghavan <arun.raghavan at collabora.co.uk>
Date: Sun Dec 6 12:31:25 2009 +0530
Add a configure option to change 'udevrulesdir'
This patch serves two purposes:
1) Allows something other than the de-facto standard udev rules dir or
/lib/udev/rules.d to be used (the udev build system allows you to
customise this)
2) Allows a prefixed, non-root install (right now, the /lib/... path
is hard-coded into the build system
diff --git a/configure.ac b/configure.ac
index dfbd9bc..af60fff 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1395,6 +1395,13 @@ AC_ARG_WITH(
AC_SUBST(modlibexecdir)
+AC_ARG_WITH(
+ [udev-rules-dir],
+ AS_HELP_STRING([--with-udev-rules-dir],[Directory where to install udev rules to (defaults to /lib/udev/rules.d)]),
+ [udevrulesdir=$withval], [udevrulesdir="/lib/udev/rules.d"])
+
+AC_SUBST(udevrulesdir)
+
AC_ARG_ENABLE(
[force-preopen],
AS_HELP_STRING([--enable-force-preopen],[Preopen modules, even when dlopen() is supported.]),
diff --git a/src/Makefile.am b/src/Makefile.am
index 3be2869..11826a4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -31,7 +31,6 @@ pulselibexecdir=$(libexecdir)/pulse
xdgautostartdir=$(sysconfdir)/xdg/autostart
alsaprofilesetsdir=$(datadir)/pulseaudio/alsa-mixer/profile-sets
alsapathsdir=$(datadir)/pulseaudio/alsa-mixer/paths
-udevrulesdir=/lib/udev/rules.d
dbuspolicydir=$(sysconfdir)/dbus-1/system.d
###################################
commit f9b03d3a44e905d50dfac1483dbf1818d2b84ffa
Merge: 1b2cbe9 e8a5746
Author: Daniel Mack <daniel at caiaq.de>
Date: Sun Dec 6 15:53:36 2009 +0100
Merge branch 'master' of git://0pointer.de/pulseaudio
commit 76acaa964e01d119c39ff617691179d54805b412
Author: Kim Lester <kim at dfusion.com.au>
Date: Wed Sep 16 09:07:50 2009 +0800
configure.ac: add DARWIN_OS variable
Signed-off-by: Kim Lester <kim at dfusion.com.au>
Signed-off-by: Daniel Mack <daniel at caiaq.de>
diff --git a/configure.ac b/configure.ac
index af60fff..11af89b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -172,6 +172,10 @@ case $host in
AC_MSG_RESULT([linux])
pulse_target_os=linux
;;
+ *-*-darwin*)
+ AC_MSG_RESULT([darwin])
+ pulse_target_os=darwin
+ ;;
*)
AC_MSG_RESULT([unknown])
pulse_target_os=unknown
@@ -291,15 +295,21 @@ AC_SUBST([LIBLTDL])
#### Determine build environment ####
os_is_win32=0
+os_is_darwin=0
case "$host_os" in
mingw*)
AC_DEFINE([OS_IS_WIN32], 1, [Build target is Windows.])
os_is_win32=1
;;
+ darwin*)
+ AC_DEFINE([OS_IS_DARWIN], 1, [Build target is Darwin.])
+ os_is_darwin=1
+ ;;
esac
AM_CONDITIONAL(OS_IS_WIN32, test "x$os_is_win32" = "x1")
+AM_CONDITIONAL(OS_IS_DARWIN, test "x$os_is_darwin" = "x1")
###################################
# Basic environment checks #
@@ -403,6 +413,18 @@ AC_SEARCH_LIBS([backtrace], [execinfo])
# build, disabling its ability to make dlls.
AC_CHECK_FUNCS([getopt_long], [], [AC_CHECK_LIB([iberty], [getopt_long])])
+# Darwin/OS X
+if test "x$os_is_darwin" = "x1" ; then
+ AC_MSG_CHECKING([looking for Apple CoreService Framework])
+ # How do I check a framework "library" - AC_CHECK_LIB prob. won't work??, just assign LIBS & hope
+ AC_CHECK_HEADER([/Developer/Headers/FlatCarbon/CoreServices.h],
+ [LIBS="$LIBS -framework CoreServices"],
+ [AC_MSG_ERROR([CoreServices.h header file not found]) ])
+
+ AC_MSG_RESULT([ok])
+ AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [Using clock_gettime() replacement])
+fi
+
#### Check for functions ####
# ISO
commit a46ddfebb592852ff791bc90b3953880c49073dd
Author: Daniel Mack <daniel at caiaq.de>
Date: Sun Nov 1 20:06:08 2009 +0100
core-rtclock.c: tweak OS_IS_DARWIN constraints
Move the code for OS_IS_DARWIN to the top as on Darwin,
HAVE_CLOCK_GETTIME is also defined.
diff --git a/src/pulsecore/core-rtclock.c b/src/pulsecore/core-rtclock.c
index 4fe0a47..110158b 100644
--- a/src/pulsecore/core-rtclock.c
+++ b/src/pulsecore/core-rtclock.c
@@ -37,6 +37,7 @@
#include <CoreServices/CoreServices.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
+#include <unistd.h>
#endif
#include <pulse/timeval.h>
@@ -54,7 +55,19 @@ pa_usec_t pa_rtclock_age(const struct timeval *tv) {
struct timeval *pa_rtclock_get(struct timeval *tv) {
-#if defined(HAVE_CLOCK_GETTIME)
+#if defined(OS_IS_DARWIN)
+ uint64_t val, abs_time = mach_absolute_time();
+ Nanoseconds nanos;
+
+ nanos = AbsoluteToNanoseconds(*(AbsoluteTime *) &abs_time);
+ val = *(uint64_t *) &nanos;
+
+ tv->tv_sec = val / PA_NSEC_PER_SEC;
+ tv->tv_usec = (val % PA_NSEC_PER_SEC) / PA_NSEC_PER_USEC;
+
+ return tv;
+
+#elif defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
#ifdef CLOCK_MONOTONIC
@@ -75,65 +88,39 @@ struct timeval *pa_rtclock_get(struct timeval *tv) {
tv->tv_usec = ts.tv_nsec / PA_NSEC_PER_USEC;
return tv;
-
-#elif defined(OS_IS_DARWIN)
- static mach_timebase_info_data_t tbi;
- uint64_t nticks;
- uint64_t time_nsec;
-
- /* Refer Apple ADC QA1398
- Also: http://devworld.apple.com/documentation/Darwin/Conceptual/KernelProgramming/services/services.html
-
- Note: argument is timespec NOT timeval (timespec uses nsec, timeval uses usec)
- */
-
- /* try and be a mite efficient - maybe I should keep the N/D as a float !? */
- if (tbi.denom == 0)
- mach_timebase_info(&tbi);
-
- nticks = mach_absolute_time();
- time_nsec = nticks * tbi.numer / tbi.denom; // see above
-
- tv->tv_sec = time_nsec / PA_NSEC_PER_SEC;
- tv->tv_usec = time_nsec / PA_NSEC_PER_USEC;
-
- return tv;
-
-#else /* OS_IS_DARWIN */
+#endif /* HAVE_CLOCK_GETTIME */
return pa_gettimeofday(tv);
-
-#endif
}
pa_bool_t pa_rtclock_hrtimer(void) {
-#if defined(HAVE_CLOCK_GETTIME)
+#if defined (OS_IS_DARWIN)
+ mach_timebase_info_data_t tbi;
+ uint64_t time_nsec;
+
+ mach_timebase_info(&tbi);
+
+ /* nsec = nticks * (N/D) - we want 1 tick == resolution !? */
+ time_nsec = tbi.numer / tbi.denom;
+ return time_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
+
+#elif defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
#ifdef CLOCK_MONOTONIC
if (clock_getres(CLOCK_MONOTONIC, &ts) >= 0)
return ts.tv_sec == 0 && ts.tv_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
+
#endif /* CLOCK_MONOTONIC */
pa_assert_se(clock_getres(CLOCK_REALTIME, &ts) == 0);
return ts.tv_sec == 0 && ts.tv_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
-#elif defined (OS_IS_DARWIN)
- mach_timebase_info_data_t tbi;
- uint64_t time_nsec;
-
- mach_timebase_info(&tbi);
+#endif /* HAVE_CLOCK_GETTIME */
- /* nsec = nticks * (N/D) - we want 1 tick == resolution !? */
- time_nsec = tbi.numer / tbi.denom;
- return time_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC);
-
-#else /* OS_IS_DARWIN */
return FALSE;
-
-#endif
}
#define TIMER_SLACK_NS (int) ((500 * PA_NSEC_PER_USEC))
commit 962164a3b7f17f8a981862d7913a420636241a41
Author: Kim Lester <kim at dfusion.com.au>
Date: Wed Sep 16 09:24:27 2009 +0800
src/Makefile.am: add specific OS_IS_DARWIN files
Signed-off-by: Kim Lester <kim at dfusion.com.au>
Signed-off-by: Daniel Mack <daniel at caiaq.de>
diff --git a/src/Makefile.am b/src/Makefile.am
index 11826a4..90160d1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -640,12 +640,21 @@ libpulsecommon_ at PA_MAJORMINORMICRO@_la_SOURCES += \
pulsecore/mutex-win32.c pulsecore/mutex.h \
pulsecore/thread-win32.c pulsecore/thread.h \
pulsecore/semaphore-win32.c pulsecore/semaphore.h
-else
+else !OS_IS_WIN32
+if OS_IS_DARWIN
+libpulsecommon_ at PA_MAJORMINORMICRO@_la_SOURCES += \
+ pulsecore/mutex-posix.c pulsecore/mutex.h \
+ pulsecore/thread-posix.c pulsecore/thread.h \
+ pulsecore/semaphore-osx.c pulsecore/semaphore.h
+libpulsecommon_ at PA_MAJORMINORMICRO@_la_CFLAGS += "-I/Developer/Headers/FlatCarbon/"
+#libpulsecommon_ at PA_MAJORMINORMICRO@_la_LDFLAGS += "-framework CoreServices"
+else !OS_IS_DARWIN
libpulsecommon_ at PA_MAJORMINORMICRO@_la_SOURCES += \
pulsecore/mutex-posix.c pulsecore/mutex.h \
pulsecore/thread-posix.c pulsecore/thread.h \
pulsecore/semaphore-posix.c pulsecore/semaphore.h
-endif
+endif !OS_IS_DARWIN
+endif !OS_IS_WIN32
if HAVE_X11
libpulsecommon_ at PA_MAJORMINORMICRO@_la_SOURCES += pulsecore/x11prop.c pulsecore/x11prop.h
commit 17d34462eace417075efa2314999a77e41a3849b
Author: Daniel Mack <daniel at caiaq.de>
Date: Mon Nov 23 00:12:18 2009 +0100
poll() is totally broken on Mac OS X
Even on 10.5.8, poll() does not do the right thing. Haven't checked on
newer versions. Hence, wrap all occurences of poll() to pa_poll and
emulate that call with select() on OSX. This is totally embarassing.
diff --git a/src/modules/module-sine-source.c b/src/modules/module-sine-source.c
index 9826e5f..53f5335 100644
--- a/src/modules/module-sine-source.c
+++ b/src/modules/module-sine-source.c
@@ -32,7 +32,6 @@
#include <unistd.h>
#include <limits.h>
#include <sys/ioctl.h>
-#include <sys/poll.h>
#include <pulse/rtclock.h>
#include <pulse/timeval.h>
@@ -48,6 +47,7 @@
#include <pulsecore/thread.h>
#include <pulsecore/thread-mq.h>
#include <pulsecore/rtpoll.h>
+#include <pulsecore/poll.h>
#include "module-sine-source-symdef.h"
diff --git a/src/modules/raop/module-raop-sink.c b/src/modules/raop/module-raop-sink.c
index ac48ab1..ce534ce 100644
--- a/src/modules/raop/module-raop-sink.c
+++ b/src/modules/raop/module-raop-sink.c
@@ -32,7 +32,6 @@
#include <fcntl.h>
#include <unistd.h>
#include <limits.h>
-#include <poll.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
@@ -60,6 +59,7 @@
#include <pulsecore/thread.h>
#include <pulsecore/time-smoother.h>
#include <pulsecore/socket-util.h>
+#include <pulsecore/poll.h>
#include "module-raop-sink-symdef.h"
#include "rtp.h"
diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c
index c4b0237..e3152dd 100644
--- a/src/modules/raop/raop_client.c
+++ b/src/modules/raop/raop_client.c
@@ -51,12 +51,7 @@
#include <pulsecore/macro.h>
#include <pulsecore/strbuf.h>
#include <pulsecore/random.h>
-
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#else
#include <pulsecore/poll.h>
-#endif
#include "raop_client.h"
#include "rtsp_client.h"
diff --git a/src/modules/rtp/rtsp_client.c b/src/modules/rtp/rtsp_client.c
index 5961806..6094eb8 100644
--- a/src/modules/rtp/rtsp_client.c
+++ b/src/modules/rtp/rtsp_client.c
@@ -45,12 +45,7 @@
#include <pulsecore/macro.h>
#include <pulsecore/strbuf.h>
#include <pulsecore/ioline.h>
-
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#else
#include <pulsecore/poll.h>
-#endif
#include "rtsp_client.h"
diff --git a/src/pulse/mainloop.c b/src/pulse/mainloop.c
index 6cd089e..8f743ec 100644
--- a/src/pulse/mainloop.c
+++ b/src/pulse/mainloop.c
@@ -32,12 +32,6 @@
#include <fcntl.h>
#include <errno.h>
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#else
-#include <pulsecore/poll.h>
-#endif
-
#ifndef HAVE_PIPE
#include <pulsecore/pipe.h>
#endif
@@ -47,6 +41,7 @@
#include <pulse/timeval.h>
#include <pulse/xmalloc.h>
+#include <pulsecore/poll.h>
#include <pulsecore/core-rtclock.h>
#include <pulsecore/core-util.h>
#include <pulsecore/llist.h>
@@ -887,7 +882,7 @@ int pa_mainloop_poll(pa_mainloop *m) {
m->prepared_timeout == PA_USEC_INVALID ? NULL : pa_timespec_store(&ts, m->prepared_timeout),
NULL);
#else
- m->poll_func_ret = poll(
+ m->poll_func_ret = pa_poll(
m->pollfds, m->n_pollfds,
usec_to_timeout(m->prepared_timeout));
#endif
diff --git a/src/pulsecore/lock-autospawn.c b/src/pulsecore/lock-autospawn.c
index 65e3563..95ca04a 100644
--- a/src/pulsecore/lock-autospawn.c
+++ b/src/pulsecore/lock-autospawn.c
@@ -33,6 +33,7 @@
#include <pulse/i18n.h>
#include <pulse/xmalloc.h>
+#include <pulsecore/poll.h>
#include <pulsecore/mutex.h>
#include <pulsecore/thread.h>
#include <pulsecore/core-util.h>
@@ -182,7 +183,7 @@ static void wait_for_ping(void) {
pfd.fd = pipe_fd[0];
pfd.events = POLLIN;
- if ((k = poll(&pfd, 1, -1)) != 1) {
+ if ((k = pa_poll(&pfd, 1, -1)) != 1) {
pa_assert(k < 0);
pa_assert(errno == EINTR);
} else if ((s = read(pipe_fd[0], &x, 1)) != 1) {
diff --git a/src/pulsecore/poll.c b/src/pulsecore/poll.c
index 46a69c5..1dcace8 100644
--- a/src/pulsecore/poll.c
+++ b/src/pulsecore/poll.c
@@ -43,13 +43,18 @@
#include "winsock.h"
-#ifndef HAVE_POLL_H
-
#include <pulsecore/core-util.h>
+#include <pulse/util.h>
#include "poll.h"
-int poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
+/* Mac OSX fails to implement poll() in a working way since 10.4. IOW, for
+ * several years. We need to enable a dirty workaround and emulate that call
+ * with select(), just like for Windows. sic! */
+
+#if !defined(HAVE_POLL_H) || defined(OS_IS_DARWIN)
+
+int pa_poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
struct timeval tv;
fd_set rset, wset, xset;
struct pollfd *f;
diff --git a/src/pulsecore/poll.h b/src/pulsecore/poll.h
index fe0c6af..a137d97 100644
--- a/src/pulsecore/poll.h
+++ b/src/pulsecore/poll.h
@@ -24,6 +24,10 @@
Copyright (C) 1994,96,97,98,99,2000,2001,2004 Free Software Foundation, Inc.
***/
+#if defined(HAVE_POLL_H)
+#include <poll.h>
+#else
+
/* Event types that can be polled for. These bits may be set in `events'
to indicate the interesting event types; they will appear in `revents'
to indicate the status of the file descriptor. */
@@ -38,10 +42,6 @@
#define POLLHUP 0x010 /* Hung up. */
#define POLLNVAL 0x020 /* Invalid polling request. */
-
-/* Type used for the number of file descriptors. */
-typedef unsigned long int nfds_t;
-
/* Data structure describing a polling request. */
struct pollfd
{
@@ -50,9 +50,17 @@ struct pollfd
short int revents; /* Types of events that actually occurred. */
};
+
/* Poll the file descriptors described by the NFDS structures starting at
FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for
an event to occur; if TIMEOUT is -1, block until an event occurs.
Returns the number of file descriptors with events, zero if timed out,
or -1 for errors. */
-extern int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout);
+
+#endif /* HAVE_POLL_H */
+
+#if defined(HAVE_POLL_H) && !defined(OS_IS_DARWIN)
+#define pa_poll(fds,nfds,timeout) poll((fds),(nfds),(timeout))
+#else
+int pa_poll (struct pollfd *fds, unsigned long nfds, int timeout);
+#endif
diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c
index 666cbc9..83993f0 100644
--- a/src/pulsecore/rtpoll.c
+++ b/src/pulsecore/rtpoll.c
@@ -30,15 +30,10 @@
#include <string.h>
#include <errno.h>
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#else
-#include <pulsecore/poll.h>
-#endif
-
#include <pulse/xmalloc.h>
#include <pulse/timeval.h>
+#include <pulsecore/poll.h>
#include <pulsecore/core-error.h>
#include <pulsecore/core-rtclock.h>
#include <pulsecore/macro.h>
@@ -304,7 +299,7 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
r = ppoll(p->pollfd, p->n_pollfd_used, (!wait_op || p->quit || p->timer_enabled) ? &ts : NULL, NULL);
}
#else
- r = poll(p->pollfd, p->n_pollfd_used, (!wait_op || p->quit || p->timer_enabled) ? (int) ((timeout.tv_sec*1000) + (timeout.tv_usec / 1000)) : -1);
+ r = pa_poll(p->pollfd, p->n_pollfd_used, (!wait_op || p->quit || p->timer_enabled) ? (int) ((timeout.tv_sec*1000) + (timeout.tv_usec / 1000)) : -1);
#endif
p->timer_elapsed = r == 0;
diff --git a/src/tests/lock-autospawn-test.c b/src/tests/lock-autospawn-test.c
index c754e23..6f7156d 100644
--- a/src/tests/lock-autospawn-test.c
+++ b/src/tests/lock-autospawn-test.c
@@ -23,9 +23,9 @@
#include <config.h>
#endif
-#include <sys/poll.h>
#include <string.h>
+#include <pulsecore/poll.h>
#include <pulsecore/macro.h>
#include <pulsecore/thread.h>
#include <pulsecore/lock-autospawn.h>
@@ -69,7 +69,7 @@ static void thread_func2(void *k) {
pollfd.fd = fd;
pollfd.events = POLLIN;
- pa_assert_se(poll(&pollfd, 1, -1) == 1);
+ pa_assert_se(pa_poll(&pollfd, 1, -1) == 1);
pa_log("%i, woke up", PA_PTR_TO_INT(k));
}
diff --git a/src/tests/rtpoll-test.c b/src/tests/rtpoll-test.c
index 1706cdf..6a6b73a 100644
--- a/src/tests/rtpoll-test.c
+++ b/src/tests/rtpoll-test.c
@@ -22,8 +22,8 @@
#endif
#include <signal.h>
-#include <poll.h>
+#include <pulsecore/poll.h>
#include <pulsecore/log.h>
#include <pulsecore/rtpoll.h>
diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c
index ef58e9c..6ffe94f 100644
--- a/src/utils/pacmd.c
+++ b/src/utils/pacmd.c
@@ -25,7 +25,6 @@
#include <assert.h>
#include <signal.h>
-#include <sys/poll.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
@@ -38,6 +37,7 @@
#include <pulse/xmalloc.h>
#include <pulse/i18n.h>
+#include <pulsecore/poll.h>
#include <pulsecore/macro.h>
#include <pulsecore/core-util.h>
#include <pulsecore/log.h>
@@ -153,7 +153,7 @@ int main(int argc, char*argv[]) {
else if (!ibuf_eof)
pollfd[WATCH_STDIN].events |= POLLIN;
- if (poll(pollfd, N_WATCH, -1) < 0) {
+ if (pa_poll(pollfd, N_WATCH, -1) < 0) {
if (errno == EINTR)
continue;
commit 28a73ad1203efc6f6dc33629ce653f45081210fa
Author: Daniel Mack <daniel at caiaq.de>
Date: Mon Dec 7 00:40:03 2009 +0100
hack around another OS X bug: recv() with MSG_PEEK does not work
At least for pipes, recv() with MSG_PEEK does actually eat up data from
file descriptors. Hence, this can't be used for PULLHUP emulation.
Use another ioctl hack for that.
diff --git a/src/pulsecore/poll.c b/src/pulsecore/poll.c
index 1dcace8..b98fb16 100644
--- a/src/pulsecore/poll.c
+++ b/src/pulsecore/poll.c
@@ -35,6 +35,10 @@
#include <config.h>
#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
#include <errno.h>
#ifdef HAVE_SYS_SELECT_H
@@ -60,7 +64,9 @@ int pa_poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
struct pollfd *f;
int ready;
int maxfd = 0;
+#ifdef OS_IS_WIN32
char data[64];
+#endif
FD_ZERO (&rset);
FD_ZERO (&wset);
@@ -103,6 +109,7 @@ int pa_poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
ready = select ((SELECT_TYPE_ARG1) maxfd + 1, SELECT_TYPE_ARG234 &rset,
SELECT_TYPE_ARG234 &wset, SELECT_TYPE_ARG234 &xset,
SELECT_TYPE_ARG5 (timeout == -1 ? NULL : &tv));
+
if ((ready == -1) && (errno == EBADF)) {
ready = 0;
@@ -165,6 +172,8 @@ int pa_poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
#endif
if (ready > 0) {
+ int r;
+
ready = 0;
for (f = fds; f < &fds[nfds]; ++f) {
f->revents = 0;
@@ -172,6 +181,18 @@ int pa_poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
if (FD_ISSET (f->fd, &rset)) {
/* support for POLLHUP. An hung up descriptor does not
increase the return value! */
+#ifdef OS_IS_DARWIN
+ /* There is a bug in Mac OS X that causes it to ignore MSG_PEEK
+ * for some kinds of descriptors. Detect if this descriptor is a
+ * connected socket, a server socket, or something else using a
+ * 0-byte recv, and use ioctl(2) to detect POLLHUP. */
+ r = recv(f->fd, NULL, 0, MSG_PEEK);
+ if (r == 0 || (r < 0 && errno == ENOTSOCK))
+ ioctl(f->fd, FIONREAD, &r);
+
+ if (r == 0)
+ f->revents |= POLLHUP;
+#else /* !OS_IS_DARWIN */
if (recv (f->fd, data, 64, MSG_PEEK) == -1) {
if (errno == ESHUTDOWN || errno == ECONNRESET ||
errno == ECONNABORTED || errno == ENETRESET) {
@@ -179,6 +200,7 @@ int pa_poll (struct pollfd *fds, unsigned long int nfds, int timeout) {
f->revents |= POLLHUP;
}
}
+#endif
if (f->revents == 0)
f->revents |= POLLIN;
commit a23f5cf33d21461bdb6e7bb19dd3426041ca5bc1
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Sep 22 11:10:26 2009 +0800
CoreAudio: add device detection module
This adds a new module for CoreAudio device detection. It registers a
callback to detect hotplugged devices and creates/destroys modules named
'module-coreaudio-device'. Devices are identified via a system-wide
unique AudioDeviceID.
diff --git a/src/Makefile.am b/src/Makefile.am
index 90160d1..70ab5b0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1066,6 +1066,11 @@ modlibexec_LTLIBRARIES += \
module-oss.la
endif
+if HAVE_COREAUDIO
+modlibexec_LTLIBRARIES += \
+ module-coreaudio-detect.la
+endif
+
pulselibexec_PROGRAMS =
if HAVE_ALSA
@@ -1238,6 +1243,7 @@ SYMDEF_FILES = \
modules/alsa/module-alsa-sink-symdef.h \
modules/alsa/module-alsa-source-symdef.h \
modules/alsa/module-alsa-card-symdef.h \
+ modules/coreaudio/module-coreaudio-detect-symdef.h \
modules/module-solaris-symdef.h \
modules/module-waveout-symdef.h \
modules/module-detect-symdef.h \
@@ -1469,6 +1475,14 @@ module_oss_la_SOURCES = modules/oss/module-oss.c
module_oss_la_LDFLAGS = $(MODULE_LDFLAGS)
module_oss_la_LIBADD = $(AM_LIBADD) liboss-util.la libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+# COREAUDIO
+
+module_coreaudio_detect_la_SOURCES = modules/coreaudio/module-coreaudio-detect.c
+module_coreaudio_detect_la_LDFLAGS = $(MODULE_LDFLAGS) \
+ -Wl,-framework -Wl,Cocoa -framework CoreAudio \
+ -Wl,-framework -Wl,AudioUnit -framework AudioUnit
+module_coreaudio_detect_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
# ALSA
libalsa_util_la_SOURCES = modules/alsa/alsa-util.c modules/alsa/alsa-util.h modules/alsa/alsa-mixer.c modules/alsa/alsa-mixer.h modules/alsa/alsa-sink.c modules/alsa/alsa-sink.h modules/alsa/alsa-source.c modules/alsa/alsa-source.h modules/reserve-wrap.c modules/reserve-wrap.h
diff --git a/src/modules/coreaudio/module-coreaudio-detect.c b/src/modules/coreaudio/module-coreaudio-detect.c
new file mode 100644
index 0000000..872678e
--- /dev/null
+++ b/src/modules/coreaudio/module-coreaudio-detect.c
@@ -0,0 +1,229 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Daniel Mack <daniel at caiaq.de>
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/module.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/llist.h>
+
+#include <CoreAudio/CoreAudio.h>
+
+#include "module-coreaudio-detect-symdef.h"
+
+#define DEVICE_MODULE_NAME "module-coreaudio-device"
+
+PA_MODULE_AUTHOR("Daniel Mack");
+PA_MODULE_DESCRIPTION("CoreAudio device detection");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_USAGE("");
+
+typedef struct ca_device ca_device;
+
+struct ca_device {
+ AudioDeviceID id;
+ unsigned int module_index;
+ PA_LLIST_FIELDS(ca_device);
+};
+
+struct userdata {
+ int detect_fds[2];
+ pa_io_event *detect_io;
+
+ PA_LLIST_HEAD(ca_device, devices);
+};
+
+static int ca_device_added(struct pa_module *m, AudioDeviceID id) {
+ pa_module *mod;
+ struct userdata *u = m->userdata;
+ struct ca_device *dev;
+ char *args;
+
+ pa_assert(u);
+
+ args = pa_sprintf_malloc("device_id=%d", (int) id);
+ pa_log_debug("Loading %s with arguments '%s'", DEVICE_MODULE_NAME, args);
+ mod = pa_module_load(m->core, DEVICE_MODULE_NAME, args);
+ pa_xfree(args);
+
+ if (!mod) {
+ pa_log_info("Failed to load module %s with arguments '%s'", DEVICE_MODULE_NAME, args);
+ return -1;
+ }
+
+ dev = pa_xnew0(ca_device, 1);
+ dev->module_index = mod->index;
+ dev->id = id;
+
+ PA_LLIST_INIT(ca_device, dev);
+ PA_LLIST_PREPEND(ca_device, u->devices, dev);
+
+ return 0;
+}
+
+static int ca_update_device_list(struct pa_module *m) {
+ OSStatus err;
+ UInt32 i, size, num_devices;
+ Boolean writable;
+ AudioDeviceID *device_id;
+ struct ca_device *dev;
+ struct userdata *u = m->userdata;
+
+ pa_assert(u);
+
+ /* get the number of currently available audio devices */
+ err = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &size, &writable);
+ if (err) {
+ pa_log("Unable to get info for kAudioHardwarePropertyDevices.");
+ return -1;
+ }
+
+ num_devices = size / sizeof(AudioDeviceID);
+ device_id = pa_xnew(AudioDeviceID, num_devices);
+
+ err = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &size, device_id);
+ if (err) {
+ pa_log("Unable to get kAudioHardwarePropertyDevices.");
+ pa_xfree(device_id);
+ return -1;
+ }
+
+ /* scan for devices which are reported but not in our cached list */
+ for (i = 0; i < num_devices; i++) {
+ bool found = FALSE;
+
+ PA_LLIST_FOREACH(dev, u->devices)
+ if (dev->id == device_id[i]) {
+ found = TRUE;
+ break;
+ }
+
+ if (!found)
+ ca_device_added(m, device_id[i]);
+ }
+
+ /* scan for devices which are in our cached list but are not reported */
+scan_removed:
+
+ PA_LLIST_FOREACH(dev, u->devices) {
+ bool found = FALSE;
+
+ for (i = 0; i < num_devices; i++)
+ if (dev->id == device_id[i]) {
+ found = TRUE;
+ break;
+ }
+
+ if (!found) {
+ pa_log_debug("device id %d has been removed (module index %d) %p", (unsigned int) dev->id, dev->module_index, dev);
+ pa_module_unload_request_by_index(m->core, dev->module_index, TRUE);
+ PA_LLIST_REMOVE(ca_device, u->devices, dev);
+ pa_xfree(dev);
+ /* the current list item pointer is not valid anymore, so start over. */
+ goto scan_removed;
+ }
+ }
+
+ pa_xfree(device_id);
+ return 0;
+}
+
+static OSStatus property_listener_proc(AudioHardwarePropertyID property, void *data) {
+ struct userdata *u = data;
+ char dummy = 1;
+
+ pa_assert(u);
+
+ /* dispatch module load/unload operations in main thread */
+ if (property == kAudioHardwarePropertyDevices)
+ write(u->detect_fds[1], &dummy, 1);
+
+ return 0;
+}
+
+static void detect_handle(pa_mainloop_api *a, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
+ pa_module *m = userdata;
+ char dummy;
+
+ pa_assert(m);
+
+ read(fd, &dummy, 1);
+ ca_update_device_list(m);
+}
+
+int pa__init(pa_module *m) {
+ struct userdata *u = pa_xnew0(struct userdata, 1);
+
+ m->userdata = u;
+
+ if (AudioHardwareAddPropertyListener(kAudioHardwarePropertyDevices, property_listener_proc, u)) {
+ pa_log("AudioHardwareAddPropertyListener() failed.");
+ goto fail;
+ }
+
+ if (ca_update_device_list(m))
+ goto fail;
+
+ pa_assert_se(pipe(u->detect_fds) == 0);
+ pa_assert_se(u->detect_io = m->core->mainloop->io_new(m->core->mainloop, u->detect_fds[0], PA_IO_EVENT_INPUT, detect_handle, m));
+
+ return 0;
+
+fail:
+ pa_xfree(u);
+ return -1;
+}
+
+void pa__done(pa_module *m) {
+ struct userdata *u = m->userdata;
+ struct ca_device *dev = u->devices;
+
+ pa_assert(u);
+
+ AudioHardwareRemovePropertyListener(kAudioHardwarePropertyDevices, property_listener_proc);
+
+ while (dev) {
+ struct ca_device *next = dev->next;
+
+ pa_module_unload_request_by_index(m->core, dev->module_index, TRUE);
+ pa_xfree(dev);
+
+ dev = next;
+ }
+
+ if (u->detect_fds[0] >= 0)
+ close(u->detect_fds[0]);
+
+ if (u->detect_fds[1] >= 0)
+ close(u->detect_fds[1]);
+
+ if (u->detect_io)
+ m->core->mainloop->io_free(u->detect_io);
+
+ pa_xfree(u);
+}
commit 7732421a27870a832d7121bc8342503f2fbf3c2a
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Sep 22 11:27:57 2009 +0800
CoreAudio: add audio device module
This patch adds support for CoreAudio driven devices under Mac OS X. It
is typically instanciated by the CoreAudio device detection module and
handles all available streams on a specific device.
Sinks are created according to the reported stream configuration.
Float32 is used as default audio sample format at it is the only format
CoreAudio speaks natively.
Hardware volume control is not implemented yet.
diff --git a/src/Makefile.am b/src/Makefile.am
index 70ab5b0..fa5d170 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1068,7 +1068,8 @@ endif
if HAVE_COREAUDIO
modlibexec_LTLIBRARIES += \
- module-coreaudio-detect.la
+ module-coreaudio-detect.la \
+ module-coreaudio-device.la
endif
pulselibexec_PROGRAMS =
@@ -1244,6 +1245,7 @@ SYMDEF_FILES = \
modules/alsa/module-alsa-source-symdef.h \
modules/alsa/module-alsa-card-symdef.h \
modules/coreaudio/module-coreaudio-detect-symdef.h \
+ modules/coreaudio/module-coreaudio-device-symdef.h \
modules/module-solaris-symdef.h \
modules/module-waveout-symdef.h \
modules/module-detect-symdef.h \
@@ -1483,6 +1485,11 @@ module_coreaudio_detect_la_LDFLAGS = $(MODULE_LDFLAGS) \
-Wl,-framework -Wl,AudioUnit -framework AudioUnit
module_coreaudio_detect_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_coreaudio_device_la_SOURCES = modules/coreaudio/module-coreaudio-device.c
+module_coreaudio_device_la_LDFLAGS = $(MODULE_LDFLAGS) \
+ -Wl,-framework -Wl,Cocoa -framework CoreAudio \
+ -Wl,-framework -Wl,AudioUnit -framework AudioUnit
+module_coreaudio_device_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
# ALSA
libalsa_util_la_SOURCES = modules/alsa/alsa-util.c modules/alsa/alsa-util.h modules/alsa/alsa-mixer.c modules/alsa/alsa-mixer.h modules/alsa/alsa-sink.c modules/alsa/alsa-sink.h modules/alsa/alsa-source.c modules/alsa/alsa-source.h modules/reserve-wrap.c modules/reserve-wrap.h
diff --git a/src/modules/coreaudio/module-coreaudio-device.c b/src/modules/coreaudio/module-coreaudio-device.c
new file mode 100644
index 0000000..a3699e6
--- /dev/null
+++ b/src/modules/coreaudio/module-coreaudio-device.c
@@ -0,0 +1,820 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Daniel Mack <daniel at caiaq.de>
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* TODO:
+ - implement hardware volume controls
+ - handle audio device stream format changes (will require changes to the core)
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulse/xmalloc.h>
+#include <pulse/util.h>
+
+#include <pulsecore/core-error.h>
+#include <pulsecore/sink.h>
+#include <pulsecore/source.h>
+#include <pulsecore/module.h>
+#include <pulsecore/sample-util.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/macro.h>
+#include <pulsecore/llist.h>
+#include <pulsecore/card.h>
+#include <pulsecore/strbuf.h>
+#include <pulsecore/thread.h>
+#include <pulsecore/thread-mq.h>
+
+#include <CoreAudio/CoreAudio.h>
+#include <CoreAudio/CoreAudioTypes.h>
+#include <CoreAudio/AudioHardware.h>
+
+#include "module-coreaudio-device-symdef.h"
+
+#define DEFAULT_FRAMES_PER_IOPROC 512
+
+PA_MODULE_AUTHOR("Daniel Mack");
+PA_MODULE_DESCRIPTION("CoreAudio device");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(FALSE);
+PA_MODULE_USAGE("device_id=<the CoreAudio device id> "
+ "ioproc_frames=<audio frames per IOProc call> ");
+
+static const char* const valid_modargs[] = {
+ "device_id",
+ "ioproc_frames",
+ NULL
+};
+
+enum {
+ CA_MESSAGE_RENDER = PA_SINK_MESSAGE_MAX,
+};
+
+typedef struct coreaudio_sink coreaudio_sink;
+typedef struct coreaudio_source coreaudio_source;
+
+struct userdata {
+ AudioDeviceID device_id;
+ AudioDeviceIOProcID proc_id;
+
+ pa_thread_mq thread_mq;
+ pa_asyncmsgq *async_msgq;
+
+ pa_rtpoll *rtpoll;
+ pa_thread *thread;
+
+ pa_module *module;
+ pa_card *card;
+ pa_bool_t running;
+
+ char *device_name, *vendor_name;
+
+ const AudioBufferList *render_input_data;
+ AudioBufferList *render_output_data;
+
+ AudioStreamBasicDescription stream_description;
+
+ PA_LLIST_HEAD(coreaudio_sink, sinks);
+ PA_LLIST_HEAD(coreaudio_source, sources);
+};
+
+struct coreaudio_sink {
+ pa_sink *pa_sink;
+ struct userdata *userdata;
+
+ char *name;
+ unsigned int channel_idx;
+ pa_bool_t active;
+
+ pa_channel_map map;
+ pa_sample_spec ss;
+
+ PA_LLIST_FIELDS(coreaudio_sink);
+};
+
+struct coreaudio_source {
+ pa_source *pa_source;
+ struct userdata *userdata;
+
+ char *name;
+ unsigned int channel_idx;
+ pa_bool_t active;
+
+ pa_channel_map map;
+ pa_sample_spec ss;
+
+ PA_LLIST_FIELDS(coreaudio_source);
+};
+
+static OSStatus io_render_proc (AudioDeviceID device,
+ const AudioTimeStamp *now,
+ const AudioBufferList *inputData,
+ const AudioTimeStamp *inputTime,
+ AudioBufferList *outputData,
+ const AudioTimeStamp *outputTime,
+ void *clientData)
+{
+ struct userdata *u = clientData;
+
+ pa_assert(u);
+ pa_assert(device == u->device_id);
+
+ u->render_input_data = inputData;
+ u->render_output_data = outputData;
+
+ if (u->sinks)
+ pa_assert_se(pa_asyncmsgq_send(u->async_msgq, PA_MSGOBJECT(u->sinks->pa_sink),
+ CA_MESSAGE_RENDER, NULL, 0, NULL) == 0);
+
+ if (u->sources)
+ pa_assert_se(pa_asyncmsgq_send(u->async_msgq, PA_MSGOBJECT(u->sources->pa_source),
+ CA_MESSAGE_RENDER, NULL, 0, NULL) == 0);
+
+ return 0;
+}
+
+static OSStatus ca_stream_format_changed(AudioDeviceID inDevice,
+ UInt32 inChannel,
+ Boolean isInput,
+ AudioDevicePropertyID inPropertyID,
+ void *inClientData)
+{
+ struct userdata *u = inClientData;
+
+ pa_assert(u);
+
+ /* REVISIT: PA can't currently handle external format change requests.
+ * Hence, we set the original format back in this callback to avoid horrible audio artefacts.
+ * The device settings will appear to be 'locked' for any application as long as the PA daemon is running.
+ * Once we're able to propagate such events up in the core, this needs to be changed. */
+
+ return AudioDeviceSetProperty(inDevice, NULL, inChannel, isInput,
+ kAudioDevicePropertyStreamFormat, sizeof(u->stream_description), &u->stream_description);
+}
+
+static pa_usec_t get_latency_us(pa_object *o) {
+ struct userdata *u;
+ pa_sample_spec *ss;
+ bool is_source;
+ UInt32 v, total = 0;
+ UInt32 err, size = sizeof(v);
+
+ if (pa_sink_isinstance(o)) {
+ coreaudio_sink *sink = PA_SINK(o)->userdata;
+
+ u = sink->userdata;
+ ss = &sink->ss;
+ is_source = FALSE;
+ } else if (pa_source_isinstance(o)) {
+ coreaudio_source *source = PA_SOURCE(o)->userdata;
+
+ u = source->userdata;
+ ss = &source->ss;
+ is_source = TRUE;
+ } else
+ pa_assert_not_reached();
+
+ pa_assert(u);
+
+ /* get the device latency */
+ size = sizeof(total);
+ AudioDeviceGetProperty(u->device_id, 0, is_source, kAudioDevicePropertyLatency, &size, &v);
+ total += v;
+
+ /* the the IOProc buffer size */
+ size = sizeof(v);
+ AudioDeviceGetProperty(u->device_id, 0, is_source, kAudioDevicePropertyBufferFrameSize, &size, &v);
+ total += v;
+
+ /* IOProc safety offset - this value is the same for both directions, hence we divide it by 2 */
+ size = sizeof(v);
+ AudioDeviceGetProperty(u->device_id, 0, is_source, kAudioDevicePropertySafetyOffset, &size, &v);
+ total += v / 2;
+
+ /* get the stream latency.
+ * FIXME: this assumes the stream latency is the same for all streams */
+ err = AudioStreamGetProperty(0, is_source, kAudioStreamPropertyLatency, &size, &v);
+ if (!err)
+ total += v;
+
+ return pa_bytes_to_usec(total * pa_frame_size(ss), ss);
+}
+
+static void ca_device_check_device_state(struct userdata *u) {
+ coreaudio_sink *ca_sink;
+ coreaudio_source *ca_source;
+ pa_bool_t active = FALSE;
+
+ pa_assert(u);
+
+ for (ca_sink = u->sinks; ca_sink; ca_sink = ca_sink->next)
+ if (ca_sink->active)
+ active = TRUE;
+
+ for (ca_source = u->sources; ca_source; ca_source = ca_source->next)
+ if (ca_source->active)
+ active = TRUE;
+
+ if (active && !u->running)
+ AudioDeviceStart(u->device_id, u->proc_id);
+ else if (!active && u->running)
+ AudioDeviceStop(u->device_id, u->proc_id);
+
+ u->running = active;
+}
+
+static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+ coreaudio_sink *sink = PA_SINK(o)->userdata;
+ struct userdata *u = sink->userdata;
+ unsigned int i;
+ pa_memchunk audio_chunk;
+
+ switch (code) {
+ case CA_MESSAGE_RENDER: {
+ /* audio out */
+ for (i = 0; i < u->render_output_data->mNumberBuffers; i++) {
+ AudioBuffer *buf = u->render_output_data->mBuffers + i;
+
+ pa_assert(sink);
+
+ if (PA_SINK_IS_OPENED(sink->pa_sink->thread_info.state)) {
+ if (sink->pa_sink->thread_info.rewind_requested)
+ pa_sink_process_rewind(sink->pa_sink, 0);
+
+ audio_chunk.memblock = pa_memblock_new_fixed(u->module->core->mempool, buf->mData, buf->mDataByteSize, FALSE);
+ audio_chunk.length = buf->mDataByteSize;
+ audio_chunk.index = 0;
+
+ pa_sink_render_into_full(sink->pa_sink, &audio_chunk);
+ pa_memblock_unref_fixed(audio_chunk.memblock);
+ }
+
+ sink = sink->next;
+ }
+
+ return 0;
+ }
+
+ case PA_SINK_MESSAGE_GET_LATENCY: {
+ *((pa_usec_t *) data) = get_latency_us(PA_OBJECT(o));
+ return 0;
+ }
+
+ case PA_SINK_MESSAGE_SET_STATE:
+ switch ((pa_sink_state_t) PA_PTR_TO_UINT(data)) {
+ case PA_SINK_SUSPENDED:
+ case PA_SINK_IDLE:
+ sink->active = FALSE;
+ break;
+
+ case PA_SINK_RUNNING:
+ sink->active = TRUE;
+ break;
+
+ case PA_SINK_UNLINKED:
+ case PA_SINK_INIT:
+ case PA_SINK_INVALID_STATE:
+ ;
+ }
+
+ ca_device_check_device_state(sink->userdata);
+ break;
+ }
+
+ return pa_sink_process_msg(o, code, data, offset, chunk);
+}
+
+static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+ coreaudio_source *source = PA_SOURCE(o)->userdata;
+ struct userdata *u = source->userdata;
+ unsigned int i;
+ pa_memchunk audio_chunk;
+
+ switch (code) {
+ case CA_MESSAGE_RENDER: {
+ /* audio in */
+ for (i = 0; i < u->render_input_data->mNumberBuffers; i++) {
+ const AudioBuffer *buf = u->render_input_data->mBuffers + i;
+
+ pa_assert(source);
+
+ if (PA_SOURCE_IS_OPENED(source->pa_source->thread_info.state)) {
+ audio_chunk.memblock = pa_memblock_new_fixed(u->module->core->mempool, buf->mData, buf->mDataByteSize, TRUE);
+ audio_chunk.length = buf->mDataByteSize;
+ audio_chunk.index = 0;
+
+ pa_source_post(source->pa_source, &audio_chunk);
+ pa_memblock_unref_fixed(audio_chunk.memblock);
+ }
+
+ source = source->next;
+ }
+
+ return 0;
+ }
+
+ case PA_SOURCE_MESSAGE_GET_LATENCY: {
+ *((pa_usec_t *) data) = get_latency_us(PA_OBJECT(o));
+ return 0;
+ }
+
+ case PA_SOURCE_MESSAGE_SET_STATE:
+ switch ((pa_source_state_t) PA_PTR_TO_UINT(data)) {
+ case PA_SOURCE_SUSPENDED:
+ case PA_SOURCE_IDLE:
+ source->active = FALSE;
+ break;
+
+ case PA_SOURCE_RUNNING:
+ source->active = TRUE;
+ break;
+
+ case PA_SOURCE_UNLINKED:
+ case PA_SOURCE_INIT:
+ case PA_SOURCE_INVALID_STATE:
+ ;
+ }
+
+ ca_device_check_device_state(source->userdata);
+ break;
+ }
+
+ return pa_source_process_msg(o, code, data, offset, chunk);
+}
+
+static int ca_device_create_sink(pa_module *m, AudioBuffer *buf, int channel_idx) {
+ OSStatus err;
+ UInt32 size;
+ struct userdata *u = m->userdata;
+ pa_sink_new_data new_data;
+ pa_sink_flags_t flags = PA_SINK_LATENCY | PA_SINK_HARDWARE;
+ coreaudio_sink *ca_sink;
+ pa_sink *sink;
+ unsigned int i;
+ char tmp[255];
+ pa_strbuf *strbuf;
+
+ ca_sink = pa_xnew0(coreaudio_sink, 1);
+ ca_sink->map.channels = buf->mNumberChannels;
+ ca_sink->ss.channels = buf->mNumberChannels;
+ ca_sink->channel_idx = channel_idx;
+
+ /* build a name for this stream */
+ strbuf = pa_strbuf_new();
+
+ for (i = 0; i < buf->mNumberChannels; i++) {
+ size = sizeof(tmp);
+ err = AudioDeviceGetProperty(u->device_id, channel_idx + i + 1, 0, kAudioObjectPropertyElementName, &size, tmp);
+ if (err || !strlen(tmp))
+ snprintf(tmp, sizeof(tmp), "Channel %d", channel_idx + i + 1);
+
+ if (i > 0)
+ pa_strbuf_puts(strbuf, ", ");
+
+ pa_strbuf_puts(strbuf, tmp);
+ }
+
+ ca_sink->name = pa_strbuf_tostring_free(strbuf);
+
+ pa_log_debug("Stream name is >%s<", ca_sink->name);
+
+ /* default to mono streams */
+ for (i = 0; i < ca_sink->map.channels; i++)
+ ca_sink->map.map[i] = PA_CHANNEL_POSITION_MONO;
+
+ if (buf->mNumberChannels == 2) {
+ ca_sink->map.map[0] = PA_CHANNEL_POSITION_LEFT;
+ ca_sink->map.map[1] = PA_CHANNEL_POSITION_RIGHT;
+ }
+
+ ca_sink->ss.rate = u->stream_description.mSampleRate;
+ ca_sink->ss.format = PA_SAMPLE_FLOAT32LE;
+
+ pa_sink_new_data_init(&new_data);
+ new_data.card = u->card;
+ new_data.driver = __FILE__;
+ new_data.module = u->module;
+ new_data.namereg_fail = FALSE;
+ pa_sink_new_data_set_name(&new_data, ca_sink->name);
+ pa_sink_new_data_set_channel_map(&new_data, &ca_sink->map);
+ pa_sink_new_data_set_sample_spec(&new_data, &ca_sink->ss);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_STRING, u->device_name);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_PRODUCT_NAME, u->device_name);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_DESCRIPTION, u->device_name);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_ACCESS_MODE, "mmap");
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_CLASS, "sound");
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_API, "CoreAudio");
+ pa_proplist_setf(new_data.proplist, PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE, "%lu", (unsigned long) buf->mDataByteSize);
+
+ if (u->vendor_name)
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_VENDOR_NAME, u->vendor_name);
+
+ sink = pa_sink_new(m->core, &new_data, flags);
+ pa_sink_new_data_done(&new_data);
+
+ if (!sink) {
+ pa_log("unable to create sink.");
+ return -1;
+ }
+
+ sink->parent.process_msg = sink_process_msg;
+ sink->userdata = ca_sink;
+
+ pa_sink_set_asyncmsgq(sink, u->thread_mq.inq);
+ pa_sink_set_rtpoll(sink, u->rtpoll);
+
+ ca_sink->pa_sink = sink;
+ ca_sink->userdata = u;
+
+ PA_LLIST_PREPEND(coreaudio_sink, u->sinks, ca_sink);
+
+ return 0;
+}
+
+static int ca_device_create_source(pa_module *m, AudioBuffer *buf, int channel_idx) {
+ OSStatus err;
+ UInt32 size;
+ struct userdata *u = m->userdata;
+ pa_source_new_data new_data;
+ pa_source_flags_t flags = PA_SOURCE_LATENCY | PA_SOURCE_HARDWARE;
+ coreaudio_source *ca_source;
+ pa_source *source;
+ unsigned int i;
+ char tmp[255];
+ pa_strbuf *strbuf;
+
+ ca_source = pa_xnew0(coreaudio_source, 1);
+ ca_source->map.channels = buf->mNumberChannels;
+ ca_source->ss.channels = buf->mNumberChannels;
+ ca_source->channel_idx = channel_idx;
+
+ /* build a name for this stream */
+ strbuf = pa_strbuf_new();
+
+ for (i = 0; i < buf->mNumberChannels; i++) {
+ size = sizeof(tmp);
+ err = AudioDeviceGetProperty(u->device_id, channel_idx + i + 1, 0, kAudioObjectPropertyElementName, &size, tmp);
+ if (err || !strlen(tmp))
+ snprintf(tmp, sizeof(tmp), "Channel %d", channel_idx + i + 1);
+
+ if (i > 0)
+ pa_strbuf_puts(strbuf, ", ");
+
+ pa_strbuf_puts(strbuf, tmp);
+ }
+
+ ca_source->name = pa_strbuf_tostring_free(strbuf);
+
+ pa_log_debug("Stream name is >%s<", ca_source->name);
+
+ /* default to mono streams */
+ for (i = 0; i < ca_source->map.channels; i++)
+ ca_source->map.map[i] = PA_CHANNEL_POSITION_MONO;
+
+ if (buf->mNumberChannels == 2) {
+ ca_source->map.map[0] = PA_CHANNEL_POSITION_LEFT;
+ ca_source->map.map[1] = PA_CHANNEL_POSITION_RIGHT;
+ }
+
+ ca_source->ss.rate = u->stream_description.mSampleRate;
+ ca_source->ss.format = PA_SAMPLE_FLOAT32LE;
+
+ pa_source_new_data_init(&new_data);
+ new_data.card = u->card;
+ new_data.driver = __FILE__;
+ new_data.module = u->module;
+ new_data.namereg_fail = FALSE;
+ pa_source_new_data_set_name(&new_data, ca_source->name);
+ pa_source_new_data_set_channel_map(&new_data, &ca_source->map);
+ pa_source_new_data_set_sample_spec(&new_data, &ca_source->ss);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_STRING, u->device_name);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_PRODUCT_NAME, u->device_name);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_DESCRIPTION, u->device_name);
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_ACCESS_MODE, "mmap");
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_CLASS, "sound");
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_API, "CoreAudio");
+ pa_proplist_setf(new_data.proplist, PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE, "%lu", (unsigned long) buf->mDataByteSize);
+
+ if (u->vendor_name)
+ pa_proplist_sets(new_data.proplist, PA_PROP_DEVICE_VENDOR_NAME, u->vendor_name);
+
+ source = pa_source_new(m->core, &new_data, flags);
+ pa_source_new_data_done(&new_data);
+
+ if (!source) {
+ pa_log("unable to create source.");
+ return -1;
+ }
+
+ source->parent.process_msg = source_process_msg;
+ source->userdata = ca_source;
+
+ pa_source_set_asyncmsgq(source, u->thread_mq.inq);
+ pa_source_set_rtpoll(source, u->rtpoll);
+
+ ca_source->pa_source = source;
+ ca_source->userdata = u;
+
+ PA_LLIST_PREPEND(coreaudio_source, u->sources, ca_source);
+
+ return 0;
+}
+
+static int ca_device_create_streams(pa_module *m, bool direction_in) {
+ OSStatus err;
+ UInt32 size, i, channel_idx;
+ struct userdata *u = m->userdata;
+ int section = direction_in ? 1 : 0;
+ AudioBufferList *buffer_list;
+
+ /* get current stream format */
+ size = sizeof(AudioStreamBasicDescription);
+ err = AudioDeviceGetProperty(u->device_id, 0, section, kAudioDevicePropertyStreamFormat, &size, &u->stream_description);
+ if (err) {
+ /* no appropriate streams found - silently bail. */
+ return -1;
+ }
+
+ if (u->stream_description.mFormatID != kAudioFormatLinearPCM) {
+ pa_log("Unsupported audio format '%c%c%c%c'",
+ (char) (u->stream_description.mFormatID >> 24),
+ (char) (u->stream_description.mFormatID >> 16) & 0xff,
+ (char) (u->stream_description.mFormatID >> 8) & 0xff,
+ (char) (u->stream_description.mFormatID & 0xff));
+ return -1;
+ }
+
+ /* get stream configuration */
+ size = 0;
+ err = AudioDeviceGetPropertyInfo(u->device_id, 0, section, kAudioDevicePropertyStreamConfiguration, &size, NULL);
+ if (err) {
+ pa_log("Failed to get kAudioDevicePropertyStreamConfiguration (%s).", direction_in ? "input" : "output");
+ return -1;
+ }
+
+ if (!size)
+ return 0;
+
+ buffer_list = (AudioBufferList *) pa_xmalloc(size);
+ err = AudioDeviceGetProperty(u->device_id, 0, section, kAudioDevicePropertyStreamConfiguration, &size, buffer_list);
+
+ if (!err) {
+ pa_log_debug("Sample rate: %f", u->stream_description.mSampleRate);
+ pa_log_debug("%d bytes per packet", (unsigned int) u->stream_description.mBytesPerPacket);
+ pa_log_debug("%d frames per packet", (unsigned int) u->stream_description.mFramesPerPacket);
+ pa_log_debug("%d bytes per frame", (unsigned int) u->stream_description.mBytesPerFrame);
+ pa_log_debug("%d channels per frame", (unsigned int) u->stream_description.mChannelsPerFrame);
+ pa_log_debug("%d bits per channel", (unsigned int) u->stream_description.mBitsPerChannel);
+
+ for (channel_idx = 0, i = 0; i < buffer_list->mNumberBuffers; i++) {
+ AudioBuffer *buf = buffer_list->mBuffers + i;
+
+ if (direction_in)
+ ca_device_create_source(m, buf, channel_idx);
+ else
+ ca_device_create_sink(m, buf, channel_idx);
+
+ channel_idx += buf->mNumberChannels;
+ }
+ }
+
+ pa_xfree(buffer_list);
+ return 0;
+}
+
+static void thread_func(void *userdata) {
+ struct userdata *u = userdata;
+
+ pa_assert(u);
+ pa_assert(u->module);
+ pa_assert(u->module->core);
+
+ pa_log_debug("Thread starting up");
+
+ if (u->module->core->realtime_scheduling)
+ pa_make_realtime(u->module->core->realtime_priority);
+
+ pa_thread_mq_install(&u->thread_mq);
+
+ for (;;) {
+ int ret;
+
+ ret = pa_rtpoll_run(u->rtpoll, TRUE);
+
+ if (ret < 0)
+ goto fail;
+
+ if (ret == 0)
+ goto finish;
+ }
+
+fail:
+ /* If this was no regular exit from the loop we have to continue
+ * processing messages until we received PA_MESSAGE_SHUTDOWN */
+ pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->module->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
+ pa_asyncmsgq_wait_for(u->thread_mq.inq, PA_MESSAGE_SHUTDOWN);
+
+finish:
+ pa_log_debug("Thread shutting down");
+}
+
+int pa__init(pa_module *m) {
+ OSStatus err;
+ UInt32 size, frames;
+ struct userdata *u = NULL;
+ pa_modargs *ma = NULL;
+ char tmp[64];
+ pa_card_new_data card_new_data;
+ coreaudio_sink *ca_sink;
+ coreaudio_source *ca_source;
+
+ pa_assert(m);
+
+ if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
+ pa_log("Failed to parse module arguments.");
+ goto fail;
+ }
+
+ u = pa_xnew0(struct userdata, 1);
+ u->module = m;
+ m->userdata = u;
+
+ if (pa_modargs_get_value_u32(ma, "device_id", (unsigned int *) &u->device_id) != 0) {
+ pa_log("Failed to parse device_id argument.");
+ goto fail;
+ }
+
+ /* get device product name */
+ size = sizeof(tmp);
+ err = AudioDeviceGetProperty(u->device_id, 0, 0, kAudioDevicePropertyDeviceName, &size, &tmp);
+ if (err) {
+ pa_log("Failed to get kAudioDevicePropertyDeviceName (err = %08x).", (int) err);
+ goto fail;
+ }
+
+ u->device_name = pa_xstrdup(tmp);
+
+ pa_card_new_data_init(&card_new_data);
+ pa_proplist_sets(card_new_data.proplist, PA_PROP_DEVICE_STRING, tmp);
+ card_new_data.driver = __FILE__;
+ pa_card_new_data_set_name(&card_new_data, tmp);
+ pa_log_info("Initializing module for CoreAudio device '%s' (id %d)", tmp, (unsigned int) u->device_id);
+
+ /* get device vendor name (may fail) */
+ size = sizeof(tmp);
+ err = AudioDeviceGetProperty(u->device_id, 0, 0, kAudioDevicePropertyDeviceManufacturer, &size, &tmp);
+ if (!err)
+ u->vendor_name = pa_xstrdup(tmp);
+
+ /* create the card object */
+ u->card = pa_card_new(m->core, &card_new_data);
+ if (!u->card) {
+ pa_log("Unable to create card.\n");
+ goto fail;
+ }
+
+ pa_card_new_data_done(&card_new_data);
+ u->card->userdata = u;
+
+ u->rtpoll = pa_rtpoll_new();
+ pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
+ u->async_msgq = pa_asyncmsgq_new(0);
+ pa_rtpoll_item_new_asyncmsgq_read(u->rtpoll, PA_RTPOLL_EARLY-1, u->async_msgq);
+
+ PA_LLIST_HEAD_INIT(coreaudio_sink, u->sinks);
+
+ /* create sinks */
+ ca_device_create_streams(m, FALSE);
+
+ /* create sources */
+ ca_device_create_streams(m, TRUE);
+
+ /* create the message thread */
+ if (!(u->thread = pa_thread_new(thread_func, u))) {
+ pa_log("Failed to create thread.");
+ goto fail;
+ }
+
+ /* register notification callback for stream format changes */
+ AudioDeviceAddPropertyListener(u->device_id, 0, 0, kAudioDevicePropertyStreamFormat, ca_stream_format_changed, u);
+
+ /* set number of frames in IOProc */
+ frames = DEFAULT_FRAMES_PER_IOPROC;
+ pa_modargs_get_value_u32(ma, "ioproc_frames", (unsigned int *) &frames);
+
+ AudioDeviceSetProperty(u->device_id, NULL, 0, 0, kAudioDevicePropertyBufferFrameSize, sizeof(frames), &frames);
+ pa_log_debug("%u frames per IOProc\n", (unsigned int) frames);
+
+ /* create one ioproc for both directions */
+ err = AudioDeviceCreateIOProcID(u->device_id, io_render_proc, u, &u->proc_id);
+ if (err) {
+ pa_log("AudioDeviceCreateIOProcID() failed (err = %08x\n).", (int) err);
+ goto fail;
+ }
+
+ for (ca_sink = u->sinks; ca_sink; ca_sink = ca_sink->next)
+ pa_sink_put(ca_sink->pa_sink);
+
+ for (ca_source = u->sources; ca_source; ca_source = ca_source->next)
+ pa_source_put(ca_source->pa_source);
+
+ pa_modargs_free(ma);
+
+ return 0;
+
+fail:
+ if (u)
+ pa__done(m);
+
+ if (ma)
+ pa_modargs_free(ma);
+
+ return -1;
+}
+
+void pa__done(pa_module *m) {
+ struct userdata *u;
+ coreaudio_sink *ca_sink;
+ coreaudio_source *ca_source;
+
+ pa_assert(m);
+
+ u = m->userdata;
+ pa_assert(u);
+
+ /* unlink sinks */
+ for (ca_sink = u->sinks; ca_sink; ca_sink = ca_sink->next)
+ if (ca_sink->pa_sink)
+ pa_sink_unlink(ca_sink->pa_sink);
+
+ /* unlink sources */
+ for (ca_source = u->sources; ca_source; ca_source = ca_source->next)
+ if (ca_source->pa_source)
+ pa_source_unlink(ca_source->pa_source);
+
+ if (u->thread) {
+ pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
+ pa_thread_free(u->thread);
+ pa_thread_mq_done(&u->thread_mq);
+ pa_asyncmsgq_unref(u->async_msgq);
+ }
+
+ /* free sinks */
+ for (ca_sink = u->sinks; ca_sink;) {
+ coreaudio_sink *next = ca_sink->next;
+
+ if (ca_sink->pa_sink)
+ pa_sink_unref(ca_sink->pa_sink);
+
+ pa_xfree(ca_sink->name);
+ pa_xfree(ca_sink);
+ ca_sink = next;
+ }
+
+ /* free sources */
+ for (ca_source = u->sources; ca_source;) {
+ coreaudio_source *next = ca_source->next;
+
+ if (ca_source->pa_source)
+ pa_source_unref(ca_source->pa_source);
+
+ pa_xfree(ca_source->name);
+ pa_xfree(ca_source);
+ ca_source = next;
+ }
+
+ if (u->proc_id) {
+ AudioDeviceStop(u->device_id, u->proc_id);
+ AudioDeviceDestroyIOProcID(u->device_id, u->proc_id);
+ }
+
+ AudioDeviceRemovePropertyListener(u->device_id, 0, 0, kAudioDevicePropertyStreamFormat, ca_stream_format_changed);
+
+ pa_xfree(u->device_name);
+ pa_xfree(u->vendor_name);
+ pa_rtpoll_free(u->rtpoll);
+ pa_card_free(u->card);
+
+ pa_xfree(u);
+}
commit 0ccc7afcd8cf77346568ffbf9a8b2e0b3ce2ea0e
Author: Daniel Mack <daniel at caiaq.de>
Date: Thu Dec 10 10:32:57 2009 +0800
osx: add native zeroconf implementation via Bonjour
Avahi and dbus is too heavy for OSX just for the sake of publishing our
services via mDNS/Zeroconf. Apple has its own Zeroconf implementation
called Bonjour, and this patch adds a module that implements service
announcement with that API.
All data gathering is copied from module-zeroconf-publish.c, but
unfortunately the code there is too specifically made for avahi, so I
couldn't factor it out to reuse it.
diff --git a/configure.ac b/configure.ac
index 11af89b..6b540e4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -423,8 +423,12 @@ if test "x$os_is_darwin" = "x1" ; then
AC_MSG_RESULT([ok])
AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [Using clock_gettime() replacement])
+ HAVE_BONJOUR=1
fi
+AC_SUBST(HAVE_BONJOUR)
+AM_CONDITIONAL([HAVE_BONJOUR], [test "x$HAVE_BONJOUR" = x1])
+
#### Check for functions ####
# ISO
diff --git a/src/Makefile.am b/src/Makefile.am
index fa5d170..0224cb3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1123,6 +1123,11 @@ modlibexec_LTLIBRARIES += \
module-zeroconf-discover.la
endif
+if HAVE_BONJOUR
+modlibexec_LTLIBRARIES += \
+ module-bonjour-publish.la
+endif
+
if HAVE_LIRC
modlibexec_LTLIBRARIES += \
module-lirc.la
@@ -1231,6 +1236,7 @@ SYMDEF_FILES = \
modules/module-esound-sink-symdef.h \
modules/module-zeroconf-publish-symdef.h \
modules/module-zeroconf-discover-symdef.h \
+ modules/module-bonjour-publish-symdef.h \
modules/module-lirc-symdef.h \
modules/module-mmkbd-evdev-symdef.h \
modules/module-http-protocol-tcp-symdef.h \
@@ -1548,6 +1554,13 @@ module_zeroconf_discover_la_LDFLAGS = $(MODULE_LDFLAGS)
module_zeroconf_discover_la_LIBADD = $(AM_LIBADD) $(AVAHI_LIBS) libavahi-wrap.la libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
module_zeroconf_discover_la_CFLAGS = $(AM_CFLAGS) $(AVAHI_CFLAGS)
+# Bonjour
+
+module_bonjour_publish_la_SOURCES = modules/module-bonjour-publish.c
+module_bonjour_publish_la_LDFLAGS = $(MODULE_LDFLAGS) \
+ -Wl,-framework -Wl,CoreFoundation -framework CoreFoundation
+module_bonjour_publish_la_LIBADD = libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
# LIRC
module_lirc_la_SOURCES = modules/module-lirc.c
diff --git a/src/modules/module-bonjour-publish.c b/src/modules/module-bonjour-publish.c
new file mode 100644
index 0000000..81b5976
--- /dev/null
+++ b/src/modules/module-bonjour-publish.c
@@ -0,0 +1,516 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Daniel Mack
+ based on module-zeroconf-publish.c
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <dns_sd.h>
+
+#include <CoreFoundation/CoreFoundation.h>
+
+#include <pulse/xmalloc.h>
+#include <pulse/util.h>
+
+#include <pulsecore/parseaddr.h>
+#include <pulsecore/sink.h>
+#include <pulsecore/source.h>
+#include <pulsecore/native-common.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/log.h>
+#include <pulsecore/core-subscribe.h>
+#include <pulsecore/dynarray.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/avahi-wrap.h>
+#include <pulsecore/endianmacros.h>
+#include <pulsecore/protocol-native.h>
+
+#include "module-bonjour-publish-symdef.h"
+
+PA_MODULE_AUTHOR("Daniel Mack");
+PA_MODULE_DESCRIPTION("Mac OS X Bonjour Service Publisher");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(TRUE);
+
+#define SERVICE_TYPE_SINK "_pulse-sink._tcp"
+#define SERVICE_TYPE_SOURCE "_pulse-source._tcp"
+#define SERVICE_TYPE_SERVER "_pulse-server._tcp"
+
+static const char* const valid_modargs[] = {
+ NULL
+};
+
+enum service_subtype {
+ SUBTYPE_HARDWARE,
+ SUBTYPE_VIRTUAL,
+ SUBTYPE_MONITOR
+};
+
+struct service {
+ struct userdata *userdata;
+ DNSServiceRef service;
+ DNSRecordRef rec, rec2;
+ char *service_name;
+ pa_object *device;
+ enum service_subtype subtype;
+};
+
+struct userdata {
+ pa_core *core;
+ pa_module *module;
+
+ pa_hashmap *services;
+ char *service_name;
+
+ pa_hook_slot *sink_new_slot, *source_new_slot, *sink_unlink_slot, *source_unlink_slot, *sink_changed_slot, *source_changed_slot;
+
+ pa_native_protocol *native;
+ DNSServiceRef main_service;
+};
+
+static void get_service_data(struct service *s, pa_sample_spec *ret_ss, pa_channel_map *ret_map, const char **ret_name, pa_proplist **ret_proplist, enum service_subtype *ret_subtype) {
+ pa_assert(s);
+ pa_assert(ret_ss);
+ pa_assert(ret_proplist);
+ pa_assert(ret_subtype);
+
+ if (pa_sink_isinstance(s->device)) {
+ pa_sink *sink = PA_SINK(s->device);
+
+ *ret_ss = sink->sample_spec;
+ *ret_map = sink->channel_map;
+ *ret_name = sink->name;
+ *ret_proplist = sink->proplist;
+ *ret_subtype = sink->flags & PA_SINK_HARDWARE ? SUBTYPE_HARDWARE : SUBTYPE_VIRTUAL;
+
+ } else if (pa_source_isinstance(s->device)) {
+ pa_source *source = PA_SOURCE(s->device);
+
+ *ret_ss = source->sample_spec;
+ *ret_map = source->channel_map;
+ *ret_name = source->name;
+ *ret_proplist = source->proplist;
+ *ret_subtype = source->monitor_of ? SUBTYPE_MONITOR : (source->flags & PA_SOURCE_HARDWARE ? SUBTYPE_HARDWARE : SUBTYPE_VIRTUAL);
+
+ } else
+ pa_assert_not_reached();
+}
+
+static void txt_record_server_data(pa_core *c, TXTRecordRef *txt) {
+ char s[128];
+ char *t;
+
+ pa_assert(c);
+
+ TXTRecordSetValue(txt, "server-version", strlen(PACKAGE_NAME" "PACKAGE_VERSION), PACKAGE_NAME" "PACKAGE_VERSION);
+
+ t = pa_get_user_name_malloc();
+ TXTRecordSetValue(txt, "user-name", strlen(t), t);
+ pa_xfree(t);
+
+ t = pa_machine_id();
+ TXTRecordSetValue(txt, "machine-id", strlen(t), t);
+ pa_xfree(t);
+
+ t = pa_uname_string();
+ TXTRecordSetValue(txt, "uname", strlen(t), t);
+ pa_xfree(t);
+
+ t = pa_get_fqdn(s, sizeof(s));
+ TXTRecordSetValue(txt, "fqdn", strlen(t), t);
+
+ snprintf(s, sizeof(s), "0x%08x", c->cookie);
+ TXTRecordSetValue(txt, "cookie", strlen(s), s);
+}
+
+static void service_free(struct service *s);
+
+static void dns_service_register_reply(DNSServiceRef sdRef,
+ DNSServiceFlags flags,
+ DNSServiceErrorType errorCode,
+ const char *name,
+ const char *regtype,
+ const char *domain,
+ void *context) {
+ struct service *s = context;
+
+ pa_assert(s);
+
+ switch (errorCode) {
+ case kDNSServiceErr_NameConflict:
+ pa_log("DNS service reported kDNSServiceErr_NameConflict\n");
+ service_free(s);
+ break;
+
+ case kDNSServiceErr_NoError:
+ default:
+ break;
+ }
+}
+
+static uint16_t compute_port(struct userdata *u) {
+ pa_strlist *i;
+
+ pa_assert(u);
+
+ for (i = pa_native_protocol_servers(u->native); i; i = pa_strlist_next(i)) {
+ pa_parsed_address a;
+
+ if (pa_parse_address(pa_strlist_data(i), &a) >= 0 &&
+ (a.type == PA_PARSED_ADDRESS_TCP4 ||
+ a.type == PA_PARSED_ADDRESS_TCP6 ||
+ a.type == PA_PARSED_ADDRESS_TCP_AUTO) &&
+ a.port > 0) {
+
+ pa_xfree(a.path_or_host);
+ return a.port;
+ }
+
+ pa_xfree(a.path_or_host);
+ }
+
+ return PA_NATIVE_DEFAULT_PORT;
+}
+
+static int publish_service(struct service *s) {
+ int r = -1;
+ TXTRecordRef txt;
+ DNSServiceErrorType err;
+ const char *name = NULL, *t;
+ pa_proplist *proplist = NULL;
+ pa_sample_spec ss;
+ pa_channel_map map;
+ char cm[PA_CHANNEL_MAP_SNPRINT_MAX], tmp[64];
+ enum service_subtype subtype;
+
+ const char * const subtype_text[] = {
+ [SUBTYPE_HARDWARE] = "hardware",
+ [SUBTYPE_VIRTUAL] = "virtual",
+ [SUBTYPE_MONITOR] = "monitor"
+ };
+
+ pa_assert(s);
+
+ if (s->service) {
+ DNSServiceRefDeallocate(s->service);
+ s->service = NULL;
+ }
+
+ TXTRecordCreate(&txt, 0, NULL);
+
+ txt_record_server_data(s->userdata->core, &txt);
+
+ get_service_data(s, &ss, &map, &name, &proplist, &subtype);
+ TXTRecordSetValue(&txt, "device", strlen(name), name);
+
+ snprintf(tmp, sizeof(tmp), "%u", ss.rate);
+ TXTRecordSetValue(&txt, "rate", strlen(tmp), tmp);
+
+ snprintf(tmp, sizeof(tmp), "%u", ss.channels);
+ TXTRecordSetValue(&txt, "channels", strlen(tmp), tmp);
+
+ t = pa_sample_format_to_string(ss.format);
+ TXTRecordSetValue(&txt, "format", strlen(t), t);
+
+ t = pa_channel_map_snprint(cm, sizeof(cm), &map);
+ TXTRecordSetValue(&txt, "channel_map", strlen(t), t);
+
+ t = subtype_text[subtype];
+ TXTRecordSetValue(&txt, "subtype", strlen(t), t);
+
+ if ((t = pa_proplist_gets(proplist, PA_PROP_DEVICE_DESCRIPTION)))
+ TXTRecordSetValue(&txt, "description", strlen(t), t);
+ if ((t = pa_proplist_gets(proplist, PA_PROP_DEVICE_ICON_NAME)))
+ TXTRecordSetValue(&txt, "icon-name", strlen(t), t);
+ if ((t = pa_proplist_gets(proplist, PA_PROP_DEVICE_VENDOR_NAME)))
+ TXTRecordSetValue(&txt, "vendor-name", strlen(t), t);
+ if ((t = pa_proplist_gets(proplist, PA_PROP_DEVICE_PRODUCT_NAME)))
+ TXTRecordSetValue(&txt, "product-name", strlen(t), t);
+ if ((t = pa_proplist_gets(proplist, PA_PROP_DEVICE_CLASS)))
+ TXTRecordSetValue(&txt, "class", strlen(t), t);
+ if ((t = pa_proplist_gets(proplist, PA_PROP_DEVICE_FORM_FACTOR)))
+ TXTRecordSetValue(&txt, "form-factor", strlen(t), t);
+
+ err = DNSServiceRegister(&s->service,
+ 0, /* flags */
+ kDNSServiceInterfaceIndexAny,
+ s->service_name,
+ pa_sink_isinstance(s->device) ? SERVICE_TYPE_SINK : SERVICE_TYPE_SOURCE,
+ NULL, /* domain */
+ NULL, /* host */
+ compute_port(s->userdata),
+ TXTRecordGetLength(&txt),
+ TXTRecordGetBytesPtr(&txt),
+ dns_service_register_reply, s);
+
+ if (err != kDNSServiceErr_NoError) {
+ pa_log("DNSServiceRegister() returned err %d", err);
+ goto finish;
+ }
+
+ pa_log_debug("Successfully registered Bonjour services for >%s<.", s->service_name);
+ return 0;
+
+finish:
+
+ /* Remove this service */
+ if (r < 0)
+ service_free(s);
+
+ TXTRecordDeallocate(&txt);
+
+ return r;
+}
+
+static struct service *get_service(struct userdata *u, pa_object *device) {
+ struct service *s;
+ char *hn, *un;
+ const char *n;
+
+ pa_assert(u);
+ pa_object_assert_ref(device);
+
+ if ((s = pa_hashmap_get(u->services, device)))
+ return s;
+
+ s = pa_xnew0(struct service, 1);
+ s->userdata = u;
+ s->device = device;
+
+ if (pa_sink_isinstance(device)) {
+ if (!(n = pa_proplist_gets(PA_SINK(device)->proplist, PA_PROP_DEVICE_DESCRIPTION)))
+ n = PA_SINK(device)->name;
+ } else {
+ if (!(n = pa_proplist_gets(PA_SOURCE(device)->proplist, PA_PROP_DEVICE_DESCRIPTION)))
+ n = PA_SOURCE(device)->name;
+ }
+
+ hn = pa_get_host_name_malloc();
+ un = pa_get_user_name_malloc();
+
+ s->service_name = pa_truncate_utf8(pa_sprintf_malloc("%s@%s: %s", un, hn, n), kDNSServiceMaxDomainName-1);
+
+ pa_xfree(un);
+ pa_xfree(hn);
+
+ pa_hashmap_put(u->services, s->device, s);
+
+ return s;
+}
+
+static void service_free(struct service *s) {
+ pa_assert(s);
+
+ pa_hashmap_remove(s->userdata->services, s->device);
+
+ if (s->service)
+ DNSServiceRefDeallocate(s->service);
+
+ pa_xfree(s->service_name);
+ pa_xfree(s);
+}
+
+static pa_bool_t shall_ignore(pa_object *o) {
+ pa_object_assert_ref(o);
+
+ if (pa_sink_isinstance(o))
+ return !!(PA_SINK(o)->flags & PA_SINK_NETWORK);
+
+ if (pa_source_isinstance(o))
+ return PA_SOURCE(o)->monitor_of || (PA_SOURCE(o)->flags & PA_SOURCE_NETWORK);
+
+ pa_assert_not_reached();
+}
+
+static pa_hook_result_t device_new_or_changed_cb(pa_core *c, pa_object *o, struct userdata *u) {
+ pa_assert(c);
+ pa_object_assert_ref(o);
+
+ if (!shall_ignore(o))
+ publish_service(get_service(u, o));
+
+ return PA_HOOK_OK;
+}
+
+static pa_hook_result_t device_unlink_cb(pa_core *c, pa_object *o, struct userdata *u) {
+ struct service *s;
+
+ pa_assert(c);
+ pa_object_assert_ref(o);
+
+ if ((s = pa_hashmap_get(u->services, o)))
+ service_free(s);
+
+ return PA_HOOK_OK;
+}
+
+static int publish_main_service(struct userdata *u) {
+ DNSServiceErrorType err;
+ TXTRecordRef txt;
+
+ pa_assert(u);
+
+ if (u->main_service) {
+ DNSServiceRefDeallocate(u->main_service);
+ u->main_service = NULL;
+ }
+
+ TXTRecordCreate(&txt, 0, NULL);
+ txt_record_server_data(u->core, &txt);
+
+ err = DNSServiceRegister(&u->main_service,
+ 0, /* flags */
+ kDNSServiceInterfaceIndexAny,
+ u->service_name,
+ SERVICE_TYPE_SERVER,
+ NULL, /* domain */
+ NULL, /* host */
+ compute_port(u),
+ TXTRecordGetLength(&txt),
+ TXTRecordGetBytesPtr(&txt),
+ NULL, NULL);
+
+ if (err != kDNSServiceErr_NoError) {
+ pa_log("%s(): DNSServiceRegister() returned err %d", __func__, err);
+ return err;
+ }
+
+ TXTRecordDeallocate(&txt);
+
+ return 0;
+}
+
+static int publish_all_services(struct userdata *u) {
+ pa_sink *sink;
+ pa_source *source;
+ uint32_t idx;
+
+ pa_assert(u);
+
+ pa_log_debug("Publishing services in Bonjour");
+
+ for (sink = PA_SINK(pa_idxset_first(u->core->sinks, &idx)); sink; sink = PA_SINK(pa_idxset_next(u->core->sinks, &idx)))
+ if (!shall_ignore(PA_OBJECT(sink)))
+ publish_service(get_service(u, PA_OBJECT(sink)));
+
+ for (source = PA_SOURCE(pa_idxset_first(u->core->sources, &idx)); source; source = PA_SOURCE(pa_idxset_next(u->core->sources, &idx)))
+ if (!shall_ignore(PA_OBJECT(source)))
+ publish_service(get_service(u, PA_OBJECT(source)));
+
+ return publish_main_service(u);
+}
+
+static void unpublish_all_services(struct userdata *u) {
+ void *state = NULL;
+ struct service *s;
+
+ pa_assert(u);
+
+ pa_log_debug("Unpublishing services in Bonjour");
+
+ while ((s = pa_hashmap_iterate(u->services, &state, NULL)))
+ service_free(s);
+
+ if (u->main_service)
+ DNSServiceRefDeallocate(u->main_service);
+}
+
+int pa__init(pa_module*m) {
+
+ struct userdata *u;
+ pa_modargs *ma = NULL;
+ char *hn, *un;
+
+ 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->core = m->core;
+ u->module = m;
+ u->native = pa_native_protocol_get(u->core);
+
+ u->services = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
+
+ u->sink_new_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_LATE, (pa_hook_cb_t) device_new_or_changed_cb, u);
+ u->sink_changed_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PROPLIST_CHANGED], PA_HOOK_LATE, (pa_hook_cb_t) device_new_or_changed_cb, u);
+ u->sink_unlink_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_UNLINK], PA_HOOK_LATE, (pa_hook_cb_t) device_unlink_cb, u);
+ u->source_new_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_PUT], PA_HOOK_LATE, (pa_hook_cb_t) device_new_or_changed_cb, u);
+ u->source_changed_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_PROPLIST_CHANGED], PA_HOOK_LATE, (pa_hook_cb_t) device_new_or_changed_cb, u);
+ u->source_unlink_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_UNLINK], PA_HOOK_LATE, (pa_hook_cb_t) device_unlink_cb, u);
+
+ un = pa_get_user_name_malloc();
+ hn = pa_get_host_name_malloc();
+ u->service_name = pa_truncate_utf8(pa_sprintf_malloc("%s@%s", un, hn), kDNSServiceMaxDomainName-1);
+ pa_xfree(un);
+ pa_xfree(hn);
+
+ publish_all_services(u);
+ pa_modargs_free(ma);
+
+ return 0;
+
+fail:
+ pa__done(m);
+
+ if (ma)
+ pa_modargs_free(ma);
+
+ return -1;
+}
+
+void pa__done(pa_module*m) {
+ struct userdata*u;
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ unpublish_all_services(u);
+
+ if (u->services)
+ pa_hashmap_free(u->services, NULL, NULL);
+
+ if (u->sink_new_slot)
+ pa_hook_slot_free(u->sink_new_slot);
+ if (u->source_new_slot)
+ pa_hook_slot_free(u->source_new_slot);
+ if (u->sink_changed_slot)
+ pa_hook_slot_free(u->sink_changed_slot);
+ if (u->source_changed_slot)
+ pa_hook_slot_free(u->source_changed_slot);
+ if (u->sink_unlink_slot)
+ pa_hook_slot_free(u->sink_unlink_slot);
+ if (u->source_unlink_slot)
+ pa_hook_slot_free(u->source_unlink_slot);
+
+ if (u->native)
+ pa_native_protocol_unref(u->native);
+
+ pa_xfree(u->service_name);
+ pa_xfree(u);
+}
commit f452c6cdd9e5717340807478d759ef5a03b55f1f
Author: Daniel Mack <daniel at caiaq.de>
Date: Thu Dec 10 15:42:40 2009 +0800
fix a number of warnings
most of them were due to missing #ifdefs or wrong printf format type for
[s]size_t.
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index bfd5c11..79dd49a 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -466,6 +466,7 @@ static int parse_rtprio(const char *filename, unsigned line, const char *section
return 0;
}
+#ifdef HAVE_DBUS
static int parse_server_type(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) {
pa_daemon_conf *c = data;
@@ -481,6 +482,7 @@ static int parse_server_type(const char *filename, unsigned line, const char *se
return 0;
}
+#endif
int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
int r = -1;
@@ -666,12 +668,14 @@ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
[PA_LOG_ERROR] = "error"
};
+#ifdef HAVE_DBUS
static const char* const server_type_to_string[] = {
[PA_SERVER_TYPE_UNSET] = "!!UNSET!!",
[PA_SERVER_TYPE_USER] = "user",
[PA_SERVER_TYPE_SYSTEM] = "system",
[PA_SERVER_TYPE_NONE] = "none"
};
+#endif
pa_strbuf *s;
char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index d596c48..b64c51e 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -580,8 +580,8 @@ char *pa_strlcpy(char *b, const char *s, size_t l) {
static int set_scheduler(int rtprio) {
struct sched_param sp;
- int r;
#ifdef HAVE_DBUS
+ int r;
DBusError error;
DBusConnection *bus;
@@ -628,7 +628,7 @@ static int set_scheduler(int rtprio) {
errno = -r;
#else
- errno = r;
+ errno = 0;
#endif
return -1;
diff --git a/src/pulsecore/envelope.c b/src/pulsecore/envelope.c
index 0eca811..75e189c 100644
--- a/src/pulsecore/envelope.c
+++ b/src/pulsecore/envelope.c
@@ -597,7 +597,7 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
fs = pa_frame_size(&e->sample_spec);
n = chunk->length;
- pa_log_debug("Envelop position %d applying factor %d=%f, sample spec is %d, chunk's length is %d, fs is %d\n", e->x, linear_get_int(e, v), ((float) linear_get_int(e,v))/0x10000, e->sample_spec.format, n, fs);
+ pa_log_debug("Envelop position %zu applying factor %d=%f, sample spec is %d, chunk's length is %zu, fs is %zu\n", e->x, linear_get_int(e, v), ((float) linear_get_int(e,v))/0x10000, e->sample_spec.format, n, fs);
switch (e->sample_spec.format) {
@@ -965,11 +965,10 @@ void pa_envelope_restart(pa_envelope* e) {
}
pa_bool_t pa_envelope_is_finished(pa_envelope* e) {
- pa_assert(e);
-
int v;
pa_bool_t finished;
+ pa_assert(e);
envelope_begin_read(e, &v);
finished = (e->x >= e->points[v].x[e->points[v].n_points-1]);
envelope_commit_read(e, v);
@@ -978,11 +977,10 @@ pa_bool_t pa_envelope_is_finished(pa_envelope* e) {
}
int32_t pa_envelope_length(pa_envelope *e) {
- pa_assert(e);
-
int v;
size_t size;
+ pa_assert(e);
envelope_begin_read(e, &v);
size = e->points[v].x[e->points[v].n_points-1] - e->points[v].x[0];
envelope_commit_read(e, v);
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 35e3d4a..9b4edeb 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -779,11 +779,11 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p
if (!i->thread_info.ramp_info.envelope_dead) {
i->thread_info.ramp_info.envelope_dying += chunk->length;
- pa_log_debug("Envelope dying is %d, chunk length is %d, dead thresholder is %d\n", i->thread_info.ramp_info.envelope_dying,
+ pa_log_debug("Envelope dying is %d, chunk length is %zu, dead thresholder is %lu\n", i->thread_info.ramp_info.envelope_dying,
chunk->length,
i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope));
- if (i->thread_info.ramp_info.envelope_dying >= (i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope))) {
+ if (i->thread_info.ramp_info.envelope_dying >= (int32_t) (i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope))) {
pa_log_debug("RELEASE Envelop");
i->thread_info.ramp_info.envelope_dead = TRUE;
sink_input_release_envelope(i);
@@ -1767,12 +1767,14 @@ static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {
pa_assert(i);
if (!i->thread_info.ramp_info.envelope_dead) {
- pa_assert(i->thread_info.ramp_info.envelope);
+ int32_t envelope_length;
- int32_t envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
+ pa_assert(i->thread_info.ramp_info.envelope);
+
+ envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
if (i->thread_info.ramp_info.envelope_dying > envelope_length) {
- if ((i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length) {
+ if ((int32_t) (i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length) {
pa_log_debug("Envelope Become Alive");
pa_envelope_rewind(i->thread_info.ramp_info.envelope, envelope_length - (i->thread_info.ramp_info.envelope_dying - nbytes));
i->thread_info.ramp_info.is_ramping = TRUE;
commit e5e432fe0aabc8fc21e987001de5cf7b69303a63
Author: Daniel T Chen <crimsun at ubuntu.com>
Date: Wed Dec 16 22:53:18 2009 -0500
Fix the following warnings (which now cause buildd failures in Ubuntu 10.04):
pulsecore/cpu-arm.c: In function 'get_cpuinfo':
pulsecore/cpu-arm.c:70: warning: implicit declaration of function 'pa_read' [-Wimplicit-function-declaration]
pulsecore/cpu-arm.c:72: warning: implicit declaration of function 'pa_close' [-Wimplicit-function-declaration]
pulsecore/cpu-arm.c: In function 'pa_cpu_init_arm':
pulsecore/cpu-arm.c:110: warning: implicit declaration of function 'pa_split_spaces' [-Wimplicit-function-declaration]
pulsecore/cpu-arm.c:110: warning: assignment makes pointer from integer without a cast
Function `pa_split_spaces' implicitly converted to pointer at pulsecore/cpu-arm.c:110
Signed-off-by: Daniel T Chen <crimsun at ubuntu.com>
diff --git a/src/pulsecore/cpu-arm.c b/src/pulsecore/cpu-arm.c
index 6bb2ead..6e4bfaa 100644
--- a/src/pulsecore/cpu-arm.c
+++ b/src/pulsecore/cpu-arm.c
@@ -30,6 +30,7 @@
#include <fcntl.h>
#include <pulse/xmalloc.h>
+#include <pulsecore/core-util.h>
#include <pulsecore/log.h>
#include "cpu-arm.h"
commit a63cf050b0be91310ae6b0b4fa3fa2b0f95e3efa
Author: Daniel T Chen <crimsun at ubuntu.com>
Date: Wed Dec 16 23:55:05 2009 -0500
More src/pulsecore/cpu-arm.c FTBFS fixes
Fix missing argument to pa_read(), and be consistent with declaration of
state variable in pa_cpu_init_arm().
Signed-off-by: Daniel T Chen <crimsun at ubuntu.com>
diff --git a/src/pulsecore/cpu-arm.c b/src/pulsecore/cpu-arm.c
index 6e4bfaa..bf632f7 100644
--- a/src/pulsecore/cpu-arm.c
+++ b/src/pulsecore/cpu-arm.c
@@ -68,7 +68,7 @@ static char *get_cpuinfo(void) {
return NULL;
}
- if ((n = pa_read(fd, cpuinfo, MAX_BUFFER-1)) < 0) {
+ if ((n = pa_read(fd, cpuinfo, MAX_BUFFER-1, NULL)) < 0) {
pa_xfree(cpuinfo);
pa_close(fd);
return NULL;
@@ -106,7 +106,8 @@ void pa_cpu_init_arm (void) {
}
/* get the CPU features */
if ((line = get_cpuinfo_line (cpuinfo, "Features"))) {
- char *state = NULL, *current;
+ const char *state = NULL;
+ char *current;
while ((current = pa_split_spaces (line, &state))) {
if (!strcmp (current, "vfp"))
commit c5fdbeab85dfe69ebaec92969ec2ce77b105f1df
Author: Daniel T Chen <crimsun at ubuntu.com>
Date: Mon Jan 4 21:44:37 2010 -0500
threaded-mainloop: Properly initialise m->n_waiting_for_accept to prevent deadlock
Compiler optimisations have been seen to initialise
m->n_waiting_for_accept to a positive non-zero value, so the while() in
pa_threaded_mainloop_signal() never proceeds. Fix this by properly
initializing m->n_waiting_for_accept in pa_threaded_mainloop_new().
Patch from Iain BucÅaw.
https://bugs.launchpad.net/bugs/502992
diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c
index 14ed926..1693404 100644
--- a/src/pulse/thread-mainloop.c
+++ b/src/pulse/thread-mainloop.c
@@ -116,6 +116,7 @@ pa_threaded_mainloop *pa_threaded_mainloop_new(void) {
pa_mainloop_set_poll_func(m->real_mainloop, poll_func, m->mutex);
m->n_waiting = 0;
+ m->n_waiting_for_accept = 0;
return m;
}
commit d3c71c92ceef143b60a211f4c9b340f5f7beb245
Author: Daniel T Chen <crimsun at ubuntu.com>
Date: Mon Jan 4 21:53:36 2010 -0500
udev: Use SOUND_CLASS instead of SOUND_FORM_FACTOR when checking for modem
The fact whether an ALSA card is a modem is stored in the SOUND_CLASS,
not the SOUND_FORM_FACTOR property. So read it from there.
Patch from Whoopie.
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index a12f7c9..f17695b 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -366,7 +366,7 @@ static void process_device(struct userdata *u, struct udev_device *dev) {
return;
}
- if ((ff = udev_device_get_property_value(dev, "SOUND_FORM_FACTOR")) &&
+ if ((ff = udev_device_get_property_value(dev, "SOUND_CLASS")) &&
pa_streq(ff, "modem")) {
pa_log_debug("Ignoring %s, because it is a modem.", udev_device_get_devpath(dev));
return;
commit cb38d4eba185e9a1895aab914be6ebd5a86db74f
Author: David KÃ¥gedal <davidk at lysator.liu.se>
Date: Tue Jan 5 20:14:11 2010 +0100
alsa: add profile set for M-Audio FastTrack Pro USB
diff --git a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
index ea1a2fe..b8e88d0 100644
--- a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
+++ b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules
@@ -22,5 +22,6 @@ KERNEL!="card*", GOTO="pulseaudio_end"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="17cc", ATTRS{idProduct}=="1978", ENV{PULSE_PROFILE_SET}="native-instruments-audio8dj.conf"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="17cc", ATTRS{idProduct}=="0839", ENV{PULSE_PROFILE_SET}="native-instruments-audio4dj.conf"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", ENV{PULSE_PROFILE_SET}="maudio-fasttrack-pro.conf"
LABEL="pulseaudio_end"
diff --git a/src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf b/src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf
new file mode 100644
index 0000000..75f5112
--- /dev/null
+++ b/src/modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf
@@ -0,0 +1,85 @@
+# This file is part of PulseAudio.
+#
+# PulseAudio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of the
+# License, or (at your option) any later version.
+#
+# PulseAudio is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# 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.
+
+; M-Audio FastTrack Pro
+;
+; This card has one duplex stereo channel called A and an additional
+; stereo output channel called B.
+;
+; We knowingly only define a subset of the theoretically possible
+; mapping combinations as profiles here.
+;
+; See default.conf for an explanation on the directives used here.
+
+[General]
+auto-profiles = no
+
+[Mapping analog-stereo-a-output]
+description = Analog Stereo Channel A
+device-strings = hw:%f,0,0
+channel-map = left,right
+direction = output
+
+[Mapping analog-stereo-a-input]
+description = Analog Stereo Channel A
+device-strings = hw:%f,0,0
+channel-map = left,right
+direction = input
+
+[Mapping analog-stereo-b-output]
+description = Analog Stereo Channel B
+device-strings = hw:%f,1,0
+channel-map = left,right
+direction = output
+
+[Profile output:analog-stereo-all+input:analog-stereo-all]
+description = Analog Stereo Duplex Channel A, Analog Stereo output Channel B
+output-mappings = analog-stereo-a-output analog-stereo-b-output
+input-mappings = analog-stereo-a-input
+priority = 100
+skip-probe = yes
+
+[Profile output:analog-stereo-a-output+input:analog-stereo-a-input]
+description = Analog Stereo Duplex Channel A
+output-mappings = analog-stereo-a-output
+input-mappings = analog-stereo-a-input
+priority = 40
+skip-probe = yes
+
+[Profile output:analog-stereo-b+input:analog-stereo-b]
+description = Analog Stereo Output Channel B
+output-mappings = analog-stereo-b-output
+input-mappings =
+priority = 50
+skip-probe = yes
+
+[Profile output:analog-stereo-a]
+description = Analog Stereo Output Channel A
+output-mappings = analog-stereo-a-output
+priority = 5
+skip-probe = yes
+
+[Profile output:analog-stereo-b]
+description = Analog Stereo Output Channel B
+output-mappings = analog-stereo-b-output
+priority = 6
+skip-probe = yes
+
+[Profile input:analog-stereo-a]
+description = Analog Stereo Input Channel A
+input-mappings = analog-stereo-a-input
+priority = 2
+skip-probe = yes
commit a282eadb88f26cea183399dba267d619bbdcd6df
Author: chocolateboy <chocolate at cpan.org>
Date: Sat Dec 26 01:46:32 2009 +0000
Fix typo in log message: s/may no be/may not be/
Hi, Lennart.
Spotted another typo. Patch attached.
Best wishes,
chocolateboy.
diff --git a/src/modules/x11/module-x11-xsmp.c b/src/modules/x11/module-x11-xsmp.c
index 28fd373..47a4e93 100644
--- a/src/modules/x11/module-x11-xsmp.c
+++ b/src/modules/x11/module-x11-xsmp.c
@@ -129,7 +129,7 @@ int pa__init(pa_module*m) {
pa_assert(m);
if (ice_in_use) {
- pa_log("module-x11-xsmp may no be loaded twice.");
+ pa_log("module-x11-xsmp may not be loaded twice.");
return -1;
}
commit 0e47065fe5a410bcb7c367c23fc4d99b71fd82b2
Author: Pierre-Louis Bossart <pierre-louis.bossart at intel.com>
Date: Wed Dec 23 13:57:03 2009 -0600
Subject: rtpoll: better support for DEBUG_TIMING logs
On all the platforms I tested, PulseAudio is frequently awaken and
doesn't sleep for the duration specified for the poll timeout.
Sometimes wake-ups occur within milliseconds of the poll call for no
good reason; this seems to be related to ALSA issues (see my posts on
the ALSA mailing list on null poll events).
This patch enables a better log of requested sleep times v. actual
sleep times. Enable DEBUG_TIMING to see actual messages. Please let me
know if you see odd behaviors like the one below
- Pierre
E: rtpoll.c: rtpoll_run
E: rtpoll.c: poll timeout: 188 ms
E: rtpoll.c: Process time 0 ms; sleep time 48 ms
E: rtpoll.c: rtpoll_run
E: rtpoll.c: rtpoll finish
E: rtpoll.c: rtpoll_run
E: rtpoll.c: poll timeout: 139 ms
E: rtpoll.c: Process time 0 ms; sleep time 49 ms
E: rtpoll.c: rtpoll_run
E: rtpoll.c: rtpoll finish
E: rtpoll.c: rtpoll_run
E: rtpoll.c: poll timeout: 189 ms
E: rtpoll.c: Process time 0 ms; sleep time 0 ms
E: rtpoll.c: rtpoll_run
E: rtpoll.c: rtpoll finish
E: rtpoll.c: rtpoll_run
E: rtpoll.c: poll timeout: 189 ms
E: rtpoll.c: Process time 0 ms; sleep time 49 ms
diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c
index 666cbc9..e2f8262 100644
--- a/src/pulsecore/rtpoll.c
+++ b/src/pulsecore/rtpoll.c
@@ -47,6 +47,7 @@
#include <pulsecore/core-util.h>
#include <pulsecore/winsock.h>
#include <pulsecore/ratelimit.h>
+#include <pulse/rtclock.h>
#include "rtpoll.h"
@@ -217,6 +218,10 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
pa_assert(p);
pa_assert(!p->running);
+#ifdef DEBUG_TIMING
+ pa_log("rtpoll_run");
+#endif
+
p->running = TRUE;
p->timer_elapsed = FALSE;
@@ -230,13 +235,19 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
if (!i->work_cb)
continue;
- if (p->quit)
+ if (p->quit) {
+#ifdef DEBUG_TIMING
+ pa_log("rtpoll finish");
+#endif
goto finish;
+ }
if ((k = i->work_cb(i)) != 0) {
if (k < 0)
r = k;
-
+#ifdef DEBUG_TIMING
+ pa_log("rtpoll finish");
+#endif
goto finish;
}
}
@@ -268,7 +279,9 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
if (k < 0)
r = k;
-
+#ifdef DEBUG_TIMING
+ pa_log("rtpoll finish");
+#endif
goto finish;
}
}
@@ -292,6 +305,10 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
pa_usec_t now = pa_rtclock_now();
p->awake = now - p->timestamp;
p->timestamp = now;
+ if (!wait_op || p->quit || p->timer_enabled)
+ pa_log("poll timeout: %d ms ",(int) ((timeout.tv_sec*1000) + (timeout.tv_usec / 1000)));
+ else
+ pa_log("poll timeout is ZERO");
}
#endif
commit 6faf38313e5f313cbcfe5c78af1dd310131798d2
Author: Mads Kiilerich <mads at kiilerich.com>
Date: Fri Dec 11 16:20:31 2009 +0100
headers: Some trivial fixes for some documentation typos
Note also the willneed/will_need inconsistency. I guess it could be nice to ASAP
choose one of them and introduce a backward compatibility hack for the other.
The issues was mostly found with:
for a in $(grep -r '^[ /]\*.*()' $(
find -name '*.[ch]') |
sed 's,^.* \([^ ]*\)().*$,\1,g' |
sort |
uniq |
grep ^pa_)
do
grep -rq "^.[^*].*\<$a(" $(find * -name '*.h') || echo $a
done
diff --git a/src/pulse/def.h b/src/pulse/def.h
index 30a076d..82106ef 100644
--- a/src/pulse/def.h
+++ b/src/pulse/def.h
@@ -63,6 +63,7 @@ static inline int PA_CONTEXT_IS_GOOD(pa_context_state_t x) {
#define PA_CONTEXT_SETTING_NAME PA_CONTEXT_SETTING_NAME
#define PA_CONTEXT_READY PA_CONTEXT_READY
#define PA_CONTEXT_FAILED PA_CONTEXT_FAILED
+#define PA_CONTEXT_TERMINATED PA_CONTEXT_TERMINATED
#define PA_CONTEXT_IS_GOOD PA_CONTEXT_IS_GOOD
/** \endcond */
@@ -351,7 +352,7 @@ typedef struct pa_buffer_attr {
* that may be. Initialize to 0 to enable manual start/stop
* control of the stream. This means that playback will not stop
* on underrun and playback will not start automatically. Instead
- * pa_stream_corked() needs to be called explicitly. If you set
+ * pa_stream_cork() needs to be called explicitly. If you set
* this value to 0 you should also set PA_STREAM_START_CORKED. */
uint32_t minreq;
diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h
index 68cfc87..f9d22b2 100644
--- a/src/pulse/introspect.h
+++ b/src/pulse/introspect.h
@@ -460,7 +460,7 @@ typedef struct pa_card_info {
pa_proplist *proplist; /**< Property list */
} pa_card_info;
-/** Callback prototype for pa_context_get_card_info() and friends \since 0.9.15 */
+/** Callback prototype for pa_context_get_card_info_...() \since 0.9.15 */
typedef void (*pa_card_info_cb_t) (pa_context *c, const pa_card_info*i, int eol, void *userdata);
/** Get information about a card by its index \since 0.9.15 */
diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index aae0534..e3f0af0 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -325,7 +325,7 @@ void pa_proplist_update(pa_proplist *p, pa_update_mode_t mode, pa_proplist *othe
* specified key name. \since 0.9.11 */
int pa_proplist_unset(pa_proplist *p, const char *key);
-/** Similar to pa_proplist_remove() but takes an array of keys to
+/** Similar to pa_proplist_unset() but takes an array of keys to
* remove. The array should be terminated by a NULL pointer. Return -1
* on failure, otherwise the number of entries actually removed (which
* might even be 0, if there where no matching entries to
diff --git a/src/pulse/simple.h b/src/pulse/simple.h
index 6f1ba41..b1f6537 100644
--- a/src/pulse/simple.h
+++ b/src/pulse/simple.h
@@ -82,8 +82,8 @@
*
* \li pa_simple_drain() - Will wait for all sent data to finish playing.
* \li pa_simple_flush() - Will throw away all data currently in buffers.
- * \li pa_simple_get_playback_latency() - Will return the total latency of
- * the playback pipeline.
+ * \li pa_simple_get_latency() - Will return the total latency of
+ * the playback pipeline.
*
* \section cleanup_sec Cleanup
*
diff --git a/src/pulse/stream.h b/src/pulse/stream.h
index bc54a11..b905788 100644
--- a/src/pulse/stream.h
+++ b/src/pulse/stream.h
@@ -289,7 +289,7 @@
* issued on the others.
*
* To synchronize a stream to another, just pass the "master" stream
- * as last argument to pa_stream_connect_playack(). To make sure that
+ * as last argument to pa_stream_connect_playback(). To make sure that
* the freshly created stream doesn't start playback right-away, make
* sure to pass PA_STREAM_START_CORKED and - after all streams have
* been created - uncork them all with a single call to
@@ -716,7 +716,7 @@ pa_operation *pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr
/** Change the stream sampling rate during playback. You need to pass
* PA_STREAM_VARIABLE_RATE in the flags parameter of
- * pa_stream_connect() if you plan to use this function. Only valid
+ * pa_stream_connect_...() if you plan to use this function. Only valid
* after the stream has been connected successfully and if the server
* is at least PulseAudio 0.9.8. \since 0.9.8 */
pa_operation *pa_stream_update_sample_rate(pa_stream *s, uint32_t rate, pa_stream_success_cb_t cb, void *userdata);
diff --git a/src/pulse/volume.h b/src/pulse/volume.h
index ded4422..185c341 100644
--- a/src/pulse/volume.h
+++ b/src/pulse/volume.h
@@ -149,7 +149,7 @@ pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c);
/** Maximum length of the strings returned by
- * pa_cvolume_snprint_dB(). Please note that this value can change with
+ * pa_sw_cvolume_snprint_dB(). Please note that this value can change with
* any release without warning and without being considered API or ABI
* breakage. You should not use this definition anywhere where it
* might become part of an ABI. \since 0.9.13 */
@@ -169,7 +169,7 @@ char *pa_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c);
char *pa_volume_snprint(char *s, size_t l, pa_volume_t v);
/** Maximum length of the strings returned by
- * pa_volume_snprint_dB(). Please note that this value can change with
+ * pa_sw_volume_snprint_dB(). Please note that this value can change with
* any release without warning and without being considered API or ABI
* breakage. You should not use this definition anywhere where it
* might become part of an ABI. \since 0.9.15 */
@@ -268,7 +268,7 @@ double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST;
#ifdef INFINITY
#define PA_DECIBEL_MININFTY ((double) -INFINITY)
#else
-/** This floor value is used as minus infinity when using pa_volume_{to,from}_dB(). */
+/** This floor value is used as minus infinity when using pa_sw_volume_to_dB() / pa_sw_volume_from_dB(). */
#define PA_DECIBEL_MININFTY ((double) -200.0)
#endif
diff --git a/src/pulsecore/asyncq.h b/src/pulsecore/asyncq.h
index e6847ab..47ccbf0 100644
--- a/src/pulsecore/asyncq.h
+++ b/src/pulsecore/asyncq.h
@@ -48,8 +48,9 @@ void pa_asyncq_free(pa_asyncq* q, pa_free_cb_t free_cb);
void* pa_asyncq_pop(pa_asyncq *q, pa_bool_t wait);
int pa_asyncq_push(pa_asyncq *q, void *p, pa_bool_t wait);
-/* Similar to pa_asyncq_push(), but if the queue is full, postpone it
- * locally and delay until pa_asyncq_before_poll_post() */
+/* Similar to pa_asyncq_push(), but if the queue is full, postpone the
+ * appending of the item locally and delay until
+ * pa_asyncq_before_poll_post() is called. */
void pa_asyncq_post(pa_asyncq*l, void *p);
/* For the reading side */
diff --git a/src/pulsecore/aupdate.h b/src/pulsecore/aupdate.h
index fb38ffa..4887112 100644
--- a/src/pulsecore/aupdate.h
+++ b/src/pulsecore/aupdate.h
@@ -39,7 +39,7 @@ void pa_aupdate_write_end(pa_aupdate *a);
/* Will return 0, or 1, depending which copy of the data the caller
* should modify. Each time called this will return the opposite of
- * the previous pa_aupdate_write_begin()/pa_aupdate_write_swap()
+ * the previous pa_aupdate_write_begin() / pa_aupdate_write_swap()
* call. Should only be called between pa_aupdate_write_begin() and
* pa_aupdate_write_end() */
unsigned pa_aupdate_write_swap(pa_aupdate *a);
diff --git a/src/pulsecore/memblockq.h b/src/pulsecore/memblockq.h
index 587c364..b756549 100644
--- a/src/pulsecore/memblockq.h
+++ b/src/pulsecore/memblockq.h
@@ -165,7 +165,7 @@ void pa_memblockq_set_silence(pa_memblockq *memblockq, pa_memchunk *silence);
void pa_memblockq_apply_attr(pa_memblockq *memblockq, const pa_buffer_attr *a);
void pa_memblockq_get_attr(pa_memblockq *bq, pa_buffer_attr *a);
-/* Call pa_memchunk_willneed() for every chunk in the queue from the current read pointer to the end */
+/* Call pa_memchunk_will_need() for every chunk in the queue from the current read pointer to the end */
void pa_memblockq_willneed(pa_memblockq *bq);
/* Check whether the memblockq is completely empty, i.e. no data
commit 937c587e7720ee27b36fe736a2aa1cfd233270ec
Author: Daniel Mack <daniel at caiaq.de>
Date: Thu Dec 10 15:43:58 2009 +0800
fix a number of warnings
most of them were due to missing #ifdefs or wrong printf format type for
[s]size_t.
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index bfd5c11..79dd49a 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -466,6 +466,7 @@ static int parse_rtprio(const char *filename, unsigned line, const char *section
return 0;
}
+#ifdef HAVE_DBUS
static int parse_server_type(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) {
pa_daemon_conf *c = data;
@@ -481,6 +482,7 @@ static int parse_server_type(const char *filename, unsigned line, const char *se
return 0;
}
+#endif
int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
int r = -1;
@@ -666,12 +668,14 @@ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
[PA_LOG_ERROR] = "error"
};
+#ifdef HAVE_DBUS
static const char* const server_type_to_string[] = {
[PA_SERVER_TYPE_UNSET] = "!!UNSET!!",
[PA_SERVER_TYPE_USER] = "user",
[PA_SERVER_TYPE_SYSTEM] = "system",
[PA_SERVER_TYPE_NONE] = "none"
};
+#endif
pa_strbuf *s;
char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index d596c48..b64c51e 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -580,8 +580,8 @@ char *pa_strlcpy(char *b, const char *s, size_t l) {
static int set_scheduler(int rtprio) {
struct sched_param sp;
- int r;
#ifdef HAVE_DBUS
+ int r;
DBusError error;
DBusConnection *bus;
@@ -628,7 +628,7 @@ static int set_scheduler(int rtprio) {
errno = -r;
#else
- errno = r;
+ errno = 0;
#endif
return -1;
diff --git a/src/pulsecore/envelope.c b/src/pulsecore/envelope.c
index 0eca811..75e189c 100644
--- a/src/pulsecore/envelope.c
+++ b/src/pulsecore/envelope.c
@@ -597,7 +597,7 @@ void pa_envelope_apply(pa_envelope *e, pa_memchunk *chunk) {
fs = pa_frame_size(&e->sample_spec);
n = chunk->length;
- pa_log_debug("Envelop position %d applying factor %d=%f, sample spec is %d, chunk's length is %d, fs is %d\n", e->x, linear_get_int(e, v), ((float) linear_get_int(e,v))/0x10000, e->sample_spec.format, n, fs);
+ pa_log_debug("Envelop position %zu applying factor %d=%f, sample spec is %d, chunk's length is %zu, fs is %zu\n", e->x, linear_get_int(e, v), ((float) linear_get_int(e,v))/0x10000, e->sample_spec.format, n, fs);
switch (e->sample_spec.format) {
@@ -965,11 +965,10 @@ void pa_envelope_restart(pa_envelope* e) {
}
pa_bool_t pa_envelope_is_finished(pa_envelope* e) {
- pa_assert(e);
-
int v;
pa_bool_t finished;
+ pa_assert(e);
envelope_begin_read(e, &v);
finished = (e->x >= e->points[v].x[e->points[v].n_points-1]);
envelope_commit_read(e, v);
@@ -978,11 +977,10 @@ pa_bool_t pa_envelope_is_finished(pa_envelope* e) {
}
int32_t pa_envelope_length(pa_envelope *e) {
- pa_assert(e);
-
int v;
size_t size;
+ pa_assert(e);
envelope_begin_read(e, &v);
size = e->points[v].x[e->points[v].n_points-1] - e->points[v].x[0];
envelope_commit_read(e, v);
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 35e3d4a..9b4edeb 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -779,11 +779,11 @@ void pa_sink_input_peek(pa_sink_input *i, size_t slength /* in sink frames */, p
if (!i->thread_info.ramp_info.envelope_dead) {
i->thread_info.ramp_info.envelope_dying += chunk->length;
- pa_log_debug("Envelope dying is %d, chunk length is %d, dead thresholder is %d\n", i->thread_info.ramp_info.envelope_dying,
+ pa_log_debug("Envelope dying is %d, chunk length is %zu, dead thresholder is %lu\n", i->thread_info.ramp_info.envelope_dying,
chunk->length,
i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope));
- if (i->thread_info.ramp_info.envelope_dying >= (i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope))) {
+ if (i->thread_info.ramp_info.envelope_dying >= (int32_t) (i->sink->thread_info.max_rewind + pa_envelope_length(i->thread_info.ramp_info.envelope))) {
pa_log_debug("RELEASE Envelop");
i->thread_info.ramp_info.envelope_dead = TRUE;
sink_input_release_envelope(i);
@@ -1767,12 +1767,14 @@ static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {
pa_assert(i);
if (!i->thread_info.ramp_info.envelope_dead) {
- pa_assert(i->thread_info.ramp_info.envelope);
+ int32_t envelope_length;
- int32_t envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
+ pa_assert(i->thread_info.ramp_info.envelope);
+
+ envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
if (i->thread_info.ramp_info.envelope_dying > envelope_length) {
- if ((i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length) {
+ if ((int32_t) (i->thread_info.ramp_info.envelope_dying - nbytes) < envelope_length) {
pa_log_debug("Envelope Become Alive");
pa_envelope_rewind(i->thread_info.ramp_info.envelope, envelope_length - (i->thread_info.ramp_info.envelope_dying - nbytes));
i->thread_info.ramp_info.is_ramping = TRUE;
commit 6dfb1ee27e031528891696c83230d4513c55b554
Merge: 937c587 f452c6c
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Jan 5 22:52:57 2010 +0100
Merge remote branch 'zonque/topic/osx'
commit aa9348441db34b787784711f19882d6c42fa315d
Author: huan zheng <huan.zheng.zbt at gmail.com>
Date: Wed Jan 6 00:21:07 2010 +0100
core: volume ramping fix
Hi,
I found that volume ramping is inside PA now.
there's a minor fix here, it is a bug i found after the patch is submitted:
line 1781 of sink-input.c :
if ((i->thread_info.ramp_info.envelope_dying - nbytes) <= 0) {
need to be changed to
if ((i->thread_info.ramp_info.envelope_dying - (ssize_t) nbytes) <= 0) {
otherwise this argument will never be negative since nbytes is of type
size_t which is unsigned.
Please change it when you have time, sorry if bring any inconvenience. :)
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 9b4edeb..a490290 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -1780,7 +1780,7 @@ static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {
i->thread_info.ramp_info.is_ramping = TRUE;
}
} else if (i->thread_info.ramp_info.envelope_dying < envelope_length) {
- if ((i->thread_info.ramp_info.envelope_dying - nbytes) <= 0) {
+ if ((i->thread_info.ramp_info.envelope_dying - (ssize_t) nbytes) <= 0) {
pa_log_debug("Envelope Restart");
pa_envelope_restart(i->thread_info.ramp_info.envelope);
}
commit cc82553d7e5ce3602806127fef8090f89d573238
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed May 27 16:57:06 2009 +0300
idxset: Fix _get_by_data() comment.
diff --git a/src/pulsecore/idxset.h b/src/pulsecore/idxset.h
index d1e68c5..2d01fb4 100644
--- a/src/pulsecore/idxset.h
+++ b/src/pulsecore/idxset.h
@@ -65,7 +65,7 @@ int pa_idxset_put(pa_idxset*s, void *p, uint32_t *idx);
/* Get the entry by its idx */
void* pa_idxset_get_by_index(pa_idxset*s, uint32_t idx);
-/* Get the entry by its data. The idx is returned in *index */
+/* Get the entry by its data. The index is returned in *idx */
void* pa_idxset_get_by_data(pa_idxset*s, const void *p, uint32_t *idx);
/* Similar to pa_idxset_get_by_index(), but removes the entry from the idxset. */
commit 25435bf373cd928dbf269e86810eb23b0ac0d7ee
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Wed Jan 6 10:41:55 2010 +0200
sink-input: Replace a tab indentation with spaces.
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index a490290..c75d417 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -1769,7 +1769,7 @@ static void sink_input_rewind_ramp_info(pa_sink_input *i, size_t nbytes) {
if (!i->thread_info.ramp_info.envelope_dead) {
int32_t envelope_length;
- pa_assert(i->thread_info.ramp_info.envelope);
+ pa_assert(i->thread_info.ramp_info.envelope);
envelope_length = pa_envelope_length(i->thread_info.ramp_info.envelope);
commit f1d1447e104c4f609c0e8c528b56ea6afa540b95
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Jan 9 11:55:15 2010 +0200
daemon: Don't autospawn if a server address is explicitly configured.
diff --git a/src/Makefile.am b/src/Makefile.am
index 0224cb3..1e488bd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -627,6 +627,12 @@ 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) $(LIBSNDFILE_LIBS)
+if HAVE_X11
+libpulsecommon_ at PA_MAJORMINORMICRO@_la_SOURCES += pulse/client-conf-x11.c pulse/client-conf-x11.h
+libpulsecommon_ at PA_MAJORMINORMICRO@_la_CFLAGS += $(X11_CFLAGS)
+libpulsecommon_ at PA_MAJORMINORMICRO@_la_LDFLAGS += $(X11_LIBS)
+endif
+
# proplist-util.h uses these header files, but not the library itself!
libpulsecommon_ at PA_MAJORMINORMICRO@_la_CFLAGS += $(GLIB20_CFLAGS) $(GTK20_CFLAGS)
@@ -767,12 +773,6 @@ libpulse_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
libpulse_la_LIBADD = $(AM_LIBADD) $(WINSOCK_LIBS) $(LTLIBICONV) libpulsecommon- at PA_MAJORMINORMICRO@.la
libpulse_la_LDFLAGS = $(AM_LDFLAGS) $(VERSIONING_LDFLAGS) -version-info $(LIBPULSE_VERSION_INFO)
-if HAVE_X11
-libpulse_la_SOURCES += pulse/client-conf-x11.c pulse/client-conf-x11.h
-libpulse_la_CFLAGS += $(X11_CFLAGS)
-libpulse_la_LDFLAGS += $(X11_LIBS)
-endif
-
libpulse_simple_la_SOURCES = pulse/simple.c pulse/simple.h
libpulse_simple_la_CFLAGS = $(AM_CFLAGS)
libpulse_simple_la_LIBADD = $(AM_LIBADD) libpulse.la libpulsecommon- at PA_MAJORMINORMICRO@.la
diff --git a/src/daemon/main.c b/src/daemon/main.c
index e656836..5ccda77 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -63,6 +63,10 @@
#include <dbus/dbus.h>
#endif
+#include <pulse/client-conf.h>
+#ifdef HAVE_X11
+#include <pulse/client-conf-x11.h>
+#endif
#include <pulse/mainloop.h>
#include <pulse/mainloop-signal.h>
#include <pulse/timeval.h>
@@ -343,6 +347,24 @@ static void set_all_rlimits(const pa_daemon_conf *conf) {
}
#endif
+static char *check_configured_address(void) {
+ char *default_server = NULL;
+ pa_client_conf *c = pa_client_conf_new();
+
+ pa_client_conf_load(c, NULL);
+#ifdef HAVE_X11
+ pa_client_conf_from_x11(c, NULL);
+#endif
+ pa_client_conf_env(c);
+
+ if (c->default_server && *c->default_server)
+ default_server = pa_xstrdup(c->default_server);
+
+ pa_client_conf_free(c);
+
+ return default_server;
+}
+
#ifdef HAVE_DBUS
static pa_dbus_connection *register_dbus_name(pa_core *c, DBusBusType bus, const char* name) {
DBusError error;
@@ -383,6 +405,7 @@ int main(int argc, char *argv[]) {
pa_daemon_conf *conf = NULL;
pa_mainloop *mainloop = NULL;
char *s;
+ char *configured_address;
int r = 0, retval = 1, d = 0;
pa_bool_t valid_pid_file = FALSE;
pa_bool_t ltdl_init = FALSE;
@@ -649,6 +672,13 @@ int main(int argc, char *argv[]) {
goto finish;
}
+ if (conf->cmd == PA_CMD_START && (configured_address = check_configured_address())) {
+ pa_log_notice(_("User-configured server at %s, not autospawning."), configured_address);
+ pa_xfree(configured_address);
+ retval = 0;
+ goto finish;
+ }
+
if (conf->system_instance && !conf->disallow_exit)
pa_log_warn(_("Running in system mode, but --disallow-exit not set!"));
commit ba255bfc42c4637b5a541b419112b30cf21e8fb5
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 17:40:31 2010 +0100
tests: add pa_once_xxx() test
diff --git a/src/.gitignore b/src/.gitignore
index 64ab297..c93974b 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,3 +1,4 @@
+once-test
usergroup-test
sigbus-test
TAGS
diff --git a/src/Makefile.am b/src/Makefile.am
index 0224cb3..9ff06ec 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -294,6 +294,7 @@ TESTS_BINARIES = \
hook-list-test \
memblock-test \
thread-test \
+ once-test \
flist-test \
asyncq-test \
asyncmsgq-test \
@@ -385,6 +386,11 @@ thread_test_CFLAGS = $(AM_CFLAGS)
thread_test_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la
thread_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
+once_test_SOURCES = tests/once-test.c
+once_test_CFLAGS = $(AM_CFLAGS)
+once_test_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la
+once_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
+
flist_test_SOURCES = tests/flist-test.c
flist_test_CFLAGS = $(AM_CFLAGS)
flist_test_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la
diff --git a/src/tests/once-test.c b/src/tests/once-test.c
new file mode 100644
index 0000000..5b55532
--- /dev/null
+++ b/src/tests/once-test.c
@@ -0,0 +1,103 @@
+/***
+ This file is part of PulseAudio.
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <pthread.h>
+
+#include <pulsecore/thread.h>
+#include <pulsecore/mutex.h>
+#include <pulsecore/once.h>
+#include <pulsecore/log.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/core-error.h>
+#include <pulsecore/atomic.h>
+#include <pulse/xmalloc.h>
+
+static pa_once once = PA_ONCE_INIT;
+static volatile unsigned n_run = 0;
+static const char * volatile ran_by = NULL;
+static pthread_barrier_t barrier;
+static pa_atomic_t i_cpu = PA_ATOMIC_INIT(0);
+static unsigned n_cpu;
+
+#define N_ITERATIONS 500
+#define N_THREADS 100
+
+static void once_func(void) {
+ n_run++;
+ ran_by = (const char*) pa_thread_get_data(pa_thread_self());
+}
+
+static void thread_func(void *data) {
+ int r;
+
+#ifdef HAVE_PTHREAD_SETAFFINITY_NP
+ cpu_set_t mask;
+
+ CPU_ZERO(&mask);
+ CPU_SET((size_t) (pa_atomic_inc(&i_cpu) % n_cpu), &mask);
+ pa_assert_se(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) == 0);
+#endif
+
+ /* pa_log("started up: %s", data); */
+
+ r = pthread_barrier_wait(&barrier);
+ pa_assert(r == 0 || r == PTHREAD_BARRIER_SERIAL_THREAD);
+
+ pa_run_once(&once, once_func);
+}
+
+int main(int argc, char *argv[]) {
+ unsigned n, i;
+
+ n_cpu = pa_ncpus();
+
+ for (n = 0; n < N_ITERATIONS; n++) {
+ pa_thread* threads[N_THREADS];
+
+ pa_assert_se(pthread_barrier_init(&barrier, NULL, N_THREADS) == 0);
+
+ /* Yes, kinda ugly */
+ pa_zero(once);
+
+ for (i = 0; i < N_THREADS; i++)
+ threads[i] = pa_thread_new(thread_func, pa_sprintf_malloc("Thread #%i", i+1));
+
+ for (i = 0; i < N_THREADS; i++)
+ pa_thread_join(threads[i]);
+
+ pa_assert(n_run == 1);
+ pa_log("ran by %s", ran_by);
+
+ for (i = 0; i < N_THREADS; i++) {
+ pa_xfree(pa_thread_get_data(threads[i]));
+ pa_thread_free(threads[i]);
+ }
+
+ n_run = 0;
+ ran_by = NULL;
+
+ pa_assert_se(pthread_barrier_destroy(&barrier) == 0);
+ }
+
+ return 0;
+}
commit 4b1679e06d3b4ed98ed8e934db8c0fe99877a56c
Merge: ba255bf f1d1447
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 21:33:11 2010 +0100
Merge remote branch 'tanuk/fixes'
commit 3d6cc026e25ea3015ea989273ba69336a26ab686
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 22:08:59 2010 +0100
client: introduce auto-connect-localhost= option in client.conf
Partly fixes:
http://pulseaudio.org/ticket/773
Also fixes a security hole since listening on the default port is not
access controlled right now.
diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in
index 46cc845..349b515 100644
--- a/man/pulse-client.conf.5.xml.in
+++ b/man/pulse-client.conf.5.xml.in
@@ -106,6 +106,16 @@ USA.
memory overcommit.</p>
</option>
+ <option>
+ <p><opt>auto-connect-localhost=</opt> Automatically try to
+ connect to localhost via IP. Enabling this is a potential
+ security hole since connections are only authenticated one-way
+ and a rogue server might hence fool a client into sending it its
+ private (e.g. VoIP call) data. This was enabled by default on
+ PulseAudio version 0.9.21 and older. Defaults to
+ <opt>no</opt>.</p>
+ </option>
+
</section>
<section name="Authors">
diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c
index 3eaca4d..6c97802 100644
--- a/src/pulse/client-conf.c
+++ b/src/pulse/client-conf.c
@@ -62,7 +62,8 @@ static const pa_client_conf default_conf = {
.disable_shm = FALSE,
.cookie_file = NULL,
.cookie_valid = FALSE,
- .shm_size = 0
+ .shm_size = 0,
+ .auto_connect_localhost = FALSE
};
pa_client_conf *pa_client_conf_new(void) {
@@ -105,6 +106,7 @@ int pa_client_conf_load(pa_client_conf *c, const char *filename) {
{ "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL },
{ "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL },
{ "shm-size-bytes", pa_config_parse_size, &c->shm_size, NULL },
+ { "auto-connect-localhost", pa_config_parse_bool, &c->auto_connect_localhost, NULL },
{ NULL, NULL, NULL, NULL },
};
diff --git a/src/pulse/client-conf.h b/src/pulse/client-conf.h
index 618216f..3bca8fd 100644
--- a/src/pulse/client-conf.h
+++ b/src/pulse/client-conf.h
@@ -29,7 +29,7 @@
typedef struct pa_client_conf {
char *daemon_binary, *extra_arguments, *default_sink, *default_source, *default_server, *default_dbus_server, *cookie_file;
- pa_bool_t autospawn, disable_shm;
+ pa_bool_t autospawn, disable_shm, auto_connect_localhost;
uint8_t cookie[PA_NATIVE_COOKIE_LENGTH];
pa_bool_t cookie_valid; /* non-zero, when cookie is valid */
size_t shm_size;
diff --git a/src/pulse/client.conf.in b/src/pulse/client.conf.in
index e03096e..090713e 100644
--- a/src/pulse/client.conf.in
+++ b/src/pulse/client.conf.in
@@ -32,3 +32,5 @@
; enable-shm = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
+
+; auto-connect-localhost = no
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 0018492..85b90ac 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -997,8 +997,10 @@ int pa_context_connect(
}
/* Add TCP/IP on the localhost */
- c->server_list = pa_strlist_prepend(c->server_list, "tcp6:[::1]");
- c->server_list = pa_strlist_prepend(c->server_list, "tcp4:127.0.0.1");
+ if (c->conf->auto_connect_localhost) {
+ c->server_list = pa_strlist_prepend(c->server_list, "tcp6:[::1]");
+ c->server_list = pa_strlist_prepend(c->server_list, "tcp4:127.0.0.1");
+ }
/* The system wide instance via PF_LOCAL */
c->server_list = pa_strlist_prepend(c->server_list, PA_SYSTEM_RUNTIME_PATH PA_PATH_SEP PA_NATIVE_DEFAULT_UNIX_SOCKET);
commit 21cbcc1a8a5900af9e820b10d5c1b28fc803f947
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 22:15:52 2010 +0100
client: introduce auto-connect-display= following the scheme of auto-connect-localhost=
Just connecting to a PA server just because X11's $DISPLAY is set might
be a security hole.
diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in
index 349b515..c2a847f 100644
--- a/man/pulse-client.conf.5.xml.in
+++ b/man/pulse-client.conf.5.xml.in
@@ -116,6 +116,13 @@ USA.
<opt>no</opt>.</p>
</option>
+ <option>
+ <p><opt>auto-connect-display=</opt> Automatically try to connect
+ to the host X11's $DISPLAY variable is set to. The same security
+ issues apply as to <opt>auto-connect-localhost=</opt>. Defaults
+ to <opt>no</opt>.</p>
+ </option>
+
</section>
<section name="Authors">
diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c
index 6c97802..18fafe3 100644
--- a/src/pulse/client-conf.c
+++ b/src/pulse/client-conf.c
@@ -63,7 +63,8 @@ static const pa_client_conf default_conf = {
.cookie_file = NULL,
.cookie_valid = FALSE,
.shm_size = 0,
- .auto_connect_localhost = FALSE
+ .auto_connect_localhost = FALSE,
+ .auto_connect_display = FALSE
};
pa_client_conf *pa_client_conf_new(void) {
@@ -107,6 +108,7 @@ int pa_client_conf_load(pa_client_conf *c, const char *filename) {
{ "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL },
{ "shm-size-bytes", pa_config_parse_size, &c->shm_size, NULL },
{ "auto-connect-localhost", pa_config_parse_bool, &c->auto_connect_localhost, NULL },
+ { "auto-connect-display", pa_config_parse_bool, &c->auto_connect_display, NULL },
{ NULL, NULL, NULL, NULL },
};
diff --git a/src/pulse/client-conf.h b/src/pulse/client-conf.h
index 3bca8fd..f281f4e 100644
--- a/src/pulse/client-conf.h
+++ b/src/pulse/client-conf.h
@@ -29,7 +29,7 @@
typedef struct pa_client_conf {
char *daemon_binary, *extra_arguments, *default_sink, *default_source, *default_server, *default_dbus_server, *cookie_file;
- pa_bool_t autospawn, disable_shm, auto_connect_localhost;
+ pa_bool_t autospawn, disable_shm, auto_connect_localhost, auto_connect_display;
uint8_t cookie[PA_NATIVE_COOKIE_LENGTH];
pa_bool_t cookie_valid; /* non-zero, when cookie is valid */
size_t shm_size;
diff --git a/src/pulse/client.conf.in b/src/pulse/client.conf.in
index 090713e..436747b 100644
--- a/src/pulse/client.conf.in
+++ b/src/pulse/client.conf.in
@@ -34,3 +34,4 @@
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; auto-connect-localhost = no
+; auto-connect-display = no
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 85b90ac..83e0dbb 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -987,13 +987,15 @@ int pa_context_connect(
/* Prepend in reverse order */
/* Follow the X display */
- if ((d = getenv("DISPLAY"))) {
- d = pa_xstrndup(d, strcspn(d, ":"));
+ if (c->conf->auto_connect_display) {
+ if ((d = getenv("DISPLAY"))) {
+ d = pa_xstrndup(d, strcspn(d, ":"));
- if (*d)
- c->server_list = pa_strlist_prepend(c->server_list, d);
+ if (*d)
+ c->server_list = pa_strlist_prepend(c->server_list, d);
- pa_xfree(d);
+ pa_xfree(d);
+ }
}
/* Add TCP/IP on the localhost */
commit 76089b11eb27675bad4d929d34cc43639f0e54ee
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 00:13:13 2010 +0100
native: fallback to another port if the default port is taken
Unless the port number is explicitly configured we will now fallback to
a kernel picked port if the one we'd like by default we cannot get.
http://pulseaudio.org/ticket/773
diff --git a/src/modules/module-protocol-stub.c b/src/modules/module-protocol-stub.c
index 5b351d1..e0e7aa1 100644
--- a/src/modules/module-protocol-stub.c
+++ b/src/modules/module-protocol-stub.c
@@ -246,6 +246,7 @@ int pa__init(pa_module*m) {
#if defined(USE_TCP_SOCKETS)
uint32_t port = IPV4_PORT;
+ pa_bool_t port_fallback = TRUE;
const char *listen_on;
#else
int r;
@@ -293,6 +294,10 @@ int pa__init(pa_module*m) {
#endif
#if defined(USE_TCP_SOCKETS)
+
+ if (pa_modargs_get_value(ma, "port", NULL))
+ port_fallback = FALSE;
+
if (pa_modargs_get_value_u32(ma, "port", &port) < 0 || port < 1 || port > 0xFFFF) {
pa_log("port= expects a numerical argument between 1 and 65535.");
goto fail;
@@ -302,14 +307,14 @@ int pa__init(pa_module*m) {
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);
+ u->socket_server_ipv6 = pa_socket_server_new_ipv6_string(m->core->mainloop, listen_on, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
# endif
- u->socket_server_ipv4 = pa_socket_server_new_ipv4_string(m->core->mainloop, listen_on, (uint16_t) port, TCPWRAP_SERVICE);
+ u->socket_server_ipv4 = pa_socket_server_new_ipv4_string(m->core->mainloop, listen_on, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
} else {
# ifdef HAVE_IPV6
- u->socket_server_ipv6 = pa_socket_server_new_ipv6_any(m->core->mainloop, (uint16_t) port, TCPWRAP_SERVICE);
+ u->socket_server_ipv6 = pa_socket_server_new_ipv6_any(m->core->mainloop, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
# endif
- u->socket_server_ipv4 = pa_socket_server_new_ipv4_any(m->core->mainloop, (uint16_t) port, TCPWRAP_SERVICE);
+ u->socket_server_ipv4 = pa_socket_server_new_ipv4_any(m->core->mainloop, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
}
# ifdef HAVE_IPV6
diff --git a/src/pulsecore/socket-server.c b/src/pulsecore/socket-server.c
index 5d55de3..3b7c697 100644
--- a/src/pulsecore/socket-server.c
+++ b/src/pulsecore/socket-server.c
@@ -86,7 +86,12 @@ struct pa_socket_server {
pa_io_event *io_event;
pa_mainloop_api *mainloop;
- enum { SOCKET_SERVER_GENERIC, SOCKET_SERVER_IPV4, SOCKET_SERVER_UNIX, SOCKET_SERVER_IPV6 } type;
+ enum {
+ SOCKET_SERVER_GENERIC,
+ SOCKET_SERVER_IPV4,
+ SOCKET_SERVER_UNIX,
+ SOCKET_SERVER_IPV6
+ } type;
};
static void callback(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io_event_flags_t f, void *userdata) {
@@ -150,15 +155,11 @@ pa_socket_server* pa_socket_server_new(pa_mainloop_api *m, int fd) {
pa_assert(m);
pa_assert(fd >= 0);
- s = pa_xnew(pa_socket_server, 1);
+ s = pa_xnew0(pa_socket_server, 1);
PA_REFCNT_INIT(s);
s->fd = fd;
- s->filename = NULL;
- s->on_connection = NULL;
- s->userdata = NULL;
- s->tcpwrap_service = NULL;
-
s->mainloop = m;
+
pa_assert_se(s->io_event = m->io_new(m, fd, PA_IO_EVENT_INPUT, callback, s));
s->type = SOCKET_SERVER_GENERIC;
@@ -233,7 +234,7 @@ pa_socket_server* pa_socket_server_new_unix(pa_mainloop_api *m, const char *file
#endif /* HAVE_SYS_UN_H */
-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_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service) {
pa_socket_server *ss;
int fd = -1;
struct sockaddr_in sa;
@@ -260,8 +261,19 @@ pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address
sa.sin_addr.s_addr = htonl(address);
if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
+
+ if (errno == EADDRINUSE && fallback) {
+ sa.sin_port = 0;
+
+ if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0)
+ goto good;
+ }
+
pa_log("bind(): %s", pa_cstrerror(errno));
goto fail;
+
+ good:
+ ;
}
if (listen(fd, 5) < 0) {
@@ -284,7 +296,7 @@ fail:
}
#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(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, pa_bool_t fallback, const char *tcpwrap_service) {
pa_socket_server *ss;
int fd = -1;
struct sockaddr_in6 sa;
@@ -318,8 +330,19 @@ pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t ad
memcpy(sa.sin6_addr.s6_addr, address, 16);
if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
+
+ if (errno == EADDRINUSE && fallback) {
+ sa.sin6_port = 0;
+
+ if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) >= 0)
+ goto good;
+ }
+
pa_log("bind(): %s", pa_cstrerror(errno));
goto fail;
+
+ good:
+ ;
}
if (listen(fd, 5) < 0) {
@@ -342,39 +365,39 @@ fail:
}
#endif
-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_ipv4_loopback(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service) {
pa_assert(m);
pa_assert(port > 0);
- return pa_socket_server_new_ipv4(m, INADDR_LOOPBACK, port, tcpwrap_service);
+ return pa_socket_server_new_ipv4(m, INADDR_LOOPBACK, port, fallback, 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_socket_server* pa_socket_server_new_ipv6_loopback(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, 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);
+ return pa_socket_server_new_ipv6(m, in6addr_loopback.s6_addr, port, fallback, tcpwrap_service);
}
#endif
-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_ipv4_any(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service) {
pa_assert(m);
pa_assert(port > 0);
- return pa_socket_server_new_ipv4(m, INADDR_ANY, port, tcpwrap_service);
+ return pa_socket_server_new_ipv4(m, INADDR_ANY, port, fallback, 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_socket_server* pa_socket_server_new_ipv6_any(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, 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);
+ return pa_socket_server_new_ipv6(m, in6addr_any.s6_addr, port, fallback, 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) {
+pa_socket_server* pa_socket_server_new_ipv4_string(pa_mainloop_api *m, const char *name, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service) {
struct in_addr ipv4;
pa_assert(m);
@@ -382,13 +405,13 @@ pa_socket_server* pa_socket_server_new_ipv4_string(pa_mainloop_api *m, const cha
pa_assert(port > 0);
if (inet_pton(AF_INET, name, &ipv4) > 0)
- return pa_socket_server_new_ipv4(m, ntohl(ipv4.s_addr), port, tcpwrap_service);
+ return pa_socket_server_new_ipv4(m, ntohl(ipv4.s_addr), port, fallback, tcpwrap_service);
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) {
+pa_socket_server* pa_socket_server_new_ipv6_string(pa_mainloop_api *m, const char *name, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service) {
struct in6_addr ipv6;
pa_assert(m);
@@ -396,7 +419,7 @@ pa_socket_server* pa_socket_server_new_ipv6_string(pa_mainloop_api *m, const cha
pa_assert(port > 0);
if (inet_pton(AF_INET6, name, &ipv6) > 0)
- return pa_socket_server_new_ipv6(m, ipv6.s6_addr, port, tcpwrap_service);
+ return pa_socket_server_new_ipv6(m, ipv6.s6_addr, port, fallback, tcpwrap_service);
return NULL;
}
diff --git a/src/pulsecore/socket-server.h b/src/pulsecore/socket-server.h
index 72b6eda..16da07b 100644
--- a/src/pulsecore/socket-server.h
+++ b/src/pulsecore/socket-server.h
@@ -33,15 +33,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_ipv4_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_ipv4_string(pa_mainloop_api *m, const char *name, uint16_t port, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv4_loopback(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv4_any(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv4_string(pa_mainloop_api *m, const char *name, uint16_t port, pa_bool_t fallback, 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);
+pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv6_loopback(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv6_any(pa_mainloop_api *m, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv6_string(pa_mainloop_api *m, const char *name, uint16_t port, pa_bool_t fallback, const char *tcpwrap_service);
#endif
void pa_socket_server_unref(pa_socket_server*s);
commit 2465cfac616c0931e89ead7efdbaa70bd8e0d66d
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 00:15:51 2010 +0100
native: when run in system mode, do not look for fallback port
diff --git a/src/modules/module-protocol-stub.c b/src/modules/module-protocol-stub.c
index e0e7aa1..e21186b 100644
--- a/src/modules/module-protocol-stub.c
+++ b/src/modules/module-protocol-stub.c
@@ -295,7 +295,7 @@ int pa__init(pa_module*m) {
#if defined(USE_TCP_SOCKETS)
- if (pa_modargs_get_value(ma, "port", NULL))
+ if (pa_in_system_mode() || pa_modargs_get_value(ma, "port", NULL))
port_fallback = FALSE;
if (pa_modargs_get_value_u32(ma, "port", &port) < 0 || port < 1 || port > 0xFFFF) {
commit 1bfa1c3b03f8ab6c0edc08ac50e4babba70cbb3e
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 20:33:40 2010 +0100
start: we don't need to check for $PULSE_SERVER anymore
pulseaudio --start does that internally anyway, so we can get rid of
this here.
diff --git a/src/daemon/start-pulseaudio-x11.in b/src/daemon/start-pulseaudio-x11.in
index c57c489..391a6d3 100755
--- a/src/daemon/start-pulseaudio-x11.in
+++ b/src/daemon/start-pulseaudio-x11.in
@@ -19,8 +19,6 @@
set -e
-[ -z "$PULSE_SERVER" ]
-
@PA_BINARY@ --start "$@"
if [ x"$DISPLAY" != x ] ; then
commit 62bfb511f60dc81c6c38e1f00c43e90eca934dcb
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 21:32:26 2010 +0100
client: include dolby channel names in comments
diff --git a/src/pulse/channelmap.h b/src/pulse/channelmap.h
index 469effc..d1d5c8b 100644
--- a/src/pulse/channelmap.h
+++ b/src/pulse/channelmap.h
@@ -74,9 +74,9 @@ typedef enum pa_channel_position {
PA_CHANNEL_POSITION_INVALID = -1,
PA_CHANNEL_POSITION_MONO = 0,
- PA_CHANNEL_POSITION_FRONT_LEFT, /* Apple calls this 'Left' */
- PA_CHANNEL_POSITION_FRONT_RIGHT, /* Apple calls this 'Right' */
- PA_CHANNEL_POSITION_FRONT_CENTER, /* Apple calls this 'Center' */
+ PA_CHANNEL_POSITION_FRONT_LEFT, /* Apple, Dolby call this 'Left' */
+ PA_CHANNEL_POSITION_FRONT_RIGHT, /* Apple, Dolby call this 'Right' */
+ PA_CHANNEL_POSITION_FRONT_CENTER, /* Apple, Dolby call this 'Center' */
/** \cond fulldocs */
PA_CHANNEL_POSITION_LEFT = PA_CHANNEL_POSITION_FRONT_LEFT,
@@ -84,20 +84,20 @@ typedef enum pa_channel_position {
PA_CHANNEL_POSITION_CENTER = PA_CHANNEL_POSITION_FRONT_CENTER,
/** \endcond */
- PA_CHANNEL_POSITION_REAR_CENTER, /* Microsoft calls this 'Back Center', Apple calls this 'Center Surround' */
- PA_CHANNEL_POSITION_REAR_LEFT, /* Microsoft calls this 'Back Left', Apple calls this 'Left Surround' */
- PA_CHANNEL_POSITION_REAR_RIGHT, /* Microsoft calls this 'Back Right', Apple calls this 'Right Surround' */
+ PA_CHANNEL_POSITION_REAR_CENTER, /* Microsoft calls this 'Back Center', Apple calls this 'Center Surround', Dolby calls this 'Surround Rear Center' */
+ PA_CHANNEL_POSITION_REAR_LEFT, /* Microsoft calls this 'Back Left', Apple calls this 'Left Surround' (!), Dolby calls this 'Surround Rear Left' */
+ PA_CHANNEL_POSITION_REAR_RIGHT, /* Microsoft calls this 'Back Right', Apple calls this 'Right Surround' (!), Dolby calls this 'Surround Rear Right' */
PA_CHANNEL_POSITION_LFE, /* Microsoft calls this 'Low Frequency', Apple calls this 'LFEScreen' */
/** \cond fulldocs */
PA_CHANNEL_POSITION_SUBWOOFER = PA_CHANNEL_POSITION_LFE,
/** \endcond */
- PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */
- PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */
+ PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER, /* Apple, Dolby call this 'Left Center' */
+ PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER, /* Apple, Dolby call this 'Right Center */
- PA_CHANNEL_POSITION_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */
- PA_CHANNEL_POSITION_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */
+ PA_CHANNEL_POSITION_SIDE_LEFT, /* Apple calls this 'Left Surround Direct', Dolby calls this 'Surround Left' (!) */
+ PA_CHANNEL_POSITION_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct', Dolby calls this 'Surround Right' (!) */
PA_CHANNEL_POSITION_AUX0,
PA_CHANNEL_POSITION_AUX1,
commit ea8927f1d47be101a1f64b2f87fd6e527ff76dbe
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date: Thu Jan 21 13:11:56 2010 +0100
Typo. s/a/are/
Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
diff --git a/src/daemon/daemon.conf.in b/src/daemon/daemon.conf.in
index 7c1a7b8..5de27ed 100644
--- a/src/daemon/daemon.conf.in
+++ b/src/daemon/daemon.conf.in
@@ -16,7 +16,7 @@
# USA.
## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
-## more information. Default values a commented out. Use either ; or # for
+## more information. Default values are commented out. Use either ; or # for
## commenting.
; daemonize = no
commit f250179b4ea989c26d99268a362d57a8a7136a1f
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 2 08:51:44 2010 +0100
shm: explicitly mark shm seg for MAP_NORESERVE to request overcommiting no matter what
diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c
index fbf777a..29849d5 100644
--- a/src/pulsecore/shm.c
+++ b/src/pulsecore/shm.c
@@ -154,7 +154,11 @@ int pa_shm_create_rw(pa_shm *m, size_t size, pa_bool_t shared, mode_t mode) {
goto fail;
}
- if ((m->ptr = mmap(NULL, PA_PAGE_ALIGN(m->size), PROT_READ|PROT_WRITE, MAP_SHARED, fd, (off_t) 0)) == MAP_FAILED) {
+#ifndef MAP_NORESERVE
+#define MAP_NORESERVE 0
+#endif
+
+ if ((m->ptr = mmap(NULL, PA_PAGE_ALIGN(m->size), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_NORESERVE, fd, (off_t) 0)) == MAP_FAILED) {
pa_log("mmap() failed: %s", pa_cstrerror(errno));
goto fail;
}
commit 0ac13f17bae05764d080eb9e164224e6aaf59175
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date: Sun Jan 31 12:44:59 2010 +0100
man pages: correct formatting/markup of options
diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in
index c2a847f..739fae4 100644
--- a/man/pulse-client.conf.5.xml.in
+++ b/man/pulse-client.conf.5.xml.in
@@ -69,7 +69,7 @@ USA.
<option>
<p><opt>autospawn=</opt> Autospawn a PulseAudio daemon when
- needed. Takes a boolean value, defaults to "yes".</p>
+ needed. Takes a boolean value, defaults to <opt>yes</opt>.</p>
</option>
<option>
diff --git a/man/pulse-daemon.conf.5.xml.in b/man/pulse-daemon.conf.5.xml.in
index e6b1e19..b5c9e92 100644
--- a/man/pulse-daemon.conf.5.xml.in
+++ b/man/pulse-daemon.conf.5.xml.in
@@ -53,14 +53,14 @@ USA.
<option>
<p><opt>daemonize= </opt> Daemonize after startup. Takes a
- boolean value, defaults to "no". The <opt>--daemonize</opt>
+ boolean value, defaults to <opt>no</opt>. The <opt>--daemonize</opt>
command line option takes precedence.</p>
</option>
<option>
<p><opt>fail=</opt> Fail to start up if any of the directives
in the configuration script <file>default.pa</file>
- fail. Takes a boolean argument, defaults to "yes". The <opt>--fail</opt> command line
+ fail. Takes a boolean argument, defaults to <opt>yes</opt>. The <opt>--fail</opt> command line
option takes precedence.</p>
</option>
@@ -191,7 +191,7 @@ USA.
RLIMIT_NICE is used. root is dropped immediately after gaining
the nice level on startup, thus it is presumably safe. See
<manref section="1" name="pulseaudio"/> for more
- information. Takes a boolean argument, defaults to "yes". The <opt>--high-priority</opt>
+ information. Takes a boolean argument, defaults to <opt>yes</opt>. The <opt>--high-priority</opt>
command line option takes precedence.</p>
</option>
@@ -205,7 +205,7 @@ USA.
real-time. The controlling thread is left a normally scheduled
thread. Thus enabling the high-priority option is orthogonal.
See <manref section="1" name="pulseaudio"/> for more
- information. Takes a boolean argument, defaults to "yes". The
+ information. Takes a boolean argument, defaults to <opt>yes</opt>. The
<opt>--realtime</opt> command line option takes precedence.</p>
</option>
@@ -215,7 +215,7 @@ USA.
by default, 9 for clients. Thus it is recommended to choose the
PulseAudio real-time priorities lower. Some PulseAudio threads
might choose a priority a little lower or higher than the
- specified value. Defaults to "5".</p>
+ specified value. Defaults to <opt>5</opt>.</p>
</option>
<option>
commit 57b0397823088fd3e15119f0e1aeb6b7bc2bc90b
Author: Paul Menzel <paulepanter at users.sourceforge.net>
Date: Sat Jan 30 13:59:52 2010 +0100
client.conf.in: Typo. s/a/are/
This is the same typo as reported in [1] and fixed in [2] in `client.conf.in`.
I did `git grep "values a commented"` and did not get anymore hits.
[1] http://pulseaudio.org/ticket/783
[2] http://git.0pointer.de/?p=pulseaudio.git;a=commit;h=ea8927f1d47be101a1f64b2f87fd6e527ff76dbe
diff --git a/src/pulse/client.conf.in b/src/pulse/client.conf.in
index 436747b..17753b0 100644
--- a/src/pulse/client.conf.in
+++ b/src/pulse/client.conf.in
@@ -16,7 +16,7 @@
# USA.
## Configuration file for PulseAudio clients. See pulse-client.conf(5) for
-## more information. Default values a commented out. Use either ; or # for
+## more information. Default values are commented out. Use either ; or # for
## commenting.
; default-sink =
commit 2f86ba4fc22901b4aa5e0b4029d3b80f3feb0a91
Author: Daniel Mack <daniel at caiaq.de>
Date: Tue Feb 2 18:30:09 2010 +0800
osx: don't build the once-test binary on OS X
OS X lacks the barrier pthread APIs
diff --git a/src/Makefile.am b/src/Makefile.am
index 2978b8f..6c0b4d8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -294,7 +294,6 @@ TESTS_BINARIES = \
hook-list-test \
memblock-test \
thread-test \
- once-test \
flist-test \
asyncq-test \
asyncmsgq-test \
@@ -340,6 +339,11 @@ TESTS_BINARIES += \
alsa-time-test
endif
+if !OS_IS_DARWIN
+TESTS_BINARIES += \
+ once-test
+endif
+
if BUILD_TESTS_DEFAULT
noinst_PROGRAMS = $(TESTS_BINARIES)
else
commit 6fd2d087585b33dce918e857e9f2635862a0746c
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Fri Feb 5 00:15:38 2010 +0000
stream-restore: Clear the save_sink/save_source flags on apply_entry.
If the user specifically removes the device element from the stream
restore rule, we have to clear the save_sink/save_source flag of the
stream. This means that other stream routing systems
(e.g. module-device-manager) can take over routing for this
stream. In order to facilitate the reapplication of other routing
rules, we fire a stream change event. Arguably the stream itself
has not changed, but the rules governing its routing have, so
I feel this is justified.
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index becdb54..64a7fd3 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -1626,12 +1626,24 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
pa_sink_input_set_mute(si, e->muted, TRUE);
}
- if (u->restore_device &&
- e->device_valid &&
- (s = pa_namereg_get(u->core, e->device, PA_NAMEREG_SINK))) {
-
- pa_log_info("Restoring device for stream %s.", name);
- pa_sink_input_move_to(si, s, TRUE);
+ if (u->restore_device) {
+ if (!e->device_valid) {
+ if (si->save_sink) {
+ pa_log_info("Ensuring device is not saved for stream %s.", name);
+ /* If the device is not valid we should make sure the
+ save flag is cleared as the user may have specifically
+ removed the sink element from the rule. */
+ si->save_sink = FALSE;
+ /* This is cheating a bit. The sink input itself has not changed
+ but the rules governing it's routing have, so we fire this event
+ such that other routing modules (e.g. module-device-manager)
+ will pick up the change and reapply their routing */
+ pa_subscription_post(si->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, si->index);
+ }
+ } else if ((s = pa_namereg_get(u->core, e->device, PA_NAMEREG_SINK))) {
+ pa_log_info("Restoring device for stream %s.", name);
+ pa_sink_input_move_to(si, s, TRUE);
+ }
}
}
@@ -1648,12 +1660,24 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
}
pa_xfree(n);
- if (u->restore_device &&
- e->device_valid &&
- (s = pa_namereg_get(u->core, e->device, PA_NAMEREG_SOURCE))) {
-
- pa_log_info("Restoring device for stream %s.", name);
- pa_source_output_move_to(so, s, TRUE);
+ if (u->restore_device) {
+ if (!e->device_valid) {
+ if (so->save_source) {
+ pa_log_info("Ensuring device is not saved for stream %s.", name);
+ /* If the device is not valid we should make sure the
+ save flag is cleared as the user may have specifically
+ removed the source element from the rule. */
+ so->save_source = FALSE;
+ /* This is cheating a bit. The source output itself has not changed
+ but the rules governing it's routing have, so we fire this event
+ such that other routing modules (e.g. module-device-manager)
+ will pick up the change and reapply their routing */
+ pa_subscription_post(so->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_CHANGE, so->index);
+ }
+ } else if ((s = pa_namereg_get(u->core, e->device, PA_NAMEREG_SOURCE))) {
+ pa_log_info("Restoring device for stream %s.", name);
+ pa_source_output_move_to(so, s, TRUE);
+ }
}
}
}
commit cd559553a0bfbf37d18c86ba4efc56d65af2ed4e
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Tue Feb 9 21:37:32 2010 +0000
core: Fix macro typo - PA_SINK_IS_LINKED -> PA_SINK_INPUT_IS_LINKED
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index c75d417..e73999d 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -1061,7 +1061,7 @@ void pa_sink_input_update_proplist(pa_sink_input *i, pa_update_mode_t mode, pa_p
if (p)
pa_proplist_update(i->proplist, mode, p);
- if (PA_SINK_IS_LINKED(i->state)) {
+ if (PA_SINK_INPUT_IS_LINKED(i->state)) {
pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_PROPLIST_CHANGED], i);
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
}
commit 63abcc83307fd74d6556e8a679d647b5b5920868
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Nov 11 05:32:24 2009 +0100
build-sys: bump soname
diff --git a/configure.ac b/configure.ac
index 6b540e4..b4f94c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,7 +44,7 @@ AC_SUBST(PA_PROTOCOL_VERSION, 17)
# The stable ABI for client applications, for the version info x:y:z
# always will hold y=z
-AC_SUBST(LIBPULSE_VERSION_INFO, [12:0:12])
+AC_SUBST(LIBPULSE_VERSION_INFO, [12:1:12])
# A simplified, synchronous, ABI-stable interface for client
# applications, for the version info x:y:z always will hold y=z
commit 5e2a80c7e33a9f32058d53c33519197567a9887a
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Nov 23 05:07:00 2009 +0100
bump soname
diff --git a/configure.ac b/configure.ac
index b4f94c1..8abaabb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,7 +44,7 @@ AC_SUBST(PA_PROTOCOL_VERSION, 17)
# The stable ABI for client applications, for the version info x:y:z
# always will hold y=z
-AC_SUBST(LIBPULSE_VERSION_INFO, [12:1:12])
+AC_SUBST(LIBPULSE_VERSION_INFO, [12:2:12])
# A simplified, synchronous, ABI-stable interface for client
# applications, for the version info x:y:z always will hold y=z
commit 66dbca1e06af0607a2d0fc6b8d14ef1ebb034f0a
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 8 20:06:21 2010 +0100
dbus: remove filter functions only if they were actually set before
This fixes an assert when destructing modules that have not been fully
initialized.
https://bugzilla.redhat.com/show_bug.cgi?id=548525
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index 47d6200..795d510 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -37,6 +37,7 @@ struct pa_bluetooth_discovery {
PA_LLIST_HEAD(pa_dbus_pending, pending);
pa_hashmap *devices;
pa_hook hook;
+ pa_bool_t filter_added;
};
static void get_properties_reply(DBusPendingCall *pending, void *userdata);
@@ -788,6 +789,7 @@ pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c) {
pa_log_error("Failed to add filter function");
goto fail;
}
+ y->filter_added = TRUE;
if (pa_dbus_add_matches(
pa_dbus_connection_get(y->connection), &err,
@@ -856,7 +858,8 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) {
"type='signal',sender='org.bluez',interface='org.bluez.AudioSink',member='PropertyChanged'",
"type='signal',sender='org.bluez',interface='org.bluez.AudioSource',member='PropertyChanged'", NULL);
- dbus_connection_remove_filter(pa_dbus_connection_get(y->connection), filter_cb, y);
+ if (y->filter_added)
+ dbus_connection_remove_filter(pa_dbus_connection_get(y->connection), filter_cb, y);
pa_dbus_connection_unref(y->connection);
}
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 0ba1421..19676df 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -179,6 +179,8 @@ struct userdata {
int stream_write_type;
int service_write_type, service_read_type;
+
+ pa_bool_t filter_added;
};
#define FIXED_LATENCY_PLAYBACK_A2DP (25*PA_USEC_PER_MSEC)
@@ -2405,6 +2407,7 @@ int pa__init(pa_module* m) {
pa_log_error("Failed to add filter function");
goto fail;
}
+ u->filter_added = TRUE;
speaker = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='SpeakerGainChanged',path='%s'", u->path);
mike = pa_sprintf_malloc("type='signal',sender='org.bluez',interface='org.bluez.Headset',member='MicrophoneGainChanged',path='%s'", u->path);
@@ -2494,7 +2497,9 @@ void pa__done(pa_module *m) {
pa_xfree(mike);
}
- dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+ if (u->filter_added)
+ dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+
pa_dbus_connection_unref(u->connection);
}
diff --git a/src/modules/bluetooth/module-bluetooth-proximity.c b/src/modules/bluetooth/module-bluetooth-proximity.c
index c4cfd73..3eed9ce 100644
--- a/src/modules/bluetooth/module-bluetooth-proximity.c
+++ b/src/modules/bluetooth/module-bluetooth-proximity.c
@@ -92,7 +92,8 @@ struct userdata {
unsigned n_found;
unsigned n_unknown;
- pa_bool_t muted;
+ pa_bool_t muted:1;
+ pa_bool_t filter_added:1;
};
static void update_volume(struct userdata *u) {
@@ -358,9 +359,10 @@ static int add_matches(struct userdata *u, pa_bool_t add) {
} else
dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e);
- if (add)
+ if (add) {
pa_assert_se(dbus_connection_add_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u, NULL));
- else
+ u->filter_added = TRUE;
+ } else if (u->filter_added)
dbus_connection_remove_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u);
r = 0;
@@ -393,9 +395,6 @@ int pa__init(pa_module*m) {
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->hci = pa_xstrdup(pa_modargs_get_value(ma, "hci", DEFAULT_HCI));
u->hci_path = pa_sprintf_malloc("/org/bluez/%s", u->hci);
- u->n_found = u->n_unknown = 0;
- u->muted = FALSE;
-
u->bondings = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
if (!(u->dbus_connection = pa_dbus_bus_get(m->core, DBUS_BUS_SYSTEM, &e))) {
diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c
index 103f5c4..875852f 100644
--- a/src/modules/module-console-kit.c
+++ b/src/modules/module-console-kit.c
@@ -67,6 +67,7 @@ struct userdata {
pa_core *core;
pa_dbus_connection *connection;
pa_hashmap *sessions;
+ pa_bool_t filter_added;
};
static void add_session(struct userdata *u, const char *id) {
@@ -300,7 +301,7 @@ int pa__init(pa_module*m) {
goto fail;
}
- m->userdata = u = pa_xnew(struct userdata, 1);
+ m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->module = m;
u->connection = connection;
@@ -311,6 +312,8 @@ int pa__init(pa_module*m) {
goto fail;
}
+ u->filter_added = TRUE;
+
if (pa_dbus_add_matches(
pa_dbus_connection_get(connection), &error,
"type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionAdded'",
@@ -359,7 +362,9 @@ void pa__done(pa_module *m) {
"type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionAdded'",
"type='signal',sender='org.freedesktop.ConsoleKit',interface='org.freedesktop.ConsoleKit.Seat',member='SessionRemoved'", NULL);
- dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+ if (u->filter_added)
+ dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+
pa_dbus_connection_unref(u->connection);
}
diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c
index 1851913..23d4010 100644
--- a/src/modules/module-hal-detect.c
+++ b/src/modules/module-hal-detect.c
@@ -87,6 +87,7 @@ struct userdata {
#ifdef HAVE_OSS_OUTPUT
pa_bool_t init_subdevs;
#endif
+ pa_bool_t filter_added:1;
};
#define CAPABILITY_ALSA "alsa"
@@ -733,12 +734,9 @@ int pa__init(pa_module*m) {
goto fail;
}
- m->userdata = u = pa_xnew(struct userdata, 1);
+ m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
- u->context = NULL;
- u->connection = NULL;
u->devices = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
- u->capability = NULL;
#ifdef HAVE_ALSA
u->use_tsched = TRUE;
@@ -800,6 +798,7 @@ int pa__init(pa_module*m) {
pa_log_error("Failed to add filter function");
goto fail;
}
+ u->filter_added = TRUE;
if (pa_dbus_add_matches(
pa_dbus_connection_get(u->connection), &error,
@@ -856,7 +855,8 @@ void pa__done(pa_module *m) {
"type='signal',sender='org.freedesktop.Hal',interface='org.freedesktop.Hal.Device.AccessControl',member='ACLRemoved'",
"type='signal',interface='org.pulseaudio.Server',member='DirtyGiveUpMessage'", NULL);
- dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
+ if (u->filter_added)
+ dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u);
pa_dbus_connection_unref(u->connection);
}
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 83e0dbb..8875bfd 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -145,7 +145,7 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *
pa_init_i18n();
- c = pa_xnew(pa_context, 1);
+ c = pa_xnew0(pa_context, 1);
PA_REFCNT_INIT(c);
c->proplist = p ? pa_proplist_copy(p) : pa_proplist_new();
@@ -157,9 +157,6 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *
c->system_bus = c->session_bus = NULL;
#endif
c->mainloop = mainloop;
- c->client = NULL;
- c->pstream = NULL;
- c->pdispatch = NULL;
c->playback_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
c->record_streams = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
c->client_index = PA_INVALID_INDEX;
@@ -170,22 +167,9 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *
c->error = PA_OK;
c->state = PA_CONTEXT_UNCONNECTED;
- c->ctag = 0;
- c->csyncid = 0;
reset_callbacks(c);
- c->is_local = FALSE;
- c->server_list = NULL;
- c->server = NULL;
-
- c->do_shm = FALSE;
-
- c->server_specified = FALSE;
- c->no_fail = FALSE;
- c->do_autospawn = FALSE;
- memset(&c->spawn_api, 0, sizeof(c->spawn_api));
-
#ifndef MSG_NOSIGNAL
#ifdef SIGPIPE
pa_check_signal_is_blocked(SIGPIPE);
@@ -255,12 +239,14 @@ static void context_free(pa_context *c) {
#ifdef HAVE_DBUS
if (c->system_bus) {
- dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->system_bus), filter_cb, c);
+ if (c->filter_added)
+ dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->system_bus), filter_cb, c);
pa_dbus_wrap_connection_free(c->system_bus);
}
if (c->session_bus) {
- dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->session_bus), filter_cb, c);
+ if (c->filter_added)
+ dbus_connection_remove_filter(pa_dbus_wrap_connection_get(c->session_bus), filter_cb, c);
pa_dbus_wrap_connection_free(c->session_bus);
}
#endif
@@ -794,6 +780,7 @@ static void track_pulseaudio_on_dbus(pa_context *c, DBusBusType type, pa_dbus_wr
pa_log_warn("Failed to add filter function");
goto fail;
}
+ c->filter_added = TRUE;
if (pa_dbus_add_matches(
pa_dbus_wrap_connection_get(*conn), &error,
diff --git a/src/pulse/internal.h b/src/pulse/internal.h
index 9545d50..ab702b9 100644
--- a/src/pulse/internal.h
+++ b/src/pulse/internal.h
@@ -90,6 +90,7 @@ struct pa_context {
pa_bool_t no_fail:1;
pa_bool_t do_autospawn:1;
pa_bool_t use_rtclock:1;
+ pa_bool_t filter_added:1;
pa_spawn_api spawn_api;
pa_strlist *server_list;
commit 699233fb47d133f6ea1e36e8354a386c23608d5a
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 8 20:07:34 2010 +0100
native: fix request counter miscalculations
Do not subtract bytes the client sends us beyond what we requested from
our missing bytes counter.
This was mostly a thinko that caused servers asking for too little data
when the client initially sent more data than requested, because that
data sent too much was accounted for twice.
This commit fixes this miscalculation.
http://bugzilla.redhat.com/show_bug.cgi?id=534130
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 4081256..0f9e50a 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -741,6 +741,8 @@ void pa_command_request(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tag
s->requested_bytes += bytes;
+ /* pa_log("got request for %lli, now at %lli", (long long) bytes, (long long) s->requested_bytes); */
+
if (s->requested_bytes > 0 && s->write_callback)
s->write_callback(s, (size_t) s->requested_bytes, s->write_userdata);
@@ -1362,6 +1364,8 @@ int pa_stream_write(
* that's OK, the server side applies the same error */
s->requested_bytes -= (seek == PA_SEEK_RELATIVE ? offset : 0) + (int64_t) length;
+ /* pa_log("wrote %lli, now at %lli", (long long) length, (long long) s->requested_bytes); */
+
if (s->direction == PA_STREAM_PLAYBACK) {
/* Update latency request correction */
diff --git a/src/pulsecore/memblockq.c b/src/pulsecore/memblockq.c
index 32758be..4641801 100644
--- a/src/pulsecore/memblockq.c
+++ b/src/pulsecore/memblockq.c
@@ -55,8 +55,7 @@ struct pa_memblockq {
pa_bool_t in_prebuf;
pa_memchunk silence;
pa_mcalign *mcalign;
- int64_t missing;
- size_t requested;
+ int64_t missing, requested;
};
pa_memblockq* pa_memblockq_new(
@@ -84,8 +83,8 @@ pa_memblockq* pa_memblockq_new(
pa_log_debug("memblockq requested: maxlength=%lu, tlength=%lu, base=%lu, prebuf=%lu, minreq=%lu maxrewind=%lu",
(unsigned long) maxlength, (unsigned long) tlength, (unsigned long) base, (unsigned long) prebuf, (unsigned long) minreq, (unsigned long) maxrewind);
- bq->missing = 0;
- bq->requested = bq->maxlength = bq->tlength = bq->prebuf = bq->minreq = bq->maxrewind = 0;
+ bq->missing = bq->requested = 0;
+ bq->maxlength = bq->tlength = bq->prebuf = bq->minreq = bq->maxrewind = 0;
bq->in_prebuf = TRUE;
pa_memblockq_set_maxlength(bq, maxlength);
@@ -246,10 +245,34 @@ static pa_bool_t can_push(pa_memblockq *bq, size_t l) {
return TRUE;
}
+static void write_index_changed(pa_memblockq *bq, int64_t old_write_index, pa_bool_t account) {
+ int64_t delta;
+
+ pa_assert(bq);
+
+ delta = bq->write_index - old_write_index;
+
+ if (account)
+ bq->requested -= delta;
+
+ /* pa_log("pushed/seeked %lli: requested counter at %lli, account=%i", (long long) delta, (long long) bq->requested, account); */
+}
+
+static void read_index_changed(pa_memblockq *bq, int64_t old_read_index) {
+ int64_t delta;
+
+ pa_assert(bq);
+
+ delta = bq->read_index - old_read_index;
+ bq->missing += delta;
+
+ /* pa_log("popped %lli: missing counter at %lli", (long long) delta, (long long) bq->missing); */
+}
+
int pa_memblockq_push(pa_memblockq* bq, const pa_memchunk *uchunk) {
struct list_item *q, *n;
pa_memchunk chunk;
- int64_t old, delta;
+ int64_t old;
pa_assert(bq);
pa_assert(uchunk);
@@ -409,18 +432,7 @@ int pa_memblockq_push(pa_memblockq* bq, const pa_memchunk *uchunk) {
finish:
- delta = bq->write_index - old;
-
- if (delta >= (int64_t) bq->requested) {
- delta -= (int64_t) bq->requested;
- bq->requested = 0;
- } else {
- bq->requested -= (size_t) delta;
- delta = 0;
- }
-
- bq->missing -= delta;
-
+ write_index_changed(bq, old, TRUE);
return 0;
}
@@ -514,7 +526,7 @@ int pa_memblockq_peek(pa_memblockq* bq, pa_memchunk *chunk) {
}
void pa_memblockq_drop(pa_memblockq *bq, size_t length) {
- int64_t old, delta;
+ int64_t old;
pa_assert(bq);
pa_assert(length % bq->base == 0);
@@ -553,19 +565,21 @@ void pa_memblockq_drop(pa_memblockq *bq, size_t length) {
}
drop_backlog(bq);
-
- delta = bq->read_index - old;
- bq->missing += delta;
+ read_index_changed(bq, old);
}
void pa_memblockq_rewind(pa_memblockq *bq, size_t length) {
+ int64_t old;
pa_assert(bq);
pa_assert(length % bq->base == 0);
+ old = bq->read_index;
+
/* This is kind of the inverse of pa_memblockq_drop() */
bq->read_index -= (int64_t) length;
- bq->missing -= (int64_t) length;
+
+ read_index_changed(bq, old);
}
pa_bool_t pa_memblockq_is_readable(pa_memblockq *bq) {
@@ -602,7 +616,7 @@ size_t pa_memblockq_missing(pa_memblockq *bq) {
}
void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa_bool_t account) {
- int64_t old, delta;
+ int64_t old;
pa_assert(bq);
old = bq->write_index;
@@ -625,24 +639,11 @@ void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa
}
drop_backlog(bq);
-
- delta = bq->write_index - old;
-
- if (account) {
- if (delta >= (int64_t) bq->requested) {
- delta -= (int64_t) bq->requested;
- bq->requested = 0;
- } else if (delta >= 0) {
- bq->requested -= (size_t) delta;
- delta = 0;
- }
- }
-
- bq->missing -= delta;
+ write_index_changed(bq, old, account);
}
void pa_memblockq_flush_write(pa_memblockq *bq) {
- int64_t old, delta;
+ int64_t old;
pa_assert(bq);
pa_memblockq_silence(bq);
@@ -651,22 +652,11 @@ void pa_memblockq_flush_write(pa_memblockq *bq) {
bq->write_index = bq->read_index;
pa_memblockq_prebuf_force(bq);
-
- delta = bq->write_index - old;
-
- if (delta >= (int64_t) bq->requested) {
- delta -= (int64_t) bq->requested;
- bq->requested = 0;
- } else if (delta >= 0) {
- bq->requested -= (size_t) delta;
- delta = 0;
- }
-
- bq->missing -= delta;
+ write_index_changed(bq, old, TRUE);
}
void pa_memblockq_flush_read(pa_memblockq *bq) {
- int64_t old, delta;
+ int64_t old;
pa_assert(bq);
pa_memblockq_silence(bq);
@@ -675,9 +665,7 @@ void pa_memblockq_flush_read(pa_memblockq *bq) {
bq->read_index = bq->write_index;
pa_memblockq_prebuf_force(bq);
-
- delta = bq->read_index - old;
- bq->missing += delta;
+ read_index_changed(bq, old);
}
size_t pa_memblockq_get_tlength(pa_memblockq *bq) {
@@ -774,8 +762,11 @@ size_t pa_memblockq_pop_missing(pa_memblockq *bq) {
return 0;
l = (size_t) bq->missing;
+
+ bq->requested += bq->missing;
bq->missing = 0;
- bq->requested += l;
+
+ /* pa_log("sent %lli: request counter is at %lli", (long long) l, (long long) bq->requested); */
return l;
}
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index d49a78e..89f33d0 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1114,6 +1114,8 @@ static playback_stream* playback_stream_new(
*missing = (uint32_t) pa_memblockq_pop_missing(s->memblockq);
+ /* pa_log("missing original: %li", (long int) *missing); */
+
*ss = s->sink_input->sample_spec;
*map = s->sink_input->channel_map;
@@ -1138,11 +1140,12 @@ static void playback_stream_request_bytes(playback_stream *s) {
m = pa_memblockq_pop_missing(s->memblockq);
- /* pa_log("request_bytes(%lu) (tlength=%lu minreq=%lu length=%lu)", */
+ /* pa_log("request_bytes(%lu) (tlength=%lu minreq=%lu length=%lu really missing=%lli)", */
/* (unsigned long) m, */
/* pa_memblockq_get_tlength(s->memblockq), */
/* pa_memblockq_get_minreq(s->memblockq), */
- /* pa_memblockq_get_length(s->memblockq)); */
+ /* pa_memblockq_get_length(s->memblockq), */
+ /* (long long) pa_memblockq_get_tlength(s->memblockq) - (long long) pa_memblockq_get_length(s->memblockq)); */
if (m <= 0)
return;
commit 345547853bcb0825c0afb5b2528a8f1d5339a8ea
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 8 21:51:30 2010 +0100
core: make sure we always return a valid memblock in sink_input_pop() callbacks
https://bugzilla.redhat.com/show_bug.cgi?id=553607
diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c
index a186c89..62e6267 100644
--- a/src/modules/module-combine.c
+++ b/src/modules/module-combine.c
@@ -890,7 +890,7 @@ static struct output *output_new(struct userdata *u, pa_sink *sink) {
1,
0,
0,
- NULL);
+ &u->sink->silence);
pa_assert_se(pa_idxset_put(u->outputs, o, NULL) == 0);
update_description(u);
diff --git a/src/modules/module-ladspa-sink.c b/src/modules/module-ladspa-sink.c
index 994c778..185871b 100644
--- a/src/modules/module-ladspa-sink.c
+++ b/src/modules/module-ladspa-sink.c
@@ -476,6 +476,7 @@ int pa__init(pa_module*m) {
unsigned long input_port, output_port, p, j, n_control;
unsigned c;
pa_bool_t *use_default = NULL;
+ pa_memchunk silence;
pa_assert(m);
@@ -514,7 +515,10 @@ int pa__init(pa_module*m) {
u = pa_xnew0(struct userdata, 1);
u->module = m;
m->userdata = u;
- u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL);
+
+ pa_silence_memchunk_get(&m->core->silence_cache, m->core->mempool, &silence, &ss, 0);
+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, &silence);
+ pa_memblock_unref(silence.memblock);
if (!(e = getenv("LADSPA_PATH")))
e = LADSPA_PATH;
diff --git a/src/pulsecore/play-memchunk.c b/src/pulsecore/play-memchunk.c
index f127d7a..1a3bd5b 100644
--- a/src/pulsecore/play-memchunk.c
+++ b/src/pulsecore/play-memchunk.c
@@ -47,12 +47,16 @@ int pa_play_memchunk(
pa_memblockq *q;
int r;
+ pa_memchunk silence;
pa_assert(sink);
pa_assert(ss);
pa_assert(chunk);
- q = pa_memblockq_new(0, chunk->length, 0, pa_frame_size(ss), 1, 1, 0, NULL);
+ pa_silence_memchunk_get(&sink->core->silence_cache, sink->core->mempool, &silence, ss, 0);
+ q = pa_memblockq_new(0, chunk->length, 0, pa_frame_size(ss), 1, 1, 0, &silence);
+ pa_memblock_unref(silence.memblock);
+
pa_assert_se(pa_memblockq_push(q, chunk) >= 0);
if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, sink_input_index)) < 0) {
diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index 2326eb3..a89f327 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -389,6 +389,7 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void
size_t l;
pa_sink *sink = NULL;
pa_sink_input_new_data sdata;
+ pa_memchunk silence;
connection_assert_ref(c);
pa_assert(data);
@@ -435,6 +436,7 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void
CHECK_VALIDITY(c->sink_input, "Failed to create sink input.");
l = (size_t) ((double) pa_bytes_per_second(&ss)*PLAYBACK_BUFFER_SECONDS);
+ pa_sink_input_get_silence(c->sink_input, &silence);
c->input_memblockq = pa_memblockq_new(
0,
l,
@@ -443,7 +445,8 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void
(size_t) -1,
l/PLAYBACK_BUFFER_FRAGMENTS,
0,
- NULL);
+ &silence);
+ pa_memblock_unref(silence.memblock);
pa_iochannel_socket_set_rcvbuf(c->io, l);
c->sink_input->parent.process_msg = sink_input_process_msg;
diff --git a/src/pulsecore/protocol-simple.c b/src/pulsecore/protocol-simple.c
index a9f7389..fb2e564 100644
--- a/src/pulsecore/protocol-simple.c
+++ b/src/pulsecore/protocol-simple.c
@@ -525,6 +525,7 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp
if (o->playback) {
pa_sink_input_new_data data;
+ pa_memchunk silence;
size_t l;
pa_sink *sink;
@@ -559,6 +560,7 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp
pa_sink_input_set_requested_latency(c->sink_input, DEFAULT_SINK_LATENCY);
l = (size_t) ((double) pa_bytes_per_second(&o->sample_spec)*PLAYBACK_BUFFER_SECONDS);
+ pa_sink_input_get_silence(c->sink_input, &silence);
c->input_memblockq = pa_memblockq_new(
0,
l,
@@ -567,7 +569,9 @@ void pa_simple_protocol_connect(pa_simple_protocol *p, pa_iochannel *io, pa_simp
(size_t) -1,
l/PLAYBACK_BUFFER_FRAGMENTS,
0,
- NULL);
+ &silence);
+ pa_memblock_unref(silence.memblock);
+
pa_iochannel_socket_set_rcvbuf(io, l);
pa_atomic_store(&c->playback.missing, (int) pa_memblockq_missing(c->input_memblockq));
diff --git a/src/pulsecore/sound-file-stream.c b/src/pulsecore/sound-file-stream.c
index 53674ba..4037dca 100644
--- a/src/pulsecore/sound-file-stream.c
+++ b/src/pulsecore/sound-file-stream.c
@@ -239,6 +239,7 @@ int pa_play_file(
pa_sink_input_new_data data;
int fd;
SF_INFO sfi;
+ pa_memchunk silence;
pa_assert(sink);
pa_assert(fname);
@@ -320,7 +321,9 @@ int pa_play_file(
u->sink_input->state_change = sink_input_state_change_cb;
u->sink_input->userdata = u;
- u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL);
+ pa_sink_input_get_silence(u->sink_input, &silence);
+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, &silence);
+ pa_memblock_unref(silence.memblock);
pa_sink_input_put(u->sink_input);
commit 21250ff1a7ad9f3494f1d9f8aeb651c5f01dc942
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 8 22:18:15 2010 +0100
bluetooth: destruct stream only if it is not already destructed
https://bugzilla.redhat.com/show_bug.cgi?id=551842
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 19676df..2bbae41 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -823,23 +823,25 @@ static int stop_stream_fd(struct userdata *u) {
pa_assert(u);
pa_assert(u->rtpoll);
- pa_assert(u->rtpoll_item);
- pa_assert(u->stream_fd >= 0);
- pa_rtpoll_item_free(u->rtpoll_item);
- u->rtpoll_item = NULL;
+ if (u->rtpoll_item) {
+ pa_rtpoll_item_free(u->rtpoll_item);
+ u->rtpoll_item = NULL;
+ }
- memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE);
- msg.start_req.h.type = BT_REQUEST;
- msg.start_req.h.name = BT_STOP_STREAM;
- msg.start_req.h.length = sizeof(msg.start_req);
+ if (u->stream_fd >= 0) {
+ memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE);
+ msg.start_req.h.type = BT_REQUEST;
+ msg.start_req.h.name = BT_STOP_STREAM;
+ msg.start_req.h.length = sizeof(msg.start_req);
- if (service_send(u, &msg.start_req.h) < 0 ||
- service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0)
- r = -1;
+ if (service_send(u, &msg.start_req.h) < 0 ||
+ service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0)
+ r = -1;
- pa_close(u->stream_fd);
- u->stream_fd = -1;
+ pa_close(u->stream_fd);
+ u->stream_fd = -1;
+ }
if (u->read_smoother) {
pa_smoother_free(u->read_smoother);
commit e8a2d127249dfb255efd03f7eebbbbe5502e5951
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 8 23:44:42 2010 +0100
bluetooth: don't hit an assert if latency is queried for a stooped recording stream
https://bugzilla.redhat.com/show_bug.cgi?id=537422
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 2bbae41..d6868b8 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -972,10 +972,14 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
case PA_SOURCE_MESSAGE_GET_LATENCY: {
pa_usec_t wi, ri;
- wi = pa_smoother_get(u->read_smoother, pa_rtclock_now());
- ri = pa_bytes_to_usec(u->read_index, &u->sample_spec);
+ if (u->read_smoother) {
+ wi = pa_smoother_get(u->read_smoother, pa_rtclock_now());
+ ri = pa_bytes_to_usec(u->read_index, &u->sample_spec);
+
+ *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->thread_info.fixed_latency;
+ } else
+ *((pa_usec_t*) data) = 0;
- *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->thread_info.fixed_latency;
return 0;
}
commit 7ab9bea29dc9b3174be6b6a3a557c934b8265533
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Jan 12 03:01:14 2010 +0100
client: detect forking in sample cache API, too
diff --git a/src/pulse/scache.c b/src/pulse/scache.c
index 27da688..2a7602f 100644
--- a/src/pulse/scache.c
+++ b/src/pulse/scache.c
@@ -28,15 +28,15 @@
#include <string.h>
#include <pulse/utf8.h>
+#include <pulse/scache.h>
#include <pulsecore/pstream-util.h>
#include <pulsecore/macro.h>
#include <pulsecore/proplist-util.h>
+#include "fork-detect.h"
#include "internal.h"
-#include "scache.h"
-
int pa_stream_connect_upload(pa_stream *s, size_t length) {
pa_tagstruct *t;
uint32_t tag;
@@ -45,6 +45,7 @@ int pa_stream_connect_upload(pa_stream *s, size_t length) {
pa_assert(s);
pa_assert(PA_REFCNT_VALUE(s) >= 1);
+ PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_UNCONNECTED, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY(s->context, length > 0, PA_ERR_INVALID);
PA_CHECK_VALIDITY(s->context, length == (size_t) (uint32_t) length, PA_ERR_INVALID);
@@ -85,6 +86,7 @@ int pa_stream_finish_upload(pa_stream *s) {
pa_assert(s);
pa_assert(PA_REFCNT_VALUE(s) >= 1);
+ PA_CHECK_VALIDITY(s->context, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY(s->context, s->channel_valid, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY(s->context, s->context->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
@@ -174,6 +176,7 @@ pa_operation *pa_context_play_sample(pa_context *c, const char *name, const char
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID);
PA_CHECK_VALIDITY_RETURN_NULL(c, !dev || *dev, PA_ERR_INVALID);
@@ -213,6 +216,7 @@ pa_operation *pa_context_play_sample_with_proplist(pa_context *c, const char *na
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID);
PA_CHECK_VALIDITY_RETURN_NULL(c, !dev || *dev, PA_ERR_INVALID);
@@ -255,6 +259,7 @@ pa_operation* pa_context_remove_sample(pa_context *c, const char *name, pa_conte
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
+ PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY_RETURN_NULL(c, name && *name, PA_ERR_INVALID);
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 0f9e50a..a4f34d9 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -29,6 +29,7 @@
#include <string.h>
#include <pulse/def.h>
+#include <pulse/stream.h>
#include <pulse/timeval.h>
#include <pulse/rtclock.h>
#include <pulse/xmalloc.h>
commit 9ac12b7048b466effa551bd707648f66df18fe8a
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Jan 12 03:01:27 2010 +0100
client: verify connection state in pa_stream_connect_upload()
Make suer we check the connection state before going on, so that we can
rely that s->context->pstream is properly initialized.
https://bugzilla.redhat.com/show_bug.cgi?id=539500
diff --git a/src/pulse/scache.c b/src/pulse/scache.c
index 2a7602f..b2169b6 100644
--- a/src/pulse/scache.c
+++ b/src/pulse/scache.c
@@ -49,6 +49,7 @@ int pa_stream_connect_upload(pa_stream *s, size_t length) {
PA_CHECK_VALIDITY(s->context, s->state == PA_STREAM_UNCONNECTED, PA_ERR_BADSTATE);
PA_CHECK_VALIDITY(s->context, length > 0, PA_ERR_INVALID);
PA_CHECK_VALIDITY(s->context, length == (size_t) (uint32_t) length, PA_ERR_INVALID);
+ PA_CHECK_VALIDITY(s->context, s->context->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
if (!(name = pa_proplist_gets(s->proplist, PA_PROP_EVENT_ID)))
name = pa_proplist_gets(s->proplist, PA_PROP_MEDIA_NAME);
commit 66ddeede9ea02cc97178d42c7be18067519eed8f
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Jan 12 23:01:24 2010 +0100
udev: don't forget to unref devices we are not interested in
https://bugzilla.redhat.com/show_bug.cgi?id=552932
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index f17695b..dfd13ee 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -416,8 +416,10 @@ static void monitor_cb(
goto fail;
}
- if (!path_get_card_id(udev_device_get_devpath(dev)))
+ if (!path_get_card_id(udev_device_get_devpath(dev))) {
+ udev_device_unref(dev);
return;
+ }
process_device(u, dev);
udev_device_unref(dev);
commit 7f7455b1be68d2ff5706ccf85eff1a96f7c43d34
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Jan 12 23:03:04 2010 +0100
once: make once related variables volatile
diff --git a/src/pulsecore/flist.h b/src/pulsecore/flist.h
index e147486..184e599 100644
--- a/src/pulsecore/flist.h
+++ b/src/pulsecore/flist.h
@@ -45,7 +45,7 @@ void* pa_flist_pop(pa_flist*l);
#define PA_STATIC_FLIST_DECLARE(name, size, free_cb) \
static struct { \
- pa_flist *flist; \
+ pa_flist *volatile flist; \
pa_once once; \
} name##_flist = { NULL, PA_ONCE_INIT }; \
static void name##_flist_init(void) { \
diff --git a/src/pulsecore/once.c b/src/pulsecore/once.c
index 05a3ad2..4e509e0 100644
--- a/src/pulsecore/once.c
+++ b/src/pulsecore/once.c
@@ -29,8 +29,6 @@
#include "once.h"
pa_bool_t pa_once_begin(pa_once *control) {
- pa_mutex *m;
-
pa_assert(control);
if (pa_atomic_load(&control->done))
@@ -43,6 +41,7 @@ pa_bool_t pa_once_begin(pa_once *control) {
* executed by us. Hence the awkward locking. */
for (;;) {
+ pa_mutex *m;
if ((m = pa_atomic_ptr_load(&control->mutex))) {
diff --git a/src/pulsecore/thread-posix.c b/src/pulsecore/thread-posix.c
index fdab270..bc0d6e3 100644
--- a/src/pulsecore/thread-posix.c
+++ b/src/pulsecore/thread-posix.c
@@ -80,11 +80,9 @@ pa_thread* pa_thread_new(pa_thread_func_t thread_func, void *userdata) {
pa_assert(thread_func);
- t = pa_xnew(pa_thread, 1);
+ t = pa_xnew0(pa_thread, 1);
t->thread_func = thread_func;
t->userdata = userdata;
- t->joined = FALSE;
- pa_atomic_store(&t->running, 0);
if (pthread_create(&t->id, NULL, internal_thread_func, t) < 0) {
pa_xfree(t);
@@ -135,10 +133,8 @@ pa_thread* pa_thread_self(void) {
/* This is a foreign thread, let's create a pthread structure to
* make sure that we can always return a sensible pointer */
- t = pa_xnew(pa_thread, 1);
+ t = pa_xnew0(pa_thread, 1);
t->id = pthread_self();
- t->thread_func = NULL;
- t->userdata = NULL;
t->joined = TRUE;
pa_atomic_store(&t->running, 2);
diff --git a/src/pulsecore/thread.h b/src/pulsecore/thread.h
index 25eace6..60c1267 100644
--- a/src/pulsecore/thread.h
+++ b/src/pulsecore/thread.h
@@ -55,7 +55,7 @@ void *pa_tls_set(pa_tls *t, void *userdata);
#define PA_STATIC_TLS_DECLARE(name, free_cb) \
static struct { \
pa_once once; \
- pa_tls *tls; \
+ pa_tls *volatile tls; \
} name##_tls = { \
.once = PA_ONCE_INIT, \
.tls = NULL \
commit 41ce7cbde9e3f936c134e3982e5587ce831d04de
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 17:24:37 2010 +0100
bluetooth: fix invalid memory access
When an GetProperties() reply arrives after we already deleted the
device structure for it make sure we don't accidentaly touch the
invalidated object.
https://bugzilla.redhat.com/show_bug.cgi?id=543205
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index 795d510..b2c0429 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -342,7 +342,13 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) {
/* dbus_message_get_interface(p->message), */
/* dbus_message_get_path(p->message)); */
- d = p->call_data;
+ /* We don't use p->call_data here right-away since the device
+ * might already be invalidated at this point */
+
+ if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(p->message))))
+ return;
+
+ pa_assert(p->call_data == d);
valid = dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR ? -1 : 1;
commit f732c23d9504e16b4412755fc11e692e2f4dbacc
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 17:35:04 2010 +0100
log: add an easy way to disable log rate limiting
Should help with debuggin bugs like:
https://bugzilla.redhat.com/show_bug.cgi?id=554405
diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c
index 8c21ee6..0c5a317 100644
--- a/src/pulsecore/log.c
+++ b/src/pulsecore/log.c
@@ -61,6 +61,7 @@
#define ENV_LOG_PRINT_LEVEL "PULSE_LOG_LEVEL"
#define ENV_LOG_BACKTRACE "PULSE_LOG_BACKTRACE"
#define ENV_LOG_BACKTRACE_SKIP "PULSE_LOG_BACKTRACE_SKIP"
+#define ENV_LOG_NO_RATELIMIT "PULSE_LOG_NO_RATE_LIMIT"
static char *ident = NULL; /* in local charset format */
static pa_log_target_t target = PA_LOG_STDERR, target_override;
@@ -68,6 +69,7 @@ static pa_bool_t target_override_set = FALSE;
static pa_log_level_t maximum_level = PA_LOG_ERROR, maximum_level_override = PA_LOG_ERROR;
static unsigned show_backtrace = 0, show_backtrace_override = 0, skip_backtrace = 0;
static pa_log_flags_t flags = 0, flags_override = 0;
+static pa_bool_t no_rate_limit = FALSE;
#ifdef HAVE_SYSLOG_H
static const int level_to_syslog[] = {
@@ -195,54 +197,61 @@ static char* get_backtrace(unsigned show_nframes) {
#endif
static void init_defaults(void) {
- const char *e;
+ PA_ONCE_BEGIN {
- if (!ident) {
- char binary[256];
- if (pa_get_binary_name(binary, sizeof(binary)))
- pa_log_set_ident(binary);
- }
+ const char *e;
- if (getenv(ENV_LOG_SYSLOG)) {
- target_override = PA_LOG_SYSLOG;
- target_override_set = TRUE;
- }
+ if (!ident) {
+ char binary[256];
+ if (pa_get_binary_name(binary, sizeof(binary)))
+ pa_log_set_ident(binary);
+ }
- if ((e = getenv(ENV_LOG_LEVEL))) {
- maximum_level_override = (pa_log_level_t) atoi(e);
+ if (getenv(ENV_LOG_SYSLOG)) {
+ target_override = PA_LOG_SYSLOG;
+ target_override_set = TRUE;
+ }
- if (maximum_level_override >= PA_LOG_LEVEL_MAX)
- maximum_level_override = PA_LOG_LEVEL_MAX-1;
- }
+ if ((e = getenv(ENV_LOG_LEVEL))) {
+ maximum_level_override = (pa_log_level_t) atoi(e);
- if (getenv(ENV_LOG_COLORS))
- flags_override |= PA_LOG_COLORS;
+ if (maximum_level_override >= PA_LOG_LEVEL_MAX)
+ maximum_level_override = PA_LOG_LEVEL_MAX-1;
+ }
- if (getenv(ENV_LOG_PRINT_TIME))
- flags_override |= PA_LOG_PRINT_TIME;
+ if (getenv(ENV_LOG_COLORS))
+ flags_override |= PA_LOG_COLORS;
- if (getenv(ENV_LOG_PRINT_FILE))
- flags_override |= PA_LOG_PRINT_FILE;
+ if (getenv(ENV_LOG_PRINT_TIME))
+ flags_override |= PA_LOG_PRINT_TIME;
- if (getenv(ENV_LOG_PRINT_META))
- flags_override |= PA_LOG_PRINT_META;
+ if (getenv(ENV_LOG_PRINT_FILE))
+ flags_override |= PA_LOG_PRINT_FILE;
- if (getenv(ENV_LOG_PRINT_LEVEL))
- flags_override |= PA_LOG_PRINT_LEVEL;
+ if (getenv(ENV_LOG_PRINT_META))
+ flags_override |= PA_LOG_PRINT_META;
- if ((e = getenv(ENV_LOG_BACKTRACE))) {
- show_backtrace_override = (unsigned) atoi(e);
+ if (getenv(ENV_LOG_PRINT_LEVEL))
+ flags_override |= PA_LOG_PRINT_LEVEL;
- if (show_backtrace_override <= 0)
- show_backtrace_override = 0;
- }
+ if ((e = getenv(ENV_LOG_BACKTRACE))) {
+ show_backtrace_override = (unsigned) atoi(e);
- if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) {
- skip_backtrace = (unsigned) atoi(e);
+ if (show_backtrace_override <= 0)
+ show_backtrace_override = 0;
+ }
- if (skip_backtrace <= 0)
- skip_backtrace = 0;
- }
+ if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) {
+ skip_backtrace = (unsigned) atoi(e);
+
+ if (skip_backtrace <= 0)
+ skip_backtrace = 0;
+ }
+
+ if (getenv(ENV_LOG_NO_RATELIMIT))
+ no_rate_limit = TRUE;
+
+ } PA_ONCE_END;
}
void pa_log_levelv_meta(
@@ -268,9 +277,7 @@ void pa_log_levelv_meta(
pa_assert(level < PA_LOG_LEVEL_MAX);
pa_assert(format);
- PA_ONCE_BEGIN {
- init_defaults();
- } PA_ONCE_END;
+ init_defaults();
_target = target_override_set ? target_override : target;
_maximum_level = PA_MAX(maximum_level, maximum_level_override);
@@ -428,5 +435,10 @@ pa_bool_t pa_log_ratelimit(void) {
/* Not more than 10 messages every 5s */
static PA_DEFINE_RATELIMIT(ratelimit, 5 * PA_USEC_PER_SEC, 10);
+ init_defaults();
+
+ if (no_rate_limit)
+ return TRUE;
+
return pa_ratelimit_test(&ratelimit);
}
commit ce7bd05ca50c946ea6b3ec9a9dcb9bfd7e90ac5e
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 19:41:44 2010 +0100
udev: make sure we get events only for sound devices
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index dfd13ee..9b1fdb0 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -639,6 +639,11 @@ int pa__init(pa_module *m) {
goto fail;
}
+ if (udev_monitor_filter_add_match_subsystem_devtype(u->monitor, "sound", NULL) < 0) {
+ pa_log("Failed to subscribe to sound devices.");
+ goto fail;
+ }
+
errno = 0;
if (udev_monitor_enable_receiving(u->monitor) < 0) {
pa_log("Failed to enable monitor: %s", pa_cstrerror(errno));
commit c88e4680f050a6ac65335b1d8148287cc4566b00
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 20:30:36 2010 +0100
alsa: ignore volume changes from the hw if we are not on the active console
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index ed16c83..690480f 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1103,6 +1103,9 @@ static int mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) {
if (mask == SND_CTL_EVENT_MASK_REMOVE)
return 0;
+ if (u->sink->suspend_cause & PA_SUSPEND_SESSION)
+ return 0;
+
if (mask & SND_CTL_EVENT_MASK_VALUE) {
pa_sink_get_volume(u->sink, TRUE);
pa_sink_get_mute(u->sink, TRUE);
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 157698e..f8b583e 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1051,6 +1051,9 @@ static int mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) {
if (mask == SND_CTL_EVENT_MASK_REMOVE)
return 0;
+ if (u->source->suspend_cause & PA_SUSPEND_SESSION)
+ return 0;
+
if (mask & SND_CTL_EVENT_MASK_VALUE) {
pa_source_get_volume(u->source, TRUE);
pa_source_get_mute(u->source, TRUE);
commit 54025c96a7133964aa1568fe6d2e6c5ad05651bf
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Jan 13 20:31:17 2010 +0100
cpu: check for CMOV flag before using this intsruction in assembly
http://pulseaudio.org/ticket/776
diff --git a/src/pulsecore/cpu-x86.c b/src/pulsecore/cpu-x86.c
index f194a60..b173072 100644
--- a/src/pulsecore/cpu-x86.c
+++ b/src/pulsecore/cpu-x86.c
@@ -57,6 +57,9 @@ void pa_cpu_init_x86 (void) {
if (level >= 1) {
get_cpuid (0x00000001, &eax, &ebx, &ecx, &edx);
+ if (edx & (1<<15))
+ flags |= PA_CPU_X86_CMOV;
+
if (edx & (1<<23))
flags |= PA_CPU_X86_MMX;
@@ -97,7 +100,8 @@ void pa_cpu_init_x86 (void) {
flags |= PA_CPU_X86_3DNOW;
}
- pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s",
+ pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s%s",
+ (flags & PA_CPU_X86_CMOV) ? "CMOV " : "",
(flags & PA_CPU_X86_MMX) ? "MMX " : "",
(flags & PA_CPU_X86_SSE) ? "SSE " : "",
(flags & PA_CPU_X86_SSE2) ? "SSE2 " : "",
diff --git a/src/pulsecore/cpu-x86.h b/src/pulsecore/cpu-x86.h
index f6484c5..285c203 100644
--- a/src/pulsecore/cpu-x86.h
+++ b/src/pulsecore/cpu-x86.h
@@ -35,12 +35,12 @@ typedef enum pa_cpu_x86_flag {
PA_CPU_X86_SSE4_1 = (1 << 6),
PA_CPU_X86_SSE4_2 = (1 << 7),
PA_CPU_X86_3DNOW = (1 << 8),
- PA_CPU_X86_3DNOWEXT = (1 << 9)
+ PA_CPU_X86_3DNOWEXT = (1 << 9),
+ PA_CPU_X86_CMOV = (1 << 10)
} pa_cpu_x86_flag_t;
void pa_cpu_init_x86 (void);
-
#if defined (__i386__)
typedef int32_t pa_reg_x86;
#define PA_REG_a "eax"
diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c
index a011789..0e222cd 100644
--- a/src/pulsecore/svolume_mmx.c
+++ b/src/pulsecore/svolume_mmx.c
@@ -309,7 +309,7 @@ void pa_volume_func_init_mmx (pa_cpu_x86_flag_t flags) {
run_test ();
#endif
- if (flags & PA_CPU_X86_MMX) {
+ if ((flags & PA_CPU_X86_MMX) && (flags & PA_CPU_X86_CMOV)) {
pa_log_info("Initialising MMX optimized functions.");
pa_set_volume_func (PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_mmx);
commit 7f6531d3ce15fd46f75cafa61f9896d2adf6fe94
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Wed Jan 13 23:44:00 2010 +0000
alsa: cover Input Source:Int Mic
As seen on some HDA chips (e.g. Fujitsu Siemens S6410)
Refs http://pulseaudio.org/ticket/772
diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common
index 951e11f..fbdc8fb 100644
--- a/src/modules/alsa/mixer/paths/analog-input.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common
@@ -78,6 +78,10 @@ priority = 19
name = input-microphone
priority = 19
+[Option Input Source:Int Mic]
+name = input-microphone
+priority = 19
+
[Option Input Source:Internal Mic]
name = input-microphone
priority = 19
commit 7b89c8531c1bde251f2c9f247bf65bd1b20ce9c9
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Wed Jan 13 23:47:21 2010 +0000
alsa: Cover the 'Int Mic Boost' element.
This is not 100% ideal as we have not way to tie specific boosts to specific
inputs and this particular chipset (as noted in #772) appears to
support just that.
For the time being incorporate it into the normal boost logic.
See http://pulseaudio.org/ticket/772
diff --git a/src/modules/alsa/mixer/paths/analog-input-mic.conf.common b/src/modules/alsa/mixer/paths/analog-input-mic.conf.common
index b35e7af..4663305 100644
--- a/src/modules/alsa/mixer/paths/analog-input-mic.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-input-mic.conf.common
@@ -61,3 +61,12 @@ name = input-boost-on
[Option Front Mic Boost:off]
name = input-boost-off
+
+[Element Int Mic Boost]
+switch = select
+
+[Option Int Mic Boost:on]
+name = input-boost-on
+
+[Option Int Mic Boost:off]
+name = input-boost-off
commit c2ab61c54d8b9d9a18a56ce873debf530c7f6d4a
Author: Daniel T. Chen <crimsun at ubuntu.com>
Date: Thu Jan 14 00:57:27 2010 +0100
udev: handle sound cards with both modem and audio properly
http://pulseaudio.org/ticket/681
https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/394500
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index 9b1fdb0..4019cd8 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -103,13 +103,17 @@ static const char *path_get_card_id(const char *path) {
return e + 5;
}
+static const char *pa_udev_get_sysattr(const char *card_idx, const char *name);
+
static pa_bool_t is_card_busy(const char *id) {
- char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL;
+ const char *pcm_class;
+ char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL,
+ *sysfs_path = NULL;
DIR *card_dir = NULL, *pcm_dir = NULL;
FILE *status_file = NULL;
size_t len;
struct dirent *space = NULL, *de;
- pa_bool_t busy = FALSE;
+ pa_bool_t busy = FALSE, is_modem = FALSE;
int r;
pa_assert(id);
@@ -127,6 +131,17 @@ static pa_bool_t is_card_busy(const char *id) {
len = offsetof(struct dirent, d_name) + fpathconf(dirfd(card_dir), _PC_NAME_MAX) + 1;
space = pa_xmalloc(len);
+ /* Also check /sys/class/sound/card.../pcmC...D6p/pcm_class. An HDA
+ * modem can be used simultaneously with generic playback/record. */
+
+ pa_xfree(sysfs_path);
+ sysfs_path = pa_sprintf_malloc("pcmC%sD6p/pcm_class", id);
+
+ pcm_class = pa_udev_get_sysattr(id, sysfs_path);
+
+ if (pcm_class && pa_streq(pcm_class, "modem"))
+ is_modem = TRUE;
+
for (;;) {
de = NULL;
@@ -182,7 +197,7 @@ static pa_bool_t is_card_busy(const char *id) {
continue;
}
- if (!pa_streq(line, "closed\n")) {
+ if (!is_modem && !pa_streq(line, "closed\n")) {
busy = TRUE;
break;
}
@@ -193,6 +208,7 @@ fail:
pa_xfree(card_path);
pa_xfree(pcm_path);
+ pa_xfree(sysfs_path);
pa_xfree(sub_status);
pa_xfree(space);
@@ -594,6 +610,43 @@ static int setup_inotify(struct userdata *u) {
return 0;
}
+static const char *pa_udev_get_sysattr(const char *card_idx, const char *name) {
+ struct udev *udev;
+ struct udev_device *card = NULL;
+ char *t, *r = NULL;
+ const char *v;
+
+ pa_assert(card_idx);
+ pa_assert(name);
+
+ if (!(udev = udev_new())) {
+ pa_log_error("Failed to allocate udev context.");
+ goto finish;
+ }
+
+ t = pa_sprintf_malloc("%s/class/sound/card%s", udev_get_sys_path(udev), card_idx);
+ card = udev_device_new_from_syspath(udev, t);
+ pa_xfree(t);
+
+ if (!card) {
+ pa_log_error("Failed to get card object.");
+ goto finish;
+ }
+
+ if ((v = udev_device_get_sysattr_value(card, name)) && *v)
+ r = pa_xstrdup(v);
+
+finish:
+
+ if (card)
+ udev_device_unref(card);
+
+ if (udev)
+ udev_unref(udev);
+
+ return r;
+}
+
int pa__init(pa_module *m) {
struct userdata *u = NULL;
pa_modargs *ma;
commit 63ebd054644f009631e25ad68e93a70415cd0c0c
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 02:06:52 2010 +0100
udev: rework modem detection a bit
Check every single pcm device of a card whether it is a modem.
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index 4019cd8..7695d3c 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -103,17 +103,70 @@ static const char *path_get_card_id(const char *path) {
return e + 5;
}
-static const char *pa_udev_get_sysattr(const char *card_idx, const char *name);
+static char *card_get_sysattr(const char *card_idx, const char *name) {
+ struct udev *udev;
+ struct udev_device *card = NULL;
+ char *t, *r = NULL;
+ const char *v;
+
+ pa_assert(card_idx);
+ pa_assert(name);
+
+ if (!(udev = udev_new())) {
+ pa_log_error("Failed to allocate udev context.");
+ goto finish;
+ }
+
+ t = pa_sprintf_malloc("%s/class/sound/card%s", udev_get_sys_path(udev), card_idx);
+ card = udev_device_new_from_syspath(udev, t);
+ pa_xfree(t);
+
+ if (!card) {
+ pa_log_error("Failed to get card object.");
+ goto finish;
+ }
+
+ if ((v = udev_device_get_sysattr_value(card, name)) && *v)
+ r = pa_xstrdup(v);
+
+finish:
+
+ if (card)
+ udev_device_unref(card);
+
+ if (udev)
+ udev_unref(udev);
+
+ return r;
+}
+
+static pa_bool_t pcm_is_modem(const char *card_idx, const char *pcm) {
+ char *sysfs_path, *pcm_class;
+ pa_bool_t is_modem;
+
+ pa_assert(card_idx);
+ pa_assert(pcm);
+
+ /* Check /sys/class/sound/card.../pcmC...../pcm_class. An HDA
+ * modem can be used simultaneously with generic
+ * playback/record. */
+
+ sysfs_path = pa_sprintf_malloc("pcmC%sD%s/pcm_class", card_idx, pcm);
+ pcm_class = card_get_sysattr(card_idx, sysfs_path);
+ is_modem = pcm_class && pa_streq(pcm_class, "modem");
+ pa_xfree(pcm_class);
+ pa_xfree(sysfs_path);
+
+ return is_modem;
+}
static pa_bool_t is_card_busy(const char *id) {
- const char *pcm_class;
- char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL,
- *sysfs_path = NULL;
+ char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL;
DIR *card_dir = NULL, *pcm_dir = NULL;
FILE *status_file = NULL;
size_t len;
struct dirent *space = NULL, *de;
- pa_bool_t busy = FALSE, is_modem = FALSE;
+ pa_bool_t busy = FALSE;
int r;
pa_assert(id);
@@ -131,17 +184,6 @@ static pa_bool_t is_card_busy(const char *id) {
len = offsetof(struct dirent, d_name) + fpathconf(dirfd(card_dir), _PC_NAME_MAX) + 1;
space = pa_xmalloc(len);
- /* Also check /sys/class/sound/card.../pcmC...D6p/pcm_class. An HDA
- * modem can be used simultaneously with generic playback/record. */
-
- pa_xfree(sysfs_path);
- sysfs_path = pa_sprintf_malloc("pcmC%sD6p/pcm_class", id);
-
- pcm_class = pa_udev_get_sysattr(id, sysfs_path);
-
- if (pcm_class && pa_streq(pcm_class, "modem"))
- is_modem = TRUE;
-
for (;;) {
de = NULL;
@@ -156,6 +198,9 @@ static pa_bool_t is_card_busy(const char *id) {
if (!pa_startswith(de->d_name, "pcm"))
continue;
+ if (pcm_is_modem(id, de->d_name + 3))
+ continue;
+
pa_xfree(pcm_path);
pcm_path = pa_sprintf_malloc("%s/%s", card_path, de->d_name);
@@ -197,7 +242,7 @@ static pa_bool_t is_card_busy(const char *id) {
continue;
}
- if (!is_modem && !pa_streq(line, "closed\n")) {
+ if (!pa_streq(line, "closed\n")) {
busy = TRUE;
break;
}
@@ -208,7 +253,6 @@ fail:
pa_xfree(card_path);
pa_xfree(pcm_path);
- pa_xfree(sysfs_path);
pa_xfree(sub_status);
pa_xfree(space);
@@ -610,43 +654,6 @@ static int setup_inotify(struct userdata *u) {
return 0;
}
-static const char *pa_udev_get_sysattr(const char *card_idx, const char *name) {
- struct udev *udev;
- struct udev_device *card = NULL;
- char *t, *r = NULL;
- const char *v;
-
- pa_assert(card_idx);
- pa_assert(name);
-
- if (!(udev = udev_new())) {
- pa_log_error("Failed to allocate udev context.");
- goto finish;
- }
-
- t = pa_sprintf_malloc("%s/class/sound/card%s", udev_get_sys_path(udev), card_idx);
- card = udev_device_new_from_syspath(udev, t);
- pa_xfree(t);
-
- if (!card) {
- pa_log_error("Failed to get card object.");
- goto finish;
- }
-
- if ((v = udev_device_get_sysattr_value(card, name)) && *v)
- r = pa_xstrdup(v);
-
-finish:
-
- if (card)
- udev_device_unref(card);
-
- if (udev)
- udev_unref(udev);
-
- return r;
-}
-
int pa__init(pa_module *m) {
struct userdata *u = NULL;
pa_modargs *ma;
commit 4315f277bcdb89d2e17c7bf9bd5ac0c2b9b3aa6e
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 02:53:50 2010 +0100
alsa: cover bass boost mixer element
http://pulseaudio.org/ticket/740
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index 8b13239..8bbd1f5 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -1713,6 +1713,8 @@ static int option_verify(pa_alsa_option *o) {
{ "input-boost-off", N_("No Boost") },
{ "output-amplifier-on", N_("Amplifier") },
{ "output-amplifier-off", N_("No Amplifier") },
+ { "output-bass-boost-on", N_("Bass Boost") },
+ { "output-bass-boost-off", N_("No Bass Boost") },
{ "output-speaker", N_("Speaker") },
{ "output-headphones", N_("Headphones") }
};
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common
index fd7f0cf..6131da5 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common
@@ -110,6 +110,17 @@ priority = 10
name = output-amplifier-off
priority = 0
+[Element Bass Boost]
+switch = select
+
+[Option Bass Boost:on]
+name = output-bass-boost-on
+priority = 0
+
+[Option Bass Boost:off]
+name = output-bass-boost-off
+priority = 10
+
;;; 'Analog Output'
[Element Analog Output]
commit 544fa0b7dbc5ba5684f2a4dac7dbc7eebb74afc6
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 20:31:00 2010 +0100
udev: use ID_MODEL_ENC instead of ID_MODEL if it is set
That way we should be able to make use of the nicer USB strings the USB
hw provides.
Fixes the issues pointed out in:
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-January/006248.html
diff --git a/src/modules/udev-util.c b/src/modules/udev-util.c
index cc82446..eee5409 100644
--- a/src/modules/udev-util.c
+++ b/src/modules/udev-util.c
@@ -58,6 +58,112 @@ static int read_id(struct udev_device *d, const char *n) {
return u;
}
+static int dehex(char x) {
+ if (x >= '0' && x <= '9')
+ return x - '0';
+
+ if (x >= 'A' && x <= 'F')
+ return x - 'A';
+
+ if (x >= 'a' && x <= 'f')
+ return x - 'a';
+
+ return -1;
+}
+
+static void proplist_sets_unescape(pa_proplist *p, const char *prop, const char *s) {
+ const char *f;
+ char *t, *r;
+ int c;
+
+ enum {
+ TEXT,
+ BACKSLASH,
+ EX,
+ FIRST
+ } state = TEXT;
+
+ /* The resulting string is definitely shorter than the source string */
+ r = pa_xnew(char, strlen(s)+1);
+
+ for (f = s, t = r; *f; f++) {
+
+ switch (state) {
+
+ case TEXT:
+ if (*f == '\\')
+ state = BACKSLASH;
+ else
+ *(t++) = *f;
+ break;
+
+ case BACKSLASH:
+ if (*f == 'x')
+ state = EX;
+ else {
+ *(t++) = '\\';
+ *(t++) = *f;
+ state = TEXT;
+ }
+ break;
+
+ case EX:
+ c = dehex(*f);
+
+ if (c < 0) {
+ *(t++) = '\\';
+ *(t++) = 'x';
+ *(t++) = *f;
+ state = TEXT;
+ } else
+ state = FIRST;
+
+ break;
+
+ case FIRST: {
+ int d = dehex(*f);
+
+ if (d < 0) {
+ *(t++) = '\\';
+ *(t++) = 'x';
+ *(t++) = *(f-1);
+ *(t++) = *f;
+ } else
+ *(t++) = (char) (c << 4) | d;
+
+ state = TEXT;
+ break;
+ }
+ }
+ }
+
+ switch (state) {
+
+ case TEXT:
+ break;
+
+ case BACKSLASH:
+ *(t++) = '\\';
+ break;
+
+ case EX:
+ *(t++) = '\\';
+ *(t++) = 'x';
+ break;
+
+ case FIRST:
+ *(t++) = '\\';
+ *(t++) = 'x';
+ *(t++) = *(f-1);
+ break;
+ }
+
+ *t = 0;
+
+ pa_proplist_sets(p, prop, r);
+ pa_xfree(r);
+}
+
int pa_udev_get_info(int card_idx, pa_proplist *p) {
int r = -1;
struct udev *udev;
@@ -107,6 +213,8 @@ int pa_udev_get_info(int card_idx, pa_proplist *p) {
if (!pa_proplist_contains(p, PA_PROP_DEVICE_VENDOR_NAME)) {
if ((v = udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE")) && *v)
pa_proplist_sets(p, PA_PROP_DEVICE_VENDOR_NAME, v);
+ else if ((v = udev_device_get_property_value(card, "ID_VENDOR_ENC")) && *v)
+ proplist_sets_unescape(p, PA_PROP_DEVICE_VENDOR_NAME, v);
else if ((v = udev_device_get_property_value(card, "ID_VENDOR")) && *v)
pa_proplist_sets(p, PA_PROP_DEVICE_VENDOR_NAME, v);
}
@@ -118,6 +226,8 @@ int pa_udev_get_info(int card_idx, pa_proplist *p) {
if (!pa_proplist_contains(p, PA_PROP_DEVICE_PRODUCT_NAME)) {
if ((v = udev_device_get_property_value(card, "ID_MODEL_FROM_DATABASE")) && *v)
pa_proplist_sets(p, PA_PROP_DEVICE_PRODUCT_NAME, v);
+ else if ((v = udev_device_get_property_value(card, "ID_MODEL_ENC")) && *v)
+ proplist_sets_unescape(p, PA_PROP_DEVICE_PRODUCT_NAME, v);
else if ((v = udev_device_get_property_value(card, "ID_MODEL")) && *v)
pa_proplist_sets(p, PA_PROP_DEVICE_PRODUCT_NAME, v);
}
commit fb55798a3eb73b4c00225232408b766f74533409
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 15 01:25:21 2010 +0100
pacat: allow configuration of latency in msec
diff --git a/man/pacat.1.xml.in b/man/pacat.1.xml.in
index 68a3a12..2e27450 100644
--- a/man/pacat.1.xml.in
+++ b/man/pacat.1.xml.in
@@ -21,18 +21,22 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
-->
-<manpage name="pacat" section="1" desc="Play back or record raw audio streams on a PulseAudio sound server">
+<manpage name="pacat" section="1" desc="Play back or record raw or encoded audio streams on a PulseAudio sound server">
<synopsis>
+ <cmd>paplay [<arg>options</arg>] [<arg>FILE</arg>]</cmd>
+ <cmd>parecord [<arg>options</arg>] [<arg>FILE</arg>]</cmd>
<cmd>pacat [<arg>options</arg>] [<arg>FILE</arg>]</cmd>
<cmd>parec [<arg>options</arg>] [<arg>FILE</arg>]</cmd>
- <cmd>paplay <opt>--help</opt></cmd>
- <cmd>paplay <opt>--version</opt></cmd>
+ <cmd>pamon [<arg>options</arg>] [<arg>FILE</arg>]</cmd>
+ <cmd>pacat <opt>--help</opt></cmd>
+ <cmd>pacat <opt>--version</opt></cmd>
</synopsis>
<description>
<p><file>pacat</file> is a simple tool for playing back or
- capturing raw audio files on a PulseAudio sound server.</p>
+ capturing raw or encoded audio files on a PulseAudio sound
+ server.</p>
</description>
<options>
@@ -52,13 +56,13 @@ USA.
<option>
<p><opt>-r | --record</opt></p>
- <optdesc><p>Capture raw audio data and write it to the specified file or to STDOUT if none is specified. If the tool is called under the name <file>parec</file> this is the default.</p></optdesc>
+ <optdesc><p>Capture audio data and write it to the specified file or to STDOUT if none is specified. If the tool is called under the name <file>parec</file> this is the default.</p></optdesc>
</option>
<option>
<p><opt>-p | --playback</opt></p>
- <optdesc><p>Read raw audio data from the specified file or STDIN if none is specified, and play it back. If the tool is called under the name <file>pacat</file> this is the default.</p></optdesc>
+ <optdesc><p>Read audio data from the specified file or STDIN if none is specified, and play it back. If the tool is called under the name <file>pacat</file> this is the default.</p></optdesc>
</option>
<option>
@@ -108,14 +112,17 @@ USA.
<optdesc><p>Capture or play back audio with the specified sample
format. Specify one of <opt>u8</opt>, <opt>s16le</opt>,
- <opt>s16be</opt>, <opt>s32le</opt>,
- <opt>s32be</opt>, <opt>float32le</opt>, <opt>float32be</opt>,
- <opt>ulaw</opt>, <opt>alaw</opt>. Depending on the endianess of
- the CPU the
- formats <opt>s16ne</opt>, <opt>s16re</opt>, <opt>s32ne</opt>, <opt>s32re</opt>,
- <opt>float32ne</opt>, <opt>float32re</opt> (for native,
- resp. reverse endian) are available as aliases. Defaults to
- s16ne.</p></optdesc>
+ <opt>s16be</opt>, <opt>s32le</opt>, <opt>s32be</opt>,
+ <opt>float32le</opt>, <opt>float32be</opt>, <opt>ulaw</opt>,
+ <opt>alaw</opt>, <opt>s32le</opt>, <opt>s32be</opt>,
+ <opt>s24le</opt>, <opt>s24be</opt>, <opt>s24-32le</opt>,
+ <opt>s24-32be</opt>. Depending on the endianess of the CPU the
+ formats <opt>s16ne</opt>, <opt>s16re</opt>, <opt>s32ne</opt>,
+ <opt>s32re</opt>, <opt>float32ne</opt>, <opt>float32re</opt>,
+ <opt>s32ne</opt>, <opt>s32re</opt>, <opt>s24ne</opt>,
+ <opt>s24re</opt>, <opt>s24-32ne</opt>, <opt>s24-32re</opt> (for
+ native, resp. reverse endian) are available as aliases. Defaults
+ to s16ne.</p></optdesc>
</option>
<option>
@@ -170,6 +177,65 @@ USA.
<optdesc><p>Never remap channels. Instead of mapping channels by their name this will match them solely by their index/order.</p></optdesc>
</option>
+ <option>
+ <p><opt>--latency</opt><arg>=BYTES</arg></p>
+ <optdesc><p>Explicitly configure the latency, with a time
+ specified in bytes in the selected sample format. If left out
+ the server will pick the latency, usually relatively high for
+ power saving reasons. Use either this option or
+ <opt>--latency-msec</opt>, but not both.</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--latency-msec</opt><arg>=MSEC</arg></p>
+ <optdesc><p>Explicitly configure the latency, with a time
+ specified in miliseconds. If left out the server will pick the
+ latency, usually relatively high for power saving reasons. Use
+ either this option or <opt>--latency</opt>, but not
+ both.</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--process-time</opt><arg>=BYTES</arg></p>
+ <optdesc><p>Explicitly configure the process time, with a time
+ specified in bytes in the selected sample format. If left out
+ the server will pick the process time. Use either this option or
+ <opt>--process-time-msec</opt>, but not both.</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--process-time-msec</opt><arg>=MSEC</arg></p>
+ <optdesc><p>Explicitly configure the process time, with a time
+ specified in miliseconds. If left out the server will pick the
+ process time. Use either this option or <opt>--process-time</opt>,
+ but not both.</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--property</opt><arg>=PROPERTY=VALUE</arg></p>
+ <optdesc><p>Attach a property to the client and stream. May be
+ used multiple times</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--raw</opt></p>
+ <optdesc><p>Play/record raw audio data. This is the default if
+ this program is invoked as <cmd>pacat</cmd>, <cmd>parec</cmd> or
+ <cmd>pamon</cmd>.</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--file-format</opt><arg>[=FFORMAT]</arg></p>
+ <optdesc><p>Play/record encoded audio data in the file format
+ specified. This is the default if this program is invoked as
+ <cmd>paplay</cmd> and <cmd>parecord</cmd>.</p></optdesc>
+ </option>
+
+ <option>
+ <p><opt>--list-file-formats</opt></p>
+ <optdesc><p>List supported file formats.</p></optdesc>
+ </option>
+
</options>
<section name="Authors">
@@ -178,7 +244,7 @@ USA.
<section name="See also">
<p>
- <manref name="pulseaudio" section="1"/>, <manref name="paplay" section="1"/>
+ <manref name="pulseaudio" section="1"/>, <manref name="pactl" section="1"/>
</p>
</section>
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index d348c16..1036af6 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -45,6 +45,7 @@
#include <pulsecore/core-util.h>
#include <pulsecore/log.h>
#include <pulsecore/sndfile-util.h>
+#include <pulsecore/core-util.h>
#define TIME_EVENT_USEC 50000
@@ -86,6 +87,7 @@ static sf_count_t (*writef_function)(SNDFILE *_sndfile, const void *ptr, sf_coun
static pa_stream_flags_t flags = 0;
static size_t latency = 0, process_time = 0;
+static int32_t latency_msec = 0, process_time_msec = 0;
static pa_bool_t raw = TRUE;
static int file_format = -1;
@@ -434,19 +436,25 @@ static void context_state_callback(pa_context *c, void *userdata) {
buffer_attr.maxlength = (uint32_t) -1;
buffer_attr.prebuf = (uint32_t) -1;
- if (latency > 0) {
+ if (latency_msec > 0) {
+ buffer_attr.fragsize = buffer_attr.tlength = pa_usec_to_bytes(latency_msec * PA_USEC_PER_MSEC, &sample_spec);
+ flags |= PA_STREAM_ADJUST_LATENCY;
+ } else if (latency > 0) {
buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) latency;
- buffer_attr.minreq = (uint32_t) process_time;
flags |= PA_STREAM_ADJUST_LATENCY;
- } else {
- buffer_attr.tlength = (uint32_t) -1;
+ } else
+ buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) -1;
+
+ if (process_time_msec > 0) {
+ buffer_attr.minreq = pa_usec_to_bytes(process_time_msec * PA_USEC_PER_MSEC, &sample_spec);
+ } else if (process_time > 0)
+ buffer_attr.minreq = (uint32_t) process_time;
+ else
buffer_attr.minreq = (uint32_t) -1;
- buffer_attr.fragsize = (uint32_t) -1;
- }
if (mode == PLAYBACK) {
pa_cvolume cv;
- if (pa_stream_connect_playback(stream, device, latency > 0 ? &buffer_attr : NULL, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) {
+ if (pa_stream_connect_playback(stream, device, &buffer_attr, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) {
pa_log(_("pa_stream_connect_playback() failed: %s"), pa_strerror(pa_context_errno(c)));
goto fail;
}
@@ -634,9 +642,11 @@ static void help(const char *argv0) {
" --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"
+ " --latency-msec=MSEC Request the specified latency in msec.\n"
+ " --process-time-msec=MSEC Request the specified process time per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
" --raw Record/play raw PCM data.\n"
- " --file-format=FFORMAT Record/play formatted PCM data.\n"
+ " --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n")
, argv0);
}
@@ -659,7 +669,9 @@ enum {
ARG_RAW,
ARG_PROPERTY,
ARG_FILE_FORMAT,
- ARG_LIST_FILE_FORMATS
+ ARG_LIST_FILE_FORMATS,
+ ARG_LATENCY_MSEC,
+ ARG_PROCESS_TIME_MSEC
};
int main(int argc, char *argv[]) {
@@ -695,6 +707,8 @@ int main(int argc, char *argv[]) {
{"raw", 0, NULL, ARG_RAW},
{"file-format", 2, NULL, ARG_FILE_FORMAT},
{"list-file-formats", 0, NULL, ARG_LIST_FILE_FORMATS},
+ {"latency-msec", 1, NULL, ARG_LATENCY_MSEC},
+ {"process-time-msec", 1, NULL, ARG_PROCESS_TIME_MSEC},
{NULL, 0, NULL, 0}
};
@@ -854,6 +868,20 @@ int main(int argc, char *argv[]) {
}
break;
+ case ARG_LATENCY_MSEC:
+ if (((latency_msec = (int32_t) atoi(optarg))) <= 0) {
+ pa_log(_("Invalid latency specification '%s'"), optarg);
+ goto quit;
+ }
+ break;
+
+ case ARG_PROCESS_TIME_MSEC:
+ if (((process_time_msec = (int32_t) atoi(optarg))) <= 0) {
+ pa_log(_("Invalid process time specification '%s'"), optarg);
+ goto quit;
+ }
+ break;
+
case ARG_PROPERTY: {
char *t;
commit d09099526220fb87ac8c4f6bae298b23744d0dae
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Jan 15 01:25:42 2010 +0100
client: implement $PULSE_LATENCY_MSEC
This allows easy overriding of a clients latency setting for debugging
purposes.
http://pulseaudio.org/ticket/753
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index a4f34d9..5e42ab2 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -39,6 +39,7 @@
#include <pulsecore/hashmap.h>
#include <pulsecore/macro.h>
#include <pulsecore/core-rtclock.h>
+#include <pulsecore/core-util.h>
#include "fork-detect.h"
#include "internal.h"
@@ -855,10 +856,28 @@ static void create_stream_complete(pa_stream *s) {
check_smoother_status(s, TRUE, FALSE, FALSE);
}
-static void automatic_buffer_attr(pa_stream *s, pa_buffer_attr *attr, const pa_sample_spec *ss) {
+static void patch_buffer_attr(pa_stream *s, pa_buffer_attr *attr, pa_stream_flags_t *flags) {
+ const char *e;
+
pa_assert(s);
pa_assert(attr);
- pa_assert(ss);
+
+ if ((e = getenv("PULSE_LATENCY_MSEC"))) {
+ uint32_t ms;
+
+ if (pa_atou(e, &ms) < 0 || ms <= 0)
+ pa_log_debug("Failed to parse $PULSE_LATENCY_MSEC: %s", e);
+ else {
+ attr->maxlength = (uint32_t) -1;
+ attr->tlength = pa_usec_to_bytes(ms * PA_USEC_PER_MSEC, &s->sample_spec);
+ attr->minreq = (uint32_t) -1;
+ attr->prebuf = (uint32_t) -1;
+ attr->fragsize = attr->tlength;
+ }
+
+ if (flags)
+ *flags |= PA_STREAM_ADJUST_LATENCY;
+ }
if (s->context->version >= 13)
return;
@@ -873,7 +892,7 @@ static void automatic_buffer_attr(pa_stream *s, pa_buffer_attr *attr, const pa_s
attr->maxlength = 4*1024*1024; /* 4MB is the maximum queue length PulseAudio <= 0.9.9 supported. */
if (attr->tlength == (uint32_t) -1)
- attr->tlength = (uint32_t) pa_usec_to_bytes(250*PA_USEC_PER_MSEC, ss); /* 250ms of buffering */
+ attr->tlength = (uint32_t) pa_usec_to_bytes(250*PA_USEC_PER_MSEC, &s->sample_spec); /* 250ms of buffering */
if (attr->minreq == (uint32_t) -1)
attr->minreq = (attr->tlength)/5; /* Ask for more data when there are only 200ms left in the playback buffer */
@@ -1065,15 +1084,16 @@ static int create_stream(
pa_stream_ref(s);
s->direction = direction;
- s->flags = flags;
- s->corked = !!(flags & PA_STREAM_START_CORKED);
if (sync_stream)
s->syncid = sync_stream->syncid;
if (attr)
s->buffer_attr = *attr;
- automatic_buffer_attr(s, &s->buffer_attr, &s->sample_spec);
+ patch_buffer_attr(s, &s->buffer_attr, &flags);
+
+ s->flags = flags;
+ s->corked = !!(flags & PA_STREAM_START_CORKED);
if (flags & PA_STREAM_INTERPOLATE_TIMING) {
pa_usec_t x;
@@ -2420,6 +2440,7 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr
pa_operation *o;
pa_tagstruct *t;
uint32_t tag;
+ pa_buffer_attr copy;
pa_assert(s);
pa_assert(PA_REFCNT_VALUE(s) >= 1);
@@ -2443,6 +2464,10 @@ pa_operation* pa_stream_set_buffer_attr(pa_stream *s, const pa_buffer_attr *attr
&tag);
pa_tagstruct_putu32(t, s->channel);
+ copy = *attr;
+ patch_buffer_attr(s, ©, NULL);
+ attr = ©
+
pa_tagstruct_putu32(t, attr->maxlength);
if (s->direction == PA_STREAM_PLAYBACK)
commit 66cfa72eb4fd4669dfd7e465c07c41bb7e6d3d85
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Jan 18 01:33:04 2010 +0100
native: rework handling of seeks that depend on variables the client does not know anything about
All seeks/flushes that depend on the playback buffer read pointer cannot
be accounted for properly in the client since it does not know the
actual read pointer. Due to that the clients do not account for it at
all. We need do the same on the server side. And we did, but a little
bit too extreme. While we properly have not applied the changes to the
"request" counter we still do have to apply it to the "missing" counter.
This patch fixes that.
diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c
index 62e6267..cffb901 100644
--- a/src/modules/module-combine.c
+++ b/src/modules/module-combine.c
@@ -562,7 +562,7 @@ static int sink_input_process_msg(pa_msgobject *obj, int code, void *data, int64
if (PA_SINK_IS_OPENED(o->sink_input->sink->thread_info.state))
pa_memblockq_push_align(o->memblockq, chunk);
else
- pa_memblockq_flush_write(o->memblockq);
+ pa_memblockq_flush_write(o->memblockq, TRUE);
return 0;
}
@@ -982,7 +982,7 @@ static void output_disable(struct output *o) {
o->sink_input = NULL;
/* Finally, drop all queued data */
- pa_memblockq_flush_write(o->memblockq);
+ pa_memblockq_flush_write(o->memblockq, TRUE);
pa_asyncmsgq_flush(o->inq, FALSE);
pa_asyncmsgq_flush(o->outq, FALSE);
}
diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index bb0182b..15ef96e 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -430,7 +430,7 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in
if (PA_SINK_IS_OPENED(u->sink_input->sink->thread_info.state))
pa_memblockq_push_align(u->memblockq, chunk);
else
- pa_memblockq_flush_write(u->memblockq);
+ pa_memblockq_flush_write(u->memblockq, TRUE);
update_min_memblockq_length(u);
@@ -457,7 +457,7 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in
if (PA_SINK_IS_OPENED(u->sink_input->sink->thread_info.state))
pa_memblockq_seek(u->memblockq, -offset, PA_SEEK_RELATIVE, TRUE);
else
- pa_memblockq_flush_write(u->memblockq);
+ pa_memblockq_flush_write(u->memblockq, TRUE);
u->recv_counter -= offset;
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 5e42ab2..36514e0 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -2154,6 +2154,11 @@ pa_operation* pa_stream_flush(pa_stream *s, pa_stream_success_cb_t cb, void *use
* index, but the read index might jump. */
invalidate_indexes(s, TRUE, FALSE);
+ /* Note that we do not update requested_bytes here. This is
+ * because we cannot really know how data actually was dropped
+ * from the write index due to this. This 'error' will be applied
+ * by both client and server and hence we should be fine. */
+
return o;
}
diff --git a/src/pulsecore/memblockq.c b/src/pulsecore/memblockq.c
index 4641801..2b063fa 100644
--- a/src/pulsecore/memblockq.c
+++ b/src/pulsecore/memblockq.c
@@ -254,6 +254,8 @@ static void write_index_changed(pa_memblockq *bq, int64_t old_write_index, pa_bo
if (account)
bq->requested -= delta;
+ else
+ bq->missing -= delta;
/* pa_log("pushed/seeked %lli: requested counter at %lli, account=%i", (long long) delta, (long long) bq->requested, account); */
}
@@ -642,7 +644,7 @@ void pa_memblockq_seek(pa_memblockq *bq, int64_t offset, pa_seek_mode_t seek, pa
write_index_changed(bq, old, account);
}
-void pa_memblockq_flush_write(pa_memblockq *bq) {
+void pa_memblockq_flush_write(pa_memblockq *bq, pa_bool_t account) {
int64_t old;
pa_assert(bq);
@@ -652,7 +654,7 @@ void pa_memblockq_flush_write(pa_memblockq *bq) {
bq->write_index = bq->read_index;
pa_memblockq_prebuf_force(bq);
- write_index_changed(bq, old, TRUE);
+ write_index_changed(bq, old, account);
}
void pa_memblockq_flush_read(pa_memblockq *bq) {
diff --git a/src/pulsecore/memblockq.h b/src/pulsecore/memblockq.h
index b756549..402c6cd 100644
--- a/src/pulsecore/memblockq.h
+++ b/src/pulsecore/memblockq.h
@@ -118,7 +118,7 @@ size_t pa_memblockq_pop_missing(pa_memblockq *bq);
int pa_memblockq_splice(pa_memblockq *bq, pa_memblockq *source);
/* Set the queue to silence, set write index to read index */
-void pa_memblockq_flush_write(pa_memblockq *bq);
+void pa_memblockq_flush_write(pa_memblockq *bq, pa_bool_t account);
/* Set the queue to silence, set write read index to write index*/
void pa_memblockq_flush_read(pa_memblockq *bq);
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 89f33d0..ff24612 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1326,6 +1326,10 @@ static void handle_seek(playback_stream *s, int64_t indexw) {
playback_stream_request_bytes(s);
}
+static void flush_write_no_account(pa_memblockq *q) {
+ pa_memblockq_flush_write(q, FALSE);
+}
+
/* Called from thread context */
static int sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk) {
pa_sink_input *i = PA_SINK_INPUT(o);
@@ -1387,7 +1391,7 @@ static int sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int
switch (code) {
case SINK_INPUT_MESSAGE_FLUSH:
- func = pa_memblockq_flush_write;
+ func = flush_write_no_account;
break;
case SINK_INPUT_MESSAGE_PREBUF_FORCE:
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index e73999d..395110b 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -842,7 +842,7 @@ void pa_sink_input_process_rewind(pa_sink_input *i, size_t nbytes /* in sink sam
/* We were asked to drop all buffered data, and rerequest new
* data from implementor the next time push() is called */
- pa_memblockq_flush_write(i->thread_info.render_memblockq);
+ pa_memblockq_flush_write(i->thread_info.render_memblockq, TRUE);
} else if (i->thread_info.rewrite_nbytes > 0) {
size_t max_rewrite, amount;
commit ff2091b2c47dfa7d9f1397627b72d9366b60f566
Author: Colin Guthrie <cguthrie at mandriva.org>
Date: Thu Feb 11 23:33:19 2010 +0000
pacat: Don't use any buffer attr if we don't set any latency/process time params
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index 1036af6..68280e5 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -409,6 +409,7 @@ static void context_state_callback(pa_context *c, void *userdata) {
case PA_CONTEXT_READY: {
pa_buffer_attr buffer_attr;
+ const pa_buffer_attr *active_buffer_attr = NULL;
pa_assert(c);
pa_assert(!stream);
@@ -438,29 +439,33 @@ static void context_state_callback(pa_context *c, void *userdata) {
if (latency_msec > 0) {
buffer_attr.fragsize = buffer_attr.tlength = pa_usec_to_bytes(latency_msec * PA_USEC_PER_MSEC, &sample_spec);
+ active_buffer_attr = &buffer_attr;
flags |= PA_STREAM_ADJUST_LATENCY;
} else if (latency > 0) {
buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) latency;
+ active_buffer_attr = &buffer_attr;
flags |= PA_STREAM_ADJUST_LATENCY;
} else
buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) -1;
if (process_time_msec > 0) {
buffer_attr.minreq = pa_usec_to_bytes(process_time_msec * PA_USEC_PER_MSEC, &sample_spec);
- } else if (process_time > 0)
+ active_buffer_attr = &buffer_attr;
+ } else if (process_time > 0) {
buffer_attr.minreq = (uint32_t) process_time;
- else
+ active_buffer_attr = &buffer_attr;
+ } else
buffer_attr.minreq = (uint32_t) -1;
if (mode == PLAYBACK) {
pa_cvolume cv;
- if (pa_stream_connect_playback(stream, device, &buffer_attr, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) {
+ if (pa_stream_connect_playback(stream, device, active_buffer_attr, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) {
pa_log(_("pa_stream_connect_playback() failed: %s"), pa_strerror(pa_context_errno(c)));
goto fail;
}
} else {
- if (pa_stream_connect_record(stream, device, latency > 0 ? &buffer_attr : NULL, flags) < 0) {
+ if (pa_stream_connect_record(stream, device, active_buffer_attr, flags) < 0) {
pa_log(_("pa_stream_connect_record() failed: %s"), pa_strerror(pa_context_errno(c)));
goto fail;
}
commit 9ffb4f38152d3815fede49b0af7a835682a4f0bf
Author: Pierre-Louis Bossart <pierre-louis.bossart at intel.com>
Date: Thu Feb 11 15:44:11 2010 -0600
virutal-sink: boilerplate virtual sink to add PCM processing
diff --git a/src/modules/module-virtual-sink.c b/src/modules/module-virtual-sink.c
new file mode 100644
index 0000000..4fe4867
--- /dev/null
+++ b/src/modules/module-virtual-sink.c
@@ -0,0 +1,635 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2010 Intel Corporation
+ Contributor: Pierre-Louis Bossart <pierre-louis.bossart at intel.com>
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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.
+***/
+
+/* TODO: Some plugins cause latency, and some even report it by using a control
+ out port. We don't currently use the latency information. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulse/xmalloc.h>
+#include <pulse/i18n.h>
+
+#include <pulsecore/core-error.h>
+#include <pulsecore/namereg.h>
+#include <pulsecore/sink.h>
+#include <pulsecore/module.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/thread.h>
+#include <pulsecore/thread-mq.h>
+#include <pulsecore/rtpoll.h>
+#include <pulsecore/sample-util.h>
+#include <pulsecore/ltdl-helper.h>
+
+#include "module-virtual-sink-symdef.h"
+
+PA_MODULE_AUTHOR("Pierre-Louis Bossart");
+PA_MODULE_DESCRIPTION(_("Virtual sink"));
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(FALSE);
+PA_MODULE_USAGE(
+ _("sink_name=<name for the sink> "
+ "sink_properties=<properties for the sink> "
+ "master=<name of sink to filter> "
+ "format=<sample format> "
+ "rate=<sample rate> "
+ "channels=<number of channels> "
+ "channel_map=<channel map> "
+ ));
+
+#define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+
+struct userdata {
+ pa_module *module;
+
+ pa_sink *sink;
+ pa_sink_input *sink_input;
+
+ pa_memblockq *memblockq;
+
+ pa_bool_t auto_desc;
+ unsigned channels;
+};
+
+static const char* const valid_modargs[] = {
+ "sink_name",
+ "sink_properties",
+ "master",
+ "format",
+ "rate",
+ "channels",
+ "channel_map",
+ NULL
+};
+
+/* Called from I/O thread context */
+static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+ struct userdata *u = PA_SINK(o)->userdata;
+
+ switch (code) {
+
+ case PA_SINK_MESSAGE_GET_LATENCY:
+
+ /* The sink is _put() before the sink input is, so let's
+ * make sure we don't access it in that time. Also, the
+ * sink input is first shut down, the sink second. */
+ if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
+ !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
+ *((pa_usec_t*) data) = 0;
+ return 0;
+ }
+
+ *((pa_usec_t*) data) =
+
+ /* Get the latency of the master sink */
+ pa_sink_get_latency_within_thread(u->sink_input->sink) +
+
+ /* Add the latency internal to our sink input on top */
+ pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
+
+ return 0;
+ }
+
+ return pa_sink_process_msg(o, code, data, offset, chunk);
+}
+
+/* Called from main context */
+static int sink_set_state_cb(pa_sink *s, pa_sink_state_t state) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(state) ||
+ !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+ return 0;
+
+ pa_sink_input_cork(u->sink_input, state == PA_SINK_SUSPENDED);
+ return 0;
+}
+
+/* Called from I/O thread context */
+static void sink_request_rewind_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
+ !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state))
+ return;
+
+ /* Just hand this one over to the master sink */
+ pa_sink_input_request_rewind(u->sink_input, s->thread_info.rewind_nbytes + pa_memblockq_get_length(u->memblockq), TRUE, FALSE, FALSE);
+}
+
+/* Called from I/O thread context */
+static void sink_update_requested_latency_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
+ !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state))
+ return;
+
+ /* Just hand this one over to the master sink */
+ pa_sink_input_set_requested_latency_within_thread(
+ u->sink_input,
+ pa_sink_get_requested_latency_within_thread(s));
+}
+
+/* Called from main context */
+static void sink_set_volume_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(pa_sink_get_state(s)) ||
+ !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+ return;
+
+ pa_sink_input_set_volume(u->sink_input, &s->real_volume, s->save_volume, TRUE);
+}
+
+/* Called from main context */
+static void sink_set_mute_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(pa_sink_get_state(s)) ||
+ !PA_SINK_INPUT_IS_LINKED(pa_sink_input_get_state(u->sink_input)))
+ return;
+
+ pa_sink_input_set_mute(u->sink_input, s->muted, s->save_muted);
+}
+
+/* Called from I/O thread context */
+static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
+ struct userdata *u;
+ float *src, *dst;
+ size_t fs;
+ unsigned n, c;
+ pa_memchunk tchunk;
+ pa_usec_t curr_latency;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert(chunk);
+ pa_assert_se(u = i->userdata);
+
+ /* Hmm, process any rewind request that might be queued up */
+ pa_sink_process_rewind(u->sink, 0);
+
+ while (pa_memblockq_peek(u->memblockq, &tchunk) < 0) {
+ pa_memchunk nchunk;
+
+ pa_sink_render(u->sink, nbytes, &nchunk);
+ pa_memblockq_push(u->memblockq, &nchunk);
+ pa_memblock_unref(nchunk.memblock);
+ }
+
+ tchunk.length = PA_MIN(nbytes, tchunk.length);
+ pa_assert(tchunk.length > 0);
+
+ fs = pa_frame_size(&i->sample_spec);
+ //n = (unsigned) (PA_MIN(tchunk.length, u->block_size) / fs);
+ n = (unsigned) (tchunk.length / fs);
+
+ pa_assert(n > 0);
+
+ chunk->index = 0;
+ chunk->length = n*fs;
+ chunk->memblock = pa_memblock_new(i->sink->core->mempool, chunk->length);
+ pa_assert( chunk->memblock );
+
+ pa_memblockq_drop(u->memblockq, chunk->length);
+
+ src = (float*) ((uint8_t*) pa_memblock_acquire(tchunk.memblock) + tchunk.index);
+ dst = (float*) pa_memblock_acquire(chunk->memblock);
+
+ /* PUT YOUR CODE HERE TO DO SOMETHING WITH THE DATA */
+ /* example, copy input to output */
+ for (c = 0; c < u->channels; c++) {
+ pa_sample_clamp(PA_SAMPLE_FLOAT32NE,dst+c, u->channels*sizeof(float),
+ src+c, u->channels*sizeof(float),n);
+ }
+ pa_memblock_release(tchunk.memblock);
+ pa_memblock_release(chunk->memblock);
+
+ pa_memblock_unref(tchunk.memblock);
+
+
+ curr_latency =
+ /* Get the latency of the master sink */
+ pa_sink_get_latency_within_thread(i->sink) +
+
+ /* Add the latency internal to our sink input on top */
+ pa_bytes_to_usec(pa_memblockq_get_length(i->thread_info.render_memblockq), &i->sink->sample_spec);
+
+ /* FIXME: do something with the latency */
+
+
+ return 0;
+}
+
+/* Called from I/O thread context */
+static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
+ struct userdata *u;
+ size_t amount = 0;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (u->sink->thread_info.rewind_nbytes > 0) {
+ size_t max_rewrite;
+
+ max_rewrite = nbytes + pa_memblockq_get_length(u->memblockq);
+ amount = PA_MIN(u->sink->thread_info.rewind_nbytes, max_rewrite);
+ u->sink->thread_info.rewind_nbytes = 0;
+
+ if (amount > 0) {
+ pa_memblockq_seek(u->memblockq, - (int64_t) amount, PA_SEEK_RELATIVE, TRUE);
+ /* NEED TO RESET POST-PROCESSING HERE */
+
+ }
+ }
+
+ pa_sink_process_rewind(u->sink, amount);
+ pa_memblockq_rewind(u->memblockq, nbytes);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_memblockq_set_maxrewind(u->memblockq, nbytes);
+ pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_max_request_cb(pa_sink_input *i, size_t nbytes) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_set_max_request_within_thread(u->sink, nbytes);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_sink_latency_range_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
+}
+
+/* Called from I/O thread context */
+static void sink_input_update_sink_fixed_latency_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
+}
+
+/* Called from I/O thread context */
+static void sink_input_detach_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_detach_within_thread(u->sink);
+
+ pa_sink_set_rtpoll(u->sink, NULL);
+}
+
+/* Called from I/O thread context */
+static void sink_input_attach_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_set_rtpoll(u->sink, i->sink->thread_info.rtpoll);
+ pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
+ pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
+ pa_sink_set_max_request_within_thread(u->sink, pa_sink_input_get_max_request(i));
+ pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
+
+ pa_sink_attach_within_thread(u->sink);
+}
+
+/* Called from main context */
+static void sink_input_kill_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ /* The order here matters! We first kill the sink input, followed
+ * by the sink. That means the sink callbacks must be protected
+ * against an unconnected sink input! */
+ pa_sink_input_unlink(u->sink_input);
+ pa_sink_unlink(u->sink);
+
+ pa_sink_input_unref(u->sink_input);
+ u->sink_input = NULL;
+
+ pa_sink_unref(u->sink);
+ u->sink = NULL;
+
+ pa_module_unload_request(u->module, TRUE);
+}
+
+/* Called from IO thread context */
+static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ /* If we are added for the first time, ask for a rewinding so that
+ * we are heard right-away. */
+ if (PA_SINK_INPUT_IS_LINKED(state) &&
+ i->thread_info.state == PA_SINK_INPUT_INIT) {
+ pa_log_debug("Requesting rewind due to state change.");
+ pa_sink_input_request_rewind(i, 0, FALSE, TRUE, TRUE);
+ }
+}
+
+/* Called from main context */
+static pa_bool_t sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ return u->sink != dest;
+}
+
+/* Called from main context */
+static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ if (dest) {
+ pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
+ pa_sink_update_flags(u->sink, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
+ } else
+ pa_sink_set_asyncmsgq(u->sink, NULL);
+
+ if (u->auto_desc && dest) {
+ const char *z;
+ pa_proplist *pl;
+
+ pl = pa_proplist_new();
+ z = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_DESCRIPTION);
+ pa_proplist_setf(pl, PA_PROP_DEVICE_DESCRIPTION, "Virtual Sink %s on %s",
+ pa_proplist_gets(u->sink->proplist, "device.vsink.name"), z ? z : dest->name);
+
+ pa_sink_update_proplist(u->sink, PA_UPDATE_REPLACE, pl);
+ pa_proplist_free(pl);
+ }
+}
+
+/* Called from main context */
+static void sink_input_volume_changed_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_volume_changed(u->sink, &i->volume);
+}
+
+/* Called from main context */
+static void sink_input_mute_changed_cb(pa_sink_input *i) {
+ struct userdata *u;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(u = i->userdata);
+
+ pa_sink_mute_changed(u->sink, i->muted);
+}
+
+int pa__init(pa_module*m) {
+ struct userdata *u;
+ pa_sample_spec ss;
+ pa_channel_map map;
+ pa_modargs *ma;
+ pa_sink *master=NULL;
+ pa_sink_input_new_data sink_input_data;
+ pa_sink_new_data sink_data;
+ pa_bool_t *use_default = NULL;
+
+ pa_assert(m);
+
+ if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
+ pa_log("Failed to parse module arguments.");
+ goto fail;
+ }
+
+ if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SINK))) {
+ pa_log("Master sink not found");
+ goto fail;
+ }
+
+ pa_assert(master);
+
+ ss = master->sample_spec;
+ ss.format = PA_SAMPLE_FLOAT32;
+ map = master->channel_map;
+ if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
+ pa_log("Invalid sample format specification or channel map");
+ goto fail;
+ }
+
+
+ u = pa_xnew0(struct userdata, 1);
+ if (!u) {
+ pa_log("Failed to alloc userdata");
+ goto fail;
+ }
+ u->module = m;
+ m->userdata = u;
+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL);
+ if (!u->memblockq) {
+ pa_log("Failed to create sink memblockq.");
+ goto fail;
+ }
+ u->channels = ss.channels;
+
+ /* Create sink */
+ pa_sink_new_data_init(&sink_data);
+ sink_data.driver = __FILE__;
+ sink_data.module = m;
+ if (!(sink_data.name = pa_xstrdup(pa_modargs_get_value(ma, "sink_name", NULL))))
+ sink_data.name = pa_sprintf_malloc("%s.vsink", master->name);
+ pa_sink_new_data_set_sample_spec(&sink_data, &ss);
+ pa_sink_new_data_set_channel_map(&sink_data, &map);
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS, "filter");
+ pa_proplist_sets(sink_data.proplist, "device.vsink.name", sink_data.name);
+
+ if (pa_modargs_get_proplist(ma, "sink_properties", sink_data.proplist, PA_UPDATE_REPLACE) < 0) {
+ pa_log("Invalid properties");
+ pa_sink_new_data_done(&sink_data);
+ goto fail;
+ }
+
+ if ((u->auto_desc = !pa_proplist_contains(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION))) {
+ const char *z;
+
+ z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
+ pa_proplist_setf(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Virtual Sink %s on %s", sink_data.name, z ? z : master->name);
+ }
+
+ u->sink = pa_sink_new(m->core, &sink_data,
+ PA_SINK_HW_MUTE_CTRL|PA_SINK_HW_VOLUME_CTRL|PA_SINK_DECIBEL_VOLUME|
+ (master->flags & (PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY)));
+ pa_sink_new_data_done(&sink_data);
+
+ if (!u->sink) {
+ pa_log("Failed to create sink.");
+ goto fail;
+ }
+
+ u->sink->parent.process_msg = sink_process_msg_cb;
+ u->sink->set_state = sink_set_state_cb;
+ u->sink->update_requested_latency = sink_update_requested_latency_cb;
+ u->sink->request_rewind = sink_request_rewind_cb;
+ u->sink->set_volume = sink_set_volume_cb;
+ u->sink->set_mute = sink_set_mute_cb;
+ u->sink->userdata = u;
+
+ pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
+
+ /* Create sink input */
+ pa_sink_input_new_data_init(&sink_input_data);
+ sink_input_data.driver = __FILE__;
+ sink_input_data.module = m;
+ sink_input_data.sink = master;
+ pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_NAME, "Virtual Sink Stream");
+ pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
+ pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
+ pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
+
+ pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
+ pa_sink_input_new_data_done(&sink_input_data);
+
+ if (!u->sink_input)
+ goto fail;
+
+ u->sink_input->pop = sink_input_pop_cb;
+ u->sink_input->process_rewind = sink_input_process_rewind_cb;
+ u->sink_input->update_max_rewind = sink_input_update_max_rewind_cb;
+ u->sink_input->update_max_request = sink_input_update_max_request_cb;
+ u->sink_input->update_sink_latency_range = sink_input_update_sink_latency_range_cb;
+ u->sink_input->update_sink_fixed_latency = sink_input_update_sink_fixed_latency_cb;
+ u->sink_input->kill = sink_input_kill_cb;
+ u->sink_input->attach = sink_input_attach_cb;
+ u->sink_input->detach = sink_input_detach_cb;
+ u->sink_input->state_change = sink_input_state_change_cb;
+ u->sink_input->may_move_to = sink_input_may_move_to_cb;
+ u->sink_input->moving = sink_input_moving_cb;
+ u->sink_input->volume_changed = sink_input_volume_changed_cb;
+ u->sink_input->mute_changed = sink_input_mute_changed_cb;
+ u->sink_input->userdata = u;
+
+ //pa_sink_input_set_requested_latency(u->sink_input, 5000);
+
+ pa_sink_put(u->sink);
+ pa_sink_input_put(u->sink_input);
+
+ pa_modargs_free(ma);
+
+ pa_xfree(use_default);
+
+ return 0;
+
+ fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa_xfree(use_default);
+
+ pa__done(m);
+
+ return -1;
+}
+
+int pa__get_n_used(pa_module *m) {
+ struct userdata *u;
+
+ pa_assert(m);
+ pa_assert_se(u = m->userdata);
+
+ return pa_sink_linked_by(u->sink);
+}
+
+void pa__done(pa_module*m) {
+ struct userdata *u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ /* See comments in sink_input_kill_cb() above regarding
+ * destruction order! */
+
+ if (u->sink_input)
+ pa_sink_input_unlink(u->sink_input);
+
+ if (u->sink)
+ pa_sink_unlink(u->sink);
+
+ if (u->sink_input)
+ pa_sink_input_unref(u->sink_input);
+
+ if (u->sink)
+ pa_sink_unref(u->sink);
+
+
+ if (u->memblockq)
+ pa_memblockq_free(u->memblockq);
+
+
+ pa_xfree(u);
+}
commit bffd21f5663282cfb23a02fa9036a54debf6365e
Author: Pierre-Louis Bossart <pierre-louis.bossart at intel.com>
Date: Thu Feb 11 15:45:35 2010 -0600
virtual-source: boilerplate virtual source for PCM processing on inputs
diff --git a/src/modules/module-virtual-source.c b/src/modules/module-virtual-source.c
new file mode 100644
index 0000000..fdf89b0
--- /dev/null
+++ b/src/modules/module-virtual-source.c
@@ -0,0 +1,771 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2010 Intel Corporation
+ Contributor: Pierre-Louis Bossart <pierre-louis.bossart at intel.com>
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ 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 <math.h>
+
+#include <pulse/xmalloc.h>
+#include <pulse/i18n.h>
+
+#include <pulsecore/macro.h>
+#include <pulsecore/core-error.h>
+#include <pulsecore/namereg.h>
+#include <pulsecore/sink.h>
+#include <pulsecore/module.h>
+#include <pulsecore/core-rtclock.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/core-error.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/thread.h>
+#include <pulsecore/thread-mq.h>
+#include <pulsecore/rtpoll.h>
+#include <pulsecore/sample-util.h>
+#include <pulsecore/ltdl-helper.h>
+
+#include "module-virtual-source-symdef.h"
+
+PA_MODULE_AUTHOR("Pierre-Louis Bossart");
+PA_MODULE_DESCRIPTION("Virtual source");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(FALSE);
+PA_MODULE_USAGE(
+ _("source_name=<name for the source> "
+ "source_properties=<properties for the source> "
+ "master=<name of source to filter> "
+ "uplink_sink=<name> (optional)"
+ "format=<sample format> "
+ "rate=<sample rate> "
+ "channels=<number of channels> "
+ "channel_map=<channel map> "
+ ));
+
+#define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+#define BLOCK_USEC 1000 /* FIXME */
+
+struct userdata {
+ pa_module *module;
+
+ pa_source *source;
+ pa_source_output *source_output;
+
+ pa_memblockq *memblockq;
+
+ pa_bool_t auto_desc;
+ unsigned channels;
+
+ /* optional fields for uplink sink */
+ pa_sink *sink;
+ pa_usec_t block_usec;
+ pa_memblockq *sink_memblockq;
+
+};
+
+static const char* const valid_modargs[] = {
+ "source_name",
+ "source_properties",
+ "master",
+ "uplink_sink",
+ "format",
+ "rate",
+ "channels",
+ "channel_map",
+ NULL
+};
+
+/* Called from I/O thread context */
+static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+
+ switch (code) {
+
+ case PA_SINK_MESSAGE_GET_LATENCY:
+
+ /* there's no real latency here */
+ *((pa_usec_t*) data) = 0;
+
+ return 0;
+ }
+
+ return pa_sink_process_msg(o, code, data, offset, chunk);
+}
+
+/* Called from main context */
+static int sink_set_state_cb(pa_sink *s, pa_sink_state_t state) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SINK_IS_LINKED(state)) {
+ return 0;
+ }
+
+ if (state == PA_SINK_RUNNING) {
+ /* need to wake-up source if it was suspended */
+ pa_source_suspend(u->source, FALSE, PA_SUSPEND_ALL);
+
+ /* FIXME: if there's no client connected, the source will suspend
+ and playback will be stuck. You'd want to prevent the source from
+ sleeping when the uplink sink is active; even if the audio is
+ discarded at least the app isn't stuck */
+
+ } else {
+ /* nothing to do, if the sink becomes idle or suspended let
+ module-suspend-idle handle the sources later */
+ }
+
+ return 0;
+}
+
+static void sink_update_requested_latency_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ /* FIXME: there's no latency support */
+
+}
+
+
+/* Called from I/O thread context */
+static void sink_request_rewind_cb(pa_sink *s) {
+ struct userdata *u;
+
+ pa_sink_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ /* Do nothing */
+ pa_sink_process_rewind(u->sink, 0);
+
+}
+
+/* Called from I/O thread context */
+static int source_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+ struct userdata *u = PA_SOURCE(o)->userdata;
+
+ switch (code) {
+
+ case PA_SOURCE_MESSAGE_GET_LATENCY:
+
+ /* The source is _put() before the source output is, so let's
+ * make sure we don't access it in that time. Also, the
+ * source output is first shut down, the source second. */
+ if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(u->source_output->thread_info.state)) {
+ *((pa_usec_t*) data) = 0;
+ return 0;
+ }
+
+ *((pa_usec_t*) data) =
+
+ /* Get the latency of the master source */
+ pa_source_get_latency_within_thread(u->source_output->source) +
+
+ /* Add the latency internal to our source output on top */
+ /* FIXME, no idea what I am doing here */
+ pa_bytes_to_usec(pa_memblockq_get_length(u->source_output->thread_info.delay_memblockq), &u->source_output->source->sample_spec);
+
+ return 0;
+ }
+
+ return pa_source_process_msg(o, code, data, offset, chunk);
+}
+
+/* Called from main context */
+static int source_set_state_cb(pa_source *s, pa_source_state_t state) {
+ struct userdata *u;
+
+ pa_source_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SOURCE_IS_LINKED(state) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output)))
+ return 0;
+
+ pa_source_output_cork(u->source_output, state == PA_SOURCE_SUSPENDED);
+ return 0;
+}
+
+/* Called from I/O thread context */
+static void source_update_requested_latency_cb(pa_source *s) {
+ struct userdata *u;
+
+ pa_source_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(u->source_output->thread_info.state))
+ return;
+
+ /* Just hand this one over to the master source */
+ pa_source_output_set_requested_latency_within_thread(
+ u->source_output,
+ pa_source_get_requested_latency_within_thread(s));
+}
+
+/* Called from main context */
+static void source_set_volume_cb(pa_source *s) {
+ struct userdata *u;
+
+ pa_source_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SOURCE_IS_LINKED(pa_source_get_state(s)) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output)))
+ return;
+
+ /* FIXME, no volume control in source_output, set volume at the master */
+ pa_source_set_volume(u->source_output->source, &s->volume, TRUE);
+}
+
+static void source_get_volume_cb(pa_source *s) {
+ struct userdata *u;
+
+ pa_source_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SOURCE_IS_LINKED(pa_source_get_state(s)) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output)))
+ return;
+
+ /* FIXME, no volume control in source_output, get the info from the master */
+ pa_source_get_volume(u->source_output->source, TRUE);
+
+ if (pa_cvolume_equal(&s->volume,&u->source_output->source->volume))
+ /* no change */
+ return;
+
+ s->volume = u->source_output->source->volume;
+ pa_source_set_soft_volume(s, NULL);
+}
+
+
+/* Called from main context */
+static void source_set_mute_cb(pa_source *s) {
+ struct userdata *u;
+
+ pa_source_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SOURCE_IS_LINKED(pa_source_get_state(s)) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output)))
+ return;
+
+ /* FIXME, no volume control in source_output, set mute at the master */
+ pa_source_set_mute(u->source_output->source, TRUE, TRUE);
+}
+
+/* Called from main context */
+static void source_get_mute_cb(pa_source *s) {
+ struct userdata *u;
+
+ pa_source_assert_ref(s);
+ pa_assert_se(u = s->userdata);
+
+ if (!PA_SOURCE_IS_LINKED(pa_source_get_state(s)) ||
+ !PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output)))
+ return;
+
+ /* FIXME, no volume control in source_output, get the info from the master */
+ pa_source_get_mute(u->source_output->source, TRUE);
+}
+
+/* Called from input thread context */
+static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_source_output_assert_io_context(o);
+ pa_assert_se(u = o->userdata);
+
+ if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output))) {
+ pa_log("push when no link?");
+ return;
+ }
+
+ /* PUT YOUR CODE HERE TO DO SOMETHING WITH THE SOURCE DATA */
+
+ /* if uplink sink exists, pull data from there; simplify by using
+ same length as chunk provided by source */
+ if(u->sink && (pa_sink_get_state(u->sink) == PA_SINK_RUNNING)) {
+ pa_memchunk tchunk;
+ size_t nbytes = chunk->length;
+ pa_mix_info streams[2];
+ pa_memchunk target_chunk;
+ void *target;
+ int ch;
+
+ /* Hmm, process any rewind request that might be queued up */
+ pa_sink_process_rewind(u->sink, 0);
+
+ /* get data from the sink */
+ while (pa_memblockq_peek(u->sink_memblockq, &tchunk) < 0) {
+ pa_memchunk nchunk;
+
+ /* make sure we get nbytes from the sink with render_full,
+ otherwise we cannot mix with the uplink */
+ pa_sink_render_full(u->sink, nbytes, &nchunk);
+ pa_memblockq_push(u->sink_memblockq, &nchunk);
+ pa_memblock_unref(nchunk.memblock);
+ }
+ pa_assert(tchunk.length == chunk->length);
+
+ /* move the read pointer for sink memblockq */
+ pa_memblockq_drop(u->sink_memblockq, tchunk.length);
+
+ /* allocate target chunk */
+ /* this could probably be done in-place, but having chunk as both
+ the input and output creates issues with reference counts */
+ target_chunk.index = 0;
+ target_chunk.length = chunk->length;
+ pa_assert(target_chunk.length == chunk->length);
+
+ target_chunk.memblock = pa_memblock_new(o->source->core->mempool,
+ target_chunk.length);
+ pa_assert( target_chunk.memblock );
+
+ /* get target pointer */
+ target = (void*)((uint8_t*)pa_memblock_acquire(target_chunk.memblock)
+ + target_chunk.index);
+
+ /* set-up mixing structure
+ volume was taken care of in sink and source already */
+ streams[0].chunk = *chunk;
+ for(ch=0;ch<o->sample_spec.channels;ch++)
+ streams[0].volume.values[ch] = PA_VOLUME_NORM; /* FIXME */
+ streams[0].volume.channels = o->sample_spec.channels;
+
+ streams[1].chunk = tchunk;
+ for(ch=0;ch<o->sample_spec.channels;ch++)
+ streams[1].volume.values[ch] = PA_VOLUME_NORM; /* FIXME */
+ streams[1].volume.channels = o->sample_spec.channels;
+
+ /* do mixing */
+ pa_mix(streams, /* 2 streams to be mixed */
+ 2,
+ target, /* put result in target chunk */
+ chunk->length, /* same length as input */
+ (const pa_sample_spec *)&o->sample_spec, /* same sample spec for input and output */
+ NULL, /* no volume information */
+ FALSE); /* no mute */
+
+ pa_memblock_release(target_chunk.memblock);
+ pa_memblock_unref(tchunk.memblock); /* clean-up */
+
+ /* forward the data to the virtual source */
+ pa_source_post(u->source, &target_chunk);
+
+ pa_memblock_unref(target_chunk.memblock); /* clean-up */
+
+ } else {
+ /* forward the data to the virtual source */
+ pa_source_post(u->source, chunk);
+ }
+
+
+}
+
+/* Called from input thread context */
+static void source_output_process_rewind_cb(pa_source_output *o, size_t nbytes) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_source_output_assert_io_context(o);
+ pa_assert_se(u = o->userdata);
+
+ /* FIXME, no idea what I am doing here */
+#if 0
+ pa_asyncmsgq_post(u->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_REWIND, NULL, (int64_t) nbytes, NULL, NULL);
+ u->send_counter -= (int64_t) nbytes;
+#endif
+}
+
+/* Called from output thread context */
+static int source_output_process_msg_cb(pa_msgobject *obj, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+
+ /* FIXME, nothing to do here ? */
+
+ return pa_source_output_process_msg(obj, code, data, offset, chunk);
+}
+
+/* Called from output thread context */
+static void source_output_attach_cb(pa_source_output *o) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_source_output_assert_io_context(o);
+ pa_assert_se(u = o->userdata);
+
+ pa_source_set_rtpoll(u->source, o->source->thread_info.rtpoll);
+ pa_source_set_latency_range_within_thread(u->source, o->source->thread_info.min_latency, o->source->thread_info.max_latency);
+ pa_source_set_fixed_latency_within_thread(u->source, o->source->thread_info.fixed_latency);
+ pa_source_set_max_rewind_within_thread(u->source, pa_source_output_get_max_rewind(o));
+
+ pa_source_attach_within_thread(u->source);
+}
+
+/* Called from output thread context */
+static void source_output_detach_cb(pa_source_output *o) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_source_output_assert_io_context(o);
+ pa_assert_se(u = o->userdata);
+
+ pa_source_detach_within_thread(u->source);
+ pa_source_set_rtpoll(u->source, NULL);
+}
+
+/* Called from output thread context */
+static void source_output_state_change_cb(pa_source_output *o, pa_source_output_state_t state) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_source_output_assert_io_context(o);
+ pa_assert_se(u = o->userdata);
+
+ /* FIXME */
+#if 0
+ if (PA_SOURCE_OUTPUT_IS_LINKED(state) && o->thread_info.state == PA_SOURCE_OUTPUT_INIT) {
+
+ u->skip = pa_usec_to_bytes(PA_CLIP_SUB(pa_source_get_latency_within_thread(o->source),
+ u->latency),
+ &o->sample_spec);
+
+ pa_log_info("Skipping %lu bytes", (unsigned long) u->skip);
+ }
+#endif
+}
+
+/* Called from main thread */
+static void source_output_kill_cb(pa_source_output *o) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_assert_ctl_context();
+ pa_assert_se(u = o->userdata);
+
+ /* The order here matters! We first kill the source output, followed
+ * by the source. That means the source callbacks must be protected
+ * against an unconnected source output! */
+ pa_source_output_unlink(u->source_output);
+ pa_source_unlink(u->source);
+
+ pa_source_output_unref(u->source_output);
+ u->source_output = NULL;
+
+ pa_source_unref(u->source);
+ u->source = NULL;
+
+ pa_module_unload_request(u->module, TRUE);
+}
+
+/* Called from main thread */
+static pa_bool_t source_output_may_move_to_cb(pa_source_output *o, pa_source *dest) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_assert_ctl_context();
+ pa_assert_se(u = o->userdata);
+
+ /* FIXME */
+ //return dest != u->source_input->source->monitor_source;
+
+ return TRUE;
+}
+
+/* Called from main thread */
+static void source_output_moving_cb(pa_source_output *o, pa_source *dest) {
+ struct userdata *u;
+
+ pa_source_output_assert_ref(o);
+ pa_assert_ctl_context();
+ pa_assert_se(u = o->userdata);
+
+ if (dest) {
+ pa_source_set_asyncmsgq(u->source, dest->asyncmsgq);
+ pa_source_update_flags(u->source, PA_SOURCE_LATENCY|PA_SOURCE_DYNAMIC_LATENCY, dest->flags);
+ } else
+ pa_source_set_asyncmsgq(u->source, NULL);
+
+ if (u->auto_desc && dest) {
+ const char *z;
+ pa_proplist *pl;
+
+ pl = pa_proplist_new();
+ z = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_DESCRIPTION);
+ pa_proplist_setf(pl, PA_PROP_DEVICE_DESCRIPTION, "Virtual Source %s on %s",
+ pa_proplist_gets(u->source->proplist, "device.vsource.name"), z ? z : dest->name);
+
+ pa_source_update_proplist(u->source, PA_UPDATE_REPLACE, pl);
+ pa_proplist_free(pl);
+ }
+}
+
+
+int pa__init(pa_module*m) {
+ struct userdata *u;
+ pa_sample_spec ss;
+ pa_channel_map map;
+ pa_modargs *ma;
+ pa_source *master=NULL;
+ pa_source_output_new_data source_output_data;
+ pa_source_new_data source_data;
+ pa_bool_t *use_default = NULL;
+
+ /* optional for uplink_sink */
+ pa_sink_new_data sink_data;
+ size_t nbytes;
+
+ pa_assert(m);
+
+ if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
+ pa_log("Failed to parse module arguments.");
+ goto fail;
+ }
+
+ if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SOURCE))) {
+ pa_log("Master source not found");
+ goto fail;
+ }
+
+ pa_assert(master);
+
+ ss = master->sample_spec;
+ ss.format = PA_SAMPLE_FLOAT32;
+ map = master->channel_map;
+ if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
+ pa_log("Invalid sample format specification or channel map");
+ goto fail;
+ }
+
+
+ u = pa_xnew0(struct userdata, 1);
+ if (!u) {
+ pa_log("Failed to alloc userdata");
+ goto fail;
+ }
+ u->module = m;
+ m->userdata = u;
+ u->memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL);
+ if (!u->memblockq) {
+ pa_log("Failed to create source memblockq.");
+ goto fail;
+ }
+ u->channels = ss.channels;
+
+ /* Create source */
+ pa_source_new_data_init(&source_data);
+ source_data.driver = __FILE__;
+ source_data.module = m;
+ if (!(source_data.name = pa_xstrdup(pa_modargs_get_value(ma, "source_name", NULL))))
+ source_data.name = pa_sprintf_malloc("%s.vsource", master->name);
+ pa_source_new_data_set_sample_spec(&source_data, &ss);
+ pa_source_new_data_set_channel_map(&source_data, &map);
+ pa_proplist_sets(source_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
+ pa_proplist_sets(source_data.proplist, PA_PROP_DEVICE_CLASS, "filter");
+ pa_proplist_sets(source_data.proplist, "device.vsource.name", source_data.name);
+
+ if (pa_modargs_get_proplist(ma, "source_properties", source_data.proplist, PA_UPDATE_REPLACE) < 0) {
+ pa_log("Invalid properties");
+ pa_source_new_data_done(&source_data);
+ goto fail;
+ }
+
+ if ((u->auto_desc = !pa_proplist_contains(source_data.proplist, PA_PROP_DEVICE_DESCRIPTION))) {
+ const char *z;
+
+ z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
+ pa_proplist_setf(source_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Virtual Source %s on %s", source_data.name, z ? z : master->name);
+ }
+
+ u->source = pa_source_new(m->core, &source_data,
+ PA_SOURCE_HW_MUTE_CTRL|PA_SOURCE_HW_VOLUME_CTRL|PA_SOURCE_DECIBEL_VOLUME|
+ (master->flags & (PA_SOURCE_LATENCY|PA_SOURCE_DYNAMIC_LATENCY)));
+ pa_source_new_data_done(&source_data);
+
+ if (!u->source) {
+ pa_log("Failed to create source.");
+ goto fail;
+ }
+
+ u->source->parent.process_msg = source_process_msg_cb;
+ u->source->set_state = source_set_state_cb;
+ u->source->update_requested_latency = source_update_requested_latency_cb;
+ u->source->set_volume = source_set_volume_cb;
+ u->source->set_mute = source_set_mute_cb;
+ u->source->get_volume = source_get_volume_cb;
+ u->source->get_mute = source_get_mute_cb;
+ u->source->userdata = u;
+
+ pa_source_set_asyncmsgq(u->source, master->asyncmsgq);
+
+ /* Create source output */
+ pa_source_output_new_data_init(&source_output_data);
+ source_output_data.driver = __FILE__;
+ source_output_data.module = m;
+ source_output_data.source = master;
+ /* FIXME
+ source_output_data.flags = PA_SOURCE_OUTPUT_DONT_INHIBIT_AUTO_SUSPEND; */
+
+ pa_proplist_sets(source_output_data.proplist, PA_PROP_MEDIA_NAME, "Virtual Source Stream");
+ pa_proplist_sets(source_output_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
+ pa_source_output_new_data_set_sample_spec(&source_output_data, &ss);
+ pa_source_output_new_data_set_channel_map(&source_output_data, &map);
+
+ pa_source_output_new(&u->source_output, m->core, &source_output_data);
+ pa_source_output_new_data_done(&source_output_data);
+
+ if (!u->source_output)
+ goto fail;
+
+ u->source_output->parent.process_msg = source_output_process_msg_cb;
+ u->source_output->push = source_output_push_cb;
+ u->source_output->process_rewind = source_output_process_rewind_cb;
+ u->source_output->kill = source_output_kill_cb;
+ u->source_output->attach = source_output_attach_cb;
+ u->source_output->detach = source_output_detach_cb;
+ u->source_output->state_change = source_output_state_change_cb;
+ u->source_output->may_move_to = source_output_may_move_to_cb;
+ u->source_output->moving = source_output_moving_cb;
+ u->source_output->userdata = u;
+
+ pa_source_put(u->source);
+ pa_source_output_put(u->source_output);
+
+ /* Create optional uplink sink */
+ pa_sink_new_data_init(&sink_data);
+ sink_data.driver = __FILE__;
+ sink_data.module = m;
+ if ((sink_data.name = pa_xstrdup(pa_modargs_get_value(ma, "uplink_sink", NULL)))) {
+ pa_sink_new_data_set_sample_spec(&sink_data, &ss);
+ pa_sink_new_data_set_channel_map(&sink_data, &map);
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
+ pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS, "uplink sink");
+ pa_proplist_sets(sink_data.proplist, "device.uplink_sink.name", sink_data.name);
+
+ if ((u->auto_desc = !pa_proplist_contains(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION))) {
+ const char *z;
+
+ z = pa_proplist_gets(master->proplist, PA_PROP_DEVICE_DESCRIPTION);
+ pa_proplist_setf(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Uplink Sink %s on %s", sink_data.name, z ? z : master->name);
+ }
+
+ u->sink_memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL);
+ if (!u->sink_memblockq) {
+ pa_log("Failed to create sink memblockq.");
+ goto fail;
+ }
+
+ u->sink = pa_sink_new(m->core, &sink_data, 0); /* FIXME, sink has no capabilities */
+ pa_sink_new_data_done(&sink_data);
+
+ if (!u->sink) {
+ pa_log("Failed to create sink.");
+ goto fail;
+ }
+
+ u->sink->parent.process_msg = sink_process_msg_cb;
+ u->sink->update_requested_latency = sink_update_requested_latency_cb;
+ u->sink->request_rewind = sink_request_rewind_cb;
+ u->sink->set_state = sink_set_state_cb;
+ u->sink->userdata = u;
+
+ pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
+
+ /* FIXME: no idea what I am doing here */
+ u->block_usec = BLOCK_USEC;
+ nbytes = pa_usec_to_bytes(u->block_usec, &u->sink->sample_spec);
+ pa_sink_set_max_rewind(u->sink, nbytes);
+ pa_sink_set_max_request(u->sink, nbytes);
+
+ pa_sink_put(u->sink);
+ } else {
+ /* optional uplink sink not enabled */
+ u->sink = NULL;
+ }
+
+ pa_modargs_free(ma);
+
+ pa_xfree(use_default);
+
+ return 0;
+
+ fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa_xfree(use_default);
+
+ pa__done(m);
+
+ return -1;
+}
+
+int pa__get_n_used(pa_module *m) {
+ struct userdata *u;
+
+ pa_assert(m);
+ pa_assert_se(u = m->userdata);
+
+ return pa_source_linked_by(u->source);
+}
+
+void pa__done(pa_module*m) {
+ struct userdata *u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ /* See comments in source_output_kill_cb() above regarding
+ * destruction order! */
+
+ if (u->source_output)
+ pa_source_output_unlink(u->source_output);
+
+ if (u->source)
+ pa_source_unlink(u->source);
+
+ if (u->source_output)
+ pa_source_output_unref(u->source_output);
+
+ if (u->source)
+ pa_source_unref(u->source);
+
+ if (u->sink)
+ pa_sink_unref(u->sink);
+
+ if (u->memblockq)
+ pa_memblockq_free(u->memblockq);
+
+ if (u->sink_memblockq)
+ pa_memblockq_free(u->sink_memblockq);
+
+ pa_xfree(u);
+}
commit 3e6293f42279ac9d18aec49767ba17c0ea2274fb
Author: Pierre-Louis Bossart <pierre-louis.bossart at intel.com>
Date: Thu Feb 11 15:46:41 2010 -0600
virtual-sink,source: enable virtual-source and virtual-sink
diff --git a/src/Makefile.am b/src/Makefile.am
index 6c0b4d8..3268137 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1027,7 +1027,9 @@ modlibexec_LTLIBRARIES += \
module-position-event-sounds.la \
module-augment-properties.la \
module-cork-music-on-phone.la \
- module-loopback.la
+ module-loopback.la \
+ module-virtual-sink.la \
+ module-virtual-source.la
# See comment at librtp.la above
if !OS_IS_WIN32
@@ -1292,7 +1294,9 @@ SYMDEF_FILES = \
modules/module-cork-music-on-phone-symdef.h \
modules/module-console-kit-symdef.h \
modules/dbus/module-dbus-protocol-symdef.h \
- modules/module-loopback-symdef.h
+ modules/module-loopback-symdef.h \
+ modules/module-virtual-sink-symdef.h \
+ modules/module-virtual-source-symdef.h
EXTRA_DIST += $(SYMDEF_FILES)
BUILT_SOURCES += $(SYMDEF_FILES)
@@ -1461,6 +1465,14 @@ module_loopback_la_SOURCES = modules/module-loopback.c
module_loopback_la_LDFLAGS = $(MODULE_LDFLAGS)
module_loopback_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_virtual_sink_la_SOURCES = modules/module-virtual-sink.c
+module_virtual_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
+module_virtual_sink_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
+module_virtual_source_la_SOURCES = modules/module-virtual-source.c
+module_virtual_source_la_LDFLAGS = $(MODULE_LDFLAGS)
+module_virtual_source_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
# X11
module_x11_bell_la_SOURCES = modules/x11/module-x11-bell.c
commit 2c631dfe9a57950ae971cbeda14e1ee634348424
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 17:39:47 2010 +0100
pactl: implement pactl subscribe
This is a simple debugging tool which prints out subscription events
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index ee67c42..cae96f2 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -99,7 +99,8 @@ static enum {
SET_SINK_INPUT_VOLUME,
SET_SINK_MUTE,
SET_SOURCE_MUTE,
- SET_SINK_INPUT_MUTE
+ SET_SINK_INPUT_MUTE,
+ SUBSCRIBE
} action = NONE;
static void quit(int ret) {
@@ -728,6 +729,67 @@ static void stream_write_callback(pa_stream *s, size_t length, void *userdata) {
}
}
+static const char *subscription_event_type_to_string(pa_subscription_event_type_t t) {
+
+ switch (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) {
+
+ case PA_SUBSCRIPTION_EVENT_NEW:
+ return _("new");
+
+ case PA_SUBSCRIPTION_EVENT_CHANGE:
+ return _("change");
+
+ case PA_SUBSCRIPTION_EVENT_REMOVE:
+ return _("remove");
+ }
+
+ return _("unknown");
+}
+
+static const char *subscription_event_facility_to_string(pa_subscription_event_type_t t) {
+
+ switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) {
+
+ case PA_SUBSCRIPTION_EVENT_SINK:
+ return _("sink");
+
+ case PA_SUBSCRIPTION_EVENT_SOURCE:
+ return _("source");
+
+ case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
+ return _("sink-input");
+
+ case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
+ return _("source-output");
+
+ case PA_SUBSCRIPTION_EVENT_MODULE:
+ return _("module");
+
+ case PA_SUBSCRIPTION_EVENT_CLIENT:
+ return _("client");
+
+ case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE:
+ return _("sample-cache");
+
+ case PA_SUBSCRIPTION_EVENT_SERVER:
+ return _("server");
+
+ case PA_SUBSCRIPTION_EVENT_CARD:
+ return _("server");
+ }
+
+ return _("unknown");
+}
+
+static void context_subscribe_callback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) {
+ pa_assert(c);
+
+ printf(_("Event '%s' on %s #%u\n"),
+ subscription_event_type_to_string(t),
+ subscription_event_facility_to_string(t),
+ idx);
+}
+
static void context_state_callback(pa_context *c, void *userdata) {
pa_assert(c);
switch (pa_context_get_state(c)) {
@@ -855,6 +917,24 @@ static void context_state_callback(pa_context *c, void *userdata) {
break;
}
+ case SUBSCRIBE:
+ pa_context_set_subscribe_callback(c, context_subscribe_callback, NULL);
+
+ pa_operation_unref(pa_context_subscribe(
+ c,
+ PA_SUBSCRIPTION_MASK_SINK|
+ PA_SUBSCRIPTION_MASK_SOURCE|
+ PA_SUBSCRIPTION_MASK_SINK_INPUT|
+ PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT|
+ PA_SUBSCRIPTION_MASK_MODULE|
+ PA_SUBSCRIPTION_MASK_CLIENT|
+ PA_SUBSCRIPTION_MASK_SAMPLE_CACHE|
+ PA_SUBSCRIPTION_MASK_SERVER|
+ PA_SUBSCRIPTION_MASK_CARD,
+ NULL,
+ NULL));
+ break;
+
default:
pa_assert_not_reached();
}
@@ -898,7 +978,8 @@ static void help(const char *argv0) {
"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
- "%s [options] set-sink-input-mute SINKINPUT 1|0\n\n"
+ "%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+ "%s [options] subscribe\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"
@@ -907,7 +988,7 @@ static void help(const char *argv0) {
argv0, argv0, argv0, argv0, argv0,
argv0, argv0, argv0, argv0, argv0,
argv0, argv0, argv0, argv0, argv0,
- argv0);
+ argv0, argv0);
}
enum {
@@ -1263,7 +1344,11 @@ int main(int argc, char *argv[]) {
mute = b;
- } else if (pa_streq(argv[optind], "help")) {
+ } else if (pa_streq(argv[optind], "subscribe"))
+
+ action = SUBSCRIBE;
+
+ else if (pa_streq(argv[optind], "help")) {
help(bn);
ret = 0;
goto quit;
commit f6f957b53cc8ed945364ef5d51546f59a4c653be
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 17:40:44 2010 +0100
Revert "pacat: Don't use any buffer attr if we don't set any latency/process time params"
This reverts commit ff2091b2c47dfa7d9f1397627b72d9366b60f566.
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index 68280e5..1036af6 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -409,7 +409,6 @@ static void context_state_callback(pa_context *c, void *userdata) {
case PA_CONTEXT_READY: {
pa_buffer_attr buffer_attr;
- const pa_buffer_attr *active_buffer_attr = NULL;
pa_assert(c);
pa_assert(!stream);
@@ -439,33 +438,29 @@ static void context_state_callback(pa_context *c, void *userdata) {
if (latency_msec > 0) {
buffer_attr.fragsize = buffer_attr.tlength = pa_usec_to_bytes(latency_msec * PA_USEC_PER_MSEC, &sample_spec);
- active_buffer_attr = &buffer_attr;
flags |= PA_STREAM_ADJUST_LATENCY;
} else if (latency > 0) {
buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) latency;
- active_buffer_attr = &buffer_attr;
flags |= PA_STREAM_ADJUST_LATENCY;
} else
buffer_attr.fragsize = buffer_attr.tlength = (uint32_t) -1;
if (process_time_msec > 0) {
buffer_attr.minreq = pa_usec_to_bytes(process_time_msec * PA_USEC_PER_MSEC, &sample_spec);
- active_buffer_attr = &buffer_attr;
- } else if (process_time > 0) {
+ } else if (process_time > 0)
buffer_attr.minreq = (uint32_t) process_time;
- active_buffer_attr = &buffer_attr;
- } else
+ else
buffer_attr.minreq = (uint32_t) -1;
if (mode == PLAYBACK) {
pa_cvolume cv;
- if (pa_stream_connect_playback(stream, device, active_buffer_attr, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) {
+ if (pa_stream_connect_playback(stream, device, &buffer_attr, flags, volume_is_set ? pa_cvolume_set(&cv, sample_spec.channels, volume) : NULL, NULL) < 0) {
pa_log(_("pa_stream_connect_playback() failed: %s"), pa_strerror(pa_context_errno(c)));
goto fail;
}
} else {
- if (pa_stream_connect_record(stream, device, active_buffer_attr, flags) < 0) {
+ if (pa_stream_connect_record(stream, device, latency > 0 ? &buffer_attr : NULL, flags) < 0) {
pa_log(_("pa_stream_connect_record() failed: %s"), pa_strerror(pa_context_errno(c)));
goto fail;
}
commit 14e4369bee6a808ca1f57945e7fe7165f7f18a9e
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Feb 15 22:23:39 2010 +0100
alsa: cover "Desktop Speaker" mixer elements
As exposed by really old Microsoft USB sound systems
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index 8bbd1f5..cb814af 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -1784,7 +1784,8 @@ static int path_verify(pa_alsa_path *p) {
{ "analog-output-lfe-on-mono", N_("Analog Output (LFE)") },
{ "analog-output-mono", N_("Analog Mono Output") },
{ "analog-output-headphones-2", N_("Analog Headphones 2") },
- { "analog-output-speaker", N_("Analog Speaker") }
+ { "analog-output-speaker", N_("Analog Speakers") }
+ { "analog-output-desktop-speaker", N_("Analog Speakers 2") }
};
pa_alsa_element *e;
diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf
similarity index 88%
copy from src/modules/alsa/mixer/paths/analog-output-speaker.conf
copy to src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf
index aea7853..9f18b25 100644
--- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf
@@ -14,7 +14,7 @@
# along with PulseAudio; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-; Path for mixers that have a 'Speaker' control
+; Path for mixers that have a 'Desktop Speaker' control
;
; See analog-output.conf.common for an explanation on the directives
@@ -37,9 +37,9 @@ override-map.2 = all-left,all-right
switch = off
volume = off
-; This profile path is intended to control the speaker, not the
-; headphones. But it should not hurt if we leave the headphone jack
-; enabled nonetheless.
+; This profile path is intended to control the desktop speaker, not
+; the headphones. But it should not hurt if we leave the headphone
+; jack enabled nonetheless.
[Element Headphone]
switch = mute
volume = zero
@@ -49,6 +49,10 @@ switch = mute
volume = zero
[Element Speaker]
+switch = off
+volume = off
+
+[Element Desktop Speaker]
required = any
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
index f2fd31c..580c798 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
@@ -55,6 +55,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Desktop Speaker]
+switch = off
+volume = off
+
[Element Front]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
index 2131cfe..79ebc7f 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
@@ -55,6 +55,10 @@ volume = zero
switch = off
volume = off
+[Element Desktop Speaker]
+switch = off
+volume = off
+
[Element Front]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf
index 0a43e27..67ee32f 100644
--- a/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf
@@ -58,6 +58,10 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
+[Element Desktop Speaker]
+switch = off
+volume = off
+
[Element Front]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-output-mono.conf b/src/modules/alsa/mixer/paths/analog-output-mono.conf
index 542edc4..13a2d6a 100644
--- a/src/modules/alsa/mixer/paths/analog-output-mono.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-mono.conf
@@ -55,6 +55,10 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
+[Element Desktop Speaker]
+switch = off
+volume = off
+
[Element Front]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
index aea7853..b133a2e 100644
--- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
@@ -55,6 +55,10 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
+[Element Desktop Speaker]
+switch = off
+volume = off
+
[Element Front]
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output.conf
index d7c1223..50fc88e 100644
--- a/src/modules/alsa/mixer/paths/analog-output.conf
+++ b/src/modules/alsa/mixer/paths/analog-output.conf
@@ -53,6 +53,10 @@ volume = zero
switch = mute
volume = off
+[Element Desktop Speaker]
+switch = mute
+volume = off
+
[Element Front]
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf
index 046938f..5d352f1 100644
--- a/src/modules/alsa/mixer/profile-sets/default.conf
+++ b/src/modules/alsa/mixer/profile-sets/default.conf
@@ -62,42 +62,42 @@ auto-profiles = yes
[Mapping analog-mono]
device-strings = hw:%f
channel-map = mono
-paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line
priority = 1
[Mapping analog-stereo]
device-strings = front:%f hw:%f
channel-map = left,right
-paths-output = analog-output analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono analog-output-lfe-on-mono
paths-input = analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line
priority = 10
[Mapping analog-surround-40]
device-strings = surround40:%f
channel-map = front-left,front-right,rear-left,rear-right
-paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono
priority = 7
direction = output
[Mapping analog-surround-41]
device-strings = surround41:%f
channel-map = front-left,front-right,rear-left,rear-right,lfe
-paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono
priority = 8
direction = output
[Mapping analog-surround-50]
device-strings = surround50:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center
-paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono
priority = 7
direction = output
[Mapping analog-surround-51]
device-strings = surround51:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
-paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono
priority = 8
direction = output
@@ -105,7 +105,7 @@ direction = output
device-strings = surround71:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
description = Analog Surround 7.1
-paths-output = analog-output analog-output-speaker analog-output-lfe-on-mono
+paths-output = analog-output analog-output-speaker analog-output-desktop-speaker analog-output-lfe-on-mono
priority = 7
direction = output
commit 67e3925795ad939f2c9acb3aa93122a18672fade
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Feb 15 23:39:12 2010 +0100
alsa: cover 'Shared Mic/Line in', 'Analog Source'
https://bugzilla.redhat.com/show_bug.cgi?id=558638
diff --git a/src/modules/alsa/mixer/paths/analog-input.conf.common b/src/modules/alsa/mixer/paths/analog-input.conf.common
index fbdc8fb..66c3dda 100644
--- a/src/modules/alsa/mixer/paths/analog-input.conf.common
+++ b/src/modules/alsa/mixer/paths/analog-input.conf.common
@@ -277,6 +277,31 @@ name = input-microphone
[Option Digital Input Source:Digital Mic 2]
name = input-microphone
+;;; 'Analog Source'
+
+[Element Analog Source]
+enumeration = select
+
+[Option Analog Source:Mic]
+name = input-microphone
+
+[Option Analog Source:Line in]
+name = input-linein
+
+[Option Analog Source:Aux]
+name = input
+
+;;; 'Shared Mic/Line in'
+
+[Element Shared Mic/Line in]
+enumeration = select
+
+[Option Shared Mic/Line in:Mic in]
+name = input-microphone
+
+[Option Shared Mic/Line in:Line in]
+name = input-linein
+
;;; Various Boosts
[Element Capture Boost]
commit dfa00bf8f846d0e1ea0f47b09d114768a781abb7
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 16 00:58:49 2010 +0100
alsa: cover "Internal Mic" elements
https://bugzilla.redhat.com/show_bug.cgi?id=562216
diff --git a/src/modules/alsa/mixer/paths/analog-input-aux.conf b/src/modules/alsa/mixer/paths/analog-input-aux.conf
index db78eb4..3a7cb7b 100644
--- a/src/modules/alsa/mixer/paths/analog-input-aux.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-aux.conf
@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-input-fm.conf b/src/modules/alsa/mixer/paths/analog-input-fm.conf
index baf674a..7f150e3 100644
--- a/src/modules/alsa/mixer/paths/analog-input-fm.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-fm.conf
@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-input-mic.conf b/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf
similarity index 92%
copy from src/modules/alsa/mixer/paths/analog-input-mic.conf
copy to src/modules/alsa/mixer/paths/analog-input-internal-mic.conf
index 2a36f2f..70cd512 100644
--- a/src/modules/alsa/mixer/paths/analog-input-mic.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf
@@ -14,12 +14,12 @@
# along with PulseAudio; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-; For devices where a 'Mic' element exists
+; For devices where a 'Internal Mic' element exists
;
; See analog-output.conf.common for an explanation on the directives
[General]
-priority = 100
+priority = 90
name = analog-input-microphone
[Element Capture]
@@ -29,6 +29,10 @@ override-map.1 = all
override-map.2 = all-left,all-right
[Element Mic]
+switch = off
+volume = off
+
+[Element Internal Mic]
required = any
switch = mute
volume = merge
diff --git a/src/modules/alsa/mixer/paths/analog-input-linein.conf b/src/modules/alsa/mixer/paths/analog-input-linein.conf
index 4be5722..57568cc 100644
--- a/src/modules/alsa/mixer/paths/analog-input-linein.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-linein.conf
@@ -31,6 +31,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
required = any
switch = mute
diff --git a/src/modules/alsa/mixer/paths/analog-input-mic-line.conf b/src/modules/alsa/mixer/paths/analog-input-mic-line.conf
index f7f3085..fa680aa 100644
--- a/src/modules/alsa/mixer/paths/analog-input-mic-line.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-mic-line.conf
@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-input-mic.conf b/src/modules/alsa/mixer/paths/analog-input-mic.conf
index 2a36f2f..9b8b75a 100644
--- a/src/modules/alsa/mixer/paths/analog-input-mic.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-mic.conf
@@ -35,6 +35,10 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf b/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf
index 8531ec7..fae3ce8 100644
--- a/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf
@@ -32,6 +32,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-input-video.conf b/src/modules/alsa/mixer/paths/analog-input-video.conf
index 74c76f0..19f1809 100644
--- a/src/modules/alsa/mixer/paths/analog-input-video.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-video.conf
@@ -31,6 +31,10 @@ override-map.2 = all-left,all-right
switch = off
volume = off
+[Element Internal Mic]
+switch = off
+volume = off
+
[Element Line]
switch = off
volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-input.conf b/src/modules/alsa/mixer/paths/analog-input.conf
index 5055f90..3050738 100644
--- a/src/modules/alsa/mixer/paths/analog-input.conf
+++ b/src/modules/alsa/mixer/paths/analog-input.conf
@@ -32,6 +32,9 @@ override-map.2 = all-left,all-right
[Element Mic]
required-absent = any
+[Element Internal Mic]
+required-absent = any
+
[Element Line]
required-absent = any
commit abfd2aa0e712223a3573aa43468dacf3eee3c4e4
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 16 00:59:24 2010 +0100
alsa: use default output port names
instead of coming up with pointless aliases, reuse the already established
names, for second headphones, and second speakers.
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index cb814af..93f2ed0 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -1783,9 +1783,7 @@ static int path_verify(pa_alsa_path *p) {
{ "analog-output-headphones", N_("Analog Headphones") },
{ "analog-output-lfe-on-mono", N_("Analog Output (LFE)") },
{ "analog-output-mono", N_("Analog Mono Output") },
- { "analog-output-headphones-2", N_("Analog Headphones 2") },
{ "analog-output-speaker", N_("Analog Speakers") }
- { "analog-output-desktop-speaker", N_("Analog Speakers 2") }
};
pa_alsa_element *e;
diff --git a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf
index 9f18b25..dfdecf4 100644
--- a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf
@@ -19,7 +19,8 @@
; See analog-output.conf.common for an explanation on the directives
[General]
-priority = 100
+priority = 101
+name = analog-output-speaker
[Element Hardware Master]
switch = mute
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
index 580c798..e47543f 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf
@@ -20,6 +20,7 @@
[General]
priority = 89
+name = analog-output-headphones
[Element Hardware Master]
switch = mute
diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
index 79ebc7f..1d7bb0b 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
@@ -20,6 +20,7 @@
[General]
priority = 90
+name = analog-output-headphones
[Element Hardware Master]
switch = mute
diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
index b133a2e..c6916d6 100644
--- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
@@ -20,6 +20,7 @@
[General]
priority = 100
+name = analog-output-speaker
[Element Hardware Master]
switch = mute
commit 80093c94be077d15fda945786bc1291fb864e51c
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 16 01:43:00 2010 +0100
build-sys: add gobject to build dependencies
Since we call g_object_unref() we need to link against gobject in
compliance of the new Fedora implicit DSO linking policy.
diff --git a/configure.ac b/configure.ac
index 8abaabb..d23e09e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -929,7 +929,7 @@ AC_ARG_ENABLE([gconf],
[gconf=auto])
if test "x${gconf}" != xno ; then
- PKG_CHECK_MODULES(GCONF, [ gconf-2.0 >= 2.4.0 ],
+ PKG_CHECK_MODULES(GCONF, [ gconf-2.0 >= 2.4.0 gobject-2.0 ],
HAVE_GCONF=1,
[
HAVE_GCONF=0
commit 69ddfaf6ed8db98535382413ec4675865053dbc2
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 16 02:03:45 2010 +0100
padsp: emulate /dev/audio, too
https://bugzilla.redhat.com/show_bug.cgi?id=561262
diff --git a/src/utils/padsp.c b/src/utils/padsp.c
index 2ed0a03..fb756d3 100644
--- a/src/utils/padsp.c
+++ b/src/utils/padsp.c
@@ -1458,11 +1458,11 @@ static int real_open(const char *filename, int flags, mode_t mode) {
return _open(filename, flags, mode);
}
- if (filename && dsp_cloak_enable() && (strcmp(filename, "/dev/dsp") == 0 || strcmp(filename, "/dev/adsp") == 0))
+ if (filename && dsp_cloak_enable() && (pa_streq(filename, "/dev/dsp") || pa_streq(filename, "/dev/adsp") || pa_streq(filename, "/dev/audio")))
r = dsp_open(flags, &_errno);
- else if (filename && mixer_cloak_enable() && strcmp(filename, "/dev/mixer") == 0)
+ else if (filename && mixer_cloak_enable() && pa_streq(filename, "/dev/mixer"))
r = mixer_open(flags, &_errno);
- else if (filename && sndstat_cloak_enable() && strcmp(filename, "/dev/sndstat") == 0)
+ else if (filename && sndstat_cloak_enable() && pa_streq(filename, "/dev/sndstat"))
r = sndstat_open(flags, &_errno);
else {
function_exit();
@@ -2383,15 +2383,21 @@ int close(int fd) {
return 0;
}
+static pa_bool_t is_audio_device_node(const char *path) {
+ return
+ pa_streq(path, "/dev/dsp") ||
+ pa_streq(path, "/dev/adsp") ||
+ pa_streq(path, "/dev/audio") ||
+ pa_streq(path, "/dev/sndstat") ||
+ pa_streq(path, "/dev/mixer");
+}
+
int access(const char *pathname, int mode) {
debug(DEBUG_LEVEL_VERBOSE, __FILE__": access(%s)\n", pathname?pathname:"NULL");
if (!pathname ||
- (strcmp(pathname, "/dev/dsp") != 0 &&
- strcmp(pathname, "/dev/adsp") != 0 &&
- strcmp(pathname, "/dev/sndstat") != 0 &&
- strcmp(pathname, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(pathname)) {
LOAD_ACCESS_FUNC();
return _access(pathname, mode);
}
@@ -2417,10 +2423,7 @@ int stat(const char *pathname, struct stat *buf) {
if (!pathname ||
!buf ||
- ( strcmp(pathname, "/dev/dsp") != 0 &&
- strcmp(pathname, "/dev/adsp") != 0 &&
- strcmp(pathname, "/dev/sndstat") != 0 &&
- strcmp(pathname, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(pathname)) {
debug(DEBUG_LEVEL_VERBOSE, __FILE__": stat(%s)\n", pathname?pathname:"NULL");
LOAD_STAT_FUNC();
return _stat(pathname, buf);
@@ -2474,10 +2477,7 @@ int stat64(const char *pathname, struct stat64 *buf) {
if (!pathname ||
!buf ||
- ( strcmp(pathname, "/dev/dsp") != 0 &&
- strcmp(pathname, "/dev/adsp") != 0 &&
- strcmp(pathname, "/dev/sndstat") != 0 &&
- strcmp(pathname, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(pathname)) {
LOAD_STAT64_FUNC();
return _stat64(pathname, buf);
}
@@ -2519,10 +2519,7 @@ int open64(const char *filename, int flags, ...) {
}
if (!filename ||
- ( strcmp(filename, "/dev/dsp") != 0 &&
- strcmp(filename, "/dev/adsp") != 0 &&
- strcmp(filename, "/dev/sndstat") != 0 &&
- strcmp(filename, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(filename)) {
LOAD_OPEN64_FUNC();
return _open64(filename, flags, mode);
}
@@ -2539,10 +2536,7 @@ int __xstat(int ver, const char *pathname, struct stat *buf) {
if (!pathname ||
!buf ||
- ( strcmp(pathname, "/dev/dsp") != 0 &&
- strcmp(pathname, "/dev/adsp") != 0 &&
- strcmp(pathname, "/dev/sndstat") != 0 &&
- strcmp(pathname, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(pathname)) {
LOAD_XSTAT_FUNC();
return ___xstat(ver, pathname, buf);
}
@@ -2562,10 +2556,7 @@ int __xstat64(int ver, const char *pathname, struct stat64 *buf) {
if (!pathname ||
!buf ||
- ( strcmp(pathname, "/dev/dsp") != 0 &&
- strcmp(pathname, "/dev/adsp") != 0 &&
- strcmp(pathname, "/dev/sndstat") != 0 &&
- strcmp(pathname, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(pathname)) {
LOAD_XSTAT64_FUNC();
return ___xstat64(ver, pathname, buf);
}
@@ -2591,10 +2582,7 @@ FILE* fopen(const char *filename, const char *mode) {
if (!filename ||
!mode ||
- ( strcmp(filename, "/dev/dsp") != 0 &&
- strcmp(filename, "/dev/adsp") != 0 &&
- strcmp(filename, "/dev/sndstat") != 0 &&
- strcmp(filename, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(filename)) {
LOAD_FOPEN_FUNC();
return _fopen(filename, mode);
}
@@ -2634,10 +2622,7 @@ FILE *fopen64(const char *filename, const char *mode) {
if (!filename ||
!mode ||
- ( strcmp(filename, "/dev/dsp") != 0 &&
- strcmp(filename, "/dev/adsp") != 0 &&
- strcmp(filename, "/dev/sndstat") != 0 &&
- strcmp(filename, "/dev/mixer") != 0 )) {
+ !is_audio_device_node(filename)) {
LOAD_FOPEN64_FUNC();
return _fopen64(filename, mode);
}
commit ac76dbde6312b8052b80ce0239ef9443cfb27e1f
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 16 02:49:44 2010 +0100
dbus: first restart timer, then dispatch it
This makes sure that we don't access the timer after it might have been
destroyed already from the dbus timeout callback.
https://bugzilla.redhat.com/attachment.cgi?id=389952
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index e3700ea..09ab071 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -45,17 +45,16 @@ struct pa_dbus_wrap_connection {
};
struct timeout_data {
- pa_dbus_wrap_connection *c;
+ pa_dbus_wrap_connection *connection;
DBusTimeout *timeout;
};
static void dispatch_cb(pa_mainloop_api *ea, pa_defer_event *ev, void *userdata) {
DBusConnection *conn = userdata;
- if (dbus_connection_dispatch(conn) == DBUS_DISPATCH_COMPLETE) {
+ if (dbus_connection_dispatch(conn) == DBUS_DISPATCH_COMPLETE)
/* no more data to process, disable the deferred */
ea->defer_enable(ev, 0);
- }
}
/* DBusDispatchStatusFunction callback for the pa mainloop */
@@ -132,13 +131,17 @@ static void handle_time_event(pa_mainloop_api *ea, pa_time_event* e, const struc
struct timeout_data *d = userdata;
pa_assert(d);
- pa_assert(d->c);
+ pa_assert(d->connection);
if (dbus_timeout_get_enabled(d->timeout)) {
- dbus_timeout_handle(d->timeout);
+ /* Restart it for the next scheduled time. We do this before
+ * calling dbus_timeout_handle() to make sure that the time
+ * event is still around. */
+ ea->time_restart(e, pa_timeval_rtstore(&tv,
+ pa_timeval_load(t) + dbus_timeout_get_interval(d->timeout) * PA_USEC_PER_MSEC,
+ d->connection->use_rtclock));
- /* restart it for the next scheduled time */
- ea->time_restart(e, pa_timeval_rtstore(&tv, pa_timeval_load(t) + dbus_timeout_get_interval(d->timeout) * PA_USEC_PER_MSEC, d->c->use_rtclock));
+ dbus_timeout_handle(d->timeout);
}
}
@@ -208,7 +211,7 @@ static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data) {
return FALSE;
d = pa_xnew(struct timeout_data, 1);
- d->c = c;
+ d->connection = c;
d->timeout = timeout;
ev = c->mainloop->time_new(c->mainloop, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, c->use_rtclock), handle_time_event, d);
c->mainloop->time_set_destroy(ev, time_event_destroy_cb);
@@ -237,15 +240,15 @@ static void toggle_timeout(DBusTimeout *timeout, void *data) {
struct timeval tv;
pa_assert(d);
- pa_assert(d->c);
+ pa_assert(d->connection);
pa_assert(timeout);
pa_assert_se(ev = dbus_timeout_get_data(timeout));
- if (dbus_timeout_get_enabled(timeout)) {
- d->c->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, d->c->use_rtclock));
- } else
- d->c->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, PA_USEC_INVALID, d->c->use_rtclock));
+ if (dbus_timeout_get_enabled(timeout))
+ d->connection->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, d->connection->use_rtclock));
+ else
+ d->connection->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, PA_USEC_INVALID, d->connection->use_rtclock));
}
static void wakeup_main(void *userdata) {
commit b9bcc7c733d0e877da24686f413fac10defcfa3c
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Feb 16 03:36:44 2010 +0100
fdsem: be more verbose when reading from eventfd fails.
Apperently reading from an eventfd can fail, which results in an assert
to be hit. I am not sure about the reason for the failure, but in
attempt to track down the issue the next time is hit this prints a more
useful log message.
https://bugzilla.redhat.com/attachment.cgi?id=386380
diff --git a/src/pulsecore/fdsem.c b/src/pulsecore/fdsem.c
index ea14e8a..5bf9947 100644
--- a/src/pulsecore/fdsem.c
+++ b/src/pulsecore/fdsem.c
@@ -35,6 +35,7 @@
#include <pulsecore/thread.h>
#include <pulsecore/macro.h>
#include <pulsecore/core-util.h>
+#include <pulsecore/core-error.h>
#include <pulse/xmalloc.h>
#ifndef HAVE_PIPE
@@ -154,7 +155,12 @@ static void flush(pa_fdsem *f) {
uint64_t u;
if ((r = read(f->efd, &u, sizeof(u))) != sizeof(u)) {
- pa_assert(r < 0 && errno == EINTR);
+
+ if (r >= 0 || errno != EINTR) {
+ pa_log_error("Invalid read from eventfd: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
+ pa_assert_not_reached();
+ }
+
continue;
}
r = (ssize_t) u;
@@ -162,7 +168,12 @@ static void flush(pa_fdsem *f) {
#endif
if ((r = read(f->fds[0], &x, sizeof(x))) <= 0) {
- pa_assert(r < 0 && errno == EINTR);
+
+ if (r >= 0 || errno != EINTR) {
+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
+ pa_assert_not_reached();
+ }
+
continue;
}
@@ -187,14 +198,22 @@ void pa_fdsem_post(pa_fdsem *f) {
uint64_t u = 1;
if ((r = write(f->efd, &u, sizeof(u))) != sizeof(u)) {
- pa_assert(r < 0 && errno == EINTR);
+ if (r >= 0 || errno != EINTR) {
+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
+ pa_assert_not_reached();
+ }
+
continue;
}
} else
#endif
if ((r = write(f->fds[1], &x, 1)) != 1) {
- pa_assert(r < 0 && errno == EINTR);
+ if (r >= 0 || errno != EINTR) {
+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
+ pa_assert_not_reached();
+ }
+
continue;
}
@@ -223,7 +242,12 @@ void pa_fdsem_wait(pa_fdsem *f) {
uint64_t u;
if ((r = read(f->efd, &u, sizeof(u))) != sizeof(u)) {
- pa_assert(r < 0 && errno == EINTR);
+
+ if (r >= 0 || errno != EINTR) {
+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
+ pa_assert_not_reached();
+ }
+
continue;
}
@@ -232,7 +256,12 @@ void pa_fdsem_wait(pa_fdsem *f) {
#endif
if ((r = read(f->fds[0], &x, sizeof(x))) <= 0) {
- pa_assert(r < 0 && errno == EINTR);
+
+ if (r >= 0 || errno != EINTR) {
+ pa_log_error("Invalid read from pipe: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
+ pa_assert_not_reached();
+ }
+
continue;
}
commit d57ba824145f9e42610c0aa21740f219ba671041
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 18 01:54:51 2010 +0100
pacat: always fully fulfill write requests
Make sure we always fulfill write requests from the server. If we don't
the server won't ask us again and playback will stay stuck.
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-February/006611.html
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index 1036af6..75ccd9a 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -195,28 +195,41 @@ static void stream_write_callback(pa_stream *s, size_t length, void *userdata) {
pa_assert(sndfile);
- if (pa_stream_begin_write(s, &data, &length) < 0) {
- pa_log(_("pa_stream_begin_write() failed: %s"), pa_strerror(pa_context_errno(context)));
- quit(1);
- return;
- }
+ for (;;) {
+ size_t data_length = length;
- if (readf_function) {
- size_t k = pa_frame_size(&sample_spec);
+ if (pa_stream_begin_write(s, &data, &data_length) < 0) {
+ pa_log(_("pa_stream_begin_write() failed: %s"), pa_strerror(pa_context_errno(context)));
+ quit(1);
+ return;
+ }
- if ((bytes = readf_function(sndfile, data, (sf_count_t) (length/k))) > 0)
- bytes *= (sf_count_t) k;
+ if (readf_function) {
+ size_t k = pa_frame_size(&sample_spec);
- } else
- bytes = sf_read_raw(sndfile, data, (sf_count_t) length);
+ if ((bytes = readf_function(sndfile, data, (sf_count_t) (data_length/k))) > 0)
+ bytes *= (sf_count_t) k;
- if (bytes > 0)
- pa_stream_write(s, data, (size_t) bytes, NULL, 0, PA_SEEK_RELATIVE);
- else
- pa_stream_cancel_write(s);
+ } else
+ bytes = sf_read_raw(sndfile, data, (sf_count_t) data_length);
- if (bytes < (sf_count_t) length)
- start_drain();
+ if (bytes > 0)
+ pa_stream_write(s, data, (size_t) bytes, NULL, 0, PA_SEEK_RELATIVE);
+ else
+ pa_stream_cancel_write(s);
+
+ /* EOF? */
+ if (bytes < (sf_count_t) data_length) {
+ start_drain();
+ break;
+ }
+
+ /* Request fulfilled */
+ if ((size_t) bytes >= length)
+ break;
+
+ length -= bytes;
+ }
}
}
commit f9f2d6f3e0f9dfa310c7cd29bb06b8b52a0c8a1c
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 18 02:32:35 2010 +0100
pacmd: store away fd type
diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c
index 6ffe94f..c173ccc 100644
--- a/src/utils/pacmd.c
+++ b/src/utils/pacmd.c
@@ -61,6 +61,7 @@ int main(int argc, char*argv[]) {
char *cli;
pa_bool_t ibuf_eof, obuf_eof, ibuf_closed, obuf_closed;
struct pollfd pollfd[N_WATCH];
+ int stdin_type = 0, stdout_type = 0, fd_type = 0;
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, PULSE_LOCALEDIR);
@@ -166,7 +167,7 @@ int main(int argc, char*argv[]) {
ssize_t r;
pa_assert(!ibuf_length);
- if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), NULL)) <= 0) {
+ if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), &stdin_type)) <= 0) {
if (r < 0) {
pa_log(_("read(): %s"), strerror(errno));
goto fail;
@@ -183,7 +184,7 @@ int main(int argc, char*argv[]) {
ssize_t r;
pa_assert(!obuf_length);
- if ((r = pa_read(fd, obuf, sizeof(obuf), NULL)) <= 0) {
+ if ((r = pa_read(fd, obuf, sizeof(obuf), &fd_type)) <= 0) {
if (r < 0) {
pa_log(_("read(): %s"), strerror(errno));
goto fail;
@@ -203,7 +204,7 @@ int main(int argc, char*argv[]) {
ssize_t r;
pa_assert(obuf_length);
- if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, NULL)) < 0) {
+ if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, &stdout_type)) < 0) {
pa_log(_("write(): %s"), strerror(errno));
goto fail;
}
@@ -219,7 +220,7 @@ int main(int argc, char*argv[]) {
ssize_t r;
pa_assert(ibuf_length);
- if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, NULL)) < 0) {
+ if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, &fd_type)) < 0) {
pa_log(_("write(): %s"), strerror(errno));
goto fail;
}
commit c2079d792c0eb8d2cbb8fdfcfc58302842a0a2d2
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 19 03:29:36 2010 +0100
shm: don't complain about missing SHM segments
If two clients try to cleanup the SHM directory at the same time, they
might want to open and then delete the same segment at the same time, in
which case one client might win, the other one lose. In this case, don't
warn about ENOENT.
diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c
index 29849d5..5d5d85a 100644
--- a/src/pulsecore/shm.c
+++ b/src/pulsecore/shm.c
@@ -290,7 +290,7 @@ int pa_shm_attach_ro(pa_shm *m, unsigned id) {
segment_name(fn, sizeof(fn), m->id = id);
if ((fd = shm_open(fn, O_RDONLY, 0)) < 0) {
- if (errno != EACCES)
+ if (errno != EACCES && errno != ENOENT)
pa_log("shm_open() failed: %s", pa_cstrerror(errno));
goto fail;
}
commit 57e0e2cdab5ad59f570d2c476b7329047c03ae85
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 19 03:31:46 2010 +0100
vala: fix definition of INVALID_INDEX
diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi
index 9e05b14..b02bb56 100644
--- a/vala/libpulse.vapi
+++ b/vala/libpulse.vapi
@@ -46,7 +46,7 @@ namespace PulseAudio {
[CCode (cname="PA_CHECK_VERSION")]
public bool CHECK_VERSION(int major, int minor, int micro);
- [CCode (cname="INVALID_INDEX")]
+ [CCode (cname="PA_INVALID_INDEX")]
public const uint32 INVALID_INDEX;
[CCode (cname="pa_free_cb_t")]
commit c25665ed10d6cebaa3d0c6d0ce1e620b01ff8ae9
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 19 03:32:00 2010 +0100
vala: fix definition of the GLib mainloop adapter
diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi
index b02bb56..d47ef73 100644
--- a/vala/libpulse.vapi
+++ b/vala/libpulse.vapi
@@ -879,11 +879,11 @@ namespace PulseAudio {
}
[Compact]
- [CCode (cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")]
+ [CCode (cheader_filename="pulse/glib-mainloop.h", cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")]
public class GLibMainLoop {
[CCode (cname="pa_glib_mainloop_new")]
- public GLibMainLoop();
+ public GLibMainLoop(MainContext? c = null);
public unowned MainLoopApi get_api();
}
commit 27427c114cb93f52bcea3bb8e7900d39b286a271
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 16:19:40 2010 +0100
channelmap: Use "Subwoofer" as pretty name for LFE
The pretty name is suspposed to be understandable by non-technical
folks, and they are generally more used to the term "Subwoofer" than
"Low Frequency Emitter", so let's change the name here.
diff --git a/src/pulse/channelmap.c b/src/pulse/channelmap.c
index 9b51626..83fdb43 100644
--- a/src/pulse/channelmap.c
+++ b/src/pulse/channelmap.c
@@ -112,7 +112,7 @@ const char *const pretty_table[PA_CHANNEL_POSITION_MAX] = {
[PA_CHANNEL_POSITION_REAR_LEFT] = N_("Rear Left"),
[PA_CHANNEL_POSITION_REAR_RIGHT] = N_("Rear Right"),
- [PA_CHANNEL_POSITION_LFE] = N_("Low Frequency Emmiter"),
+ [PA_CHANNEL_POSITION_LFE] = N_("Subwoofer"),
[PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER] = N_("Front Left-of-center"),
[PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER] = N_("Front Right-of-center"),
commit 534def2d2b5d62c3ce85672d82d58223c7ea054d
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 16:21:13 2010 +0100
vala: fix wrapping of port setting calls
diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi
index d47ef73..21c0f7c 100644
--- a/vala/libpulse.vapi
+++ b/vala/libpulse.vapi
@@ -1024,7 +1024,7 @@ namespace PulseAudio {
public Operation? suspend_sink_by_index(uint32 idx, bool suspend, SuccessCb? cb = null);
public Operation? set_sink_port_by_name(string name, string port, SuccessCb? cb = null);
- public Operation? set_sink_port_by_index(string idx, string port, SuccessCb? cb = null);
+ public Operation? set_sink_port_by_index(uint32 idx, string port, SuccessCb? cb = null);
public Operation? get_source_info_by_name(string name, SourceInfoCb cb);
public Operation? get_source_info_by_index(uint32 idx, SourceInfoCb cb);
@@ -1039,7 +1039,7 @@ namespace PulseAudio {
public Operation? suspend_source_by_index(uint32 idx, bool suspend, SuccessCb? cb = null);
public Operation? set_source_port_by_name(string name, string port, SuccessCb? cb = null);
- public Operation? set_source_port_by_index(string idx, string port, SuccessCb? cb = null);
+ public Operation? set_source_port_by_index(uint32 idx, string port, SuccessCb? cb = null);
public Operation? get_server_info(ServerInfoCb cb);
commit 7098d60b302c94f560ea1014b5079a346ba843b2
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 16:21:43 2010 +0100
proplist: explicitly mention a role 'test'
diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index e3f0af0..5db3ada 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -59,7 +59,7 @@ PA_C_DECL_BEGIN
/** For streams: an XDG icon name for the media. e.g. "audio-x-mp3" */
#define PA_PROP_MEDIA_ICON_NAME "media.icon_name"
-/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production", "a11y" */
+/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production", "a11y", "test" */
#define PA_PROP_MEDIA_ROLE "media.role"
/** For event sound streams: XDG event sound name. e.g. "message-new-email" (Event sound streams are those with media.role set to "event") */
commit 857ff2c160c19699ecc541767ac443fa61456cb5
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 16:22:17 2010 +0100
stream-restore: be a little bit more verbose why we don't reastore a sink
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 64a7fd3..c16a74c 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -1278,7 +1278,7 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
return PA_HOOK_OK;
if (new_data->sink)
- pa_log_debug("Not restoring device for stream %s, because already set.", name);
+ pa_log_debug("Not restoring device for stream %s, because already set to '%s'.", name, new_data->sink->name);
else if ((e = read_entry(u, name))) {
pa_sink *s = NULL;
commit 3f1c90b9d7fa434ae90b45018255d086b0fa6e8a
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 16:23:25 2010 +0100
sample-cache: use the sample name as unmodified fallback in the properties when playing a sample from the cache
diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c
index 1fb81d0..95aaa10 100644
--- a/src/pulsecore/core-scache.c
+++ b/src/pulsecore/core-scache.c
@@ -310,7 +310,8 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t
return -1;
merged = pa_proplist_new();
- pa_proplist_setf(merged, PA_PROP_MEDIA_NAME, "Sample %s", name);
+ pa_proplist_sets(merged, PA_PROP_MEDIA_NAME, name);
+ pa_proplist_sets(merged, PA_PROP_EVENT_ID, name);
if (e->lazy && !e->memchunk.memblock) {
pa_channel_map old_channel_map = e->channel_map;
commit ea29b11097b9d4180582924ca5df142fae4b6400
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 17:35:05 2010 +0100
scache: when playing a sample from the cache make sure not queue them up when the sink is suspended
libcanberra already sets the appropriate flags for uncached sample
streams, we now need to make sure to set them for cached samples too.
diff --git a/src/pulsecore/core-scache.c b/src/pulsecore/core-scache.c
index 95aaa10..0172419 100644
--- a/src/pulsecore/core-scache.c
+++ b/src/pulsecore/core-scache.c
@@ -351,7 +351,12 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, pa_volume_t
if (p)
pa_proplist_update(merged, PA_UPDATE_REPLACE, p);
- if (pa_play_memchunk(sink, &e->sample_spec, &e->channel_map, &e->memchunk, pass_volume ? &r : NULL, merged, sink_input_idx) < 0)
+ if (pa_play_memchunk(sink,
+ &e->sample_spec, &e->channel_map,
+ &e->memchunk,
+ pass_volume ? &r : NULL,
+ merged,
+ PA_SINK_INPUT_NO_CREATE_ON_SUSPEND|PA_SINK_INPUT_KILL_ON_SUSPEND, sink_input_idx) < 0)
goto fail;
pa_proplist_free(merged);
diff --git a/src/pulsecore/play-memblockq.c b/src/pulsecore/play-memblockq.c
index f528c49..0d6da3e 100644
--- a/src/pulsecore/play-memblockq.c
+++ b/src/pulsecore/play-memblockq.c
@@ -173,7 +173,8 @@ pa_sink_input* pa_memblockq_sink_input_new(
const pa_channel_map *map,
pa_memblockq *q,
pa_cvolume *volume,
- pa_proplist *p) {
+ pa_proplist *p,
+ pa_sink_input_flags_t flags) {
memblockq_stream *u = NULL;
pa_sink_input_new_data data;
@@ -198,6 +199,7 @@ pa_sink_input* pa_memblockq_sink_input_new(
pa_sink_input_new_data_set_channel_map(&data, map);
pa_sink_input_new_data_set_volume(&data, volume);
pa_proplist_update(data.proplist, PA_UPDATE_REPLACE, p);
+ data.flags |= flags;
pa_sink_input_new(&u->sink_input, sink->core, &data);
pa_sink_input_new_data_done(&data);
@@ -237,6 +239,7 @@ int pa_play_memblockq(
pa_memblockq *q,
pa_cvolume *volume,
pa_proplist *p,
+ pa_sink_input_flags_t flags,
uint32_t *sink_input_index) {
pa_sink_input *i;
@@ -245,7 +248,7 @@ int pa_play_memblockq(
pa_assert(ss);
pa_assert(q);
- if (!(i = pa_memblockq_sink_input_new(sink, ss, map, q, volume, p)))
+ if (!(i = pa_memblockq_sink_input_new(sink, ss, map, q, volume, p, flags)))
return -1;
pa_sink_input_put(i);
diff --git a/src/pulsecore/play-memblockq.h b/src/pulsecore/play-memblockq.h
index 9d5f40f..a55fed0 100644
--- a/src/pulsecore/play-memblockq.h
+++ b/src/pulsecore/play-memblockq.h
@@ -31,17 +31,19 @@ pa_sink_input* pa_memblockq_sink_input_new(
const pa_channel_map *map,
pa_memblockq *q,
pa_cvolume *volume,
- pa_proplist *p);
+ pa_proplist *p,
+ pa_sink_input_flags_t flags);
void pa_memblockq_sink_input_set_queue(pa_sink_input *i, pa_memblockq *q);
int pa_play_memblockq(
- pa_sink *sink,
- const pa_sample_spec *ss,
- const pa_channel_map *map,
- pa_memblockq *q,
- pa_cvolume *cvolume,
- pa_proplist *p,
- uint32_t *sink_input_index);
+ pa_sink *sink,
+ const pa_sample_spec *ss,
+ const pa_channel_map *map,
+ pa_memblockq *q,
+ pa_cvolume *cvolume,
+ pa_proplist *p,
+ pa_sink_input_flags_t flags,
+ uint32_t *sink_input_index);
#endif
diff --git a/src/pulsecore/play-memchunk.c b/src/pulsecore/play-memchunk.c
index 1a3bd5b..6fb8902 100644
--- a/src/pulsecore/play-memchunk.c
+++ b/src/pulsecore/play-memchunk.c
@@ -43,6 +43,7 @@ int pa_play_memchunk(
const pa_memchunk *chunk,
pa_cvolume *volume,
pa_proplist *p,
+ pa_sink_input_flags_t flags,
uint32_t *sink_input_index) {
pa_memblockq *q;
@@ -59,7 +60,7 @@ int pa_play_memchunk(
pa_assert_se(pa_memblockq_push(q, chunk) >= 0);
- if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, sink_input_index)) < 0) {
+ if ((r = pa_play_memblockq(sink, ss, map, q, volume, p, flags, sink_input_index)) < 0) {
pa_memblockq_free(q);
return r;
}
diff --git a/src/pulsecore/play-memchunk.h b/src/pulsecore/play-memchunk.h
index c813611..068add1 100644
--- a/src/pulsecore/play-memchunk.h
+++ b/src/pulsecore/play-memchunk.h
@@ -26,12 +26,13 @@
#include <pulsecore/memchunk.h>
int pa_play_memchunk(
- pa_sink *sink,
- const pa_sample_spec *ss,
- const pa_channel_map *map,
- const pa_memchunk *chunk,
- pa_cvolume *cvolume,
- pa_proplist *p,
- uint32_t *sink_input_index);
+ pa_sink *sink,
+ const pa_sample_spec *ss,
+ const pa_channel_map *map,
+ const pa_memchunk *chunk,
+ pa_cvolume *cvolume,
+ pa_proplist *p,
+ pa_sink_input_flags_t flags,
+ uint32_t *sink_input_index);
#endif
commit 83eb8afc5f9faaa4d17fce7dbde58b1863d9173c
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Jan 14 02:33:49 2010 +0100
daemon: first take name on the bus, then return in starter process
http://pulseaudio.org/ticket/748
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 5ccda77..9bea2ae 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -1027,15 +1027,6 @@ int main(int argc, char *argv[]) {
* from now on, if requested */
c->disallow_module_loading = !!conf->disallow_module_loading;
-#ifdef HAVE_FORK
- if (daemon_pipe[1] >= 0) {
- int ok = 0;
- pa_loop_write(daemon_pipe[1], &ok, sizeof(ok), NULL);
- pa_close(daemon_pipe[1]);
- daemon_pipe[1] = -1;
- }
-#endif
-
#ifdef HAVE_DBUS
if (!conf->system_instance) {
if (!(server_lookup = pa_dbusobj_server_lookup_new(c)))
@@ -1048,6 +1039,15 @@ int main(int argc, char *argv[]) {
goto finish;
#endif
+#ifdef HAVE_FORK
+ if (daemon_pipe[1] >= 0) {
+ int ok = 0;
+ pa_loop_write(daemon_pipe[1], &ok, sizeof(ok), NULL);
+ pa_close(daemon_pipe[1]);
+ daemon_pipe[1] = -1;
+ }
+#endif
+
pa_log_info(_("Daemon startup complete."));
retval = 0;
commit 609a005b77b5dc691271f48351bd39e3eecb7dc9
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 18 03:28:56 2010 +0100
pacmd: don't enter busy loop when reading from stdin very early
pointed out in:
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-January/006365.html
diff --git a/src/utils/pacmd.c b/src/utils/pacmd.c
index c173ccc..143a948 100644
--- a/src/utils/pacmd.c
+++ b/src/utils/pacmd.c
@@ -45,13 +45,6 @@
int main(int argc, char*argv[]) {
- enum {
- WATCH_STDIN,
- WATCH_STDOUT,
- WATCH_SOCKET,
- N_WATCH
- };
-
pid_t pid ;
int fd = -1;
int ret = 1, i;
@@ -60,7 +53,9 @@ int main(int argc, char*argv[]) {
size_t ibuf_index, ibuf_length, obuf_index, obuf_length;
char *cli;
pa_bool_t ibuf_eof, obuf_eof, ibuf_closed, obuf_closed;
- struct pollfd pollfd[N_WATCH];
+ struct pollfd pollfd[3];
+ struct pollfd *watch_socket, *watch_stdin, *watch_stdout;
+
int stdin_type = 0, stdout_type = 0, fd_type = 0;
setlocale(LC_ALL, "");
@@ -129,32 +124,53 @@ int main(int argc, char*argv[]) {
ibuf_eof = TRUE;
}
- pa_zero(pollfd);
-
- pollfd[WATCH_STDIN].fd = STDIN_FILENO;
- pollfd[WATCH_STDOUT].fd = STDOUT_FILENO;
- pollfd[WATCH_SOCKET].fd = fd;
-
for (;;) {
+ struct pollfd *p;
+
if (ibuf_eof &&
obuf_eof &&
ibuf_length <= 0 &&
obuf_length <= 0)
break;
- pollfd[WATCH_STDIN].events = pollfd[WATCH_STDOUT].events = pollfd[WATCH_SOCKET].events = 0;
+ if (ibuf_length <= 0 && ibuf_eof && !ibuf_closed) {
+ shutdown(fd, SHUT_WR);
+ ibuf_closed = TRUE;
+ }
- if (obuf_length > 0)
- pollfd[WATCH_STDOUT].events |= POLLOUT;
- else if (!obuf_eof)
- pollfd[WATCH_SOCKET].events |= POLLIN;
+ if (obuf_length <= 0 && obuf_eof && !obuf_closed) {
+ shutdown(fd, SHUT_RD);
+ obuf_closed = TRUE;
+ }
+
+ pa_zero(pollfd);
+
+ p = pollfd;
- if (ibuf_length > 0)
- pollfd[WATCH_SOCKET].events |= POLLOUT;
- else if (!ibuf_eof)
- pollfd[WATCH_STDIN].events |= POLLIN;
+ if (ibuf_length > 0 || (!obuf_eof && obuf_length <= 0)) {
+ watch_socket = p++;
+ watch_socket->fd = fd;
+ watch_socket->events =
+ (ibuf_length > 0 ? POLLOUT : 0) |
+ (!obuf_eof && obuf_length <= 0 ? POLLIN : 0);
+ } else
+ watch_socket = NULL;
- if (pa_poll(pollfd, N_WATCH, -1) < 0) {
+ if (!ibuf_eof && ibuf_length <= 0) {
+ watch_stdin = p++;
+ watch_stdin->fd = STDIN_FILENO;
+ watch_stdin->events = POLLIN;
+ } else
+ watch_stdin = NULL;
+
+ if (obuf_length > 0) {
+ watch_stdout = p++;
+ watch_stdout->fd = STDOUT_FILENO;
+ watch_stdout->events = POLLOUT;
+ } else
+ watch_stdout = NULL;
+
+ if (pa_poll(pollfd, p-pollfd, -1) < 0) {
if (errno == EINTR)
continue;
@@ -163,82 +179,80 @@ int main(int argc, char*argv[]) {
goto fail;
}
- if (pollfd[WATCH_STDIN].revents & POLLIN) {
- ssize_t r;
- pa_assert(!ibuf_length);
-
- if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), &stdin_type)) <= 0) {
- if (r < 0) {
- pa_log(_("read(): %s"), strerror(errno));
- goto fail;
+ if (watch_stdin) {
+ if (watch_stdin->revents & POLLIN) {
+ ssize_t r;
+ pa_assert(ibuf_length <= 0);
+
+ if ((r = pa_read(STDIN_FILENO, ibuf, sizeof(ibuf), &stdin_type)) <= 0) {
+ if (r < 0) {
+ pa_log(_("read(): %s"), strerror(errno));
+ goto fail;
+ }
+
+ ibuf_eof = TRUE;
+ } else {
+ ibuf_length = (size_t) r;
+ ibuf_index = 0;
}
-
+ } else if (watch_stdin->revents & POLLHUP)
ibuf_eof = TRUE;
- } else {
- ibuf_length = (size_t) r;
- ibuf_index = 0;
- }
}
- if (pollfd[WATCH_SOCKET].revents & POLLIN) {
- ssize_t r;
- pa_assert(!obuf_length);
-
- if ((r = pa_read(fd, obuf, sizeof(obuf), &fd_type)) <= 0) {
- if (r < 0) {
- pa_log(_("read(): %s"), strerror(errno));
- goto fail;
+ if (watch_socket) {
+ if (watch_socket->revents & POLLIN) {
+ ssize_t r;
+ pa_assert(obuf_length <= 0);
+
+ if ((r = pa_read(fd, obuf, sizeof(obuf), &fd_type)) <= 0) {
+ if (r < 0) {
+ pa_log(_("read(): %s"), strerror(errno));
+ goto fail;
+ }
+
+ obuf_eof = TRUE;
+ } else {
+ obuf_length = (size_t) r;
+ obuf_index = 0;
}
-
+ } else if (watch_socket->revents & POLLHUP)
obuf_eof = TRUE;
- } else {
- obuf_length = (size_t) r;
- obuf_index = 0;
- }
}
- if (pollfd[WATCH_STDOUT].revents & POLLHUP) {
- obuf_eof = TRUE;
- obuf_length = 0;
- } else if (pollfd[WATCH_STDOUT].revents & POLLOUT) {
- ssize_t r;
- pa_assert(obuf_length);
-
- if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, &stdout_type)) < 0) {
- pa_log(_("write(): %s"), strerror(errno));
- goto fail;
- }
-
- obuf_length -= (size_t) r;
- obuf_index += obuf_index;
- }
+ if (watch_stdout) {
+ if (watch_stdout->revents & POLLHUP) {
+ obuf_eof = TRUE;
+ obuf_length = 0;
+ } else if (watch_stdout->revents & POLLOUT) {
+ ssize_t r;
+ pa_assert(obuf_length > 0);
- if (pollfd[WATCH_SOCKET].revents & POLLHUP) {
- ibuf_eof = TRUE;
- ibuf_length = 0;
- } if (pollfd[WATCH_SOCKET].revents & POLLOUT) {
- ssize_t r;
- pa_assert(ibuf_length);
+ if ((r = pa_write(STDOUT_FILENO, obuf + obuf_index, obuf_length, &stdout_type)) < 0) {
+ pa_log(_("write(): %s"), strerror(errno));
+ goto fail;
+ }
- if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, &fd_type)) < 0) {
- pa_log(_("write(): %s"), strerror(errno));
- goto fail;
+ obuf_length -= (size_t) r;
+ obuf_index += obuf_index;
}
-
- ibuf_length -= (size_t) r;
- ibuf_index += obuf_index;
}
- if (ibuf_length <= 0 && ibuf_eof && !ibuf_closed) {
- pa_close(STDIN_FILENO);
- shutdown(fd, SHUT_WR);
- ibuf_closed = TRUE;
- }
+ if (watch_socket) {
+ if (watch_socket->revents & POLLHUP) {
+ ibuf_eof = TRUE;
+ ibuf_length = 0;
+ } if (watch_socket->revents & POLLOUT) {
+ ssize_t r;
+ pa_assert(ibuf_length > 0);
- if (obuf_length <= 0 && obuf_eof && !obuf_closed) {
- shutdown(fd, SHUT_RD);
- pa_close(STDOUT_FILENO);
- obuf_closed = TRUE;
+ if ((r = pa_write(fd, ibuf + ibuf_index, ibuf_length, &fd_type)) < 0) {
+ pa_log(_("write(): %s"), strerror(errno));
+ goto fail;
+ }
+
+ ibuf_length -= (size_t) r;
+ ibuf_index += obuf_index;
+ }
}
}
commit 2b2149dc9d6b2010a9acd4d05ec4e331e710fd25
Author: Daniel T Chen <crimsun at ubuntu.com>
Date: Fri Feb 19 00:23:17 2010 -0500
build-sys: Add missing profile and alsa-mixer/paths to src/Makefile.am
Commits e8cb96c and 0c836aa created mixer paths but did not update
src/Makefile.am. Building a snapshot containing these two commits
therefore results in the user being unable to adjust the volume or
(un)mute through PA. Fix this by adding the two new mixer paths
files to src/Makefile.am.
Likewise, commit 66e1a2d created a profile for the M-Audio FastTrack
Pro USB but did not update src/Makefile.am. Fix this by adding the
profile to src/Makefile.am.
diff --git a/src/Makefile.am b/src/Makefile.am
index 3268137..01ec1a5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1095,6 +1095,7 @@ modlibexec_LTLIBRARIES += \
dist_alsaprofilesets_DATA = \
modules/alsa/mixer/profile-sets/default.conf \
+ modules/alsa/mixer/profile-sets/maudio-fasttrack-pro.conf \
modules/alsa/mixer/profile-sets/native-instruments-audio4dj.conf \
modules/alsa/mixer/profile-sets/native-instruments-audio8dj.conf
@@ -1108,6 +1109,7 @@ dist_alsapaths_DATA = \
modules/alsa/mixer/paths/analog-input.conf \
modules/alsa/mixer/paths/analog-input.conf.common \
modules/alsa/mixer/paths/analog-input-fm.conf \
+ modules/alsa/mixer/paths/analog-input-internal-mic.conf \
modules/alsa/mixer/paths/analog-input-linein.conf \
modules/alsa/mixer/paths/analog-input-mic.conf \
modules/alsa/mixer/paths/analog-input-mic.conf.common \
@@ -1117,6 +1119,7 @@ dist_alsapaths_DATA = \
modules/alsa/mixer/paths/analog-output.conf \
modules/alsa/mixer/paths/analog-output-speaker.conf \
modules/alsa/mixer/paths/analog-output.conf.common \
+ modules/alsa/mixer/paths/analog-output-desktop-speaker.conf \
modules/alsa/mixer/paths/analog-output-headphones.conf \
modules/alsa/mixer/paths/analog-output-headphones-2.conf \
modules/alsa/mixer/paths/analog-output-lfe-on-mono.conf \
commit 323f0ad4034bf37b8c2002a8ee8efab22db5b140
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 20:11:23 2010 +0100
build-sys: fix check for pthread_setaffinity_np()
diff --git a/configure.ac b/configure.ac
index d23e09e..c277f6e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -402,6 +402,7 @@ AC_SEARCH_LIBS([dlopen], [dl])
AC_SEARCH_LIBS([shm_open], [rt])
AC_SEARCH_LIBS([inet_ntop], [nsl])
AC_SEARCH_LIBS([timer_create], [rt])
+AC_SEARCH_LIBS([pthread_setaffinity_np], [pthread])
# BSD
AC_SEARCH_LIBS([connect], [socket])
diff --git a/src/tests/once-test.c b/src/tests/once-test.c
index 5b55532..37f3ac3 100644
--- a/src/tests/once-test.c
+++ b/src/tests/once-test.c
@@ -36,7 +36,6 @@ static pa_once once = PA_ONCE_INIT;
static volatile unsigned n_run = 0;
static const char * volatile ran_by = NULL;
static pthread_barrier_t barrier;
-static pa_atomic_t i_cpu = PA_ATOMIC_INIT(0);
static unsigned n_cpu;
#define N_ITERATIONS 500
@@ -51,6 +50,7 @@ static void thread_func(void *data) {
int r;
#ifdef HAVE_PTHREAD_SETAFFINITY_NP
+ static pa_atomic_t i_cpu = PA_ATOMIC_INIT(0);
cpu_set_t mask;
CPU_ZERO(&mask);
commit edf5f5be6bf5b4c4b7188b4691caebd4db233788
Author: João Paulo Rechi Vita <jprvita at profusion.mobi>
Date: Fri Jan 29 10:59:33 2010 -0200
bluetooth: improve dbus logging
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index b2c0429..7b0e6f8 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -293,9 +293,10 @@ static int parse_audio_property(pa_bluetooth_discovery *u, int *state, DBusMessa
const char *value;
dbus_message_iter_get_basic(&variant_i, &value);
- if (pa_streq(key, "State"))
+ if (pa_streq(key, "State")) {
*state = pa_bt_audio_state_from_string(value);
-/* pa_log_debug("Value %s", value); */
+ pa_log_debug("dbus: property 'State' changed to value '%s'", value);
+ }
break;
}
commit 342e06498f9720d9198b006fc0f3a51c21a0c95c
Author: João Paulo Rechi Vita <jprvita at profusion.mobi>
Date: Fri Jan 29 11:01:31 2010 -0200
bluetooth: add HFP Gateway support
Create the 'Handsfree Gateway' profile for bluetooth cards and add
filters for 'org.bluez.HandsfreeGateway' to the discover module so
module-bluetooth-device is loaded with the correct profile when a
Handsfree Gateway connects to bluetoothd (in this case bluetoothd
is acting as the headset).
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index 7b0e6f8..c3b08ea 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -98,6 +98,7 @@ static pa_bluetooth_device* device_new(const char *path) {
d->audio_sink_state = PA_BT_AUDIO_STATE_INVALID;
d->audio_source_state = PA_BT_AUDIO_STATE_INVALID;
d->headset_state = PA_BT_AUDIO_STATE_INVALID;
+ d->hfgw_state = PA_BT_AUDIO_STATE_INVALID;
return d;
}
@@ -123,11 +124,11 @@ static pa_bool_t device_is_audio(pa_bluetooth_device *d) {
pa_assert(d);
return
- d->device_info_valid &&
+ d->device_info_valid && (d->hfgw_state != PA_BT_AUDIO_STATE_INVALID ||
(d->audio_state != PA_BT_AUDIO_STATE_INVALID &&
(d->audio_sink_state != PA_BT_AUDIO_STATE_INVALID ||
d->audio_source_state != PA_BT_AUDIO_STATE_INVALID ||
- d->headset_state != PA_BT_AUDIO_STATE_INVALID));
+ d->headset_state != PA_BT_AUDIO_STATE_INVALID)));
}
static int parse_device_property(pa_bluetooth_discovery *y, pa_bluetooth_device *d, DBusMessageIter *i) {
@@ -230,7 +231,10 @@ static int parse_device_property(pa_bluetooth_discovery *y, pa_bluetooth_device
PA_LLIST_PREPEND(pa_bluetooth_uuid, d->uuids, node);
/* Vudentz said the interfaces are here when the UUIDs are announced */
- if (strcasecmp(HSP_HS_UUID, value) == 0 || strcasecmp(HFP_HS_UUID, value) == 0) {
+ if (strcasecmp(HSP_AG_UUID, value) == 0 || strcasecmp(HFP_AG_UUID, value) == 0) {
+ pa_assert_se(m = dbus_message_new_method_call("org.bluez", d->path, "org.bluez.HandsfreeGateway", "GetProperties"));
+ send_and_add_to_pending(y, d, m, get_properties_reply);
+ } else if (strcasecmp(HSP_HS_UUID, value) == 0 || strcasecmp(HFP_HS_UUID, value) == 0) {
pa_assert_se(m = dbus_message_new_method_call("org.bluez", d->path, "org.bluez.Headset", "GetProperties"));
send_and_add_to_pending(y, d, m, get_properties_reply);
} else if (strcasecmp(A2DP_SINK_UUID, value) == 0) {
@@ -403,9 +407,14 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) {
} else if (dbus_message_has_interface(p->message, "org.bluez.AudioSink")) {
if (parse_audio_property(y, &d->audio_sink_state, &dict_i) < 0)
goto finish;
+
} else if (dbus_message_has_interface(p->message, "org.bluez.AudioSource")) {
if (parse_audio_property(y, &d->audio_source_state, &dict_i) < 0)
goto finish;
+
+ } else if (dbus_message_has_interface(p->message, "org.bluez.HandsfreeGateway")) {
+ if (parse_audio_property(y, &d->hfgw_state, &arg_i) < 0)
+ goto finish;
}
}
@@ -633,6 +642,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
dbus_message_is_signal(m, "org.bluez.Headset", "PropertyChanged") ||
dbus_message_is_signal(m, "org.bluez.AudioSink", "PropertyChanged") ||
dbus_message_is_signal(m, "org.bluez.AudioSource", "PropertyChanged") ||
+ dbus_message_is_signal(m, "org.bluez.HandsfreeGateway", "PropertyChanged") ||
dbus_message_is_signal(m, "org.bluez.Device", "PropertyChanged")) {
pa_bluetooth_device *d;
@@ -660,9 +670,14 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
} else if (dbus_message_has_interface(m, "org.bluez.AudioSink")) {
if (parse_audio_property(y, &d->audio_sink_state, &arg_i) < 0)
goto fail;
+
} else if (dbus_message_has_interface(m, "org.bluez.AudioSource")) {
if (parse_audio_property(y, &d->audio_source_state, &arg_i) < 0)
goto fail;
+
+ } else if (dbus_message_has_interface(m, "org.bluez.HandsfreeGateway")) {
+ if (parse_audio_property(y, &d->hfgw_state, &arg_i) < 0)
+ goto fail;
}
run_callback(y, d, FALSE);
@@ -679,6 +694,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
d->audio_sink_state = PA_BT_AUDIO_STATE_DISCONNECTED;
d->audio_source_state = PA_BT_AUDIO_STATE_DISCONNECTED;
d->headset_state = PA_BT_AUDIO_STATE_DISCONNECTED;
+ d->hfgw_state = PA_BT_AUDIO_STATE_DISCONNECTED;
run_callback(y, d, FALSE);
}
@@ -809,7 +825,9 @@ pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c) {
"type='signal',sender='org.bluez',interface='org.bluez.Audio',member='PropertyChanged'",
"type='signal',sender='org.bluez',interface='org.bluez.Headset',member='PropertyChanged'",
"type='signal',sender='org.bluez',interface='org.bluez.AudioSink',member='PropertyChanged'",
- "type='signal',sender='org.bluez',interface='org.bluez.AudioSource',member='PropertyChanged'", NULL) < 0) {
+ "type='signal',sender='org.bluez',interface='org.bluez.AudioSource',member='PropertyChanged'",
+ "type='signal',sender='org.bluez',interface='org.bluez.HandsfreeGateway',member='PropertyChanged'",
+ NULL) < 0) {
pa_log("Failed to add D-Bus matches: %s", err.message);
goto fail;
}
@@ -863,7 +881,9 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) {
"type='signal',sender='org.bluez',interface='org.bluez.Audio',member='PropertyChanged'",
"type='signal',sender='org.bluez',interface='org.bluez.Headset',member='PropertyChanged'",
"type='signal',sender='org.bluez',interface='org.bluez.AudioSink',member='PropertyChanged'",
- "type='signal',sender='org.bluez',interface='org.bluez.AudioSource',member='PropertyChanged'", NULL);
+ "type='signal',sender='org.bluez',interface='org.bluez.AudioSource',member='PropertyChanged'",
+ "type='signal',sender='org.bluez',interface='org.bluez.HandsfreeGateway',member='PropertyChanged'",
+ NULL);
if (y->filter_added)
dbus_connection_remove_filter(pa_dbus_connection_get(y->connection), filter_cb, y);
diff --git a/src/modules/bluetooth/bluetooth-util.h b/src/modules/bluetooth/bluetooth-util.h
index e2a0c3d..9cee3de 100644
--- a/src/modules/bluetooth/bluetooth-util.h
+++ b/src/modules/bluetooth/bluetooth-util.h
@@ -89,6 +89,9 @@ struct pa_bluetooth_device {
/* Headset state */
pa_bt_audio_state_t headset_state;
+
+ /* HandsfreeGateway state */
+ pa_bt_audio_state_t hfgw_state;
};
pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *core);
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index d6868b8..f9721d1 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -71,7 +71,7 @@ PA_MODULE_USAGE(
"source_name=<name for the source> "
"source_properties=<properties for the source> "
"address=<address of the device> "
- "profile=<a2dp|hsp> "
+ "profile=<a2dp|hsp|hfgw> "
"rate=<sample rate> "
"channels=<number of channels> "
"path=<device object path> "
@@ -133,6 +133,7 @@ enum profile {
PROFILE_A2DP,
PROFILE_A2DP_SOURCE,
PROFILE_HSP,
+ PROFILE_HFGW,
PROFILE_OFF
};
@@ -318,12 +319,12 @@ static int parse_caps(struct userdata *u, uint8_t seid, const struct bt_get_capa
pa_log_debug("Payload size is %lu %lu", (unsigned long) bytes_left, (unsigned long) sizeof(*codec));
if (((u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE) && codec->transport != BT_CAPABILITIES_TRANSPORT_A2DP) ||
- (u->profile == PROFILE_HSP && codec->transport != BT_CAPABILITIES_TRANSPORT_SCO)) {
+ ((u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW) && codec->transport != BT_CAPABILITIES_TRANSPORT_SCO)) {
pa_log_error("Got capabilities for wrong codec.");
return -1;
}
- if (u->profile == PROFILE_HSP) {
+ if (u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW) {
if (bytes_left <= 0 || codec->length != sizeof(u->hsp.pcm_capabilities))
return -1;
@@ -401,7 +402,7 @@ static int get_caps(struct userdata *u, uint8_t seid) {
if (u->profile == PROFILE_A2DP || u->profile == PROFILE_A2DP_SOURCE)
msg.getcaps_req.transport = BT_CAPABILITIES_TRANSPORT_A2DP;
else {
- pa_assert(u->profile == PROFILE_HSP);
+ pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
msg.getcaps_req.transport = BT_CAPABILITIES_TRANSPORT_SCO;
}
msg.getcaps_req.flags = u->auto_connect ? BT_FLAG_AUTOCONNECT : 0;
@@ -697,7 +698,7 @@ static int set_conf(struct userdata *u) {
if (setup_a2dp(u) < 0)
return -1;
} else {
- pa_assert(u->profile == PROFILE_HSP);
+ pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
u->sample_spec.format = PA_SAMPLE_S16LE;
u->sample_spec.channels = 1;
@@ -995,7 +996,7 @@ static int hsp_process_render(struct userdata *u) {
int ret = 0;
pa_assert(u);
- pa_assert(u->profile == PROFILE_HSP);
+ pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
pa_assert(u->sink);
/* First, render some data */
@@ -1060,7 +1061,7 @@ static int hsp_process_push(struct userdata *u) {
pa_memchunk memchunk;
pa_assert(u);
- pa_assert(u->profile == PROFILE_HSP);
+ pa_assert(u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW);
pa_assert(u->source);
pa_assert(u->read_smoother);
@@ -1434,7 +1435,7 @@ static void thread_func(void *userdata) {
if (pollfd && (pollfd->revents & POLLIN)) {
int n_read;
- if (u->profile == PROFILE_HSP)
+ if (u->profile == PROFILE_HSP || PROFILE_HFGW)
n_read = hsp_process_push(u);
else
n_read = a2dp_process_push(u);
@@ -1842,7 +1843,7 @@ static int add_source(struct userdata *u) {
data.module = u->module;
pa_source_new_data_set_sample_spec(&data, &u->sample_spec);
pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP_SOURCE ? "a2dp_source" : "hsp");
- if (u->profile == PROFILE_HSP)
+ if ((u->profile == PROFILE_HSP) || (u->profile == PROFILE_HFGW))
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone");
data.card = u->card;
data.name = get_name("source", u->modargs, u->address, &b);
@@ -1870,8 +1871,10 @@ static int add_source(struct userdata *u) {
pa_bytes_to_usec(u->block_size, &u->sample_spec));
}
- if (u->profile == PROFILE_HSP) {
+ if (u->profile == PROFILE_HSP || u->profile == PROFILE_HFGW)
pa_proplist_sets(u->source->proplist, "bluetooth.nrec", (u->hsp.pcm_capabilities.flags & BT_PCM_FLAG_NREC) ? "1" : "0");
+
+ if (u->profile == PROFILE_HSP) {
u->source->set_volume = source_set_volume_cb;
u->source->n_volume_steps = 16;
}
@@ -1959,12 +1962,14 @@ static int init_profile(struct userdata *u) {
return -1;
if (u->profile == PROFILE_A2DP ||
- u->profile == PROFILE_HSP)
+ u->profile == PROFILE_HSP ||
+ u->profile == PROFILE_HFGW)
if (add_sink(u) < 0)
r = -1;
if (u->profile == PROFILE_HSP ||
- u->profile == PROFILE_A2DP_SOURCE)
+ u->profile == PROFILE_A2DP_SOURCE ||
+ u->profile == PROFILE_HFGW)
if (add_source(u) < 0)
r = -1;
@@ -2099,6 +2104,10 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
pa_log_warn("A2DP is not connected, refused to switch profile");
return -PA_ERR_IO;
}
+ else if (device->hfgw_state <= PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HFGW) {
+ pa_log_warn("HandsfreeGateway is not connected, refused to switch profile");
+ return -PA_ERR_IO;
+ }
if (u->sink) {
inputs = pa_sink_move_all_start(u->sink, NULL);
@@ -2234,6 +2243,20 @@ static int add_card(struct userdata *u, const pa_bluetooth_device *device) {
pa_hashmap_put(data.profiles, p->name, p);
}
+ if (pa_bluetooth_uuid_has(device->uuids, HFP_AG_UUID)) {
+ p = pa_card_profile_new("hfgw", _("Handsfree Gateway"), sizeof(enum profile));
+ p->priority = 20;
+ p->n_sinks = 1;
+ p->n_sources = 1;
+ p->max_sink_channels = 1;
+ p->max_source_channels = 1;
+
+ d = PA_CARD_PROFILE_DATA(p);
+ *d = PROFILE_HFGW;
+
+ pa_hashmap_put(data.profiles, p->name, p);
+ }
+
pa_assert(!pa_hashmap_isempty(data.profiles));
p = pa_card_profile_new("off", _("Off"), sizeof(enum profile));
@@ -2262,7 +2285,8 @@ static int add_card(struct userdata *u, const pa_bluetooth_device *device) {
d = PA_CARD_PROFILE_DATA(u->card->active_profile);
if ((device->headset_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HSP) ||
- (device->audio_sink_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_A2DP)) {
+ (device->audio_sink_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_A2DP) ||
+ (device->hfgw_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HFGW)) {
pa_log_warn("Default profile not connected, selecting off profile");
u->card->active_profile = pa_hashmap_get(u->card->profiles, "off");
u->card->save_profile = FALSE;
diff --git a/src/modules/bluetooth/module-bluetooth-discover.c b/src/modules/bluetooth/module-bluetooth-discover.c
index 0085fa8..fd34c6f 100644
--- a/src/modules/bluetooth/module-bluetooth-discover.c
+++ b/src/modules/bluetooth/module-bluetooth-discover.c
@@ -83,8 +83,10 @@ static pa_hook_result_t load_module_for_device(pa_bluetooth_discovery *y, const
mi = pa_hashmap_get(u->hashmap, d->path);
- if (!d->dead &&
- d->device_connected > 0 && (d->audio_state >= PA_BT_AUDIO_STATE_CONNECTED || d->audio_source_state >= PA_BT_AUDIO_STATE_CONNECTED)) {
+ if (!d->dead && d->device_connected > 0 &&
+ (d->audio_state >= PA_BT_AUDIO_STATE_CONNECTED ||
+ d->audio_source_state >= PA_BT_AUDIO_STATE_CONNECTED ||
+ d->hfgw_state > PA_BT_AUDIO_STATE_CONNECTED)) {
if (!mi) {
pa_module *m = NULL;
@@ -119,6 +121,9 @@ static pa_hook_result_t load_module_for_device(pa_bluetooth_discovery *y, const
if (d->audio_source_state >= PA_BT_AUDIO_STATE_CONNECTED)
args = pa_sprintf_malloc("%s profile=\"a2dp_source\" auto_connect=no", args);
+ if (d->hfgw_state > PA_BT_AUDIO_STATE_CONNECTED)
+ args = pa_sprintf_malloc("%s profile=\"hfgw\"", args);
+
pa_log_debug("Loading module-bluetooth-device %s", args);
m = pa_module_load(u->module->core, "module-bluetooth-device", args);
pa_xfree(args);
commit 0a7fccdb3d6bf63448d491727316e033ae235b58
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 21:09:26 2010 +0100
pacat: pass buffer_attr to recording streams too
Pointed out by Colin Guthrie.
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-February/006698.html
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index 75ccd9a..6cbff2e 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -473,7 +473,7 @@ static void context_state_callback(pa_context *c, void *userdata) {
}
} else {
- if (pa_stream_connect_record(stream, device, latency > 0 ? &buffer_attr : NULL, flags) < 0) {
+ if (pa_stream_connect_record(stream, device, &buffer_attr, flags) < 0) {
pa_log(_("pa_stream_connect_record() failed: %s"), pa_strerror(pa_context_errno(c)));
goto fail;
}
commit 5c13d86746f3e77e1deb0d78450b349ff29eb866
Author: warrink <warrink at fedoraproject.org>
Date: Wed Sep 30 14:48:45 2009 +0000
Sending translation for Dutch
diff --git a/po/nl.po b/po/nl.po
index cf07e8a..0506e66 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-11 19:58+0200\n"
+"POT-Creation-Date: 2009-09-30 09:44+0000\n"
+"PO-Revision-Date: 2009-09-30 16:47+0200\n"
"Last-Translator: Geert Warrink <geert.warrink at onsnet.nu>\n"
"Language-Team: nl <nl at li.org>\n"
"MIME-Version: 1.0\n"
@@ -2382,131 +2382,122 @@ msgstr "PulseAudio geluids server"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Output apparaten"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "Input apparaten"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Geluid op @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "Input"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Docking station input"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Docking station microfoon"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Lijn-in"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Microfoon"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Externe microfoon"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Intern geluid"
+msgstr "Interne microfoon"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Automatische volume controle"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Geen automatische volume controle"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Boostversterking"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Geen boostversterking"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Versterker"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Geen versterker"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Analoog mono"
+msgstr "Analoge input"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Analoog mono"
+msgstr "Analoge microfoon"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Analoog mono"
+msgstr "Analoge lijn-in"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Analoog mono"
+msgstr "Analoge radio"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Analoog stereo"
+msgstr "Analoge video"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Null output"
+msgstr "Analoge output"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Analoog mono"
+msgstr "Analoeg koptelefoon"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Analoge output (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Analoog mono"
+msgstr "Analoge mono output"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s/%s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2517,19 +2508,16 @@ msgid "Analog Stereo"
msgstr "Analoog stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Analoog surround 4.1"
+msgstr "Analoog surround 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Analoog surround 4.0"
+msgstr "Analoog surround 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Analoog surround 4.1"
+msgstr "Analoog surround 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2548,19 +2536,16 @@ msgid "Analog Surround 5.1"
msgstr "Analoog surround 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Analoog surround 4.0"
+msgstr "Analoog surround 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Analoog surround 4.1"
+msgstr "Analoog surround 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Analoog surround 4.0"
+msgstr "Analoog surround 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2571,9 +2556,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Digitaal stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Digitaal surround 4.0 (IEC958/AC3)"
+msgstr "Digitaal surround 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2588,19 +2572,16 @@ msgid "Digital Stereo (HDMI)"
msgstr "Digitaal stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Analoog mono"
+msgstr "Analoog mono duplex"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Analoog stereo"
+msgstr "Analoog stereo duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Digitaal stereo (IEC958)"
+msgstr "Digitaal stereo duplex (IEC958)"
#, fuzzy
#~ msgid "Invalid client name '%s'\n"
commit 0a7086d8ea594644c4c4d03c2e287bc3c6afd407
Author: raven <raven at fedoraproject.org>
Date: Wed Sep 30 15:05:36 2009 +0000
Sending translation for Polish
diff --git a/po/pl.po b/po/pl.po
index 7daafda..5d7f3a0 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-27 15:42+0200\n"
+"POT-Creation-Date: 2009-09-30 09:44+0000\n"
+"PO-Revision-Date: 2009-09-30 17:04+0200\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <fedora-trans-pl at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -2377,217 +2377,203 @@ msgstr "Serwer dźwiÄku PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "UrzÄ
dzenia wyjÅciowe"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "UrzÄ
dzenia wejÅciowe"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "DźwiÄk na @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "WejÅcie"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "WejÅcie stacji dokujÄ
cej"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Mikrofon stacji dokujÄ
cej"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "WejÅcie liniowe"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "ZewnÄtrzny mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "WewnÄtrzny dźwiÄk"
+msgstr "WewnÄtrzny mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Wideo"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Automatyczna kontrola natÄżenia"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Brak automatycznej kontroli natÄżenia"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Podbicie"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Brak podbicia"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Amplituner"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Brak amplitunera"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "WejÅcie analogowe"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "Mikrofon analogowy"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "Analogowe wejÅcie liniowe"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Radio analogowe"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "Wideo analogowe"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Puste wyjÅcie"
+msgstr "WyjÅcie analogowe"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "SÅuchawki analogowe"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "WyjÅcie analogowe (subwoofer)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "Analogowe wyjÅcie mono"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s/%s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Analogowe mono"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "Stereo"
+msgstr "Analogowe stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Surround 4.1"
+msgstr "Analogowe surround 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Surround 4.0"
+msgstr "Analogowe surround 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Surround 4.1"
+msgstr "Analogowe surround 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "Surround 4.0"
+msgstr "Analogowe surround 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "Surround 4.1"
+msgstr "Analogowe surround 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "Surround 5.0"
+msgstr "Analogowe surround 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "Surround 5.1"
+msgstr "Analogowe surround 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Surround 4.0"
+msgstr "Analogowe surround 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Surround 4.1"
+msgstr "Analogowe surround 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Surround 4.0"
+msgstr "Analogowe surround 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "Surround 7.1"
+msgstr "Analogowe surround 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "Cyfrowe stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "Cyfrowe surround 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "Cyfrowe surround 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "Cyfrowe surround 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "Cyfrowe stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "Analogowy dupleks mono"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "Analogowy dupleks stereo"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "Cyfrowy dupleks stereo (IEC958)"
commit 4c2adfc44c222b2d0be21b143473af82ceb04b9e
Author: pmkovar <pmkovar at fedoraproject.org>
Date: Wed Sep 30 18:43:00 2009 +0000
Sending translation for Czech
diff --git a/po/cs.po b/po/cs.po
index 4b9c4a6..3660685 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-09 02:43+0100\n"
+"POT-Creation-Date: 2009-09-30 09:44+0000\n"
+"PO-Revision-Date: 2009-09-30 20:33+0200\n"
"Last-Translator: Petr Kovar <pknbe at volny.cz>\n"
"Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Lokalize 1.0\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
@@ -61,11 +62,11 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "Udržuje nahraný vždy alespoÅ jeden cÃl, i když se jedná o \"null\""
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "Prázdný výstup"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
@@ -87,12 +88,11 @@ msgstr ""
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "Taktovaný cÃl NULL"
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "Výstup %s"
+msgstr "Výstup \"null\""
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -1095,11 +1095,11 @@ msgstr "Klient rozvÄtven"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "Chyba vstupu/výstupu"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "ZaÅÃzenà nebo zdroj se použÃvá"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1308,10 +1308,9 @@ msgstr "ZÃskán signál, ukonÄovánÃ."
msgid "Failed to get latency: %s"
msgstr "NezdaÅilo se zÃskat latenci: %s"
-#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:580, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "Äas: %0.3f sekund; latence: %0.0f μs. \r"
+msgstr "Äas: %0.3f sekund; latence: %0.0f μs"
#: ../src/utils/pacat.c:599
#, c-format
@@ -2358,133 +2357,120 @@ msgstr "Zvukový server PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Výstupnà zaÅÃzenÃ"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "Vstup %s"
+msgstr "Vstupnà zaÅÃzenÃ"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Zvuk na @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "Vstup %s"
+msgstr "Vstup"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Vstup dokovacà stanice"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Mikrofon dokovacà stanice"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Linkový vstup"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Externà mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "VnitÅnà zvukový systém"
+msgstr "Internà mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Rádio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Obraz"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Automatické ovládánà zesÃlenÃ"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Bez automatického ovládánà zesÃlenÃ"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ZesÃlenÃ"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Bez zesÃlenÃ"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "ZesilovaÄ"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Bez zesilovaÄe"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Analogové mono"
+msgstr "Analogový vstup"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Analogové mono"
+msgstr "Analogový mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Analogové mono"
+msgstr "Analogový linkový vstup"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Analogové mono"
+msgstr "Analogové rádio"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Analogové stereo"
+msgstr "Analogový obraz"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Výstup %s"
+msgstr "Analogový výstup"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Analogové mono"
+msgstr "Analogová sluchátka"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Analogový výstup (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Analogové mono"
+msgstr "Analogový výstup mono"
-#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2495,19 +2481,16 @@ msgid "Analog Stereo"
msgstr "Analogové stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Analogový Surround 4.1"
+msgstr "Analogový Surround 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Analogový Surround 4.0"
+msgstr "Analogový Surround 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Analogový Surround 4.1"
+msgstr "Analogový Surround 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2526,19 +2509,16 @@ msgid "Analog Surround 5.1"
msgstr "Analogový Surround 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Analogový Surround 4.0"
+msgstr "Analogový Surround 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Analogový Surround 4.1"
+msgstr "Analogový Surround 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Analogový Surround 4.0"
+msgstr "Analogový Surround 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2549,9 +2529,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Digitálnà stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Digitálnà Surround 4.0 (IEC958/AC3)"
+msgstr "Digitálnà Surround 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2566,19 +2545,16 @@ msgid "Digital Stereo (HDMI)"
msgstr "Digitálnà stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Analogové mono"
+msgstr "Analogové duplexnà mono"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Analogové stereo"
+msgstr "Analogové duplexnà stereo"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Digitálnà stereo (IEC958)"
+msgstr "Digitálnà duplexnà stereo (IEC958)"
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Neplatný název klienta \"%s\"\n"
commit 9bda558321943c79fd9abc4ecdaef6bc1d74c64d
Author: kami911 <kami911 at fedoraproject.org>
Date: Thu Oct 1 08:46:05 2009 +0000
Sending translation for po/hu.po
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..c3cd24f
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,2375 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-09-30 21:32+0000\n"
+"PO-Revision-Date: \n"
+"Last-Translator: KAMI <kami911 at gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../src/modules/alsa/alsa-util.c:858
+#: ../src/pulsecore/sink.c:2629
+#, fuzzy, c-format
+msgid "%s %s"
+msgstr "%s.%s"
+
+#: ../src/modules/alsa/alsa-util.c:1106
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1147
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1194
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:39
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:83
+#, fuzzy
+msgid "Dummy Output"
+msgstr "szabványos kimenet"
+
+#: ../src/modules/module-ladspa-sink.c:49
+#, fuzzy
+msgid "Virtual LADSPA sink"
+msgstr "Ismeretlen nyelÅelem"
+
+#: ../src/modules/module-ladspa-sink.c:53
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgstr ""
+
+#: ../src/modules/module-null-sink.c:55
+#, fuzzy
+msgid "Clocked NULL sink"
+msgstr "Ismeretlen nyelÅelem"
+
+#: ../src/modules/module-null-sink.c:291
+#, fuzzy
+msgid "Null Output"
+msgstr "szabványos kimenet"
+
+#: ../src/pulsecore/sink.c:2613
+#, fuzzy
+msgid "Internal Audio"
+msgstr "<b>HangszűrÅ</b>"
+
+#: ../src/pulsecore/sink.c:2618
+msgid "Modem"
+msgstr "Modem"
+
+#: ../src/daemon/ltdl-bind-now.c:124
+#, fuzzy
+msgid "Failed to find original lt_dlopen loader."
+msgstr "A PNM-betöltŠegy egészet várt, de nem talált"
+
+#: ../src/daemon/ltdl-bind-now.c:129
+#, fuzzy
+msgid "Failed to allocate new dl loader."
+msgstr "dpkg: a memóriafoglalás meghiúsult a meghibásodott csomagok listájában egy új bejegyzés számára."
+
+#: ../src/daemon/ltdl-bind-now.c:142
+#, fuzzy
+msgid "Failed to add bind-now-loader."
+msgstr "nem sikerült hozzáadni a tartományt a csatlakozások hasÃtótáblázatához"
+
+#: ../src/daemon/main.c:141
+#, fuzzy, c-format
+msgid "Got signal %s."
+msgstr "Szignálnév"
+
+#: ../src/daemon/main.c:168
+msgid "Exiting."
+msgstr "Kilépés."
+
+#: ../src/daemon/main.c:186
+#, fuzzy, c-format
+msgid "Failed to find user '%s'."
+msgstr "A csomag (â%sâ) keresése meghiúsult: %s"
+
+#: ../src/daemon/main.c:191
+#, fuzzy, c-format
+msgid "Failed to find group '%s'."
+msgstr "%s csoportjának megváltoztatása sikertelen a következÅre: %s\n"
+
+#: ../src/daemon/main.c:195
+#, fuzzy, c-format
+msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
+msgstr "%s: Nem módosÃtható a tulajdonos uid-ja %lu, gid-je %lu értékekre"
+
+#: ../src/daemon/main.c:200
+#, fuzzy, c-format
+msgid "GID of user '%s' and of group '%s' don't match."
+msgstr "csomagok letöltése és a műveletek el nem indÃtása"
+
+#: ../src/daemon/main.c:205
+#, fuzzy, c-format
+msgid "Home directory of user '%s' is not '%s', ignoring."
+msgstr "%s: nem törlöm %s könyvtárat (%s saját könyvtára)\n"
+
+#: ../src/daemon/main.c:208
+#: ../src/daemon/main.c:213
+#, fuzzy, c-format
+msgid "Failed to create '%s': %s"
+msgstr "A szervizcsomag (â%sâ) létrehozása meghiúsult: %s"
+
+#: ../src/daemon/main.c:220
+#, fuzzy, c-format
+msgid "Failed to change group list: %s"
+msgstr "AktÃv tartományok listázása nem sikerült"
+
+#: ../src/daemon/main.c:236
+#, fuzzy, c-format
+msgid "Failed to change GID: %s"
+msgstr "A könyvtárváltás meghiúsult"
+
+#: ../src/daemon/main.c:252
+#, fuzzy, c-format
+msgid "Failed to change UID: %s"
+msgstr "A könyvtárváltás meghiúsult"
+
+#: ../src/daemon/main.c:271
+#, fuzzy
+msgid "Successfully dropped root privileges."
+msgstr "GNOME Commander - ROOT JOGSULTSÃGOK"
+
+#: ../src/daemon/main.c:279
+#, fuzzy
+msgid "System wide mode unsupported on this platform."
+msgstr "Az --atime-preserve='system' nem támogatott ezen az operációs rendszeren"
+
+#: ../src/daemon/main.c:297
+#, fuzzy, c-format
+msgid "setrlimit(%s, (%u, %u)) failed: %s"
+msgstr "<b>Sikertelen bejelentkezést</b>"
+
+#: ../src/daemon/main.c:474
+#, fuzzy
+msgid "Failed to parse command line."
+msgstr "Nem lehet feldolgozni a(z) â%sâ parancssort: %s"
+
+#: ../src/daemon/main.c:541
+#, fuzzy
+msgid "Daemon not running"
+msgstr "A démon nem fut"
+
+#: ../src/daemon/main.c:543
+#, fuzzy, c-format
+msgid "Daemon running as PID %u"
+msgstr "Ne démonként fusson."
+
+#: ../src/daemon/main.c:553
+#, fuzzy, c-format
+msgid "Failed to kill daemon: %s"
+msgstr "nem sikerült olvasni a Xen-szolgáltatásból"
+
+#: ../src/daemon/main.c:571
+msgid "This program is not intended to be run as root (unless --system is specified)."
+msgstr ""
+
+#: ../src/daemon/main.c:573
+#, fuzzy
+msgid "Root privileges required."
+msgstr "Rendszergazdai jogok szükségesek!"
+
+#: ../src/daemon/main.c:578
+#, fuzzy
+msgid "--start not supported for system instances."
+msgstr "A cÃmcsalád a gépnévhez nem támogatott"
+
+#: ../src/daemon/main.c:583
+msgid "Running in system mode, but --disallow-exit not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:586
+msgid "Running in system mode, but --disallow-module-loading not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:589
+#, fuzzy
+msgid "Running in system mode, forcibly disabling SHM mode!"
+msgstr "A rendszeróra teszt módban nem kerül beállÃtásra.\n"
+
+#: ../src/daemon/main.c:594
+msgid "Running in system mode, forcibly disabling exit idle time!"
+msgstr ""
+
+#: ../src/daemon/main.c:621
+#, fuzzy
+msgid "Failed to acquire stdio."
+msgstr "A(z) â%sâ D-Bus név beszerzése meghiúsult\n"
+
+#: ../src/daemon/main.c:627
+#, fuzzy, c-format
+msgid "pipe failed: %s"
+msgstr "%s: CsŠlétrehozása sikertelen"
+
+#: ../src/daemon/main.c:632
+#, fuzzy, c-format
+msgid "fork() failed: %s"
+msgstr "az indÃtás meghiúsult\n"
+
+#: ../src/daemon/main.c:646
+#: ../src/utils/pacat.c:508
+#, fuzzy, c-format
+msgid "read() failed: %s"
+msgstr "olvasás sikertelen"
+
+#: ../src/daemon/main.c:652
+#, fuzzy
+msgid "Daemon startup failed."
+msgstr "A csatlakozás meghiúsult a démonhoz"
+
+#: ../src/daemon/main.c:654
+#, fuzzy
+msgid "Daemon startup successful."
+msgstr "A portátirányÃtás sikeres!"
+
+#: ../src/daemon/main.c:731
+#, fuzzy, c-format
+msgid "This is PulseAudio %s"
+msgstr "Ez egy programhiba... (%s:%d:%s)\n"
+
+#: ../src/daemon/main.c:732
+#, fuzzy, c-format
+msgid "Compilation host: %s"
+msgstr "Válassz _gépet ..."
+
+#: ../src/daemon/main.c:733
+#, fuzzy, c-format
+msgid "Compilation CFLAGS: %s"
+msgstr "Regex fordÃtási hiba - %s"
+
+#: ../src/daemon/main.c:736
+#, fuzzy, c-format
+msgid "Running on host: %s"
+msgstr "Python %s verzió"
+
+#: ../src/daemon/main.c:739
+#, fuzzy, c-format
+msgid "Found %u CPUs."
+msgstr "Minden CPU"
+
+#: ../src/daemon/main.c:741
+#, fuzzy, c-format
+msgid "Page size is %lu bytes"
+msgstr "minimális szegmensméret = %lu\n"
+
+#: ../src/daemon/main.c:744
+#, fuzzy
+msgid "Compiled with Valgrind support: yes"
+msgstr "Pacman-szerű játék többjátékos módban"
+
+#: ../src/daemon/main.c:746
+#, fuzzy
+msgid "Compiled with Valgrind support: no"
+msgstr "A leÃrások nem érhetÅek el: nincs XML támogatás befordÃtva."
+
+#: ../src/daemon/main.c:749
+#, fuzzy, c-format
+msgid "Running in valgrind mode: %s"
+msgstr "Bemutató mód"
+
+#: ../src/daemon/main.c:752
+#, fuzzy
+msgid "Optimized build: yes"
+msgstr ""
+"&Igen\n"
+"&Nem\n"
+"&Mégsem"
+
+#: ../src/daemon/main.c:754
+#, fuzzy
+msgid "Optimized build: no"
+msgstr "Nincs fordÃtási függÅsége a következÅnek: %s.\n"
+
+#: ../src/daemon/main.c:758
+#, fuzzy
+msgid "NDEBUG defined, all asserts disabled."
+msgstr "Már minden elsÅdleges partÃció megadásra került!\n"
+
+#: ../src/daemon/main.c:760
+msgid "FASTPATH defined, only fast path asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:762
+#, fuzzy
+msgid "All asserts enabled."
+msgstr "Adatok indexelése minden engedélyezett modulból"
+
+#: ../src/daemon/main.c:766
+#, fuzzy
+msgid "Failed to get machine ID"
+msgstr "A PDA azonosÃtó lekérdezése nem sikerült"
+
+#: ../src/daemon/main.c:769
+#, fuzzy, c-format
+msgid "Machine ID is %s."
+msgstr "\"%s\" felhasználói azonosÃtó lejárt."
+
+#: ../src/daemon/main.c:773
+#, fuzzy, c-format
+msgid "Session ID is %s."
+msgstr "A munkamenet le van zárva"
+
+#: ../src/daemon/main.c:779
+#, fuzzy, c-format
+msgid "Using runtime directory %s."
+msgstr "Nem hozható létre ideiglenes könyvtár a következŠsablon használatával: %s"
+
+#: ../src/daemon/main.c:784
+#, fuzzy, c-format
+msgid "Using state directory %s."
+msgstr "HIBA: Nem lehet létrehozni a(z) %s állapotkönyvtárat"
+
+#: ../src/daemon/main.c:787
+#, fuzzy, c-format
+msgid "Using modules directory %s."
+msgstr "Nem hozható létre ideiglenes könyvtár a következŠsablon használatával: %s"
+
+#: ../src/daemon/main.c:789
+#, fuzzy, c-format
+msgid "Running in system mode: %s"
+msgstr "A rendszeróra teszt módban nem kerül beállÃtásra.\n"
+
+#: ../src/daemon/main.c:792
+msgid ""
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+msgstr ""
+
+#: ../src/daemon/main.c:809
+#, fuzzy
+msgid "pa_pid_file_create() failed."
+msgstr "A(z) â%sâ fájl létrehozása meghiúsult: %s"
+
+#: ../src/daemon/main.c:819
+msgid "Fresh high-resolution timers available! Bon appetit!"
+msgstr ""
+
+#: ../src/daemon/main.c:821
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+msgstr ""
+
+#: ../src/daemon/main.c:844
+#, fuzzy
+msgid "pa_core_new() failed."
+msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+
+#: ../src/daemon/main.c:904
+#, fuzzy
+msgid "Failed to initialize daemon."
+msgstr "PAM inicializálása sikertelen\n"
+
+#: ../src/daemon/main.c:909
+msgid "Daemon startup without any loaded modules, refusing to work."
+msgstr ""
+
+#: ../src/daemon/main.c:926
+#, fuzzy
+msgid "Daemon startup complete."
+msgstr "Az importálás kész"
+
+#: ../src/daemon/main.c:932
+#, fuzzy
+msgid "Daemon shutdown initiated."
+msgstr "egy tartomány elegáns leállÃtása"
+
+#: ../src/daemon/main.c:954
+#, fuzzy
+msgid "Daemon terminated."
+msgstr ""
+"\n"
+"A parancs megszakÃtva\n"
+
+#: ../src/daemon/cmdline.c:115
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" --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"
+" -k --kill Kill 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"
+" with elevated RLIMIT_NICE)\n"
+" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" (only available as root, when SUID or\n"
+" with elevated RLIMIT_RTPRIO)\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"
+" time passed\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"
+" 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-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"
+" possible values)\n"
+" --use-pid-file[=BOOL] Create a PID file\n"
+" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" platforms that support it.\n"
+" --disable-shm[=BOOL] Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\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"
+" after startup\n"
+"\n"
+" -n Don't load default script file\n"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:247
+#, fuzzy
+msgid "--daemonize expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:254
+#, fuzzy
+msgid "--fail expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:264
+msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:276
+#, fuzzy
+msgid "--high-priority expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:283
+#, fuzzy
+msgid "--realtime expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:290
+#, fuzzy
+msgid "--disallow-module-loading expects boolean argument"
+msgstr "a(z) â%sâ elsÅ paraméterként karakterláncot vár"
+
+#: ../src/daemon/cmdline.c:297
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:304
+#, fuzzy
+msgid "--use-pid-file expects boolean argument"
+msgstr "a(z) â%sâ elsÅ paraméterként karakterláncot vár"
+
+#: ../src/daemon/cmdline.c:321
+msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:328
+#, fuzzy
+msgid "--log-time expects boolean argument"
+msgstr "â%sâ elsÅ paraméterként time_t-t vár"
+
+#: ../src/daemon/cmdline.c:335
+#, fuzzy
+msgid "--log-meta expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:354
+#, fuzzy, c-format
+msgid "Invalid resample method '%s'."
+msgstr "Ãres rajzolásimód-név â érvénytelen"
+
+#: ../src/daemon/cmdline.c:361
+#, fuzzy
+msgid "--system expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/cmdline.c:368
+#, fuzzy
+msgid "--no-cpu-limit expects boolean argument"
+msgstr "a(z) â%sâ elsÅ paraméterként karakterláncot vár"
+
+#: ../src/daemon/cmdline.c:375
+#, fuzzy
+msgid "--disable-shm expects boolean argument"
+msgstr "â%sâ legalább egy paramétert vár"
+
+#: ../src/daemon/dumpmodules.c:60
+#, c-format
+msgid "Name: %s\n"
+msgstr "Név: %s\n"
+
+#: ../src/daemon/dumpmodules.c:63
+#, fuzzy, c-format
+msgid "No module information available\n"
+msgstr "Nem áll rendelkezésre további információ."
+
+#: ../src/daemon/dumpmodules.c:66
+#, c-format
+msgid "Version: %s\n"
+msgstr "Verzió: %s\n"
+
+#: ../src/daemon/dumpmodules.c:68
+#, c-format
+msgid "Description: %s\n"
+msgstr "LeÃrás: %s\n"
+
+#: ../src/daemon/dumpmodules.c:70
+#, c-format
+msgid "Author: %s\n"
+msgstr "SzerzÅ: %s\n"
+
+#: ../src/daemon/dumpmodules.c:72
+#, c-format
+msgid "Usage: %s\n"
+msgstr "Használat: %s\n"
+
+#: ../src/daemon/dumpmodules.c:73
+#, c-format
+msgid "Load Once: %s\n"
+msgstr "Betöltve: %s\n"
+
+#: ../src/daemon/dumpmodules.c:75
+#, fuzzy, c-format
+msgid "DEPRECATION WARNING: %s\n"
+msgstr "%s: figyelem: %s felülbÃrálja %s-t\n"
+
+#: ../src/daemon/dumpmodules.c:79
+#, c-format
+msgid "Path: %s\n"
+msgstr "Elérési útvonal: %s\n"
+
+#: ../src/daemon/daemon-conf.c:232
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid log target '%s'."
+msgstr "Ãrvénytelen naplózási szint: â%sâ"
+
+#: ../src/daemon/daemon-conf.c:248
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid log level '%s'."
+msgstr "Ãrvénytelen naplózási szint: â%sâ"
+
+#: ../src/daemon/daemon-conf.c:264
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid resample method '%s'."
+msgstr "Ãres rajzolásimód-név â érvénytelen"
+
+#: ../src/daemon/daemon-conf.c:287
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid rlimit '%s'."
+msgstr "Ãrvénytelen művelet"
+
+#: ../src/daemon/daemon-conf.c:294
+#, fuzzy, c-format
+msgid "[%s:%u] rlimit not supported on this platform."
+msgstr "Az --atime-preserve='system' nem támogatott ezen az operációs rendszeren"
+
+#: ../src/daemon/daemon-conf.c:310
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid sample format '%s'."
+msgstr "érvénytelen rövidÃtési forma"
+
+#: ../src/daemon/daemon-conf.c:328
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid sample rate '%s'."
+msgstr "FIGYELEM: Ãvénytelen mintavételezést határott meg 44100-at használom.\n"
+
+#: ../src/daemon/daemon-conf.c:352
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid sample channels '%s'."
+msgstr "FIGYELEM: Ãrénytelen mintavételezést határozott meg, 16-ost használom.\n"
+
+#: ../src/daemon/daemon-conf.c:370
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "Ãrvénytelen csatornatÃpus '%s'"
+
+#: ../src/daemon/daemon-conf.c:388
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid number of fragments '%s'."
+msgstr "a sorok száma érvénytelen"
+
+#: ../src/daemon/daemon-conf.c:406
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid fragment size '%s'."
+msgstr "a -size tÃpusa (â%câ) érvénytelen"
+
+#: ../src/daemon/daemon-conf.c:424
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid nice level '%s'."
+msgstr "Ãrvénytelen optimalizálási szint: %s"
+
+#: ../src/daemon/daemon-conf.c:546
+#, fuzzy, c-format
+msgid "Failed to open configuration file: %s"
+msgstr "nem sikerült olvasásra megnyitni a beállÃtási fájlt"
+
+#: ../src/daemon/daemon-conf.c:562
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:638
+#, fuzzy, c-format
+msgid "### Read from configuration file: %s ###\n"
+msgstr "%s: Olvasási hiba a(z) %s fájlban\n"
+
+#: ../src/daemon/caps.c:62
+#, fuzzy
+msgid "Cleaning up privileges."
+msgstr "Csomagok tisztÃtása"
+
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr "PulseAudio hangrendszer"
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr "A PulseAudio hangrendszer elindÃtása"
+
+#: ../src/pulse/channelmap.c:105
+#: ../src/pulse/channelmap.c:757
+msgid "Mono"
+msgstr "Mono"
+
+#: ../src/pulse/channelmap.c:107
+msgid "Front Center"
+msgstr "Szemközti középsÅ"
+
+#: ../src/pulse/channelmap.c:108
+msgid "Front Left"
+msgstr "Szemközti bal"
+
+#: ../src/pulse/channelmap.c:109
+msgid "Front Right"
+msgstr "Szemközti jobb"
+
+#: ../src/pulse/channelmap.c:111
+msgid "Rear Center"
+msgstr "Hátsó középsÅ"
+
+#: ../src/pulse/channelmap.c:112
+msgid "Rear Left"
+msgstr "Hátsó bal"
+
+#: ../src/pulse/channelmap.c:113
+msgid "Rear Right"
+msgstr "Hátsó jobb"
+
+#: ../src/pulse/channelmap.c:115
+#, fuzzy
+msgid "Low Frequency Emmiter"
+msgstr "Az internetes rádióállomás frekvenciája"
+
+#: ../src/pulse/channelmap.c:117
+#, fuzzy
+msgid "Front Left-of-center"
+msgstr "Balra, jobbra vagy középre igazÃtás"
+
+#: ../src/pulse/channelmap.c:118
+#, fuzzy
+msgid "Front Right-of-center"
+msgstr "Balra, jobbra vagy középre igazÃtás"
+
+#: ../src/pulse/channelmap.c:120
+#, fuzzy
+msgid "Side Left"
+msgstr "Bal oldalsó"
+
+#: ../src/pulse/channelmap.c:121
+#, fuzzy
+msgid "Side Right"
+msgstr "Jobb oldalsó"
+
+#: ../src/pulse/channelmap.c:123
+#, fuzzy
+msgid "Auxiliary 0"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:124
+#, fuzzy
+msgid "Auxiliary 1"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:125
+#, fuzzy
+msgid "Auxiliary 2"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:126
+#, fuzzy
+msgid "Auxiliary 3"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:127
+#, fuzzy
+msgid "Auxiliary 4"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:128
+#, fuzzy
+msgid "Auxiliary 5"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:129
+#, fuzzy
+msgid "Auxiliary 6"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:130
+#, fuzzy
+msgid "Auxiliary 7"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:131
+#, fuzzy
+msgid "Auxiliary 8"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:132
+#, fuzzy
+msgid "Auxiliary 9"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:133
+#, fuzzy
+msgid "Auxiliary 10"
+msgstr "#10 borÃték"
+
+#: ../src/pulse/channelmap.c:134
+#, fuzzy
+msgid "Auxiliary 11"
+msgstr "5-11 éveseknek"
+
+#: ../src/pulse/channelmap.c:135
+#, fuzzy
+msgid "Auxiliary 12"
+msgstr "#12 borÃték"
+
+#: ../src/pulse/channelmap.c:136
+#, fuzzy
+msgid "Auxiliary 13"
+msgstr "13 jegy"
+
+#: ../src/pulse/channelmap.c:137
+#, fuzzy
+msgid "Auxiliary 14"
+msgstr "#14 borÃték"
+
+#: ../src/pulse/channelmap.c:138
+#, fuzzy
+msgid "Auxiliary 15"
+msgstr "15 fok (%s)"
+
+#: ../src/pulse/channelmap.c:139
+#, fuzzy
+msgid "Auxiliary 16"
+msgstr "16:9 (szélesvásznú)"
+
+#: ../src/pulse/channelmap.c:140
+#, fuzzy
+msgid "Auxiliary 17"
+msgstr "17 USD"
+
+#: ../src/pulse/channelmap.c:141
+#, fuzzy
+msgid "Auxiliary 18"
+msgstr "GTK+ 2.18"
+
+#: ../src/pulse/channelmap.c:142
+#, fuzzy
+msgid "Auxiliary 19"
+msgstr "19.2 Kb/mp modem"
+
+#: ../src/pulse/channelmap.c:143
+#, fuzzy
+msgid "Auxiliary 20"
+msgstr "Kivonás: 0-tól 20-ig"
+
+#: ../src/pulse/channelmap.c:144
+#, fuzzy
+msgid "Auxiliary 21"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:145
+#, fuzzy
+msgid "Auxiliary 22"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:146
+#, fuzzy
+msgid "Auxiliary 23"
+msgstr "2009-09-23"
+
+#: ../src/pulse/channelmap.c:147
+#, fuzzy
+msgid "Auxiliary 24"
+msgstr "24 órás"
+
+#: ../src/pulse/channelmap.c:148
+#, fuzzy
+msgid "Auxiliary 25"
+msgstr "25% szürke"
+
+#: ../src/pulse/channelmap.c:149
+#, fuzzy
+msgid "Auxiliary 26"
+msgstr "Imigre-_26â¦"
+
+#: ../src/pulse/channelmap.c:150
+#, fuzzy
+msgid "Auxiliary 27"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:151
+#, fuzzy
+msgid "Auxiliary 28"
+msgstr "GNOME 2.28"
+
+#: ../src/pulse/channelmap.c:152
+#, fuzzy
+msgid "Auxiliary 29"
+msgstr "Folyamat/kiegészÃtÅ művelet"
+
+#: ../src/pulse/channelmap.c:153
+#, fuzzy
+msgid "Auxiliary 30"
+msgstr "30 perc"
+
+#: ../src/pulse/channelmap.c:154
+#, fuzzy
+msgid "Auxiliary 31"
+msgstr "1999 szeptember 31."
+
+#: ../src/pulse/channelmap.c:156
+#, fuzzy
+msgid "Top Center"
+msgstr "Fent, középen"
+
+#: ../src/pulse/channelmap.c:158
+#, fuzzy
+msgid "Top Front Center"
+msgstr "A bekezdés igazÃtása középre"
+
+#: ../src/pulse/channelmap.c:159
+#, fuzzy
+msgid "Top Front Left"
+msgstr "Elhelyezés balra felülre"
+
+#: ../src/pulse/channelmap.c:160
+#, fuzzy
+msgid "Top Front Right"
+msgstr "Elhelyezés jobbra felülre"
+
+#: ../src/pulse/channelmap.c:162
+#, fuzzy
+msgid "Top Rear Center"
+msgstr "A bekezdés igazÃtása középre"
+
+#: ../src/pulse/channelmap.c:163
+#, fuzzy
+msgid "Top Rear Left"
+msgstr "Elhelyezés balra felülre"
+
+#: ../src/pulse/channelmap.c:164
+#, fuzzy
+msgid "Top Rear Right"
+msgstr "Elhelyezés jobbra felülre"
+
+#: ../src/pulse/channelmap.c:484
+#: ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295
+#: ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341
+#: ../src/pulse/volume.c:371
+#, fuzzy
+msgid "(invalid)"
+msgstr "(Ãrvénytelen)"
+
+#: ../src/pulse/channelmap.c:761
+msgid "Stereo"
+msgstr "Sztereó"
+
+#: ../src/pulse/channelmap.c:766
+msgid "Surround 4.0"
+msgstr "Térhatású 4.0"
+
+#: ../src/pulse/channelmap.c:772
+msgid "Surround 4.1"
+msgstr "Térhatású 4.1"
+
+#: ../src/pulse/channelmap.c:778
+msgid "Surround 5.0"
+msgstr "Térhatású 5.0"
+
+#: ../src/pulse/channelmap.c:784
+msgid "Surround 5.1"
+msgstr "Térhatású 5.1"
+
+#: ../src/pulse/channelmap.c:791
+msgid "Surround 7.1"
+msgstr "Térhatású 7.1"
+
+#: ../src/pulse/error.c:43
+msgid "OK"
+msgstr "OK"
+
+#: ../src/pulse/error.c:44
+msgid "Access denied"
+msgstr "Hozzáférés megtagadva"
+
+#: ../src/pulse/error.c:45
+msgid "Unknown command"
+msgstr "Ismeretlen parancs"
+
+#: ../src/pulse/error.c:46
+msgid "Invalid argument"
+msgstr "Ãrvénytelen paraméter"
+
+#: ../src/pulse/error.c:47
+#, fuzzy
+msgid "Entity exists"
+msgstr "\" már létezik!"
+
+#: ../src/pulse/error.c:48
+#, fuzzy
+msgid "No such entity"
+msgstr "nincs ilyen puffer"
+
+#: ../src/pulse/error.c:49
+msgid "Connection refused"
+msgstr "Kapcsolat elutasÃtva"
+
+#: ../src/pulse/error.c:50
+msgid "Protocol error"
+msgstr "Protokollhiba"
+
+#: ../src/pulse/error.c:51
+msgid "Timeout"
+msgstr "IdÅtúllépés"
+
+#: ../src/pulse/error.c:52
+#, fuzzy
+msgid "No authorization key"
+msgstr "Nem érhetŠel kulcs"
+
+#: ../src/pulse/error.c:53
+msgid "Internal error"
+msgstr "BelsÅ hiba"
+
+#: ../src/pulse/error.c:54
+#, fuzzy
+msgid "Connection terminated"
+msgstr ""
+"\n"
+"A parancs megszakÃtva\n"
+
+#: ../src/pulse/error.c:55
+#, fuzzy
+msgid "Entity killed"
+msgstr "A(z) %d számú folyamat kilÅve"
+
+#: ../src/pulse/error.c:56
+#, fuzzy
+msgid "Invalid server"
+msgstr "Ãrvénytelen kiszolgáló"
+
+#: ../src/pulse/error.c:57
+#, fuzzy
+msgid "Module initalization failed"
+msgstr "A(z) \"%s\" modul végrehajtása meghiúsult."
+
+#: ../src/pulse/error.c:58
+msgid "Bad state"
+msgstr "Hibás állapot"
+
+#: ../src/pulse/error.c:59
+msgid "No data"
+msgstr "Nincs adat"
+
+#: ../src/pulse/error.c:60
+#, fuzzy
+msgid "Incompatible protocol version"
+msgstr "Inkompatibilis protokollverzió"
+
+#: ../src/pulse/error.c:61
+msgid "Too large"
+msgstr "Túl nagy"
+
+#: ../src/pulse/error.c:62
+msgid "Not supported"
+msgstr "Nem támogatott"
+
+#: ../src/pulse/error.c:63
+msgid "Unknown error code"
+msgstr "Ismeretlen hibakód"
+
+#: ../src/pulse/error.c:64
+#, fuzzy
+msgid "No such extension"
+msgstr "nincs ilyen puffer"
+
+#: ../src/pulse/error.c:65
+#, fuzzy
+msgid "Obsolete functionality"
+msgstr "Elavult vagy helyi"
+
+#: ../src/pulse/error.c:66
+#, fuzzy
+msgid "Missing implementation"
+msgstr "Nincs megvalósÃtva"
+
+#: ../src/pulse/error.c:67
+#, fuzzy
+msgid "Client forked"
+msgstr "BitTorrent kliens"
+
+#: ../src/pulse/error.c:68
+#, fuzzy
+msgid "Input/Output error"
+msgstr "Kimeneti/bemeneti hiba"
+
+#: ../src/pulse/error.c:69
+#, fuzzy
+msgid "Device or resource busy"
+msgstr "Az eszköz vagy erÅforrás foglalt"
+
+#: ../src/pulse/sample.c:172
+#, c-format
+msgid "%s %uch %uHz"
+msgstr ""
+
+#: ../src/pulse/sample.c:184
+#, fuzzy, c-format
+msgid "%0.1f GiB"
+msgstr "%.1f GiB"
+
+#: ../src/pulse/sample.c:186
+#, fuzzy, c-format
+msgid "%0.1f MiB"
+msgstr "%.1f MiB"
+
+#: ../src/pulse/sample.c:188
+#, fuzzy, c-format
+msgid "%0.1f KiB"
+msgstr "%.1f KiB"
+
+#: ../src/pulse/sample.c:190
+#, c-format
+msgid "%u B"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:55
+#: ../src/utils/pax11publish.c:100
+#, fuzzy
+msgid "XOpenDisplay() failed"
+msgstr "<b>Sikertelen bejelentkezést</b>"
+
+#: ../src/pulse/client-conf-x11.c:93
+#, fuzzy
+msgid "Failed to parse cookie data"
+msgstr "sikertelen a szimbólum adatainak a betöltése"
+
+#: ../src/pulse/client-conf.c:111
+#, fuzzy, c-format
+msgid "Failed to open configuration file '%s': %s"
+msgstr "nem sikerült olvasásra megnyitni a beállÃtási fájlt"
+
+#: ../src/pulse/context.c:550
+msgid "No cookie loaded. Attempting to connect without."
+msgstr ""
+
+#: ../src/pulse/context.c:693
+#, fuzzy, c-format
+msgid "fork(): %s"
+msgstr "programindÃtás: %s"
+
+#: ../src/pulse/context.c:748
+#, fuzzy, c-format
+msgid "waitpid(): %s"
+msgstr "Váratlan hiba a waitpid()-ben (%s)"
+
+#: ../src/pulse/context.c:1438
+#, fuzzy, c-format
+msgid "Received message for unknown extension '%s'"
+msgstr "\"_Ismeretlen állapotú\" üzenet olvasása"
+
+#: ../src/utils/pacat.c:108
+#, fuzzy, c-format
+msgid "Failed to drain stream: %s"
+msgstr "Az új adatfolyam indÃtása meghiúsult"
+
+#: ../src/utils/pacat.c:113
+#, fuzzy
+msgid "Playback stream drained."
+msgstr "A folyam váratlanul véget ért!"
+
+#: ../src/utils/pacat.c:123
+#, fuzzy
+msgid "Draining connection to server."
+msgstr "Kapcsolat visszaállÃtása a kiszolgálóhoz"
+
+#: ../src/utils/pacat.c:136
+#, fuzzy, c-format
+msgid "pa_stream_drain(): %s"
+msgstr "pa_ext_stream_restore_read() meghiúsult"
+
+#: ../src/utils/pacat.c:159
+#, fuzzy, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_ext_stream_restore_write() meghiúsult"
+
+#: ../src/utils/pacat.c:197
+#, fuzzy, c-format
+msgid "pa_stream_begin_write() failed: %s"
+msgstr "pa_ext_stream_restore_write() meghiúsult"
+
+#: ../src/utils/pacat.c:237
+#: ../src/utils/pacat.c:267
+#, fuzzy, c-format
+msgid "pa_stream_peek() failed: %s"
+msgstr "pa_ext_stream_restore_read() meghiúsult"
+
+#: ../src/utils/pacat.c:307
+msgid "Stream successfully created."
+msgstr "Az adatfolyam sikeresen létrejött."
+
+#: ../src/utils/pacat.c:310
+#, fuzzy, c-format
+msgid "pa_stream_get_buffer_attr() failed: %s"
+msgstr "pa_context_get_client_info() meghiúsult"
+
+#: ../src/utils/pacat.c:314
+#, c-format
+msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:317
+#, fuzzy, c-format
+msgid "Buffer metrics: maxlength=%u, fragsize=%u"
+msgstr "--Nincsenek sorok a pufferben--"
+
+#: ../src/utils/pacat.c:321
+#, fuzzy, c-format
+msgid "Using sample spec '%s', channel map '%s'."
+msgstr "%s: térkép tábla \"%s\": %lu bájt\n"
+
+#: ../src/utils/pacat.c:325
+#, fuzzy, c-format
+msgid "Connected to device %s (%u, %ssuspended)."
+msgstr "Kapcsolódva az eszközhöz a következÅn: %s"
+
+#: ../src/utils/pacat.c:335
+#, fuzzy, c-format
+msgid "Stream error: %s"
+msgstr "Folyam hiba"
+
+#: ../src/utils/pacat.c:345
+#, fuzzy, c-format
+msgid "Stream device suspended.%s"
+msgstr "Az eszköz nem adatfolyam"
+
+#: ../src/utils/pacat.c:347
+#, fuzzy, c-format
+msgid "Stream device resumed.%s"
+msgstr "Az eszköz nem adatfolyam"
+
+#: ../src/utils/pacat.c:355
+#, fuzzy, c-format
+msgid "Stream underrun.%s"
+msgstr "Vége az adatfolyamnak"
+
+#: ../src/utils/pacat.c:362
+#, fuzzy, c-format
+msgid "Stream overrun.%s"
+msgstr "%s: a bemenet túlcsordult"
+
+#: ../src/utils/pacat.c:369
+#, fuzzy, c-format
+msgid "Stream started.%s"
+msgstr "%s tartomány elindÃtva\n"
+
+#: ../src/utils/pacat.c:376
+#, fuzzy, c-format
+msgid "Stream moved to device %s (%u, %ssuspended).%s"
+msgstr "Nem sikerült megnyitni a kimeneti eszközt"
+
+#: ../src/utils/pacat.c:376
+#, fuzzy
+msgid "not "
+msgstr "Nem gyÅzÅdtem meg"
+
+#: ../src/utils/pacat.c:383
+#, fuzzy, c-format
+msgid "Stream buffer attributes changed.%s"
+msgstr "E787: A puffer váratlanul megváltozott"
+
+#: ../src/utils/pacat.c:415
+#, fuzzy, c-format
+msgid "Connection established.%s"
+msgstr "Kapcsolat létrehozva"
+
+#: ../src/utils/pacat.c:418
+#, fuzzy, c-format
+msgid "pa_stream_new() failed: %s"
+msgstr "Az új adatfolyam indÃtása meghiúsult"
+
+#: ../src/utils/pacat.c:450
+#, fuzzy, c-format
+msgid "pa_stream_connect_playback() failed: %s"
+msgstr "A megfigyelŠadatfolyam csatlakoztatása meghiúsult"
+
+#: ../src/utils/pacat.c:456
+#, fuzzy, c-format
+msgid "pa_stream_connect_record() failed: %s"
+msgstr "A megfigyelŠadatfolyam csatlakoztatása meghiúsult"
+
+#: ../src/utils/pacat.c:470
+#: ../src/utils/pactl.c:857
+#, fuzzy, c-format
+msgid "Connection failure: %s"
+msgstr "HitelesÃtési hiba"
+
+#: ../src/utils/pacat.c:503
+#, fuzzy
+msgid "Got EOF."
+msgstr "Ãzenet érkezett: #%"
+
+#: ../src/utils/pacat.c:540
+#, fuzzy, c-format
+msgid "write() failed: %s"
+msgstr "az Ãrás sikertelen"
+
+#: ../src/utils/pacat.c:561
+#, fuzzy
+msgid "Got signal, exiting."
+msgstr "%d szignál érkezett, kilépésâ¦\n"
+
+#: ../src/utils/pacat.c:575
+#, fuzzy, c-format
+msgid "Failed to get latency: %s"
+msgstr "nem sikerült a képességek lekérdezése"
+
+#: ../src/utils/pacat.c:580
+#, fuzzy, c-format
+msgid "Time: %0.3f sec; Latency: %0.0f usec."
+msgstr "%d csoport elmentve ebben: \"%s\" %.1f másodperc alatt (%.0f csoport/mp)"
+
+#: ../src/utils/pacat.c:599
+#, fuzzy, c-format
+msgid "pa_stream_update_timing_info() failed: %s"
+msgstr "pa_context_get_client_info() meghiúsult"
+
+#: ../src/utils/pacat.c:609
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+"\n"
+" -r, --record Create a connection for recording\n"
+" -p, --playback Create a connection for playback\n"
+"\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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
+" being connected to.\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"
+" --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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
+" --raw Record/play raw PCM data.\n"
+" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --list-file-formats List available file formats.\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:731
+#, fuzzy, c-format
+msgid ""
+"pacat %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr "A program kapcsolói ütköznek"
+
+#: ../src/utils/pacat.c:764
+#: ../src/utils/pactl.c:953
+#, fuzzy, c-format
+msgid "Invalid client name '%s'"
+msgstr "%s: érvénytelen kapcsolónév"
+
+#: ../src/utils/pacat.c:779
+#, fuzzy, c-format
+msgid "Invalid stream name '%s'"
+msgstr "%s: érvénytelen kapcsolónév"
+
+#: ../src/utils/pacat.c:816
+#, fuzzy, c-format
+msgid "Invalid channel map '%s'"
+msgstr "Ãrvénytelen csatornatÃpus '%s'"
+
+#: ../src/utils/pacat.c:845
+#, fuzzy, c-format
+msgid "Invalid latency specification '%s'"
+msgstr "%.*s: érvénytelen konverziós specifikáció"
+
+#: ../src/utils/pacat.c:852
+#, fuzzy, c-format
+msgid "Invalid process time specification '%s'"
+msgstr "Nem adott meg folyamat-specifikációt"
+
+#: ../src/utils/pacat.c:864
+#, fuzzy, c-format
+msgid "Invalid property '%s'"
+msgstr "Ãrvénytelen %s tulajdonságérték"
+
+#: ../src/utils/pacat.c:881
+#, fuzzy, c-format
+msgid "Unknown file format %s."
+msgstr "Ismeretlen fájlformátum: \"%s\""
+
+#: ../src/utils/pacat.c:900
+#, fuzzy
+msgid "Invalid sample specification"
+msgstr "%.*s: érvénytelen konverziós specifikáció"
+
+#: ../src/utils/pacat.c:910
+#, fuzzy, c-format
+msgid "open(): %s"
+msgstr "%s:%d megnyitása"
+
+#: ../src/utils/pacat.c:915
+#, fuzzy, c-format
+msgid "dup2(): %s"
+msgstr "a dup2 meghiúsult"
+
+#: ../src/utils/pacat.c:922
+#, fuzzy
+msgid "Too many arguments."
+msgstr "túl sok argumentum"
+
+#: ../src/utils/pacat.c:933
+#, fuzzy
+msgid "Failed to generate sample specification for file."
+msgstr "meghiúsult az alábbi beállÃtó fájl megnyitása olvasásra: `%.255s'"
+
+#: ../src/utils/pacat.c:953
+#, fuzzy
+msgid "Failed to open audio file."
+msgstr "Nem sikerült megnyitni az átmeneti fájlt"
+
+#: ../src/utils/pacat.c:959
+msgid "Warning: specified sample specification will be overwritten with specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:962
+#: ../src/utils/pactl.c:997
+#, fuzzy
+msgid "Failed to determine sample specification from file."
+msgstr "RGB-adat betöltése a TIFF-fájlból sikertelen"
+
+#: ../src/utils/pacat.c:971
+msgid "Warning: Failed to determine channel map from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:982
+#, fuzzy
+msgid "Channel map doesn't match sample specification"
+msgstr "%s: a tanúsÃtvány â%sâ általános neve nem egyezik a kért â%sâ gépnévvel.\n"
+
+#: ../src/utils/pacat.c:993
+#, fuzzy
+msgid "Warning: failed to write channel map to file."
+msgstr "Hiba történt a fájl Ãrása közben. A fájlnév rendben van?"
+
+#: ../src/utils/pacat.c:1008
+#, c-format
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:1009
+#, fuzzy
+msgid "recording"
+msgstr "felvétel"
+
+#: ../src/utils/pacat.c:1009
+#, fuzzy
+msgid "playback"
+msgstr "Lejátszás"
+
+#: ../src/utils/pacat.c:1035
+#: ../src/utils/pactl.c:1267
+#, fuzzy
+msgid "pa_mainloop_new() failed."
+msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+
+#: ../src/utils/pacat.c:1054
+#, fuzzy
+msgid "io_new() failed."
+msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+
+#: ../src/utils/pacat.c:1061
+#: ../src/utils/pactl.c:1279
+#, fuzzy
+msgid "pa_context_new() failed."
+msgstr "pa_context_subscribe() meghiúsult"
+
+#: ../src/utils/pacat.c:1069
+#: ../src/utils/pactl.c:1285
+#, fuzzy, c-format
+msgid "pa_context_connect() failed: %s"
+msgstr "pa_context_subscribe() meghiúsult"
+
+#: ../src/utils/pacat.c:1075
+#, fuzzy
+msgid "pa_context_rttime_new() failed."
+msgstr "az új kontextus kiszámÃtása meghiúsult"
+
+#: ../src/utils/pacat.c:1082
+#: ../src/utils/pactl.c:1290
+#, fuzzy
+msgid "pa_mainloop_run() failed."
+msgstr "svc_run: - választás sikertelen"
+
+#: ../src/utils/pasuspender.c:81
+#, fuzzy, c-format
+msgid "fork(): %s\n"
+msgstr "programindÃtás: %s"
+
+#: ../src/utils/pasuspender.c:92
+#, fuzzy, c-format
+msgid "execvp(): %s\n"
+msgstr "az execvp meghiúsult"
+
+#: ../src/utils/pasuspender.c:109
+#, fuzzy, c-format
+msgid "Failure to suspend: %s\n"
+msgstr "Kérés a felfüggesztésre"
+
+#: ../src/utils/pasuspender.c:124
+#, fuzzy, c-format
+msgid "Failure to resume: %s\n"
+msgstr "Kattintson a folytatáshoz"
+
+#: ../src/utils/pasuspender.c:147
+#, fuzzy, c-format
+msgid "WARNING: Sound server is not local, not suspending.\n"
+msgstr "A leejtett fájl nem helyi."
+
+#: ../src/utils/pasuspender.c:159
+#, fuzzy, c-format
+msgid "Connection failure: %s\n"
+msgstr "HitelesÃtési hiba"
+
+#: ../src/utils/pasuspender.c:176
+#, fuzzy, c-format
+msgid "Got SIGINT, exiting.\n"
+msgstr "Kilépés (SIGINT szignál)..."
+
+#: ../src/utils/pasuspender.c:194
+#, fuzzy, c-format
+msgid "WARNING: Child process terminated by signal %u\n"
+msgstr ""
+"A(z) %d azonosÃtójú folyamatot nem lehet kilÅni %d jelzéssel.\n"
+"%s"
+
+#: ../src/utils/pasuspender.c:212
+#, c-format
+msgid ""
+"%s [options] ... \n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" -s, --server=SERVER The name of the server to connect to\n"
+"\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:248
+#, fuzzy, c-format
+msgid ""
+"pasuspender %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr "A program kapcsolói ütköznek"
+
+#: ../src/utils/pasuspender.c:277
+#, fuzzy, c-format
+msgid "pa_mainloop_new() failed.\n"
+msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+
+#: ../src/utils/pasuspender.c:290
+#, fuzzy, c-format
+msgid "pa_context_new() failed.\n"
+msgstr "pa_context_subscribe() meghiúsult"
+
+#: ../src/utils/pasuspender.c:298
+#, fuzzy, c-format
+msgid "pa_mainloop_run() failed.\n"
+msgstr "svc_run: - választás sikertelen"
+
+#: ../src/utils/pactl.c:135
+#, fuzzy, c-format
+msgid "Failed to get statistics: %s"
+msgstr "nem sikerült a képességek lekérdezése"
+
+#: ../src/utils/pactl.c:141
+#, c-format
+msgid "Currently in use: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:144
+#, c-format
+msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:147
+#, fuzzy, c-format
+msgid "Sample cache size: %s\n"
+msgstr "Lemezes gyorsÃtótár mérete"
+
+#: ../src/utils/pactl.c:156
+#, fuzzy, c-format
+msgid "Failed to get server information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:164
+#, c-format
+msgid ""
+"User name: %s\n"
+"Host Name: %s\n"
+"Server Name: %s\n"
+"Server Version: %s\n"
+"Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
+"Default Sink: %s\n"
+"Default Source: %s\n"
+"Cookie: %08x\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:205
+#, fuzzy, c-format
+msgid "Failed to get sink information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:221
+#, c-format
+msgid ""
+"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:268
+#: ../src/utils/pactl.c:360
+#, c-format
+msgid "\tPorts:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:274
+#: ../src/utils/pactl.c:366
+#, fuzzy, c-format
+msgid "\tActive Port: %s\n"
+msgstr "[kiszolgáló:port]"
+
+#: ../src/utils/pactl.c:297
+#, fuzzy, c-format
+msgid "Failed to get source information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:313
+#, c-format
+msgid ""
+"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:345
+#: ../src/utils/pactl.c:401
+#: ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473
+#: ../src/utils/pactl.c:532
+#: ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543
+#: ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:637
+#: ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:645
+#, fuzzy
+msgid "n/a"
+msgstr "ismeretlen"
+
+#: ../src/utils/pactl.c:375
+#, fuzzy, c-format
+msgid "Failed to get module information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:393
+#, c-format
+msgid ""
+"Module #%u\n"
+"\tName: %s\n"
+"\tArgument: %s\n"
+"\tUsage counter: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:412
+#, fuzzy, c-format
+msgid "Failed to get client information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:430
+#, fuzzy, c-format
+msgid ""
+"Client #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr "A modul nem képes létrehozni a szükséges szálakat"
+
+#: ../src/utils/pactl.c:447
+#, fuzzy, c-format
+msgid "Failed to get card information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:465
+#, c-format
+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:479
+#, c-format
+msgid "\tProfiles:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:485
+#, fuzzy, c-format
+msgid "\tActive Profile: %s\n"
+msgstr "Profillétrehozás"
+
+#: ../src/utils/pactl.c:496
+#, fuzzy, c-format
+msgid "Failed to get sink input information: %s"
+msgstr "pa_context_get_sink_input_info() meghiúsult"
+
+#: ../src/utils/pactl.c:515
+#, c-format
+msgid ""
+"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:554
+#, fuzzy, c-format
+msgid "Failed to get source output information: %s"
+msgstr "pa_context_get_source_output_info_list() meghiúsult"
+
+#: ../src/utils/pactl.c:574
+#, c-format
+msgid ""
+"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:605
+#, fuzzy, c-format
+msgid "Failed to get sample information: %s"
+msgstr "csomópont-információ lekérdezése nem sikerült"
+
+#: ../src/utils/pactl.c:623
+#, c-format
+msgid ""
+"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:653
+#: ../src/utils/pactl.c:663
+#, fuzzy, c-format
+msgid "Failure: %s"
+msgstr "Hiba"
+
+#: ../src/utils/pactl.c:687
+#, fuzzy, c-format
+msgid "Failed to upload sample: %s"
+msgstr ""
+"A feltöltés a kiszolgálóra meghiúsult,\n"
+"késÅbb próbálja meg újra."
+
+#: ../src/utils/pactl.c:704
+#, fuzzy
+msgid "Premature end of file"
+msgstr "IdÅ elÅtti fájlvége"
+
+#: ../src/utils/pactl.c:863
+#, fuzzy
+msgid "Got SIGINT, exiting."
+msgstr "Kilépés (SIGINT szignál)..."
+
+#: ../src/utils/pactl.c:869
+#, c-format
+msgid ""
+"%s [options] stat\n"
+"%s [options] list\n"
+"%s [options] exit\n"
+"%s [options] upload-sample FILENAME [NAME]\n"
+"%s [options] play-sample NAME [SINK]\n"
+"%s [options] remove-sample NAME\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [options] load-module NAME [ARGS ...]\n"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
+msgstr ""
+
+#: ../src/utils/pactl.c:933
+#, fuzzy, c-format
+msgid ""
+"pactl %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr "A program kapcsolói ütköznek"
+
+#: ../src/utils/pactl.c:979
+#, fuzzy
+msgid "Please specify a sample file to load"
+msgstr "A glade fájl betöltése meghiúsult, ellenÅrizze a telepÃtését."
+
+#: ../src/utils/pactl.c:992
+#, fuzzy
+msgid "Failed to open sound file."
+msgstr "Nem sikerült megnyitni az átmeneti fájlt"
+
+#: ../src/utils/pactl.c:1004
+#, fuzzy
+msgid "Warning: Failed to determine sample specification from file."
+msgstr "RGB-adat betöltése a TIFF-fájlból sikertelen"
+
+#: ../src/utils/pactl.c:1014
+#, fuzzy
+msgid "You have to specify a sample name to play"
+msgstr "Meg kell adnia egy feloldandó csomagnevet"
+
+#: ../src/utils/pactl.c:1026
+#, fuzzy
+msgid "You have to specify a sample name to remove"
+msgstr "Meg kell adnia egy eltávolÃtandó csomagot"
+
+#: ../src/utils/pactl.c:1035
+#, fuzzy
+msgid "You have to specify a sink input index and a sink"
+msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+
+#: ../src/utils/pactl.c:1045
+#, fuzzy
+msgid "You have to specify a source output index and a source"
+msgstr "Adja meg a kimeneti fájl helyét és nevét:"
+
+#: ../src/utils/pactl.c:1060
+#, fuzzy
+msgid "You have to specify a module name and arguments."
+msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+
+#: ../src/utils/pactl.c:1080
+#, fuzzy
+msgid "You have to specify a module index"
+msgstr "Meg kell adnia egy archÃvumnevet."
+
+#: ../src/utils/pactl.c:1090
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1103
+msgid "You may not specify more than one source. You have to specify a boolean value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1115
+msgid "You have to specify a card name/index and a profile name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1126
+#, fuzzy
+msgid "You have to specify a sink name/index and a port name"
+msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+
+#: ../src/utils/pactl.c:1137
+msgid "You have to specify a source name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1149
+#, fuzzy
+msgid "You have to specify a sink name/index and a volume"
+msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+
+#: ../src/utils/pactl.c:1154
+#: ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193
+#: ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226
+#: ../src/utils/pactl.c:1248
+#, fuzzy
+msgid "Invalid volume specification"
+msgstr "%.*s: érvénytelen konverziós specifikáció"
+
+#: ../src/utils/pactl.c:1166
+msgid "You have to specify a source name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1183
+msgid "You have to specify a sink input index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1188
+#, fuzzy
+msgid "Invalid sink input index"
+msgstr "pa_context_move_sink_input_by_index() meghiúsult"
+
+#: ../src/utils/pactl.c:1204
+#, fuzzy
+msgid "You have to specify a sink name/index and a mute boolean"
+msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+
+#: ../src/utils/pactl.c:1221
+msgid "You have to specify a source name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1238
+msgid "You have to specify a sink input index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1243
+#, fuzzy
+msgid "Invalid sink input index specification"
+msgstr "A(z) â%sâ escape sorozat érvénytelen a bemenet elhatárolójának meghatározásában."
+
+#: ../src/utils/pactl.c:1262
+#, fuzzy
+msgid "No valid command specified."
+msgstr "nincs megadva a végrehajtandó parancs"
+
+#: ../src/utils/pax11publish.c:61
+#, c-format
+msgid ""
+"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
+"\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"
+" -r Remove PulseAudio data from X11 display\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:94
+#, fuzzy, c-format
+msgid "Failed to parse command line.\n"
+msgstr "Nem lehet feldolgozni a(z) â%sâ parancssort: %s"
+
+#: ../src/utils/pax11publish.c:108
+#, fuzzy, c-format
+msgid "Server: %s\n"
+msgstr "_Kiszolgáló:"
+
+#: ../src/utils/pax11publish.c:110
+#, fuzzy, c-format
+msgid "Source: %s\n"
+msgstr "Forrás:"
+
+#: ../src/utils/pax11publish.c:112
+#, fuzzy, c-format
+msgid "Sink: %s\n"
+msgstr "Bemenet"
+
+#: ../src/utils/pax11publish.c:114
+#, fuzzy, c-format
+msgid "Cookie: %s\n"
+msgstr "süti"
+
+#: ../src/utils/pax11publish.c:132
+#, fuzzy, c-format
+msgid "Failed to parse cookie data\n"
+msgstr "sikertelen a szimbólum adatainak a betöltése"
+
+#: ../src/utils/pax11publish.c:137
+#, fuzzy, c-format
+msgid "Failed to save cookie data\n"
+msgstr "sikertelen a szimbólum adatainak a betöltése"
+
+#: ../src/utils/pax11publish.c:152
+#, fuzzy, c-format
+msgid "Failed to load client configuration file.\n"
+msgstr "nem sikerült olvasásra megnyitni a beállÃtási fájlt"
+
+#: ../src/utils/pax11publish.c:157
+#, fuzzy, c-format
+msgid "Failed to read environment configuration data.\n"
+msgstr "Az adatok olvasása meghiúsult az adatfolyamból"
+
+#: ../src/utils/pax11publish.c:174
+#, fuzzy, c-format
+msgid "Failed to get FQDN.\n"
+msgstr "nem sikerült a képességek lekérdezése"
+
+#: ../src/utils/pax11publish.c:194
+#, fuzzy, c-format
+msgid "Failed to load cookie data\n"
+msgstr "sikertelen a szimbólum adatainak a betöltése"
+
+#: ../src/utils/pax11publish.c:211
+#, fuzzy, c-format
+msgid "Not yet implemented.\n"
+msgstr "Még nincs megvalósÃtva."
+
+#: ../src/utils/pacmd.c:69
+msgid "No PulseAudio daemon running, or not running as session daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:74
+#, fuzzy, c-format
+msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+msgstr "svc_unix.c - AF_UNIX gond van illesztÅpont létrehozásával"
+
+#: ../src/utils/pacmd.c:91
+#, fuzzy, c-format
+msgid "connect(): %s"
+msgstr "\\kapcsolat: %s"
+
+#: ../src/utils/pacmd.c:99
+#, fuzzy
+msgid "Failed to kill PulseAudio daemon."
+msgstr "nem sikerült olvasni a Xen-szolgáltatásból"
+
+#: ../src/utils/pacmd.c:107
+#, fuzzy
+msgid "Daemon not responding."
+msgstr "â%sâ nem válaszol."
+
+#: ../src/utils/pacmd.c:161
+#, fuzzy, c-format
+msgid "poll(): %s"
+msgstr "poll(): %s"
+
+#: ../src/utils/pacmd.c:171
+#: ../src/utils/pacmd.c:188
+#, fuzzy, c-format
+msgid "read(): %s"
+msgstr "read(): %s"
+
+#: ../src/utils/pacmd.c:207
+#: ../src/utils/pacmd.c:223
+#, fuzzy, c-format
+msgid "write(): %s"
+msgstr "write(): %s"
+
+#: ../src/pulsecore/lock-autospawn.c:136
+#: ../src/pulsecore/lock-autospawn.c:219
+#, fuzzy
+msgid "Cannot access autospawn lock."
+msgstr "A modul nem képes megfelelÅen zárolni az adatokat"
+
+#: ../src/modules/alsa/alsa-sink.c:530
+#: ../src/modules/alsa/alsa-sink.c:689
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-source.c:506
+#: ../src/modules/alsa/alsa-source.c:656
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/module-alsa-card.c:152
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
+#: ../src/modules/alsa/alsa-mixer.c:2931
+msgid "Off"
+msgstr "Kikapcsolva"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#, fuzzy
+msgid "High Fidelity Playback (A2DP)"
+msgstr "A lejátszás nem szüneteltethetÅ"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#, fuzzy
+msgid "High Fidelity Capture (A2DP)"
+msgstr "Felvétel, hozzáfűzés a film végéhez"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#, fuzzy
+msgid "Telephony Duplex (HSP/HFP)"
+msgstr "Mobiltelefon bázisállomás"
+
+#: ../src/modules/reserve-wrap.c:151
+msgid "PulseAudio Sound Server"
+msgstr "PulseAudio hangkiszolgáló"
+
+#: ../src/modules/module-rygel-media-server.c:569
+#: ../src/modules/module-rygel-media-server.c:583
+msgid "Output Devices"
+msgstr "Kimeneti eszközök"
+
+#: ../src/modules/module-rygel-media-server.c:570
+#: ../src/modules/module-rygel-media-server.c:584
+msgid "Input Devices"
+msgstr "Bemeneti eszközök"
+
+#: ../src/modules/module-rygel-media-server.c:774
+#, fuzzy
+msgid "Audio on @HOSTNAME@"
+msgstr "%(safeuser)s felhasználó listatagságai a(z) %(hostname)s gépen"
+
+#: ../src/modules/alsa/alsa-mixer.c:1701
+msgid "Input"
+msgstr "Bemenet"
+
+#: ../src/modules/alsa/alsa-mixer.c:1702
+msgid "Docking Station Input"
+msgstr "Dokkolóállomás bemenet"
+
+#: ../src/modules/alsa/alsa-mixer.c:1703
+msgid "Docking Station Microphone"
+msgstr "Dokkolóállomás mikrofon"
+
+#: ../src/modules/alsa/alsa-mixer.c:1704
+msgid "Line-In"
+msgstr "Vonalbemenet"
+
+#: ../src/modules/alsa/alsa-mixer.c:1705
+msgid "Microphone"
+msgstr "Mikrofon"
+
+#: ../src/modules/alsa/alsa-mixer.c:1706
+msgid "External Microphone"
+msgstr "KülsŠmikrofon"
+
+#: ../src/modules/alsa/alsa-mixer.c:1707
+msgid "Internal Microphone"
+msgstr "BelsÅ mikrofon"
+
+#: ../src/modules/alsa/alsa-mixer.c:1708
+msgid "Radio"
+msgstr "Rádió"
+
+#: ../src/modules/alsa/alsa-mixer.c:1709
+msgid "Video"
+msgstr "Videó"
+
+#: ../src/modules/alsa/alsa-mixer.c:1710
+#, fuzzy
+msgid "Automatic Gain Control"
+msgstr "Automatikus beállÃtásvezérlés"
+
+#: ../src/modules/alsa/alsa-mixer.c:1711
+#, fuzzy
+msgid "No Automatic Gain Control"
+msgstr "Nem található hangerÅszabályzó"
+
+#: ../src/modules/alsa/alsa-mixer.c:1712
+msgid "Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1713
+#, fuzzy
+msgid "No Boost"
+msgstr "nincs automatikus indÃtás"
+
+#: ../src/modules/alsa/alsa-mixer.c:1714
+#, fuzzy
+msgid "Amplifier"
+msgstr "Műveleti erÅsÃtÅ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1715
+#, fuzzy
+msgid "No Amplifier"
+msgstr "Műveleti erÅsÃtÅ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1773
+msgid "Analog Input"
+msgstr "Analóg bemenet"
+
+#: ../src/modules/alsa/alsa-mixer.c:1774
+msgid "Analog Microphone"
+msgstr "Analóg mikrofon"
+
+#: ../src/modules/alsa/alsa-mixer.c:1775
+msgid "Analog Line-In"
+msgstr "Analóg vonalbemenet"
+
+#: ../src/modules/alsa/alsa-mixer.c:1776
+msgid "Analog Radio"
+msgstr "Analóg rádió"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
+msgid "Analog Video"
+msgstr "Analóg videó"
+
+#: ../src/modules/alsa/alsa-mixer.c:1778
+msgid "Analog Output"
+msgstr "Analóg kimenet"
+
+#: ../src/modules/alsa/alsa-mixer.c:1779
+msgid "Analog Headphones"
+msgstr "Analóg fejhallgató"
+
+#: ../src/modules/alsa/alsa-mixer.c:1780
+#, fuzzy
+msgid "Analog Output (LFE)"
+msgstr "Hiba a kimenet elindÃtása közben"
+
+#: ../src/modules/alsa/alsa-mixer.c:1781
+#, fuzzy
+msgid "Analog Mono Output"
+msgstr "A Mono.Addins hibakeresési kimenetének engedélyezése"
+
+#: ../src/modules/alsa/alsa-mixer.c:1981
+#, c-format
+msgid "%s+%s"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1984
+#: ../src/modules/alsa/alsa-mixer.c:3404
+#, c-format
+msgid "%s / %s"
+msgstr "%s / %s"
+
+#: ../src/modules/alsa/alsa-mixer.c:2790
+#, fuzzy
+msgid "Analog Mono"
+msgstr "Mono betöltÅ"
+
+#: ../src/modules/alsa/alsa-mixer.c:2791
+msgid "Analog Stereo"
+msgstr "Analóg sztereó"
+
+#: ../src/modules/alsa/alsa-mixer.c:2792
+msgid "Analog Surround 2.1"
+msgstr "Analóg térhatású 2.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2793
+msgid "Analog Surround 3.0"
+msgstr "Analóg térhatású 3.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2794
+msgid "Analog Surround 3.1"
+msgstr "Analóg térhatású 3.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2795
+msgid "Analog Surround 4.0"
+msgstr "Analóg térhatású 4.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2796
+msgid "Analog Surround 4.1"
+msgstr "Analóg térhatású 4.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2797
+msgid "Analog Surround 5.0"
+msgstr "Analóg térhatású 5.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2798
+msgid "Analog Surround 5.1"
+msgstr "Analóg térhatású 5.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2799
+msgid "Analog Surround 6.0"
+msgstr "Analóg térhatású 6.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2800
+msgid "Analog Surround 6.1"
+msgstr "Analóg térhatású 6.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2801
+msgid "Analog Surround 7.0"
+msgstr "Analóg térhatású 7.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2802
+msgid "Analog Surround 7.1"
+msgstr "Analóg térhatású 7.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2803
+msgid "Digital Stereo (IEC958)"
+msgstr "Digitális sztereó (IEC958)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2804
+msgid "Digital Surround 4.0 (IEC958)"
+msgstr "Digitális térhatású 4.0 (IEC958)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2805
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr "Digitális térhatású 4.0 (IEC958/AC3)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2806
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr "Digitális térhatású 5.1 (IEC958/AC3)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2807
+msgid "Digital Stereo (HDMI)"
+msgstr "Digitális térhatású (HDMI)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2928
+#, fuzzy
+msgid "Analog Mono Duplex"
+msgstr "Kétoldalas/fordÃtva beállÃtás"
+
+#: ../src/modules/alsa/alsa-mixer.c:2929
+#, fuzzy
+msgid "Analog Stereo Duplex"
+msgstr "Kétoldalas/fordÃtva beállÃtás"
+
+#: ../src/modules/alsa/alsa-mixer.c:2930
+#, fuzzy
+msgid "Digital Stereo Duplex (IEC958)"
+msgstr "Szteró LADSPA effekt rack"
+
commit 0f68e0f5f125973d6a16cb5218e6c75cb2264339
Author: warrink <warrink at fedoraproject.org>
Date: Fri Oct 2 22:50:26 2009 +0000
Sending translation for Dutch
diff --git a/po/nl.po b/po/nl.po
index 0506e66..b2a7370 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-30 09:44+0000\n"
+"POT-Creation-Date: 2009-10-02 20:57+0000\n"
"PO-Revision-Date: 2009-09-30 16:47+0200\n"
"Last-Translator: Geert Warrink <geert.warrink at onsnet.nu>\n"
"Language-Team: nl <nl at li.org>\n"
@@ -1026,7 +1026,7 @@ msgstr "Eenheid onbekent"
#: ../src/pulse/error.c:49
msgid "Connection refused"
-msgstr "Verbinding geweigert"
+msgstr "Verbinding geweigerd"
#: ../src/pulse/error.c:50
msgid "Protocol error"
commit e53a24d48004d3bbca6fd1d066fac4313feb8017
Author: fgonz <fgonz at fedoraproject.org>
Date: Sun Oct 4 19:24:35 2009 +0000
Sending translation for Spanish
diff --git a/po/es.po b/po/es.po
index a38d24c..48a4f13 100644
--- a/po/es.po
+++ b/po/es.po
@@ -4,14 +4,15 @@
# Domingo Becker <domingobecker at gmail.com>, 2009.
# Héctor Daniel Cabrera <h.daniel.cabrera at gmail.com>, 2009.
#
+# Fernando Gonzalez Blanco <fgonz at fedoraproject.org>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-11 08:40-0300\n"
-"Last-Translator: Domingo Becker <domingobecker at gmail.com>\n"
-"Language-Team: Fedora Spanish <fedora-trans-es at redhat.com>\n"
+"POT-Creation-Date: 2009-10-04 16:37+0000\n"
+"PO-Revision-Date: 2009-10-04 21:16+0200\n"
+"Last-Translator: Fernando Gonzalez Blanco <fgonz at fedoraproject.org>\n"
+"Language-Team: Spanish <fedora-trans-es at redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -2399,133 +2400,122 @@ msgstr "Servidor de Sonido PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Dispositivos de salida"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "Entrada %s"
+msgstr "Dispositivos de entrada"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Audio en @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "Entrada %s"
+msgstr "Entrada"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Estación dock de entrada"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Micrófono de la estación Dock"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "En lÃnea"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Micrófono"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Micrófono externo"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Audio Interno"
+msgstr "Micrófono interno"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "VÃdeo"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Control automático de ganancia"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Sin control automático de ganancia"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Incremento de ganancia"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Sin incremento de ganancia"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Amplificador"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Sin amplificador"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Mono Analógico"
+msgstr "Entrada analógica"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Mono Analógico"
+msgstr "Micrófono analógico"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Mono Analógico"
+msgstr "Entrada en lÃnea analógica"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Mono Analógico"
+msgstr "Radio analógico"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Estéreo Analógico"
+msgstr "VÃdeo analógico"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Salida Nula"
+msgstr "Salida analógica"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Mono Analógico"
+msgstr "Auriculares analógicos"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Salida analógica (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Mono Analógico"
+msgstr "Salida Mono analógica "
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2536,19 +2526,16 @@ msgid "Analog Stereo"
msgstr "Estéreo Analógico"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Análogo Envolvente 4.1"
+msgstr "Análogico Envolvente 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Análogo Envolvente 4.0"
+msgstr "Análogico Envolvente 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Análogo Envolvente 4.1"
+msgstr "Análogico Envolvente 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2567,19 +2554,16 @@ msgid "Analog Surround 5.1"
msgstr "Análogo Envolvente 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Análogo Envolvente 4.0"
+msgstr "Análogico Envolvente 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Análogo Envolvente 4.1"
+msgstr "Análogico Envolvente 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Análogo Envolvente 4.0"
+msgstr "Análogico Envolvente 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2590,9 +2574,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Estéreo Digital (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Digital Envolvente 4.0 (IEC9588/AC3)"
+msgstr "Digital Envolvente 4.0 (IEC9588)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2607,19 +2590,16 @@ msgid "Digital Stereo (HDMI)"
msgstr "Estéreo Digital (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Mono Analógico"
+msgstr "Mono Analógico.Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Estéreo Analógico"
+msgstr "Estéreo Analógico.Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Estéreo Digital (IEC958)"
+msgstr "Estéreo Digital Duplex(IEC958)"
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Nombre de cliente inválido '%s'\n"
commit 16e9ff261cceb19671c95808f1a48821815c2f22
Author: mvdz <mvdz at fedoraproject.org>
Date: Tue Oct 6 10:22:55 2009 +0000
Sending translation for Ukrainian
diff --git a/po/uk.po b/po/uk.po
index a341cd6..aacdf94 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -6,16 +6,16 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-11 17:38+0300\n"
+"POT-Creation-Date: 2009-10-03 10:02+0000\n"
+"PO-Revision-Date: 2009-10-03 19:28+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
"Language-Team: Ukrainian <translation at linux.org.ua>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 0.3\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 "
+"&& (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
@@ -224,8 +224,7 @@ msgstr ""
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr ""
-"ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, але не вÑÑановлено --disallow-exit!"
+msgstr "ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, але не вÑÑановлено --disallow-exit!"
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
@@ -1168,8 +1167,7 @@ msgstr "Ðе вдалоÑÑ Ð²ÑдкÑиÑи Ñайл налаÑÑÑваннÑ
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
-msgstr ""
-"ÐÑкÑв не заванÑажено. ÐÑде виконано ÑпÑÐ¾Ð±Ñ Ð·âÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð° ÑÑ
вÑдÑÑÑноÑÑÑ."
+msgstr "ÐÑкÑв не заванÑажено. ÐÑде виконано ÑпÑÐ¾Ð±Ñ Ð·âÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð° ÑÑ
вÑдÑÑÑноÑÑÑ."
#: ../src/pulse/context.c:693
#, c-format
@@ -1343,8 +1341,7 @@ msgstr "ЧаÑ: %0.3f Ñек.; ÐаÑенÑнÑÑÑÑ: %0.0f мкÑ."
#: ../src/utils/pacat.c:599
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr ""
-"СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_update_timing_info() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
+msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_update_timing_info() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
#: ../src/utils/pacat.c:609
#, c-format
@@ -1558,10 +1555,8 @@ msgstr "ÐопеÑедженнÑ: не вдалоÑÑ Ð·Ð°Ð¿Ð¸ÑаÑи каÑÑ
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
-"ÐÑдкÑиÑÑÑ Ð¿Ð¾ÑÐ¾ÐºÑ %s з ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑÑ Â«%s» Ñ ÐºÐ°ÑÑÐ¾Ñ ÐºÐ°Ð½Ð°Ð»Ñв «%s»."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr "ÐÑдкÑиÑÑÑ Ð¿Ð¾ÑÐ¾ÐºÑ %s з ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑÑ Â«%s» Ñ ÐºÐ°ÑÑÐ¾Ñ ÐºÐ°Ð½Ð°Ð»Ñв «%s»."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1635,8 +1630,7 @@ msgstr "ÐÑÑимано Ñигнал SIGINT, завеÑÑÐµÐ½Ð½Ñ ÑобоÑи.
#: ../src/utils/pasuspender.c:194
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr ""
-"ÐÐÐÐÐ ÐÐÐÐÐÐЯ: Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑнÑого пÑоÑеÑÑ Ð±Ñло пеÑеÑвано з Ñигналом %u\n"
+msgstr "ÐÐÐÐÐ ÐÐÐÐÐÐЯ: Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑнÑого пÑоÑеÑÑ Ð±Ñло пеÑеÑвано з Ñигналом %u\n"
#: ../src/utils/pasuspender.c:212
#, c-format
@@ -1696,8 +1690,7 @@ msgstr "ÐаÑаз викоÑиÑÑано: %u блокÑв, Ñо мÑÑÑÑÑÑ
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
-"ÐидÑлено пÑоÑÑгом Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»Ð¾Ð¼: %u блокÑв, Ñо мÑÑÑÑÑÑ %s байÑÑв.\n"
+msgstr "ÐидÑлено пÑоÑÑгом Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»Ð¾Ð¼: %u блокÑв, Ñо мÑÑÑÑÑÑ %s байÑÑв.\n"
#: ../src/utils/pactl.c:147
#, c-format
@@ -2203,18 +2196,15 @@ msgstr "ÐекоÑекÑний ÑÐ½Ð´ÐµÐºÑ Ð²Ñ
ÑдниÑ
даниÑ
пÑийм
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr ""
-"Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr ""
-"Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr ""
-"Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа даниÑ
Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+msgstr "Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа даниÑ
Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
@@ -2323,8 +2313,7 @@ msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr ""
-"СпÑоба завеÑÑÐµÐ½Ð½Ñ ÑобоÑи ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби PulseAudio завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
+msgstr "СпÑоба завеÑÑÐµÐ½Ð½Ñ ÑобоÑи ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби PulseAudio завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
@@ -2408,217 +2397,202 @@ msgstr "ÐвÑковий ÑеÑÐ²ÐµÑ PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "ÐÑиÑÑÑÐ¾Ñ Ð²ÑдÑвоÑеннÑ"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "ÐÑиÑÑÑÐ¾Ñ Ð¾ÑÑиманнÑ"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "ÐвÑк на @ÐÐÐÐÐÐУÐÐÐ@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "ÐÑ
Ñд"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ÐÑ
Ñдний канал ÑÑикÑвалÑÐ½Ð¾Ñ ÑÑанÑÑÑ"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ÐÑкÑоÑон ÑÑикÑвалÑÐ½Ð¾Ñ ÑÑанÑÑÑ"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ÐÑнÑйний вÑ
Ñд"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ÐÑкÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "ÐовнÑÑнÑй мÑкÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "ÐбÑдоване аÑдÑо"
+msgstr "ÐбÑдований мÑкÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "РадÑо"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "ÐÑдео"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "ÐвÑомаÑиÑне кеÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑдÑиленнÑм"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Ðез авÑомаÑиÑного кеÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑдÑиленнÑм"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ÐÑдÑиленнÑ"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Ðез пÑÑиленнÑ"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "ÐÑдÑилÑваÑ"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Ðез пÑдÑилÑваÑа"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "ÐналоговиÑ
вÑ
Ñд"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "Ðналоговий мÑкÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "Ðналоговий лÑнÑйний вÑ
Ñд"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Ðналогове ÑадÑо"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "Ðналогове вÑдео"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "ÐÑлÑ-вÑдÑвоÑеннÑ"
+msgstr "Ðналогове вÑдÑвоÑеннÑ"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "ÐÐ½Ð°Ð»Ð¾Ð³Ð¾Ð²Ñ Ð½Ð°Ð²ÑÑники"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Ðналоговий виÑ
Ñд (ÑабвÑÑеÑ)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "Ðналоговий моно-виÑ
Ñд"
-#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Ðналогове моно"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "СÑеÑео"
+msgstr "Ðналогове ÑÑеÑео"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Ðб'Ñмний 4.1"
+msgstr "Ðналоговий об'Ñмний 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Ðб'Ñмний 4.0"
+msgstr "Ðналоговий об'Ñмний 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Ðб'Ñмний 4.1"
+msgstr "Ðналоговий об'Ñмний 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "Ðб'Ñмний 4.0"
+msgstr "Ðналоговий об'Ñмний 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "Ðб'Ñмний 4.1"
+msgstr "Ðналоговий об'Ñмний 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "Ðб'Ñмний 5.0"
+msgstr "Ðналоговий об'Ñмний 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "Ðб'Ñмний 5.1"
+msgstr "Ðналоговий об'Ñмний 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Ðб'Ñмний 4.0"
+msgstr "Ðналоговий об'Ñмний 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Ðб'Ñмний 4.1"
+msgstr "Ðналоговий об'Ñмний 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Ðб'Ñмний 4.0"
+msgstr "Ðналоговий об'Ñмний 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "Ðб'Ñмний 7.1"
+msgstr "Ðналоговий об'Ñмний 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ЦиÑÑове ÑÑеÑео (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ЦиÑÑовий обâÑмний 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ЦиÑÑовий обâÑмний 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ЦиÑÑовий обâÑмний 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ЦиÑÑовий ÑÑеÑео (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "Ðналогове двобÑÑне моно"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "Ðналогове двобÑÑне ÑÑеÑео"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ЦиÑÑове двобÑÑне ÑÑеÑео (IEC958)"
+
commit e7ec9d59879fbeccb6b50c70890b8fa3740a112e
Author: kami911 <kami911 at fedoraproject.org>
Date: Fri Oct 9 06:17:41 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index c3cd24f..7353267 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -15,9 +15,9 @@ msgstr ""
#: ../src/modules/alsa/alsa-util.c:858
#: ../src/pulsecore/sink.c:2629
-#, fuzzy, c-format
+#, c-format
msgid "%s %s"
-msgstr "%s.%s"
+msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
@@ -93,9 +93,9 @@ msgid "Failed to add bind-now-loader."
msgstr "nem sikerült hozzáadni a tartományt a csatlakozások hasÃtótáblázatához"
#: ../src/daemon/main.c:141
-#, fuzzy, c-format
+#, c-format
msgid "Got signal %s."
-msgstr "Szignálnév"
+msgstr "Szignál: %s."
#: ../src/daemon/main.c:168
msgid "Exiting."
@@ -168,9 +168,8 @@ msgid "Failed to parse command line."
msgstr "Nem lehet feldolgozni a(z) â%sâ parancssort: %s"
#: ../src/daemon/main.c:541
-#, fuzzy
msgid "Daemon not running"
-msgstr "A démon nem fut"
+msgstr "A démon nem fut."
#: ../src/daemon/main.c:543
#, fuzzy, c-format
@@ -265,9 +264,9 @@ msgid "Running on host: %s"
msgstr "Python %s verzió"
#: ../src/daemon/main.c:739
-#, fuzzy, c-format
+#, c-format
msgid "Found %u CPUs."
-msgstr "Minden CPU"
+msgstr "%u CPU található a rendszerben."
#: ../src/daemon/main.c:741
#, fuzzy, c-format
@@ -290,17 +289,12 @@ msgid "Running in valgrind mode: %s"
msgstr "Bemutató mód"
#: ../src/daemon/main.c:752
-#, fuzzy
msgid "Optimized build: yes"
-msgstr ""
-"&Igen\n"
-"&Nem\n"
-"&Mégsem"
+msgstr "Optimalizált összeépÃtés: Igen"
#: ../src/daemon/main.c:754
-#, fuzzy
msgid "Optimized build: no"
-msgstr "Nincs fordÃtási függÅsége a következÅnek: %s.\n"
+msgstr "Optimalizált összeépÃtés: Nem"
#: ../src/daemon/main.c:758
#, fuzzy
@@ -656,9 +650,8 @@ msgid "### Read from configuration file: %s ###\n"
msgstr "%s: Olvasási hiba a(z) %s fájlban\n"
#: ../src/daemon/caps.c:62
-#, fuzzy
msgid "Cleaning up privileges."
-msgstr "Csomagok tisztÃtása"
+msgstr "Jogosultságok letisztázása."
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@@ -675,15 +668,15 @@ msgstr "Mono"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
-msgstr "Szemközti középsÅ"
+msgstr "ElsÅ középsÅ"
#: ../src/pulse/channelmap.c:108
msgid "Front Left"
-msgstr "Szemközti bal"
+msgstr "ElsÅ bal"
#: ../src/pulse/channelmap.c:109
msgid "Front Right"
-msgstr "Szemközti jobb"
+msgstr "ElsÅ jobb"
#: ../src/pulse/channelmap.c:111
msgid "Rear Center"
@@ -698,224 +691,180 @@ msgid "Rear Right"
msgstr "Hátsó jobb"
#: ../src/pulse/channelmap.c:115
-#, fuzzy
msgid "Low Frequency Emmiter"
-msgstr "Az internetes rádióállomás frekvenciája"
+msgstr "Mély-hangszóró (LFE)"
#: ../src/pulse/channelmap.c:117
-#, fuzzy
msgid "Front Left-of-center"
-msgstr "Balra, jobbra vagy középre igazÃtás"
+msgstr "ElsŠközép-bal"
#: ../src/pulse/channelmap.c:118
-#, fuzzy
msgid "Front Right-of-center"
-msgstr "Balra, jobbra vagy középre igazÃtás"
+msgstr "ElsŠközép-jobb"
#: ../src/pulse/channelmap.c:120
-#, fuzzy
msgid "Side Left"
msgstr "Bal oldalsó"
#: ../src/pulse/channelmap.c:121
-#, fuzzy
msgid "Side Right"
msgstr "Jobb oldalsó"
#: ../src/pulse/channelmap.c:123
-#, fuzzy
msgid "Auxiliary 0"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ0"
#: ../src/pulse/channelmap.c:124
-#, fuzzy
msgid "Auxiliary 1"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ1"
#: ../src/pulse/channelmap.c:125
-#, fuzzy
msgid "Auxiliary 2"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ2"
#: ../src/pulse/channelmap.c:126
-#, fuzzy
msgid "Auxiliary 3"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ3"
#: ../src/pulse/channelmap.c:127
-#, fuzzy
msgid "Auxiliary 4"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ4"
#: ../src/pulse/channelmap.c:128
-#, fuzzy
msgid "Auxiliary 5"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ5"
#: ../src/pulse/channelmap.c:129
-#, fuzzy
msgid "Auxiliary 6"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ6"
#: ../src/pulse/channelmap.c:130
-#, fuzzy
msgid "Auxiliary 7"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ7"
#: ../src/pulse/channelmap.c:131
-#, fuzzy
msgid "Auxiliary 8"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ8"
#: ../src/pulse/channelmap.c:132
-#, fuzzy
msgid "Auxiliary 9"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ9"
#: ../src/pulse/channelmap.c:133
-#, fuzzy
msgid "Auxiliary 10"
-msgstr "#10 borÃték"
+msgstr "KülsŠ10"
#: ../src/pulse/channelmap.c:134
-#, fuzzy
msgid "Auxiliary 11"
-msgstr "5-11 éveseknek"
+msgstr "KülsŠ11"
#: ../src/pulse/channelmap.c:135
-#, fuzzy
msgid "Auxiliary 12"
-msgstr "#12 borÃték"
+msgstr "KülsŠ12"
#: ../src/pulse/channelmap.c:136
-#, fuzzy
msgid "Auxiliary 13"
-msgstr "13 jegy"
+msgstr "KülsŠ13"
#: ../src/pulse/channelmap.c:137
-#, fuzzy
msgid "Auxiliary 14"
-msgstr "#14 borÃték"
+msgstr "KülsŠ14"
#: ../src/pulse/channelmap.c:138
-#, fuzzy
msgid "Auxiliary 15"
-msgstr "15 fok (%s)"
+msgstr "KülsŠ15"
#: ../src/pulse/channelmap.c:139
-#, fuzzy
msgid "Auxiliary 16"
-msgstr "16:9 (szélesvásznú)"
+msgstr "KülsŠ16"
#: ../src/pulse/channelmap.c:140
-#, fuzzy
msgid "Auxiliary 17"
-msgstr "17 USD"
+msgstr "KülsŠ17"
#: ../src/pulse/channelmap.c:141
-#, fuzzy
msgid "Auxiliary 18"
-msgstr "GTK+ 2.18"
+msgstr "KülsŠ18"
#: ../src/pulse/channelmap.c:142
-#, fuzzy
msgid "Auxiliary 19"
-msgstr "19.2 Kb/mp modem"
+msgstr "KülsŠ19"
#: ../src/pulse/channelmap.c:143
-#, fuzzy
msgid "Auxiliary 20"
-msgstr "Kivonás: 0-tól 20-ig"
+msgstr "KülsŠ20"
#: ../src/pulse/channelmap.c:144
-#, fuzzy
msgid "Auxiliary 21"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ21"
#: ../src/pulse/channelmap.c:145
-#, fuzzy
msgid "Auxiliary 22"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ22"
#: ../src/pulse/channelmap.c:146
-#, fuzzy
msgid "Auxiliary 23"
-msgstr "2009-09-23"
+msgstr "KülsŠ23"
#: ../src/pulse/channelmap.c:147
-#, fuzzy
msgid "Auxiliary 24"
-msgstr "24 órás"
+msgstr "KülsŠ24"
#: ../src/pulse/channelmap.c:148
-#, fuzzy
msgid "Auxiliary 25"
-msgstr "25% szürke"
+msgstr "KülsŠ25"
#: ../src/pulse/channelmap.c:149
-#, fuzzy
msgid "Auxiliary 26"
-msgstr "Imigre-_26â¦"
+msgstr "KülsŠ26"
#: ../src/pulse/channelmap.c:150
-#, fuzzy
msgid "Auxiliary 27"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ27"
#: ../src/pulse/channelmap.c:151
-#, fuzzy
msgid "Auxiliary 28"
-msgstr "GNOME 2.28"
+msgstr "KülsŠ28"
#: ../src/pulse/channelmap.c:152
-#, fuzzy
msgid "Auxiliary 29"
-msgstr "Folyamat/kiegészÃtÅ művelet"
+msgstr "KülsŠ29"
#: ../src/pulse/channelmap.c:153
-#, fuzzy
msgid "Auxiliary 30"
-msgstr "30 perc"
+msgstr "KülsŠ30"
#: ../src/pulse/channelmap.c:154
-#, fuzzy
msgid "Auxiliary 31"
-msgstr "1999 szeptember 31."
+msgstr "KülsŠ31"
#: ../src/pulse/channelmap.c:156
-#, fuzzy
msgid "Top Center"
-msgstr "Fent, középen"
+msgstr "FelsÅ középsÅ"
#: ../src/pulse/channelmap.c:158
-#, fuzzy
msgid "Top Front Center"
-msgstr "A bekezdés igazÃtása középre"
+msgstr "FelsÅ elsÅ középsÅ"
#: ../src/pulse/channelmap.c:159
-#, fuzzy
msgid "Top Front Left"
-msgstr "Elhelyezés balra felülre"
+msgstr "FelsÅ elsÅ bal"
#: ../src/pulse/channelmap.c:160
-#, fuzzy
msgid "Top Front Right"
-msgstr "Elhelyezés jobbra felülre"
+msgstr "FelsÅ elsÅ jobb"
#: ../src/pulse/channelmap.c:162
-#, fuzzy
msgid "Top Rear Center"
-msgstr "A bekezdés igazÃtása középre"
+msgstr "FelsÅ hátsó középsÅ"
#: ../src/pulse/channelmap.c:163
-#, fuzzy
msgid "Top Rear Left"
-msgstr "Elhelyezés balra felülre"
+msgstr "FelsŠhátsó bal"
#: ../src/pulse/channelmap.c:164
-#, fuzzy
msgid "Top Rear Right"
-msgstr "Elhelyezés jobbra felülre"
+msgstr "FelsŠhátsó jobb"
#: ../src/pulse/channelmap.c:484
#: ../src/pulse/sample.c:170
@@ -923,7 +872,6 @@ msgstr "Elhelyezés jobbra felülre"
#: ../src/pulse/volume.c:321
#: ../src/pulse/volume.c:341
#: ../src/pulse/volume.c:371
-#, fuzzy
msgid "(invalid)"
msgstr "(Ãrvénytelen)"
@@ -1081,19 +1029,19 @@ msgid "%s %uch %uHz"
msgstr ""
#: ../src/pulse/sample.c:184
-#, fuzzy, c-format
+#, c-format
msgid "%0.1f GiB"
-msgstr "%.1f GiB"
+msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:186
-#, fuzzy, c-format
+#, c-format
msgid "%0.1f MiB"
-msgstr "%.1f MiB"
+msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:188
-#, fuzzy, c-format
+#, c-format
msgid "%0.1f KiB"
-msgstr "%.1f KiB"
+msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:190
#, c-format
@@ -1102,9 +1050,8 @@ msgstr ""
#: ../src/pulse/client-conf-x11.c:55
#: ../src/utils/pax11publish.c:100
-#, fuzzy
msgid "XOpenDisplay() failed"
-msgstr "<b>Sikertelen bejelentkezést</b>"
+msgstr "Az XOpenDisplay() függvényhÃvás meghiúsult."
#: ../src/pulse/client-conf-x11.c:93
#, fuzzy
@@ -1121,14 +1068,14 @@ msgid "No cookie loaded. Attempting to connect without."
msgstr ""
#: ../src/pulse/context.c:693
-#, fuzzy, c-format
+#, c-format
msgid "fork(): %s"
-msgstr "programindÃtás: %s"
+msgstr "ProgramindÃtás: %s"
#: ../src/pulse/context.c:748
-#, fuzzy, c-format
+#, c-format
msgid "waitpid(): %s"
-msgstr "Váratlan hiba a waitpid()-ben (%s)"
+msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, fuzzy, c-format
@@ -1151,34 +1098,34 @@ msgid "Draining connection to server."
msgstr "Kapcsolat visszaállÃtása a kiszolgálóhoz"
#: ../src/utils/pacat.c:136
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_drain(): %s"
-msgstr "pa_ext_stream_restore_read() meghiúsult"
+msgstr "pa_stream_drain(): %s"
#: ../src/utils/pacat.c:159
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_write() failed: %s"
-msgstr "pa_ext_stream_restore_write() meghiúsult"
+msgstr "A âpa_stream_write()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:197
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr "pa_ext_stream_restore_write() meghiúsult"
+msgstr "A âpa_stream_begin_write()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:237
#: ../src/utils/pacat.c:267
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr "pa_ext_stream_restore_read() meghiúsult"
+msgstr "A âpa_stream_peek()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:307
msgid "Stream successfully created."
msgstr "Az adatfolyam sikeresen létrejött."
#: ../src/utils/pacat.c:310
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr "pa_context_get_client_info() meghiúsult"
+msgstr "A âpa_stream_get_buffer_attr()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:314
#, c-format
@@ -1201,34 +1148,34 @@ msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Kapcsolódva az eszközhöz a következÅn: %s"
#: ../src/utils/pacat.c:335
-#, fuzzy, c-format
+#, c-format
msgid "Stream error: %s"
-msgstr "Folyam hiba"
+msgstr "Adatfolyam hiba: %s"
#: ../src/utils/pacat.c:345
-#, fuzzy, c-format
+#, c-format
msgid "Stream device suspended.%s"
-msgstr "Az eszköz nem adatfolyam"
+msgstr "Adatfolyam-eszköz készenléti állapotban: %s"
#: ../src/utils/pacat.c:347
-#, fuzzy, c-format
+#, c-format
msgid "Stream device resumed.%s"
-msgstr "Az eszköz nem adatfolyam"
+msgstr "Adatfolyam-eszköz visszatért a készenléti állapotból: %s"
#: ../src/utils/pacat.c:355
-#, fuzzy, c-format
+#, c-format
msgid "Stream underrun.%s"
-msgstr "Vége az adatfolyamnak"
+msgstr "%s adatfolyam alulcsordulás."
#: ../src/utils/pacat.c:362
-#, fuzzy, c-format
+#, c-format
msgid "Stream overrun.%s"
-msgstr "%s: a bemenet túlcsordult"
+msgstr "%s adatfolyam túlcsordulás."
#: ../src/utils/pacat.c:369
-#, fuzzy, c-format
+#, c-format
msgid "Stream started.%s"
-msgstr "%s tartomány elindÃtva\n"
+msgstr "%s adatfolyam elindÃtva."
#: ../src/utils/pacat.c:376
#, fuzzy, c-format
@@ -1251,9 +1198,9 @@ msgid "Connection established.%s"
msgstr "Kapcsolat létrehozva"
#: ../src/utils/pacat.c:418
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_new() failed: %s"
-msgstr "Az új adatfolyam indÃtása meghiúsult"
+msgstr "A âpa_stream_new()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:450
#, fuzzy, c-format
@@ -1267,9 +1214,9 @@ msgstr "A megfigyelŠadatfolyam csatlakoztatása meghiúsult"
#: ../src/utils/pacat.c:470
#: ../src/utils/pactl.c:857
-#, fuzzy, c-format
+#, c-format
msgid "Connection failure: %s"
-msgstr "HitelesÃtési hiba"
+msgstr "Kapcsolódási hiba: %s"
#: ../src/utils/pacat.c:503
#, fuzzy
@@ -1277,14 +1224,13 @@ msgid "Got EOF."
msgstr "Ãzenet érkezett: #%"
#: ../src/utils/pacat.c:540
-#, fuzzy, c-format
+#, c-format
msgid "write() failed: %s"
-msgstr "az Ãrás sikertelen"
+msgstr "Az Ãrás sikertelen: %s"
#: ../src/utils/pacat.c:561
-#, fuzzy
msgid "Got signal, exiting."
-msgstr "%d szignál érkezett, kilépésâ¦\n"
+msgstr "Kilépés, szignál hatásáraâ¦"
#: ../src/utils/pacat.c:575
#, fuzzy, c-format
@@ -1297,9 +1243,9 @@ msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "%d csoport elmentve ebben: \"%s\" %.1f másodperc alatt (%.0f csoport/mp)"
#: ../src/utils/pacat.c:599
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "pa_context_get_client_info() meghiúsult"
+msgstr "A âpa_stream_update_timing_info()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:609
#, c-format
@@ -1352,69 +1298,65 @@ msgstr "A program kapcsolói ütköznek"
#: ../src/utils/pacat.c:764
#: ../src/utils/pactl.c:953
-#, fuzzy, c-format
+#, c-format
msgid "Invalid client name '%s'"
-msgstr "%s: érvénytelen kapcsolónév"
+msgstr "Ãrvénytelen kliensnév: â%sâ"
#: ../src/utils/pacat.c:779
-#, fuzzy, c-format
+#, c-format
msgid "Invalid stream name '%s'"
-msgstr "%s: érvénytelen kapcsolónév"
+msgstr "Ãrvénytelen adatfolyam-név: â%sâ"
#: ../src/utils/pacat.c:816
-#, fuzzy, c-format
+#, c-format
msgid "Invalid channel map '%s'"
-msgstr "Ãrvénytelen csatornatÃpus '%s'"
+msgstr "Ãrvénytelen csatornaleképzés: â%sâ"
#: ../src/utils/pacat.c:845
-#, fuzzy, c-format
+#, c-format
msgid "Invalid latency specification '%s'"
-msgstr "%.*s: érvénytelen konverziós specifikáció"
+msgstr "Ãrvénytelen késleltetés leÃrás: â%sâ"
#: ../src/utils/pacat.c:852
-#, fuzzy, c-format
+#, c-format
msgid "Invalid process time specification '%s'"
-msgstr "Nem adott meg folyamat-specifikációt"
+msgstr "Ãrvénytelen műveleti idÅ leÃrás: â%sâ"
#: ../src/utils/pacat.c:864
-#, fuzzy, c-format
+#, c-format
msgid "Invalid property '%s'"
-msgstr "Ãrvénytelen %s tulajdonságérték"
+msgstr "Ãrvénytelen tulajdonság: â%sâ"
#: ../src/utils/pacat.c:881
-#, fuzzy, c-format
+#, c-format
msgid "Unknown file format %s."
-msgstr "Ismeretlen fájlformátum: \"%s\""
+msgstr "Ismeretlen fájlformátum: â%sâ"
#: ../src/utils/pacat.c:900
-#, fuzzy
msgid "Invalid sample specification"
-msgstr "%.*s: érvénytelen konverziós specifikáció"
+msgstr "Ãrvénytelen mintavételi leÃrás."
#: ../src/utils/pacat.c:910
-#, fuzzy, c-format
+#, c-format
msgid "open(): %s"
-msgstr "%s:%d megnyitása"
+msgstr "Megnyitás: %s"
#: ../src/utils/pacat.c:915
-#, fuzzy, c-format
+#, c-format
msgid "dup2(): %s"
-msgstr "a dup2 meghiúsult"
+msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
-#, fuzzy
msgid "Too many arguments."
-msgstr "túl sok argumentum"
+msgstr "Túl sok paraméter."
#: ../src/utils/pacat.c:933
-#, fuzzy
msgid "Failed to generate sample specification for file."
-msgstr "meghiúsult az alábbi beállÃtó fájl megnyitása olvasásra: `%.255s'"
+msgstr "Nem sikerült létrehozni a mintavételi leÃrást a fájlhoz."
#: ../src/utils/pacat.c:953
-#, fuzzy
msgid "Failed to open audio file."
-msgstr "Nem sikerült megnyitni az átmeneti fájlt"
+msgstr "Nem sikerült megnyitni a hangfájlt."
#: ../src/utils/pacat.c:959
msgid "Warning: specified sample specification will be overwritten with specification from file."
@@ -1422,23 +1364,20 @@ msgstr ""
#: ../src/utils/pacat.c:962
#: ../src/utils/pactl.c:997
-#, fuzzy
msgid "Failed to determine sample specification from file."
-msgstr "RGB-adat betöltése a TIFF-fájlból sikertelen"
+msgstr "Nem sikerült meghatározni a mintavételi leÃrást a fájlból."
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
msgstr ""
#: ../src/utils/pacat.c:982
-#, fuzzy
msgid "Channel map doesn't match sample specification"
-msgstr "%s: a tanúsÃtvány â%sâ általános neve nem egyezik a kért â%sâ gépnévvel.\n"
+msgstr "A csatornaleképzés nem feleltethetÅ meg a mintavételi leÃrásnak."
#: ../src/utils/pacat.c:993
-#, fuzzy
msgid "Warning: failed to write channel map to file."
-msgstr "Hiba történt a fájl Ãrása közben. A fájlnév rendben van?"
+msgstr "Hiba történt a csatornaleképzés fájlba Ãrása közben."
#: ../src/utils/pacat.c:1008
#, c-format
@@ -1446,68 +1385,61 @@ msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
#: ../src/utils/pacat.c:1009
-#, fuzzy
msgid "recording"
-msgstr "felvétel"
+msgstr "Felvétel"
#: ../src/utils/pacat.c:1009
-#, fuzzy
msgid "playback"
msgstr "Lejátszás"
#: ../src/utils/pacat.c:1035
#: ../src/utils/pactl.c:1267
-#, fuzzy
msgid "pa_mainloop_new() failed."
-msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+msgstr "A âpa_mainloop_new()â függvényhÃvás meghiúsult."
#: ../src/utils/pacat.c:1054
-#, fuzzy
msgid "io_new() failed."
-msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+msgstr "A âio_new()â függvényhÃvás meghiúsult."
#: ../src/utils/pacat.c:1061
#: ../src/utils/pactl.c:1279
-#, fuzzy
msgid "pa_context_new() failed."
-msgstr "pa_context_subscribe() meghiúsult"
+msgstr "A âpa_context_new()â függvényhÃvás meghiúsult."
#: ../src/utils/pacat.c:1069
#: ../src/utils/pactl.c:1285
-#, fuzzy, c-format
+#, c-format
msgid "pa_context_connect() failed: %s"
-msgstr "pa_context_subscribe() meghiúsult"
+msgstr "A âpa_context_connect()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:1075
-#, fuzzy
msgid "pa_context_rttime_new() failed."
-msgstr "az új kontextus kiszámÃtása meghiúsult"
+msgstr "A âpa_context_rttime_new()â függvényhÃvás meghiúsult."
#: ../src/utils/pacat.c:1082
#: ../src/utils/pactl.c:1290
-#, fuzzy
msgid "pa_mainloop_run() failed."
-msgstr "svc_run: - választás sikertelen"
+msgstr "A âpa_mainloop_run()â függvényhÃvás meghiúsult."
#: ../src/utils/pasuspender.c:81
-#, fuzzy, c-format
+#, c-format
msgid "fork(): %s\n"
-msgstr "programindÃtás: %s"
+msgstr "ProgramindÃtás: %s\n"
#: ../src/utils/pasuspender.c:92
-#, fuzzy, c-format
+#, c-format
msgid "execvp(): %s\n"
-msgstr "az execvp meghiúsult"
+msgstr "execvp(): %s\n"
#: ../src/utils/pasuspender.c:109
-#, fuzzy, c-format
+#, c-format
msgid "Failure to suspend: %s\n"
-msgstr "Kérés a felfüggesztésre"
+msgstr "Hiba lépett fel a készenléti állapotba térés közben: %s\n"
#: ../src/utils/pasuspender.c:124
-#, fuzzy, c-format
+#, c-format
msgid "Failure to resume: %s\n"
-msgstr "Kattintson a folytatáshoz"
+msgstr "Hiba lépett fel a készenléti állapotból visszatérés közben: %s\n"
#: ../src/utils/pasuspender.c:147
#, fuzzy, c-format
@@ -1515,14 +1447,14 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "A leejtett fájl nem helyi."
#: ../src/utils/pasuspender.c:159
-#, fuzzy, c-format
+#, c-format
msgid "Connection failure: %s\n"
-msgstr "HitelesÃtési hiba"
+msgstr "Kapcsolódási hiba: %s\n"
#: ../src/utils/pasuspender.c:176
-#, fuzzy, c-format
+#, c-format
msgid "Got SIGINT, exiting.\n"
-msgstr "Kilépés (SIGINT szignál)..."
+msgstr "Kilépés, SIGINT szignál hatásáraâ¦\n"
#: ../src/utils/pasuspender.c:194
#, fuzzy, c-format
@@ -1551,24 +1483,24 @@ msgid ""
msgstr "A program kapcsolói ütköznek"
#: ../src/utils/pasuspender.c:277
-#, fuzzy, c-format
+#, c-format
msgid "pa_mainloop_new() failed.\n"
-msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+msgstr "A âpa_mainloop_new()â függvényhÃvás meghiúsult.\n"
#: ../src/utils/pasuspender.c:290
-#, fuzzy, c-format
+#, c-format
msgid "pa_context_new() failed.\n"
-msgstr "pa_context_subscribe() meghiúsult"
+msgstr "A âpa_context_new()â függvényhÃvás meghiúsult.\n"
#: ../src/utils/pasuspender.c:298
-#, fuzzy, c-format
+#, c-format
msgid "pa_mainloop_run() failed.\n"
-msgstr "svc_run: - választás sikertelen"
+msgstr "A âpa_mainloop_run()â függvényhÃvás meghiúsult.\n"
#: ../src/utils/pactl.c:135
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get statistics: %s"
-msgstr "nem sikerült a képességek lekérdezése"
+msgstr "Nem sikerült a statisztika lekérdezése: %s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1581,9 +1513,9 @@ msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
#: ../src/utils/pactl.c:147
-#, fuzzy, c-format
+#, c-format
msgid "Sample cache size: %s\n"
-msgstr "Lemezes gyorsÃtótár mérete"
+msgstr "Minta-gyorsÃtótár mérete: %s\n"
#: ../src/utils/pactl.c:156
#, fuzzy, c-format
@@ -1635,13 +1567,13 @@ msgstr ""
#: ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
-msgstr ""
+msgstr "\tPort:\n"
#: ../src/utils/pactl.c:274
#: ../src/utils/pactl.c:366
-#, fuzzy, c-format
+#, c-format
msgid "\tActive Port: %s\n"
-msgstr "[kiszolgáló:port]"
+msgstr "\tAktÃv Port: %s\n"
#: ../src/utils/pactl.c:297
#, fuzzy, c-format
@@ -1683,7 +1615,6 @@ msgstr ""
#: ../src/utils/pactl.c:637
#: ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
-#, fuzzy
msgid "n/a"
msgstr "ismeretlen"
@@ -1737,12 +1668,12 @@ msgstr ""
#: ../src/utils/pactl.c:479
#, c-format
msgid "\tProfiles:\n"
-msgstr ""
+msgstr "\tProfil:\n"
#: ../src/utils/pactl.c:485
-#, fuzzy, c-format
+#, c-format
msgid "\tActive Profile: %s\n"
-msgstr "Profillétrehozás"
+msgstr "\tAktÃv profil: %s\n"
#: ../src/utils/pactl.c:496
#, fuzzy, c-format
@@ -1817,9 +1748,9 @@ msgstr ""
#: ../src/utils/pactl.c:653
#: ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#, c-format
msgid "Failure: %s"
-msgstr "Hiba"
+msgstr "Hiba: %s"
#: ../src/utils/pactl.c:687
#, fuzzy, c-format
@@ -1834,9 +1765,8 @@ msgid "Premature end of file"
msgstr "IdÅ elÅtti fájlvége"
#: ../src/utils/pactl.c:863
-#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr "Kilépés (SIGINT szignál)..."
+msgstr "Kilépés, SIGINT szignál hatásáraâ¦"
#: ../src/utils/pactl.c:869
#, c-format
@@ -1894,34 +1824,28 @@ msgid "Warning: Failed to determine sample specification from file."
msgstr "RGB-adat betöltése a TIFF-fájlból sikertelen"
#: ../src/utils/pactl.c:1014
-#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr "Meg kell adnia egy feloldandó csomagnevet"
+msgstr "Meg kell adnia lejátszandó minta nevét."
#: ../src/utils/pactl.c:1026
-#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr "Meg kell adnia egy eltávolÃtandó csomagot"
+msgstr "Meg kell adnia az eltávolÃtandó minta nevét."
#: ../src/utils/pactl.c:1035
-#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+msgstr "Meg kell adnia a nyelÅ bemeneti azonosÃtóját és a nyelÅt."
#: ../src/utils/pactl.c:1045
-#, fuzzy
msgid "You have to specify a source output index and a source"
-msgstr "Adja meg a kimeneti fájl helyét és nevét:"
+msgstr "Meg kell adnia a forrás kimeneti azonosÃtóját és a forrást."
#: ../src/utils/pactl.c:1060
-#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+msgstr "Meg kell adnia a modul nevét és a paramétereit."
#: ../src/utils/pactl.c:1080
-#, fuzzy
msgid "You have to specify a module index"
-msgstr "Meg kell adnia egy archÃvumnevet."
+msgstr "Meg kell adnia a modul azonosÃtóját."
#: ../src/utils/pactl.c:1090
msgid "You may not specify more than one sink. You have to specify a boolean value."
@@ -1936,18 +1860,16 @@ msgid "You have to specify a card name/index and a profile name"
msgstr ""
#: ../src/utils/pactl.c:1126
-#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a port nevét."
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
msgstr ""
#: ../src/utils/pactl.c:1149
-#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a hangerejét."
#: ../src/utils/pactl.c:1154
#: ../src/utils/pactl.c:1171
@@ -1955,9 +1877,8 @@ msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
#: ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226
#: ../src/utils/pactl.c:1248
-#, fuzzy
msgid "Invalid volume specification"
-msgstr "%.*s: érvénytelen konverziós specifikáció"
+msgstr "A hangerŠmegadása érvénytelen."
#: ../src/utils/pactl.c:1166
msgid "You have to specify a source name/index and a volume"
@@ -1968,14 +1889,12 @@ msgid "You have to specify a sink input index and a volume"
msgstr ""
#: ../src/utils/pactl.c:1188
-#, fuzzy
msgid "Invalid sink input index"
-msgstr "pa_context_move_sink_input_by_index() meghiúsult"
+msgstr "A nyelÅ bemeneti azonosÃtója érvénytelen."
#: ../src/utils/pactl.c:1204
-#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Meg kell adnia egy tárnevet/paramétert és értéket"
+msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a némÃtás logikai változóját."
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
@@ -1986,14 +1905,12 @@ msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
#: ../src/utils/pactl.c:1243
-#, fuzzy
msgid "Invalid sink input index specification"
-msgstr "A(z) â%sâ escape sorozat érvénytelen a bemenet elhatárolójának meghatározásában."
+msgstr "A nyelÅ bemeneti azonosÃtójának megadása érvénytelen."
#: ../src/utils/pactl.c:1262
-#, fuzzy
msgid "No valid command specified."
-msgstr "nincs megadva a végrehajtandó parancs"
+msgstr "Ãrvénytelen parancs lett megadva."
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2012,24 +1929,24 @@ msgid "Failed to parse command line.\n"
msgstr "Nem lehet feldolgozni a(z) â%sâ parancssort: %s"
#: ../src/utils/pax11publish.c:108
-#, fuzzy, c-format
+#, c-format
msgid "Server: %s\n"
-msgstr "_Kiszolgáló:"
+msgstr "Kiszolgáló: %s\n"
#: ../src/utils/pax11publish.c:110
-#, fuzzy, c-format
+#, c-format
msgid "Source: %s\n"
-msgstr "Forrás:"
+msgstr "Forrás: %s\n"
#: ../src/utils/pax11publish.c:112
-#, fuzzy, c-format
+#, c-format
msgid "Sink: %s\n"
-msgstr "Bemenet"
+msgstr "NyelÅ: %s\n"
#: ../src/utils/pax11publish.c:114
-#, fuzzy, c-format
+#, c-format
msgid "Cookie: %s\n"
-msgstr "süti"
+msgstr "Süti: %s\n"
#: ../src/utils/pax11publish.c:132
#, fuzzy, c-format
@@ -2062,9 +1979,9 @@ msgid "Failed to load cookie data\n"
msgstr "sikertelen a szimbólum adatainak a betöltése"
#: ../src/utils/pax11publish.c:211
-#, fuzzy, c-format
+#, c-format
msgid "Not yet implemented.\n"
-msgstr "Még nincs megvalósÃtva."
+msgstr "Még nincs elkészÃtve.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
@@ -2076,36 +1993,34 @@ msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "svc_unix.c - AF_UNIX gond van illesztÅpont létrehozásával"
#: ../src/utils/pacmd.c:91
-#, fuzzy, c-format
+#, c-format
msgid "connect(): %s"
-msgstr "\\kapcsolat: %s"
+msgstr "Kapcsolódás: %s"
#: ../src/utils/pacmd.c:99
-#, fuzzy
msgid "Failed to kill PulseAudio daemon."
-msgstr "nem sikerült olvasni a Xen-szolgáltatásból"
+msgstr "A PulseAudio démon leállÃtása nem sikerült."
#: ../src/utils/pacmd.c:107
-#, fuzzy
msgid "Daemon not responding."
-msgstr "â%sâ nem válaszol."
+msgstr "A démon nem válaszol."
#: ../src/utils/pacmd.c:161
-#, fuzzy, c-format
+#, c-format
msgid "poll(): %s"
-msgstr "poll(): %s"
+msgstr "Lekérdezés: %s"
#: ../src/utils/pacmd.c:171
#: ../src/utils/pacmd.c:188
-#, fuzzy, c-format
+#, c-format
msgid "read(): %s"
-msgstr "read(): %s"
+msgstr "Olvasás: %s"
#: ../src/utils/pacmd.c:207
#: ../src/utils/pacmd.c:223
-#, fuzzy, c-format
+#, c-format
msgid "write(): %s"
-msgstr "write(): %s"
+msgstr "Ãrás: %s"
#: ../src/pulsecore/lock-autospawn.c:136
#: ../src/pulsecore/lock-autospawn.c:219
@@ -2138,19 +2053,16 @@ msgid "Off"
msgstr "Kikapcsolva"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
-#, fuzzy
msgid "High Fidelity Playback (A2DP)"
-msgstr "A lejátszás nem szüneteltethetÅ"
+msgstr "HiFi lejátszás (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
-#, fuzzy
msgid "High Fidelity Capture (A2DP)"
-msgstr "Felvétel, hozzáfűzés a film végéhez"
+msgstr "HiFi felvétel (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
-#, fuzzy
msgid "Telephony Duplex (HSP/HFP)"
-msgstr "Mobiltelefon bázisállomás"
+msgstr "Telefon duplex (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
@@ -2167,9 +2079,8 @@ msgid "Input Devices"
msgstr "Bemeneti eszközök"
#: ../src/modules/module-rygel-media-server.c:774
-#, fuzzy
msgid "Audio on @HOSTNAME@"
-msgstr "%(safeuser)s felhasználó listatagságai a(z) %(hostname)s gépen"
+msgstr "Hangforrások a(z) @HOSTNAME@ számÃtógépen"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
@@ -2208,33 +2119,28 @@ msgid "Video"
msgstr "Videó"
#: ../src/modules/alsa/alsa-mixer.c:1710
-#, fuzzy
msgid "Automatic Gain Control"
-msgstr "Automatikus beállÃtásvezérlés"
+msgstr "Automatikus erÅsÃtésszabályzás"
#: ../src/modules/alsa/alsa-mixer.c:1711
-#, fuzzy
msgid "No Automatic Gain Control"
-msgstr "Nem található hangerÅszabályzó"
+msgstr "Nincs automatikus erÅsÃtésszabályzás"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ErÅsÃtés"
#: ../src/modules/alsa/alsa-mixer.c:1713
-#, fuzzy
msgid "No Boost"
-msgstr "nincs automatikus indÃtás"
+msgstr "Nincs erÅsÃtés"
#: ../src/modules/alsa/alsa-mixer.c:1714
-#, fuzzy
msgid "Amplifier"
-msgstr "Műveleti erÅsÃtÅ"
+msgstr "ErÅsÃtÅ"
#: ../src/modules/alsa/alsa-mixer.c:1715
-#, fuzzy
msgid "No Amplifier"
-msgstr "Műveleti erÅsÃtÅ"
+msgstr "Nincs erÅsÃtÅ"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
@@ -2265,19 +2171,17 @@ msgid "Analog Headphones"
msgstr "Analóg fejhallgató"
#: ../src/modules/alsa/alsa-mixer.c:1780
-#, fuzzy
msgid "Analog Output (LFE)"
-msgstr "Hiba a kimenet elindÃtása közben"
+msgstr "Analóg kimenet (mély)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "A Mono.Addins hibakeresési kimenetének engedélyezése"
+msgstr "Analóg mono kimenet"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
-msgstr ""
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984
#: ../src/modules/alsa/alsa-mixer.c:3404
@@ -2286,9 +2190,8 @@ msgid "%s / %s"
msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
-#, fuzzy
msgid "Analog Mono"
-msgstr "Mono betöltÅ"
+msgstr "Analóg mono"
#: ../src/modules/alsa/alsa-mixer.c:2791
msgid "Analog Stereo"
@@ -2359,17 +2262,14 @@ msgid "Digital Stereo (HDMI)"
msgstr "Digitális térhatású (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Kétoldalas/fordÃtva beállÃtás"
+msgstr "Analóg mono duplex"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Kétoldalas/fordÃtva beállÃtás"
+msgstr "Analóg sztereó duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Szteró LADSPA effekt rack"
+msgstr "Analóg sztereó duplex (IEC958)"
commit 63c52c7b919058e1cba627a81ccbf328341e78f3
Author: reinouts <reinouts at fedoraproject.org>
Date: Wed Oct 14 09:31:10 2009 +0000
Sending translation for Dutch
diff --git a/po/nl.po b/po/nl.po
index b2a7370..a1c127e 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -2,16 +2,17 @@
# Copyright (C) 2009 THE pulseaudio.master-tx'S COPYRIGHT HOLDER
# This file is distributed under the same license as the pulseaudio.master-tx package.
# Geert Warrink <geert.warrink at onsnet.nu>, 2009.
+# Reinout van Schouwen <reinout at gmail.com>, 2009
#
#
msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-02 20:57+0000\n"
-"PO-Revision-Date: 2009-09-30 16:47+0200\n"
-"Last-Translator: Geert Warrink <geert.warrink at onsnet.nu>\n"
-"Language-Team: nl <nl at li.org>\n"
+"POT-Creation-Date: 2009-10-14 04:44+0000\n"
+"PO-Revision-Date: 2009-10-14 11:00+0100\n"
+"Last-Translator: Reinout van Schouwen <reinout at gmail.com>\n"
+"Language-Team: Dutch <vertaling at vrijschrift.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
@@ -31,8 +32,8 @@ msgid ""
msgstr ""
"snd_pcm_avail() gaf een waarde terug die uitzonderlijk groot is: %lu bytes (%"
"lu ms).\n"
-"Waarschijnlijk is dit een bug in de ALSA driver '%s'. Rapporteer dit "
-"probleem a.u.b. aan de ALSA ontwikkelaars."
+"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
+"probleem alstublieft aan de ALSA-ontwikkelaars."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
@@ -44,8 +45,8 @@ msgid ""
msgstr ""
"snd_pcm_delay() gaf een waarde terug die uitzonderlijk groot is: %li bytes (%"
"s%lu ms).\n"
-"Waarschijnlijk is dit een bug in de ALSA driver '%s'. Rapporteer dit "
-"probleem a.u.b. aan de ALSA ontwikkelaars."
+"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
+"probleem alstublieft aan de ALSA-ontwikkelaars."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
@@ -57,21 +58,21 @@ msgid ""
msgstr ""
"snd_pcm_mmap_begin() gaf een waarde terug die uitzonderlijk groot is: %lu "
"bytes (%lu ms).\n"
-"Waarschijnlijk is dit een bug in de ALSA driver '%s'. Rapporteer dit "
-"probleem a.u.b aan de ALSA ontwikkelaars."
+"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
+"probleem alstublieft aan de ALSA-ontwikkelaars."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
msgstr ""
-"Houdt altijd ten minste een afvoer ingeladen zelfs als het de null afvoer is."
+"Houdt altijd ten minste een afvoer ingeladen zelfs als het de null-afvoer is."
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr "Dummy output"
+msgstr "Dummy-uitvoer"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr "Virtuele LADSPA afoer"
+msgstr "Virtuele LADSPA afvoer"
#: ../src/modules/module-ladspa-sink.c:53
msgid ""
@@ -81,19 +82,19 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
-"sink_name=<naam voor de afoer> sink_properties=<eigenschappen van de afoer> "
-"master=<naam van de te filteren afoer> format=<sample formaat> rate=<sample "
-"snelheid> channels=<aantal kanalen> channel_map=<kanaal map> plugin=<ladspa "
-"plugin naam> label=<ladspa plugin label> control=<met kommas gescheiden "
-"lijst van input controle waarden>"
+"sink_name=<naam voor de afvoer> sink_properties=<eigenschappen van de afvoer> "
+"master=<naam van de te filteren afvoer> format=<sampleformaat> rate=<sample "
+"snelheid> channels=<aantal kanalen> channel_map=<kanaalkaart> plugin=<ladspa "
+"pluginnaam> label=<ladspa pluginlabel> control=<kommagescheiden "
+"lijst van invoercontrolewaarden>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr "Geklokte MULL afvoer"
+msgstr "Geklokte NULL afvoer"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
-msgstr "Null output"
+msgstr "Null-uitvoer"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -118,7 +119,7 @@ msgstr "Kon bind-now-loader niet toevoegen."
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr "Ontving signaal %s."
+msgstr "Signaal %s ontvangen."
#: ../src/daemon/main.c:168
msgid "Exiting."
@@ -132,50 +133,50 @@ msgstr "Kon gebruiker '%s' niet vinden."
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr "Kon groep '%s' niet vinden."
+msgstr "Kon groep â%sâ niet vinden."
#: ../src/daemon/main.c:195
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr "Gebruiker '%s' (UID %lu) en groep '%s' (GID %lu) gevonden."
+msgstr "Gebruiker â%sâ (UID %lu) en groep â%sâ (GID %lu) gevonden."
#: ../src/daemon/main.c:200
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "GID van gebruiker '%s' en van groep '%s' passen niet bij elkaar."
+msgstr "GID van gebruiker â%sâ en van groep â%sâ passen niet bij elkaar."
#: ../src/daemon/main.c:205
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "Persoonlijke map van gebruiker '%s' is niet '%s', negeer het."
+msgstr "Persoonlijke map van gebruiker â%sâ is niet â%sâ, negeer het."
#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
-msgstr "Aanmaken van '%s': %s mislukte"
+msgstr "Aanmaken van â%sâ mislukt: %s"
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
-msgstr "Veranderen van groeps lijst: '%s' mislukte"
+msgstr "Veranderen van groepslijst mislukt: %s"
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
-msgstr "Veranderen van GID: %s mislukte"
+msgstr "Veranderen van GID mislukt: %s"
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
-msgstr "Veranderen van UID: %s mislukte"
+msgstr "Veranderen van UID mislukt: %s"
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
-msgstr "Root rechten met succes laten vervallen."
+msgstr "Beheerdersrechten met succes laten vervallen."
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr "Systeem brede mode wordt op dit platform niet ondersteund."
+msgstr "Systeembrede modus wordt op dit platform niet ondersteund."
#: ../src/daemon/main.c:297
#, c-format
@@ -184,21 +185,21 @@ msgstr "setrlimit(%s, (%u, %u)) mislukte: %s"
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr "Analyseren van de commandoregel mislukte."
+msgstr "Analyseren van de opdrachtregel mislukte."
#: ../src/daemon/main.c:541
msgid "Daemon not running"
-msgstr "Daemon draait niet"
+msgstr "Voorziening draait niet"
#: ../src/daemon/main.c:543
#, c-format
msgid "Daemon running as PID %u"
-msgstr "Daemon draait met PID %u"
+msgstr "Voorziening draait met PID %u"
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr "Afschieten mislukt van daemon: '%s'"
+msgstr "Elimineren van voorziening mislukt: â%sâ"
#: ../src/daemon/main.c:571
msgid ""
@@ -210,28 +211,28 @@ msgstr ""
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr "Root rechten vereisd"
+msgstr "Beheerdersrechten vereist."
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
-msgstr "--start wordt niet ondersteund voor systeem instances"
+msgstr "--start wordt niet ondersteund voor systeeminstanties"
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "Draaiend in systeem mode, maar --disallow-exit is niet gezet!"
+msgstr "Draaiend in systeemmodus, maar --disallow-exit is niet ingesteld!"
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-"Draaiend in systeem mode, maar --disallow-module-loading is niet gezet!"
+"Draaiend in systeemmodus, maar --disallow-module-loading is niet gezet!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "Draaiend in systeem mode, geforceerd uitzetten van SHM mode!"
+msgstr "Draaiend in systeemmodus, geforceerd uitzetten van SHM-modus!"
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "Draaiend in systeem mode, geforceerd uitzetten van exit idle time!"
+msgstr "Draaiend in systeemmodus, geforceerd uitzetten van exit idle time!"
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
@@ -254,11 +255,11 @@ msgstr "read() mislukte: %s"
#: ../src/daemon/main.c:652
msgid "Daemon startup failed."
-msgstr "Daemon opstarten mislukte."
+msgstr "Voorziening opstarten mislukt."
#: ../src/daemon/main.c:654
msgid "Daemon startup successful."
-msgstr "Daemon met succes opgestart."
+msgstr "Voorziening met succes opgestart."
#: ../src/daemon/main.c:731
#, c-format
@@ -268,12 +269,12 @@ msgstr "Dit is PulseAudio %s"
#: ../src/daemon/main.c:732
#, c-format
msgid "Compilation host: %s"
-msgstr "Compilatie host: %s"
+msgstr "Compilatiehost: %s"
#: ../src/daemon/main.c:733
#, c-format
msgid "Compilation CFLAGS: %s"
-msgstr "Compilatie CFLAGS: %s"
+msgstr "Compilatie-CFLAGS: %s"
#: ../src/daemon/main.c:736
#, c-format
@@ -301,61 +302,61 @@ msgstr "Gecompileerd met Valgrind ondersteuning: nee"
#: ../src/daemon/main.c:749
#, c-format
msgid "Running in valgrind mode: %s"
-msgstr "Draaiend in valgrind mode: %s"
+msgstr "Draaiend in valgrind-modus: %s"
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
-msgstr "Optimaal gebouwd: ja"
+msgstr "Geoptimaliseerd gebouwd: ja"
#: ../src/daemon/main.c:754
msgid "Optimized build: no"
-msgstr "Optimaak gebouwd: nee"
+msgstr "Geoptimaliseerd gebouwd: nee"
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
-msgstr "NDEBUG gedefinieerd, alle verklaringen uitgezet."
+msgstr "NDEBUG gedefinieerd, alle asserts uitgezet."
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr "FASTPATH gedefinieerd, alleen snel pad verklaringen uitgezet."
+msgstr "FASTPATH gedefinieerd, alleen fast path-asserts uitgezet."
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
-msgstr "Alle verklaringen aangezet."
+msgstr "Alle asserts aangezet."
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
-msgstr "Machine ID verkrijgen mislukte"
+msgstr "Machine-ID verkrijgen mislukt"
#: ../src/daemon/main.c:769
#, c-format
msgid "Machine ID is %s."
-msgstr "Machine ID is: %s."
+msgstr "Machine-ID is: %s."
#: ../src/daemon/main.c:773
#, c-format
msgid "Session ID is %s."
-msgstr "Sessie ID is: %s."
+msgstr "Sessie-ID is: %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Using runtime directory %s."
-msgstr "Gebruik van runtime map %s."
+msgstr "Gebruik van runtime-map %s."
#: ../src/daemon/main.c:784
#, c-format
msgid "Using state directory %s."
-msgstr "Verbruik van state map %s."
+msgstr "Verbruik van state-map %s."
#: ../src/daemon/main.c:787
#, c-format
msgid "Using modules directory %s."
-msgstr "Gebruik van module map %s."
+msgstr "Gebruik van module-map %s."
#: ../src/daemon/main.c:789
#, c-format
msgid "Running in system mode: %s"
-msgstr "Draaiend in systeem mode: %s"
+msgstr "Draaiend in systeemmodus: %s"
#: ../src/daemon/main.c:792
msgid ""
@@ -366,12 +367,12 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
-"OK, dus je draait PA in systeem mode. Merk a.u.b. op dat je dit "
-"waarschijnlijk niet moet doen.\n"
-"Als je het toch doet dan is het je eigen schuld als dingen niet werken zoals "
+"OK, dus u draait PA in systeemmodus. Merk op dat u dit "
+"waarschijnlijk beter niet kunt doen.\n"
+"Als u het toch doet dan is het uw eigen schuld als dingen niet werken zoals "
"verwacht.\n"
-"Lees a.u.b.http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode voor een "
-"uitleg waarom systeem mode gewoonlijk een slecht idee is."
+"Lees http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode voor een "
+"uitleg waarom systeemmodus gewoonlijk een slecht idee is."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -395,23 +396,23 @@ msgstr "pa_core_new() mislukte."
#: ../src/daemon/main.c:904
msgid "Failed to initialize daemon."
-msgstr "Initialiseren van de daemon mislukte."
+msgstr "Initialiseren van de voorziening mislukt."
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "Daemon opgestart zonder geladen modules, dat werkt niet."
+msgstr "Voorziening opgestart zonder geladen modules, dat werkt niet."
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
-msgstr "Daemon opstarten is klaar."
+msgstr "Voorziening opstarten is klaar."
#: ../src/daemon/main.c:932
msgid "Daemon shutdown initiated."
-msgstr "Daemon afsluiten is begonnen."
+msgstr "Voorziening afsluiten is begonnen."
#: ../src/daemon/main.c:954
msgid "Daemon terminated."
-msgstr "Daemon is afgesloten."
+msgstr "Voorziening is afgesloten."
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -559,7 +560,7 @@ msgstr ""
"met\n"
" de opgegeven argumenten\n"
" -F, --file=FILENAME Draai het opgegeven script\n"
-" -C Open een commandoregel op de "
+" -C Open een opdrachtregel op de "
"draaiende TTY\n"
" na het opstarten\n"
"\n"
@@ -669,7 +670,7 @@ msgstr "Laad eenmaal: %s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr "OUDERE VERSIE WAARSCHUWING: %s\n"
+msgstr "ACHTERHAALDHEIDSWAARSCHUWING: %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -679,22 +680,22 @@ msgstr "Pad: %s\n"
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr "[%s:%u] Ongeldig log doel '%s'."
+msgstr "[%s:%u] Ongeldig logdoel '%s'."
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr "[%s:%u] Ongeldig log niveau '%s'."
+msgstr "[%s:%u] Ongeldig logniveau '%s'."
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "[%s:%u] Ongeldige her-bemonster methode '%s'."
+msgstr "[%s:%u] Ongeldige resample-methode â%sâ."
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "[%s:%u] Ongeldige rlimit '%s'."
+msgstr "[%s:%u] Ongeldige rlimit â%sâ."
#: ../src/daemon/daemon-conf.c:294
#, c-format
@@ -704,22 +705,22 @@ msgstr "[%s:%u] rlimit wordt niet ondersteund op dit platform."
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "[%s:%u] Ongeldig bemonster formaat '%s'."
+msgstr "[%s:%u] Ongeldig sampleformaat â%sâ."
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "[%s:%u] Ongeldige bemonster snelheid '%s'."
+msgstr "[%s:%u] Ongeldige samlperate â%sâ."
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "[%s:%u] Ongeldige bemonster kanalen '%s'."
+msgstr "[%s:%u] Ongeldige sample-kanalen â%sâ."
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "[%s:%u] Ongeldige kanalen map '%s'."
+msgstr "[%s:%u] Ongeldige kanalenkaart â%sâ."
#: ../src/daemon/daemon-conf.c:388
#, c-format
@@ -729,30 +730,30 @@ msgstr "[%s:%u] Ongeldig aantal fragmenten '%s'."
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "[%s:%u] Ongeldige fragment grootte '%s'."
+msgstr "[%s:%u] Ongeldige fragmentgrootte â%sâ."
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "[%s:%u] Ongeldig nice niveau '%s'."
+msgstr "[%s:%u] Ongeldig nice niveau â%sâ."
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
-msgstr "Openen van configuratie bestand %s mislukte."
+msgstr "Openen van configuratiebestand %s mislukt."
#: ../src/daemon/daemon-conf.c:562
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr ""
-"De opgegeven standaard kanalen map heeft een ander aantal kanalen dan de "
+"De opgegeven standaard kanalenkaart heeft een ander aantal kanalen dan de "
"opgegeven standaard aantal kanalen."
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
-msgstr "### Lees in het configuratie bestand: %s ###\n"
+msgstr "### Lees uit het configuratiebestand: %s ###\n"
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
@@ -792,11 +793,11 @@ msgstr "Achter links"
#: ../src/pulse/channelmap.c:113
msgid "Rear Right"
-msgstr "Achter rechta"
+msgstr "Achter rechts"
#: ../src/pulse/channelmap.c:115
msgid "Low Frequency Emmiter"
-msgstr "Lage frequentie zender"
+msgstr "Lage-frequentiezender"
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1022,7 +1023,7 @@ msgstr "Eenheid bestaat"
#: ../src/pulse/error.c:48
msgid "No such entity"
-msgstr "Eenheid onbekent"
+msgstr "Eenheid onbekend"
#: ../src/pulse/error.c:49
msgid "Connection refused"
@@ -1030,7 +1031,7 @@ msgstr "Verbinding geweigerd"
#: ../src/pulse/error.c:50
msgid "Protocol error"
-msgstr "Protocol fout"
+msgstr "Protocolfout"
#: ../src/pulse/error.c:51
msgid "Timeout"
@@ -1038,7 +1039,7 @@ msgstr "Tijd verstreken"
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr "Geen authorisatie sleutel"
+msgstr "Geen autorisatiesleutel"
#: ../src/pulse/error.c:53
msgid "Internal error"
@@ -1050,7 +1051,7 @@ msgstr "Verbinding verbroken"
#: ../src/pulse/error.c:55
msgid "Entity killed"
-msgstr "Eenheid afgeschoten"
+msgstr "Eenheid geëlimineerd"
#: ../src/pulse/error.c:56
msgid "Invalid server"
@@ -1058,7 +1059,7 @@ msgstr "Ongeldige server"
#: ../src/pulse/error.c:57
msgid "Module initalization failed"
-msgstr "Module initialisatie mislukte"
+msgstr "Module-initialisatie mislukt"
#: ../src/pulse/error.c:58
msgid "Bad state"
@@ -1139,12 +1140,12 @@ msgstr "XOpenDisplay() mislukte"
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
-msgstr "Analyseren van cookie data mislukte"
+msgstr "Analyseren van cookie-data mislukt"
#: ../src/pulse/client-conf.c:111
#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr "Open van configuratie bestand '%s' mislukte: %s"
+msgstr "Open van configuratiebestand â%sâ mislukte: %s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
@@ -1163,7 +1164,7 @@ msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
msgid "Received message for unknown extension '%s'"
-msgstr "Ontving boodschap voor onbekende extensie '%s'"
+msgstr "Ontving boodschap voor onbekende extensie â%sâ"
#: ../src/utils/pacat.c:108
#, c-format
@@ -1210,17 +1211,17 @@ msgstr "pa_stream_get_buffer_attr() mislukte: %s"
#: ../src/utils/pacat.c:314
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "Buffer metriek: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr "Buffermetriek: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
#: ../src/utils/pacat.c:317
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "Buffer metriek: maxlength=%u, fragsize=%u"
+msgstr "Buffermetriek: maxlength=%u, fragsize=%u"
#: ../src/utils/pacat.c:321
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "Gebruik bemonster spec '%s', kanaal map '%s'."
+msgstr "Gebruik sample-spec '%s', kanaal map '%s'."
#: ../src/utils/pacat.c:325
#, c-format
@@ -1230,27 +1231,27 @@ msgstr "Verbonden met apparaat %s (%u, %sopgeschort)."
#: ../src/utils/pacat.c:335
#, c-format
msgid "Stream error: %s"
-msgstr "Stroom fout: %s"
+msgstr "Stroomfout: %s"
#: ../src/utils/pacat.c:345
#, c-format
msgid "Stream device suspended.%s"
-msgstr "Stroom apparaat opgeschort.%s"
+msgstr "Stroomapparaat opgeschort.%s"
#: ../src/utils/pacat.c:347
#, c-format
msgid "Stream device resumed.%s"
-msgstr "Stroom apparaat hervat.%s"
+msgstr "Stroomapparaat hervat.%s"
#: ../src/utils/pacat.c:355
#, c-format
msgid "Stream underrun.%s"
-msgstr "Stroom te weinig data.%s"
+msgstr "Te weinig data voor stroom.%s"
#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream overrun.%s"
-msgstr "Stroom data overschrijding.%s"
+msgstr "Data-overschrijding voor stroom.%s"
#: ../src/utils/pacat.c:369
#, c-format
@@ -1264,7 +1265,7 @@ msgstr "Stroom verplaatst naar apparaat %s (%u, %sopgeschort).%s"
#: ../src/utils/pacat.c:376
msgid "not "
-msgstr "niet"
+msgstr "niet "
#: ../src/utils/pacat.c:383
#, c-format
@@ -1395,7 +1396,7 @@ msgstr ""
"\n"
" -s, --server=SERVER De naam van de server waarmee "
"verbonden moet worden\n"
-" -d, --device=DEVICE De naam van de afoer/bron waarmee "
+" -d, --device=DEVICE De naam van de afvoer/bron waarmee "
"verbonden moet worden\n"
" -n, --client-name=NAME Hoe wordt deze cliënt op de server "
"genoemd\n"
@@ -1403,9 +1404,9 @@ msgstr ""
"genoemd\n"
" --volume=VOLUME Geef het begins (lineare) volume in "
"reeks 0...65536\n"
-" --rate=SAMPLERATE De bemonstersnelheid in Hz "
+" --rate=SAMPLERATE De samplerate in Hz "
"(standaard 44100)\n"
-" --format=SAMPLEFORMAT Het bemonster type, een van s16le, "
+" --format=SAMPLEFORMAT Het sampletype, een van s16le, "
"s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
"s24le, s24be,\n"
@@ -1414,12 +1415,12 @@ msgstr ""
" --channels=CHANNELS Het aantal kanalen, 1 voor mono, 2 "
"voor stereo\n"
" (standaard 2)\n"
-" --channel-map=CHANNELMAP Kanaal map te gebruiken in plaats "
+" --channel-map=CHANNELMAP Kanaalkaart te gebruiken in plaats "
"van de standaard\n"
-" --fix-format Neem het bemonsteringsformaat over "
-"van de afoer waar de stroom\n"
+" --fix-format Neem het sampleformaat over "
+"van de afvoer waar de stroom\n"
" mee verbonden is.\n"
-" --fix-rate Neem de bemonsteringssnelheid over "
+" --fix-rate Neem de samplerate over "
"van de afvoer waar de stroom\n"
" mee verbonden is.\n"
" --fix-channels Neem het aantal kanalen en de kanaal "
@@ -1456,32 +1457,32 @@ msgstr ""
#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
-msgstr "Ongeldige cliënt naam '%s'."
+msgstr "Ongeldige clientnaam â%sâ."
#: ../src/utils/pacat.c:779
#, c-format
msgid "Invalid stream name '%s'"
-msgstr "Ongeldige stroom naam '%s'."
+msgstr "Ongeldige stroomnaam â%sâ."
#: ../src/utils/pacat.c:816
#, c-format
msgid "Invalid channel map '%s'"
-msgstr "Ongeldige kanaal map '%s'."
+msgstr "Ongeldige kanaalkaart â%sâ."
#: ../src/utils/pacat.c:845
#, c-format
msgid "Invalid latency specification '%s'"
-msgstr "Ongeldige latentie specificatie '%s'."
+msgstr "Ongeldige latentie-specificatie â%sâ."
#: ../src/utils/pacat.c:852
#, c-format
msgid "Invalid process time specification '%s'"
-msgstr "Ongeldige proces tijd specificatie '%s'."
+msgstr "Ongeldige procestijdspecificatie â%sâ."
#: ../src/utils/pacat.c:864
#, c-format
msgid "Invalid property '%s'"
-msgstr "Ongeldige eigenschap '%s'."
+msgstr "Ongeldige eigenschap â%sâ."
#: ../src/utils/pacat.c:881
#, c-format
@@ -1490,7 +1491,7 @@ msgstr "Ongeldig bestandsformaat %s"
#: ../src/utils/pacat.c:900
msgid "Invalid sample specification"
-msgstr "Ongeldige bemonster specificatie"
+msgstr "Ongeldige samplespecificatie"
#: ../src/utils/pacat.c:910
#, c-format
@@ -1508,7 +1509,7 @@ msgstr "Te veel argumenten."
#: ../src/utils/pacat.c:933
msgid "Failed to generate sample specification for file."
-msgstr "Bemonster specificatie voor bestand aanmaken mislukte."
+msgstr "Aanmaken van samplespecificatie voor bestand mislukt."
#: ../src/utils/pacat.c:953
msgid "Failed to open audio file."
@@ -1524,11 +1525,11 @@ msgstr ""
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
-msgstr "Bepalen van bemonster specificatie van het bestand mislukte."
+msgstr "Bepalen van samplespecificatie van het bestand mislukte."
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr "Waarschuwing: Bepalen van kanaal map van bestand mislukte."
+msgstr "Waarschuwing: Bepalen van kanaalkaart van bestand mislukte."
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
@@ -1536,14 +1537,14 @@ msgstr "Kanaal map komt niet overeen met bemonster specificatie."
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
-msgstr "Waarschuwing: schrijven van kanaal map naar bestand mislukte."
+msgstr "Waarschuwing: schrijven van kanaalkaart naar bestand mislukte."
#: ../src/utils/pacat.c:1008
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
-"Openen van een %s stroom met bemonster specificatie '%s' en kanaal map '%s'."
+"Openen van een %s stroom met samplespecificatie â%sâ en kanaalkaart â%sâ."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1601,7 +1602,7 @@ msgstr "Vervolgen mislukte: %s\n"
#: ../src/utils/pasuspender.c:147
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "WAARSCHUWING: Geluidsserver is niet locaal, geen opschorten.\n"
+msgstr "WAARSCHUWING: Geluidsserver is niet lokaal, geen opschorten.\n"
#: ../src/utils/pasuspender.c:159
#, c-format
@@ -1683,7 +1684,7 @@ msgstr ""
#: ../src/utils/pactl.c:147
#, c-format
msgid "Sample cache size: %s\n"
-msgstr "Bemonstering cache grootte: %s\n"
+msgstr "Sample-buffergrootte: %s\n"
#: ../src/utils/pactl.c:156
#, c-format
@@ -1706,8 +1707,8 @@ msgstr ""
"Gebruikersnaam: %s\n"
"Hostnaam: %s\n"
"Servernaam: %s\n"
-"Server versie: %s\n"
-"Standaard bemonsterings specificatie: %s\n"
+"Serverversie: %s\n"
+"Standaard samplespecificatie: %s\n"
"Standaard kanaal map: %s\n"
"Standaard afvoer: %s\n"
"Standaard bron: %s\n"
@@ -1716,7 +1717,7 @@ msgstr ""
#: ../src/utils/pactl.c:205
#, c-format
msgid "Failed to get sink information: %s"
-msgstr "Verkrijgen afvoer informatie mislukte: %s"
+msgstr "Verkrijgen afvoerinformatie mislukte: %s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1770,7 +1771,7 @@ msgstr "\tActieve poort: %s\n"
#: ../src/utils/pactl.c:297
#, c-format
msgid "Failed to get source information: %s"
-msgstr "Verkrijgen van bron informatie mislukte: %s"
+msgstr "Verkrijgen van broninformatie mislukt: %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1798,14 +1799,14 @@ msgstr ""
"\tNaam: %s\n"
"\tBeschrijving: %s\n"
"\tDriver: %s\n"
-"\tBemonsterings specificatie: %s\n"
+"\tSamplespecificatie: %s\n"
"\tKanaal map: %s\n"
"\tModule eigenaar: %u\n"
"\tDemping: %s\n"
"\tVolume: %s%s%s\n"
"\t balans %0.2f\n"
"\tBasis volume: %s%s%s\n"
-"\tMonitor afvoer: %s\n"
+"\tMonitorafvoer: %s\n"
"\tLatentie: %0.0f usec, ingesteld %0.0f usec\n"
"\tVlaggen: %s%s%s%s%s%s\n"
"\tEigenschappen:\n"
@@ -1837,14 +1838,14 @@ msgstr ""
"Module #%u\n"
"\tNaam: %s\n"
"\tArgument: %s\n"
-"\tGebruiks teller: %s\n"
+"\tGebruiksteller: %s\n"
"\tEigenschappen:\n"
"\t\t%s\n"
#: ../src/utils/pactl.c:412
#, c-format
msgid "Failed to get client information: %s"
-msgstr "Verkrijgen van cliënt informatie mislukte: %s"
+msgstr "Verkrijgen van clientinformatie mislukt: %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1855,16 +1856,16 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"Cliënt #%u\n"
-"\tDriver: %s\n"
-"\tModule eigenaar: %s\n"
+"Client #%u\n"
+"\tStuurprogramma: %s\n"
+"\tModule-eigenaar: %s\n"
"\tEigenschappen:\n"
"\t\t%s\n"
#: ../src/utils/pactl.c:447
#, c-format
msgid "Failed to get card information: %s"
-msgstr "Verkrijgen van kaart informatie mislukte: %s"
+msgstr "Verkrijgen van kaartinformatie mislukt: %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1878,8 +1879,8 @@ msgid ""
msgstr ""
"Kaart #%u\n"
"\tNaam: %s\n"
-"\tDriver: %s\n"
-"\tModule eigenaar: %s\n"
+"\tStuurprogramma: %s\n"
+"\tModule-eigenaar: %s\n"
"\tEigenschappen:\n"
"\t\t%s\n"
@@ -1896,7 +1897,7 @@ msgstr "\tActieve profiel: %s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "Verkrijgen van afvoer input informatie mislukte: %s"
+msgstr "Verkrijgen van afvoer-invoerinformatie mislukt: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1919,26 +1920,26 @@ msgid ""
"\t\t%s\n"
msgstr ""
"Afvoer input #%u\n"
-"\tDriver: %s\n"
-"\tModule eigenaar: %s\n"
-"\tCliënt: %s\n"
-"\tSink: %u\n"
-"\tBemonsterings specificatie: %s\n"
-"\tKanaal map: %s\n"
+"\tStuurprogramma: %s\n"
+"\tModule-eigenaar: %s\n"
+"\tClient: %s\n"
+"\tAfvoer: %u\n"
+"\tSamplespecificatie: %s\n"
+"\tKanaalkaart: %s\n"
"\tDemping: %s\n"
"\tVolume: %s\n"
"\t %s\n"
"\t balans %0.2f\n"
-"\tBuffer latentie: %0.0f usec\n"
-"\tAfvoer latentie: %0.0f usec\n"
-"\tHerbemonsterings methode: %s\n"
+"\tBufferlatentie: %0.0f usec\n"
+"\tAfvoerlatentie: %0.0f usec\n"
+"\tResample-methode: %s\n"
"\tEigenschappen:\n"
"\t\t%s\n"
#: ../src/utils/pactl.c:554
#, c-format
msgid "Failed to get source output information: %s"
-msgstr "Verkrijgen van bron output informatie mislukte: %s"
+msgstr "Verkrijgen van bron-uitvoerinformatie mislukt: %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1956,23 +1957,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"Bron output #%u\n"
+"Bronuitvoer #%u\n"
"\tDriver: %s\n"
-"\tModule eigenaaar: %s\n"
-"\tCliënt: %s\n"
+"\tModule-eigenaaar: %s\n"
+"\tClient: %s\n"
"\tBron: %u\n"
-"\tBemonsterings specificatie: %s\n"
-"\tKanaal map: %s\n"
-"\tBuffer latentie: %0.0f usec\n"
-"\tBron latentie: %0.0f usec\n"
-"\tHerbemonsterings methode: %s\n"
+"\tSamplespecificatie: %s\n"
+"\tKanaalkaart: %s\n"
+"\tBufferlatentie: %0.0f usec\n"
+"\tBronlatentie: %0.0f usec\n"
+"\tResample-methode: %s\n"
"\tEigenschappen:\n"
"\t\t%s\n"
#: ../src/utils/pactl.c:605
#, c-format
msgid "Failed to get sample information: %s"
-msgstr "Verkrijgen van bemonsterings informatie mislukte: %s"
+msgstr "Verkrijgen van sample-informatie mislukt: %s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1991,9 +1992,9 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"Monster #%u\n"
+"Sample #%u\n"
"\tNaam: %s\n"
-"\tBemonsterings specificatie: %s\n"
+"\tSamplespecificatie: %s\n"
"\tKanaal map: %s\n"
"\tVolume: %s\n"
"\t %s\n"
@@ -2095,111 +2096,111 @@ msgid ""
msgstr ""
"pactl %s\n"
"Gecompileerd met libpulse %s\n"
-"Gelint met libpulse %s\n"
+"Gelinkt met libpulse %s\n"
#: ../src/utils/pactl.c:979
msgid "Please specify a sample file to load"
-msgstr "Geef a.u.b een bemonsterings bestand op om te laden"
+msgstr "Geef een te laden samplebestand op"
#: ../src/utils/pactl.c:992
msgid "Failed to open sound file."
-msgstr "Openen geluidsbestand mislukte."
+msgstr "Openen geluidsbestand mislukt."
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
-"Waarschuwing: Bepalen van bemonsterings specificatie van bestand mislukte."
+"Waarschuwing: Bepalen van samplespecificatie van bestand mislukte."
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
-msgstr "Je moet een monster naam opgeven om af te spelen"
+msgstr "U dient een samplenaam op te geven om af te spelen"
#: ../src/utils/pactl.c:1026
msgid "You have to specify a sample name to remove"
-msgstr "Je moet een monster naam opgeven om te verwijderen"
+msgstr "U dient een samplenaam op te geven om te verwijderen"
#: ../src/utils/pactl.c:1035
msgid "You have to specify a sink input index and a sink"
-msgstr "Je moet een afvoer input index en een afvoer opgeven"
+msgstr "U dient een afvoer-invoerindex en een afvoer op te geven"
#: ../src/utils/pactl.c:1045
msgid "You have to specify a source output index and a source"
-msgstr "Je moet een bron output index en een bron opgeven"
+msgstr "U dient een bron-uitvoerindex en een bron op te geven"
#: ../src/utils/pactl.c:1060
msgid "You have to specify a module name and arguments."
-msgstr "Je moet een module naam en argumenten opgeven."
+msgstr "U dient een modulenaam en argumenten op te geven."
#: ../src/utils/pactl.c:1080
msgid "You have to specify a module index"
-msgstr "Je moet een module index opgeven"
+msgstr "U dient een module index op te geven"
#: ../src/utils/pactl.c:1090
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-"Je kunt niet meer dan een afvoer opgeven. Je moet een boolean waarde opgeven"
+"U kunt niet meer dan een afvoer opgeven. U dient een boolean waarde op te geven."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
-"Je kunt niet meerd dan een bron opgeven. Je moet een boolean waarde opgeven."
+"U kunt niet meer dan één bron opgeven. u dient een boolean waarde op te geven."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
-msgstr "Je moet een kaart naam/index en een profiel naam opgeven"
+msgstr "U dient een kaartnaam/index en een profielnaam op te geven"
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
-msgstr "Je moet een afvoer naam/index en een poort naam opgeven"
+msgstr "U dient een afvoernaam/index en een poortnaam op te geven"
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
-msgstr "Je moet een bron naam/index en een poort naam opgeven"
+msgstr "U dient een bronnaam/index en een poortnaam op te geven"
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
-msgstr "Je moet een afvoer naam/index en een volume opgeven"
+msgstr "U dient een afvoernaam/index en een volume op te geven"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
msgid "Invalid volume specification"
-msgstr "Ongeldige volume opgave"
+msgstr "Ongeldige volume-opgave"
#: ../src/utils/pactl.c:1166
msgid "You have to specify a source name/index and a volume"
-msgstr "Je moet een bron naam/index en een volume opgeven"
+msgstr "U dient een bronnaam/index en een volume op te geven"
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr "Je moet een afvoer input index en een volume opgeven"
+msgstr "U dient een afvoer-invoerindex en een volume op te geven"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr "Ongeldige afvoer input index"
+msgstr "Ongeldige afvoer-invoerindex"
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Je moet een afvoer naam/index en een dempings boolean opgeven"
+msgstr "U dient een afvoernaam/index en een dempingsboolean op te geven"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Je moet een bron naam/index en een dempings boolean opgeven"
+msgstr "U dient een bronnaam/index en een dempingsboolean op te geven"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Je moet een afvoer input index en een dempings boolean opgeven"
+msgstr "U dient een afvoer-invoerindex en een dempingsboolean op te geven"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
-msgstr "Ongeldige afvoer input index opgave"
+msgstr "Ongeldige afvoer-invoerindex opgave"
#: ../src/utils/pactl.c:1262
msgid "No valid command specified."
-msgstr "Geen geldig commando opgegeven."
+msgstr "Geen geldige opdracht opgegeven."
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2224,7 +2225,7 @@ msgstr ""
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr "Commando regel ontleden mislukte.\n"
+msgstr "Opdrachtregel ontleden mislukt.\n"
#: ../src/utils/pax11publish.c:108
#, c-format
@@ -2249,22 +2250,22 @@ msgstr "Cookie: %s\n"
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr "Cookie data ontleden mislukte\n"
+msgstr "Cookiedata ontleden mislukt\n"
#: ../src/utils/pax11publish.c:137
#, c-format
msgid "Failed to save cookie data\n"
-msgstr "Cookie data opslaan mislukte\n"
+msgstr "Cookiedata opslaan mislukt\n"
#: ../src/utils/pax11publish.c:152
#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr "Cliënt configuratie bestand laden mislukte.\n"
+msgstr "Clientconfiguratiebestand laden mislukt.\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr "Omgevings configuratie bestand lezen mislukte.\n"
+msgstr "Omgevingsconfiguratiedata lezen mislukt.\n"
#: ../src/utils/pax11publish.c:174
#, c-format
@@ -2274,7 +2275,7 @@ msgstr "FQDN verkrijgen mislukte.\n"
#: ../src/utils/pax11publish.c:194
#, c-format
msgid "Failed to load cookie data\n"
-msgstr "Cookie data laden mislukte\n"
+msgstr "Cookiedata laden mislukt\n"
#: ../src/utils/pax11publish.c:211
#, c-format
@@ -2284,7 +2285,7 @@ msgstr "Nog niet geïmplementeerd.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
-"Er draait geen PulseAudio daemon, of het draait niet als sessie daemon."
+"Er draait geen PulseAudio-voorziening, of het draait niet als sessievoorziening."
#: ../src/utils/pacmd.c:74
#, c-format
@@ -2298,11 +2299,11 @@ msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr "PulseAudio daemon uitzetten mislukte."
+msgstr "PulseAudio-voorziening uitzetten mislukt."
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
-msgstr "Daemon reageert niet."
+msgstr "Voorziening reageert niet."
#: ../src/utils/pacmd.c:161
#, c-format
@@ -2335,8 +2336,8 @@ msgid ""
msgstr ""
"ALSA maakte ons wakker om nieuwe data naar het apparaat te schrijven, maar "
"er was niets om weg te schrijven!\n"
-"Waarschijnlijk is dit een fout in de ALSA driver '%s\". Rapporteer dit "
-"probleem a.u.b. aan de ALSA ontwikkelaars.\n"
+"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
+"probleem alstublieft aan de ALSA-ontwikkelaars.\n"
"We werden gewekt met POLLOUT ingesteld -- echter een opvolgende snd_pcm_avail"
"() gaf 0 terug of een andere waarde < min_avail."
@@ -2352,8 +2353,8 @@ msgid ""
msgstr ""
"ALSA maakte ons wakker om nieuwe data van het apparaat te lezen, maar er was "
"niets om te lezen!\n"
-"Waarschijnlijk is dit een fout in de ALSA driver '%s\". Rapporteer dit "
-"probleem a.u.b. aan de ALSA ontwikkelaars.\n"
+"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
+"probleem alstublieft aan de ALSA-ontwikkelaars.\n"
"We werden gewekt met POLLIN ingesteld -- echter een opvolgende snd_pcm_avail"
"() gaf 0 terug of een andere waarde < min_avail."
@@ -2361,7 +2362,7 @@ msgstr ""
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
#: ../src/modules/alsa/alsa-mixer.c:2931
msgid "Off"
-msgstr "Uiy"
+msgstr "Uit"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
msgid "High Fidelity Playback (A2DP)"
@@ -2369,25 +2370,25 @@ msgstr "High Fidelity Playback (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
msgid "High Fidelity Capture (A2DP)"
-msgstr "High Fidelity Afvangen (A2DP)"
+msgstr "High Fidelity afvangen (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr "Telefonie Duplex (HSP/HFP)"
+msgstr "Telefonie duplex (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
-msgstr "PulseAudio geluids server"
+msgstr "PulseAudio-geluidsserver"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr "Output apparaten"
+msgstr "Uitvoerapparaten"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr "Input apparaten"
+msgstr "Invoerapparaten"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
@@ -2395,15 +2396,15 @@ msgstr "Geluid op @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr "Input"
+msgstr "Invoer"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr "Docking station input"
+msgstr "Docking station-invoer"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr "Docking station microfoon"
+msgstr "Docking station-microfoon"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
@@ -2431,11 +2432,11 @@ msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr "Automatische volume controle"
+msgstr "Automatische gain-controle"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr "Geen automatische volume controle"
+msgstr "Geen automatische gain-controle"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
@@ -2455,7 +2456,7 @@ msgstr "Geen versterker"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr "Analoge input"
+msgstr "Analoge invoer"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
@@ -2479,7 +2480,7 @@ msgstr "Analoge output"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr "Analoeg koptelefoon"
+msgstr "Analoge koptelefoon"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
@@ -2487,7 +2488,7 @@ msgstr "Analoge output (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr "Analoge mono output"
+msgstr "Analoge mono-uitvoer"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
commit 1151e1575fe1291e80d6d9fbbfd4ce20da2fd447
Author: kami911 <kami911 at fedoraproject.org>
Date: Thu Oct 15 13:12:37 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index 7353267..e3629a7 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -12,6 +12,7 @@ msgstr ""
"X-Poedit-Language: Hungarian\n"
"X-Poedit-Country: HUNGARY\n"
"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:858
#: ../src/pulsecore/sink.c:2629
@@ -69,9 +70,8 @@ msgid "Null Output"
msgstr "szabványos kimenet"
#: ../src/pulsecore/sink.c:2613
-#, fuzzy
msgid "Internal Audio"
-msgstr "<b>HangszűrÅ</b>"
+msgstr "BelsŠhangforrás"
#: ../src/pulsecore/sink.c:2618
msgid "Modem"
@@ -112,9 +112,9 @@ msgid "Failed to find group '%s'."
msgstr "%s csoportjának megváltoztatása sikertelen a következÅre: %s\n"
#: ../src/daemon/main.c:195
-#, fuzzy, c-format
+#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr "%s: Nem módosÃtható a tulajdonos uid-ja %lu, gid-je %lu értékekre"
+msgstr "LétezÅ felhasználó â%sâ (UID: %lu) és csoport â%sâ (GID: %lu)."
#: ../src/daemon/main.c:200
#, fuzzy, c-format
@@ -244,9 +244,9 @@ msgid "Daemon startup successful."
msgstr "A portátirányÃtás sikeres!"
#: ../src/daemon/main.c:731
-#, fuzzy, c-format
+#, c-format
msgid "This is PulseAudio %s"
-msgstr "Ez egy programhiba... (%s:%d:%s)\n"
+msgstr "PulseAudio %s"
#: ../src/daemon/main.c:732
#, fuzzy, c-format
@@ -316,14 +316,14 @@ msgid "Failed to get machine ID"
msgstr "A PDA azonosÃtó lekérdezése nem sikerült"
#: ../src/daemon/main.c:769
-#, fuzzy, c-format
+#, c-format
msgid "Machine ID is %s."
-msgstr "\"%s\" felhasználói azonosÃtó lejárt."
+msgstr "SzámÃtógép-azonosÃtó: %s."
#: ../src/daemon/main.c:773
-#, fuzzy, c-format
+#, c-format
msgid "Session ID is %s."
-msgstr "A munkamenet le van zárva"
+msgstr "Munkamenet-azonosÃtó: %s."
#: ../src/daemon/main.c:779
#, fuzzy, c-format
@@ -566,9 +566,9 @@ msgid "Load Once: %s\n"
msgstr "Betöltve: %s\n"
#: ../src/daemon/dumpmodules.c:75
-#, fuzzy, c-format
+#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr "%s: figyelem: %s felülbÃrálja %s-t\n"
+msgstr "VISSZAVONÃSI FIGYELMEZTETÃS: %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -959,7 +959,6 @@ msgid "Entity killed"
msgstr "A(z) %d számú folyamat kilÅve"
#: ../src/pulse/error.c:56
-#, fuzzy
msgid "Invalid server"
msgstr "Ãrvénytelen kiszolgáló"
@@ -994,9 +993,8 @@ msgid "Unknown error code"
msgstr "Ismeretlen hibakód"
#: ../src/pulse/error.c:64
-#, fuzzy
msgid "No such extension"
-msgstr "nincs ilyen puffer"
+msgstr "Nincs ilyen kiterjesztés"
#: ../src/pulse/error.c:65
#, fuzzy
@@ -1819,9 +1817,8 @@ msgid "Failed to open sound file."
msgstr "Nem sikerült megnyitni az átmeneti fájlt"
#: ../src/utils/pactl.c:1004
-#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
-msgstr "RGB-adat betöltése a TIFF-fájlból sikertelen"
+msgstr "RGB-adat betöltése a TIFF fájlból sikertelen"
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
commit 3f1fefff57e2ae47105af0a23174c8a4279629a2
Author: kami911 <kami911 at fedoraproject.org>
Date: Sat Oct 17 09:13:06 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index e3629a7..b59bef5 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-30 21:32+0000\n"
+"POT-Creation-Date: 2009-10-17 04:45+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: KAMI <kami911 at gmail.com>\n"
"Language-Team: \n"
@@ -46,28 +46,24 @@ msgid "Always keeps at least one sink loaded even if it's a null one"
msgstr ""
#: ../src/modules/module-always-sink.c:83
-#, fuzzy
msgid "Dummy Output"
-msgstr "szabványos kimenet"
+msgstr "Látszólagos kimenet"
#: ../src/modules/module-ladspa-sink.c:49
-#, fuzzy
msgid "Virtual LADSPA sink"
-msgstr "Ismeretlen nyelÅelem"
+msgstr "Látszólagos LADSPA nyelÅ"
#: ../src/modules/module-ladspa-sink.c:53
msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
msgstr ""
#: ../src/modules/module-null-sink.c:55
-#, fuzzy
msgid "Clocked NULL sink"
-msgstr "Ismeretlen nyelÅelem"
+msgstr "Ãrajelezett semmis nyelÅ"
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "szabványos kimenet"
+msgstr "Semmis kimenet"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -78,19 +74,16 @@ msgid "Modem"
msgstr "Modem"
#: ../src/daemon/ltdl-bind-now.c:124
-#, fuzzy
msgid "Failed to find original lt_dlopen loader."
-msgstr "A PNM-betöltŠegy egészet várt, de nem talált"
+msgstr "Nem található az eredeti âlt_dlopenâ betöltÅ."
#: ../src/daemon/ltdl-bind-now.c:129
-#, fuzzy
msgid "Failed to allocate new dl loader."
-msgstr "dpkg: a memóriafoglalás meghiúsult a meghibásodott csomagok listájában egy új bejegyzés számára."
+msgstr "Nem foglalható le hely az új dl betöltŠszámára."
#: ../src/daemon/ltdl-bind-now.c:142
-#, fuzzy
msgid "Failed to add bind-now-loader."
-msgstr "nem sikerült hozzáadni a tartományt a csatlakozások hasÃtótáblázatához"
+msgstr "Nem sikerült hozzáadni az azonnali betöltés csatolást."
#: ../src/daemon/main.c:141
#, c-format
@@ -102,14 +95,14 @@ msgid "Exiting."
msgstr "Kilépés."
#: ../src/daemon/main.c:186
-#, fuzzy, c-format
+#, c-format
msgid "Failed to find user '%s'."
-msgstr "A csomag (â%sâ) keresése meghiúsult: %s"
+msgstr "Nem található a(z) â%sâ felhasználó."
#: ../src/daemon/main.c:191
-#, fuzzy, c-format
+#, c-format
msgid "Failed to find group '%s'."
-msgstr "%s csoportjának megváltoztatása sikertelen a következÅre: %s\n"
+msgstr "Nem található a(z) â%sâ csoport."
#: ../src/daemon/main.c:195
#, c-format
@@ -117,45 +110,43 @@ msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "LétezÅ felhasználó â%sâ (UID: %lu) és csoport â%sâ (GID: %lu)."
#: ../src/daemon/main.c:200
-#, fuzzy, c-format
+#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "csomagok letöltése és a műveletek el nem indÃtása"
+msgstr "A(z) â%sâ felhasználó GID azonosÃtója és â%sâ csoportja nem egyezik meg."
#: ../src/daemon/main.c:205
-#, fuzzy, c-format
+#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "%s: nem törlöm %s könyvtárat (%s saját könyvtára)\n"
+msgstr "A(z) â%sâ felhasználó Saját mappája nem â%sâ. Kihagyás."
#: ../src/daemon/main.c:208
#: ../src/daemon/main.c:213
-#, fuzzy, c-format
+#, c-format
msgid "Failed to create '%s': %s"
-msgstr "A szervizcsomag (â%sâ) létrehozása meghiúsult: %s"
+msgstr "Nem sikerült létrehozni a(z) â%sâ fájlt: %s"
#: ../src/daemon/main.c:220
-#, fuzzy, c-format
+#, c-format
msgid "Failed to change group list: %s"
-msgstr "AktÃv tartományok listázása nem sikerült"
+msgstr "Nem sikerült megváltoztatni a csoportlistát: %s"
#: ../src/daemon/main.c:236
-#, fuzzy, c-format
+#, c-format
msgid "Failed to change GID: %s"
-msgstr "A könyvtárváltás meghiúsult"
+msgstr "Nem sikerült megváltoztatni az GID azonosÃtót: %s"
#: ../src/daemon/main.c:252
-#, fuzzy, c-format
+#, c-format
msgid "Failed to change UID: %s"
-msgstr "A könyvtárváltás meghiúsult"
+msgstr "Nem sikerült megváltoztatni az UID azonosÃtót: %s"
#: ../src/daemon/main.c:271
-#, fuzzy
msgid "Successfully dropped root privileges."
-msgstr "GNOME Commander - ROOT JOGSULTSÃGOK"
+msgstr "A rendszergazdai jogosultságok sikeresen visszaadva."
#: ../src/daemon/main.c:279
-#, fuzzy
msgid "System wide mode unsupported on this platform."
-msgstr "Az --atime-preserve='system' nem támogatott ezen az operációs rendszeren"
+msgstr "A rendszerszintű üzemmód nem támogatott ezen az operációs rendszeren."
#: ../src/daemon/main.c:297
#, fuzzy, c-format
@@ -163,32 +154,30 @@ msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "<b>Sikertelen bejelentkezést</b>"
#: ../src/daemon/main.c:474
-#, fuzzy
msgid "Failed to parse command line."
-msgstr "Nem lehet feldolgozni a(z) â%sâ parancssort: %s"
+msgstr "Nem sikerült feldolgozni a parancssort."
#: ../src/daemon/main.c:541
msgid "Daemon not running"
msgstr "A démon nem fut."
#: ../src/daemon/main.c:543
-#, fuzzy, c-format
+#, c-format
msgid "Daemon running as PID %u"
-msgstr "Ne démonként fusson."
+msgstr "A démon a következÅ PID azonosÃtóval fut: %u"
#: ../src/daemon/main.c:553
-#, fuzzy, c-format
+#, c-format
msgid "Failed to kill daemon: %s"
-msgstr "nem sikerült olvasni a Xen-szolgáltatásból"
+msgstr "A démon forszÃrozott leállÃtása nem sikerült: %s"
#: ../src/daemon/main.c:571
msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr ""
+msgstr "Ez a program nincsen felkészÃtve arra, hogy rendszergazdai jogosultságokkal fusson (kivéve, ha a --system paraméter megadásra kerül)."
#: ../src/daemon/main.c:573
-#, fuzzy
msgid "Root privileges required."
-msgstr "Rendszergazdai jogok szükségesek!"
+msgstr "Rendszergazdai jogosultságok szükségesek."
#: ../src/daemon/main.c:578
#, fuzzy
@@ -213,35 +202,32 @@ msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
#: ../src/daemon/main.c:621
-#, fuzzy
msgid "Failed to acquire stdio."
-msgstr "A(z) â%sâ D-Bus név beszerzése meghiúsult\n"
+msgstr "Nem sikerült jogot szerezni az alapértelmezett ki- és bemenetre (stdio)."
#: ../src/daemon/main.c:627
-#, fuzzy, c-format
+#, c-format
msgid "pipe failed: %s"
-msgstr "%s: CsŠlétrehozása sikertelen"
+msgstr "CsŠlétrehozás meghiúsult: %s"
#: ../src/daemon/main.c:632
-#, fuzzy, c-format
+#, c-format
msgid "fork() failed: %s"
-msgstr "az indÃtás meghiúsult\n"
+msgstr "ProgramindÃtás meghiúsult: %s"
#: ../src/daemon/main.c:646
#: ../src/utils/pacat.c:508
-#, fuzzy, c-format
+#, c-format
msgid "read() failed: %s"
-msgstr "olvasás sikertelen"
+msgstr "Olvasás meghiúsult: %s"
#: ../src/daemon/main.c:652
-#, fuzzy
msgid "Daemon startup failed."
-msgstr "A csatlakozás meghiúsult a démonhoz"
+msgstr "A démon elindÃtása nem sikerült."
#: ../src/daemon/main.c:654
-#, fuzzy
msgid "Daemon startup successful."
-msgstr "A portátirányÃtás sikeres!"
+msgstr "A démon sikeresen elindult."
#: ../src/daemon/main.c:731
#, c-format
@@ -249,19 +235,19 @@ msgid "This is PulseAudio %s"
msgstr "PulseAudio %s"
#: ../src/daemon/main.c:732
-#, fuzzy, c-format
+#, c-format
msgid "Compilation host: %s"
-msgstr "Válassz _gépet ..."
+msgstr "ÃsszeépÃtÅ számÃtógép: %s"
#: ../src/daemon/main.c:733
-#, fuzzy, c-format
+#, c-format
msgid "Compilation CFLAGS: %s"
-msgstr "Regex fordÃtási hiba - %s"
+msgstr "ÃsszeépÃtési CFLAGS jelzÅk: %s"
#: ../src/daemon/main.c:736
-#, fuzzy, c-format
+#, c-format
msgid "Running on host: %s"
-msgstr "Python %s verzió"
+msgstr "Kiszolgáló: %s"
#: ../src/daemon/main.c:739
#, c-format
@@ -274,19 +260,17 @@ msgid "Page size is %lu bytes"
msgstr "minimális szegmensméret = %lu\n"
#: ../src/daemon/main.c:744
-#, fuzzy
msgid "Compiled with Valgrind support: yes"
-msgstr "Pacman-szerű játék többjátékos módban"
+msgstr "ÃsszeépÃtés Valgrind támogatással: Igen"
#: ../src/daemon/main.c:746
-#, fuzzy
msgid "Compiled with Valgrind support: no"
-msgstr "A leÃrások nem érhetÅek el: nincs XML támogatás befordÃtva."
+msgstr "ÃsszeépÃtés Valgrind támogatással: Nem"
#: ../src/daemon/main.c:749
-#, fuzzy, c-format
+#, c-format
msgid "Running in valgrind mode: %s"
-msgstr "Bemutató mód"
+msgstr "Futás Valgrind üzemmódban: %s"
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
@@ -311,9 +295,8 @@ msgid "All asserts enabled."
msgstr "Adatok indexelése minden engedélyezett modulból"
#: ../src/daemon/main.c:766
-#, fuzzy
msgid "Failed to get machine ID"
-msgstr "A PDA azonosÃtó lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a számÃtógép azonosÃtóját"
#: ../src/daemon/main.c:769
#, c-format
@@ -326,24 +309,24 @@ msgid "Session ID is %s."
msgstr "Munkamenet-azonosÃtó: %s."
#: ../src/daemon/main.c:779
-#, fuzzy, c-format
+#, c-format
msgid "Using runtime directory %s."
-msgstr "Nem hozható létre ideiglenes könyvtár a következŠsablon használatával: %s"
+msgstr "A futásidÅben használt mappa: %s."
#: ../src/daemon/main.c:784
-#, fuzzy, c-format
+#, c-format
msgid "Using state directory %s."
-msgstr "HIBA: Nem lehet létrehozni a(z) %s állapotkönyvtárat"
+msgstr "Az állapottároló mappa: %s."
#: ../src/daemon/main.c:787
-#, fuzzy, c-format
+#, c-format
msgid "Using modules directory %s."
-msgstr "Nem hozható létre ideiglenes könyvtár a következŠsablon használatával: %s"
+msgstr "A modulok mappája: %s."
#: ../src/daemon/main.c:789
-#, fuzzy, c-format
+#, c-format
msgid "Running in system mode: %s"
-msgstr "A rendszeróra teszt módban nem kerül beállÃtásra.\n"
+msgstr "Futás rendszer üzemmódban: %s"
#: ../src/daemon/main.c:792
msgid ""
@@ -353,9 +336,8 @@ msgid ""
msgstr ""
#: ../src/daemon/main.c:809
-#, fuzzy
msgid "pa_pid_file_create() failed."
-msgstr "A(z) â%sâ fájl létrehozása meghiúsult: %s"
+msgstr "A âpa_pid_file_create()â függvényhÃvás meghiúsult: %s"
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
@@ -366,35 +348,28 @@ msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with h
msgstr ""
#: ../src/daemon/main.c:844
-#, fuzzy
msgid "pa_core_new() failed."
-msgstr "Nem sikerült megnyitni a(z) %s.new fájlt"
+msgstr "A âpa_core_new()â függvényhÃvás meghiúsult: %s"
#: ../src/daemon/main.c:904
-#, fuzzy
msgid "Failed to initialize daemon."
-msgstr "PAM inicializálása sikertelen\n"
+msgstr "Nem sikerült elÅkészÃteni a démont."
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
#: ../src/daemon/main.c:926
-#, fuzzy
msgid "Daemon startup complete."
-msgstr "Az importálás kész"
+msgstr "A démon elindÃtása sikeres."
#: ../src/daemon/main.c:932
-#, fuzzy
msgid "Daemon shutdown initiated."
-msgstr "egy tartomány elegáns leállÃtása"
+msgstr "A démon leállÃtása kezdeményezve."
#: ../src/daemon/main.c:954
-#, fuzzy
msgid "Daemon terminated."
-msgstr ""
-"\n"
-"A parancs megszakÃtva\n"
+msgstr "A démon leállÃtva."
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -511,9 +486,9 @@ msgid "--log-meta expects boolean argument"
msgstr "â%sâ legalább egy paramétert vár"
#: ../src/daemon/cmdline.c:354
-#, fuzzy, c-format
+#, c-format
msgid "Invalid resample method '%s'."
-msgstr "Ãres rajzolásimód-név â érvénytelen"
+msgstr "Ãrvénytelen újramintavételezési eljárás: â%sâ."
#: ../src/daemon/cmdline.c:361
#, fuzzy
@@ -536,9 +511,9 @@ msgid "Name: %s\n"
msgstr "Név: %s\n"
#: ../src/daemon/dumpmodules.c:63
-#, fuzzy, c-format
+#, c-format
msgid "No module information available\n"
-msgstr "Nem áll rendelkezésre további információ."
+msgstr "Nem áll rendelkezésre modul információ.\n"
#: ../src/daemon/dumpmodules.c:66
#, c-format
@@ -576,78 +551,78 @@ msgid "Path: %s\n"
msgstr "Elérési útvonal: %s\n"
#: ../src/daemon/daemon-conf.c:232
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr "Ãrvénytelen naplózási szint: â%sâ"
+msgstr "[%s:%u] Ãrvénytelen naplózási cél: â%sâ."
#: ../src/daemon/daemon-conf.c:248
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr "Ãrvénytelen naplózási szint: â%sâ"
+msgstr "[%s:%u] Ãrvénytelen naplózási szint: â%sâ."
#: ../src/daemon/daemon-conf.c:264
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "Ãres rajzolásimód-név â érvénytelen"
+msgstr "[%s:%u] Ãrvénytelen újramintavételezési eljárás: â%sâ."
#: ../src/daemon/daemon-conf.c:287
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "Ãrvénytelen művelet"
+msgstr "[%s:%u] Ãrvénytelen rlimit érték: â%sâ."
#: ../src/daemon/daemon-conf.c:294
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
-msgstr "Az --atime-preserve='system' nem támogatott ezen az operációs rendszeren"
+msgstr "[%s:%u] Az rlimit nem támogatott ezen az operációs rendszeren."
#: ../src/daemon/daemon-conf.c:310
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "érvénytelen rövidÃtési forma"
+msgstr "[%s:%u] Ãrvénytelen mintavételi formátum: â%sâ."
#: ../src/daemon/daemon-conf.c:328
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "FIGYELEM: Ãvénytelen mintavételezést határott meg 44100-at használom.\n"
+msgstr "[%s:%u] Ãrvénytelen mintavételi ráta: â%sâ."
#: ../src/daemon/daemon-conf.c:352
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "FIGYELEM: Ãrénytelen mintavételezést határozott meg, 16-ost használom.\n"
+msgstr "[%s:%u] Ãrvénytelen minta csatornák: â%sâ."
#: ../src/daemon/daemon-conf.c:370
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "Ãrvénytelen csatornatÃpus '%s'"
+msgstr "[%s:%u] Ãrvénytelen csatornaleképzés: â%sâ."
#: ../src/daemon/daemon-conf.c:388
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr "a sorok száma érvénytelen"
+msgstr "[%s:%u] Ãrvénytelen a részek száma: â%sâ."
#: ../src/daemon/daemon-conf.c:406
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "a -size tÃpusa (â%câ) érvénytelen"
+msgstr "[%s:%u] Ãrvénytelen a részek mérete: â%sâ."
#: ../src/daemon/daemon-conf.c:424
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "Ãrvénytelen optimalizálási szint: %s"
+msgstr "[%s:%u] Ãrvénytelen a prioritási érték: â%sâ."
#: ../src/daemon/daemon-conf.c:546
-#, fuzzy, c-format
+#, c-format
msgid "Failed to open configuration file: %s"
-msgstr "nem sikerült olvasásra megnyitni a beállÃtási fájlt"
+msgstr "Nem sikerült megnyitni a konfigurációs fájlt: %s"
#: ../src/daemon/daemon-conf.c:562
msgid "The specified default channel map has a different number of channels than the specified default number of channels."
msgstr ""
#: ../src/daemon/daemon-conf.c:638
-#, fuzzy, c-format
+#, c-format
msgid "### Read from configuration file: %s ###\n"
-msgstr "%s: Olvasási hiba a(z) %s fájlban\n"
+msgstr "### Olvasás a következŠkonfigurációs fájlból: %s ###\n"
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
@@ -916,14 +891,12 @@ msgid "Invalid argument"
msgstr "Ãrvénytelen paraméter"
#: ../src/pulse/error.c:47
-#, fuzzy
msgid "Entity exists"
-msgstr "\" már létezik!"
+msgstr "Az egység létezik"
#: ../src/pulse/error.c:48
-#, fuzzy
msgid "No such entity"
-msgstr "nincs ilyen puffer"
+msgstr "Nincs ilyen egység"
#: ../src/pulse/error.c:49
msgid "Connection refused"
@@ -938,34 +911,28 @@ msgid "Timeout"
msgstr "IdÅtúllépés"
#: ../src/pulse/error.c:52
-#, fuzzy
msgid "No authorization key"
-msgstr "Nem érhetŠel kulcs"
+msgstr "Nem érhetÅ el hitelesÃtÅkulcs"
#: ../src/pulse/error.c:53
msgid "Internal error"
msgstr "BelsÅ hiba"
#: ../src/pulse/error.c:54
-#, fuzzy
msgid "Connection terminated"
-msgstr ""
-"\n"
-"A parancs megszakÃtva\n"
+msgstr "A kapcsolat megszakadt."
#: ../src/pulse/error.c:55
-#, fuzzy
msgid "Entity killed"
-msgstr "A(z) %d számú folyamat kilÅve"
+msgstr "Egység forszÃrozottan leállÃtva"
#: ../src/pulse/error.c:56
msgid "Invalid server"
msgstr "Ãrvénytelen kiszolgáló"
#: ../src/pulse/error.c:57
-#, fuzzy
msgid "Module initalization failed"
-msgstr "A(z) \"%s\" modul végrehajtása meghiúsult."
+msgstr "A modul elÅkészÃtése meghiúsult."
#: ../src/pulse/error.c:58
msgid "Bad state"
@@ -976,7 +943,6 @@ msgid "No data"
msgstr "Nincs adat"
#: ../src/pulse/error.c:60
-#, fuzzy
msgid "Incompatible protocol version"
msgstr "Inkompatibilis protokollverzió"
@@ -997,34 +963,29 @@ msgid "No such extension"
msgstr "Nincs ilyen kiterjesztés"
#: ../src/pulse/error.c:65
-#, fuzzy
msgid "Obsolete functionality"
-msgstr "Elavult vagy helyi"
+msgstr "Elavult funkcionalitás"
#: ../src/pulse/error.c:66
-#, fuzzy
msgid "Missing implementation"
msgstr "Nincs megvalósÃtva"
#: ../src/pulse/error.c:67
-#, fuzzy
msgid "Client forked"
-msgstr "BitTorrent kliens"
+msgstr "Kliens elindÃtva"
#: ../src/pulse/error.c:68
-#, fuzzy
msgid "Input/Output error"
msgstr "Kimeneti/bemeneti hiba"
#: ../src/pulse/error.c:69
-#, fuzzy
msgid "Device or resource busy"
msgstr "Az eszköz vagy erÅforrás foglalt"
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
-msgstr ""
+msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:184
#, c-format
@@ -1044,7 +1005,7 @@ msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
-msgstr ""
+msgstr "%u B"
#: ../src/pulse/client-conf-x11.c:55
#: ../src/utils/pax11publish.c:100
@@ -1052,14 +1013,13 @@ msgid "XOpenDisplay() failed"
msgstr "Az XOpenDisplay() függvényhÃvás meghiúsult."
#: ../src/pulse/client-conf-x11.c:93
-#, fuzzy
msgid "Failed to parse cookie data"
-msgstr "sikertelen a szimbólum adatainak a betöltése"
+msgstr "Nem sikerült feldolgozni a süti adatokat."
#: ../src/pulse/client-conf.c:111
-#, fuzzy, c-format
+#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr "nem sikerült olvasásra megnyitni a beállÃtási fájlt"
+msgstr "Nem sikerült megnyitni a(z) â%sâ konfigurációs fájlt: %s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
@@ -1076,19 +1036,18 @@ msgid "waitpid(): %s"
msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
-#, fuzzy, c-format
+#, c-format
msgid "Received message for unknown extension '%s'"
-msgstr "\"_Ismeretlen állapotú\" üzenet olvasása"
+msgstr "Ãzenet érkezett az ismeretlen â%sâ kiterjesztéstÅl"
#: ../src/utils/pacat.c:108
-#, fuzzy, c-format
+#, c-format
msgid "Failed to drain stream: %s"
-msgstr "Az új adatfolyam indÃtása meghiúsult"
+msgstr "Nem sikerült csatlakozni a következŠadatfolyamhoz: %s"
#: ../src/utils/pacat.c:113
-#, fuzzy
msgid "Playback stream drained."
-msgstr "A folyam váratlanul véget ért!"
+msgstr "A lejátszás adatfolyamához csatlakozva."
#: ../src/utils/pacat.c:123
#, fuzzy
@@ -1138,7 +1097,7 @@ msgstr "--Nincsenek sorok a pufferben--"
#: ../src/utils/pacat.c:321
#, fuzzy, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "%s: térkép tábla \"%s\": %lu bájt\n"
+msgstr "A csatornaleképzés nem feleltethetÅ meg a mintavételi leÃrásnak."
#: ../src/utils/pacat.c:325
#, fuzzy, c-format
@@ -1181,9 +1140,8 @@ msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Nem sikerült megnyitni a kimeneti eszközt"
#: ../src/utils/pacat.c:376
-#, fuzzy
msgid "not "
-msgstr "Nem gyÅzÅdtem meg"
+msgstr "nem"
#: ../src/utils/pacat.c:383
#, fuzzy, c-format
@@ -1191,9 +1149,9 @@ msgid "Stream buffer attributes changed.%s"
msgstr "E787: A puffer váratlanul megváltozott"
#: ../src/utils/pacat.c:415
-#, fuzzy, c-format
+#, c-format
msgid "Connection established.%s"
-msgstr "Kapcsolat létrehozva"
+msgstr "Kapcsolat létrehozva. %s"
#: ../src/utils/pacat.c:418
#, c-format
@@ -1201,14 +1159,14 @@ msgid "pa_stream_new() failed: %s"
msgstr "A âpa_stream_new()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:450
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr "A megfigyelŠadatfolyam csatlakoztatása meghiúsult"
+msgstr "A âpa_stream_connect_playback()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:456
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr "A megfigyelŠadatfolyam csatlakoztatása meghiúsult"
+msgstr "A âpa_stream_connect_record()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:470
#: ../src/utils/pactl.c:857
@@ -1217,9 +1175,8 @@ msgid "Connection failure: %s"
msgstr "Kapcsolódási hiba: %s"
#: ../src/utils/pacat.c:503
-#, fuzzy
msgid "Got EOF."
-msgstr "Ãzenet érkezett: #%"
+msgstr "A fájl vége elérve."
#: ../src/utils/pacat.c:540
#, c-format
@@ -1231,14 +1188,14 @@ msgid "Got signal, exiting."
msgstr "Kilépés, szignál hatásáraâ¦"
#: ../src/utils/pacat.c:575
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get latency: %s"
-msgstr "nem sikerült a képességek lekérdezése"
+msgstr "Nem sikerült lekérdezni a késleltetést: %s"
#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "%d csoport elmentve ebben: \"%s\" %.1f másodperc alatt (%.0f csoport/mp)"
+msgstr "IdÅ: %0.3f másodperc, késleltetés: %0.0f ezredmásodperc."
#: ../src/utils/pacat.c:599
#, c-format
@@ -1440,9 +1397,9 @@ msgid "Failure to resume: %s\n"
msgstr "Hiba lépett fel a készenléti állapotból visszatérés közben: %s\n"
#: ../src/utils/pasuspender.c:147
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "A leejtett fájl nem helyi."
+msgstr "FIGYELMEZTETÃS: A hangkiszolgáló nem helyi és nincs is felfüggesztve.\n"
#: ../src/utils/pasuspender.c:159
#, c-format
@@ -1455,11 +1412,9 @@ msgid "Got SIGINT, exiting.\n"
msgstr "Kilépés, SIGINT szignál hatásáraâ¦\n"
#: ../src/utils/pasuspender.c:194
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr ""
-"A(z) %d azonosÃtójú folyamatot nem lehet kilÅni %d jelzéssel.\n"
-"%s"
+msgstr "FIGYELMEZTETÃS: A gyermek folyamat a következÅ szignállal fejezÅdött be: %u\n"
#: ../src/utils/pasuspender.c:212
#, c-format
@@ -1508,7 +1463,7 @@ msgstr ""
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
+msgstr "A futás során összesen lefoglalt blokkok száma: %u, amely összesen %s bájtot jelent.\n"
#: ../src/utils/pactl.c:147
#, c-format
@@ -1516,9 +1471,9 @@ msgid "Sample cache size: %s\n"
msgstr "Minta-gyorsÃtótár mérete: %s\n"
#: ../src/utils/pactl.c:156
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get server information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a kiszolgáló adatait: â%sâ"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1533,11 +1488,20 @@ msgid ""
"Default Source: %s\n"
"Cookie: %08x\n"
msgstr ""
+"Felhasználónév: %s\n"
+"SzámÃtógépnév: %s\n"
+"Kiszolgálónév: %s\n"
+"Kiszolgáló verzió: %s\n"
+"Alapértelmezett mintavételi leÃrás: %s\n"
+"Alapértelmezett csatornaleképzés: %s\n"
+"Alapértelmezett nyelÅ: %s\n"
+"Alapértelmezett forrás: %s\n"
+"Süti: %08x\n"
#: ../src/utils/pactl.c:205
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a nyelÅ adatait: â%sâ"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1560,6 +1524,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"NyelÅ #%u\n"
+"\tÃllapot: %s\n"
+"\tNév: %s\n"
+"\tLeÃrás: %s\n"
+"\tEszközmeghajtó: %s\n"
+"\tMintavételi leÃrás: %s\n"
+"\tCsatornaleképzés: %s\n"
+"\tTulajdonos modul: %u\n"
+"\tNémÃtás: %s\n"
+"\tHangerÅ: %s%s%s\n"
+"\t egyensúly %0.2f\n"
+"\tAlap hangerÅ: %s%s%s\n"
+"\tMonitor forrás: %s\n"
+"\tKésleltetés: %0.0f ezredmásodperc, beállÃtva %0.0f ezredmásodperc\n"
+"\tJelzÅk: %s%s%s%s%s%s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:268
#: ../src/utils/pactl.c:360
@@ -1574,9 +1555,9 @@ msgid "\tActive Port: %s\n"
msgstr "\tAktÃv Port: %s\n"
#: ../src/utils/pactl.c:297
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a forrás adatait: â%sâ"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1599,6 +1580,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"Forrás #%u\n"
+"\tÃllapot: %s\n"
+"\tNév: %s\n"
+"\tLeÃrás: %s\n"
+"\tEszközmeghajtó: %s\n"
+"\tMintavételi leÃrás: %s\n"
+"\tCsatornaleképzés: %s\n"
+"\tTulajdonos modul: %u\n"
+"\tNémÃtás: %s\n"
+"\tHangerÅ: %s%s%s\n"
+"\t egyensúly %0.2f\n"
+"\tAlap hangerÅ: %s%s%s\n"
+"\tNyelÅ monitora: %s\n"
+"\tKésleltetés: %0.0f ezredmásodperc, beállÃtva %0.0f ezredmásodperc\n"
+"\tJelzÅk: %s%s%s%s%s%s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:345
#: ../src/utils/pactl.c:401
@@ -1617,9 +1615,9 @@ msgid "n/a"
msgstr "ismeretlen"
#: ../src/utils/pactl.c:375
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get module information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a modul adatait: â%sâ"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1631,26 +1629,37 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"Modul #%u\n"
+"\tNév: %s\n"
+"\tParaméter: %s\n"
+"\tHasználva: %s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:412
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get client information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a kliens adatait: â%sâ"
#: ../src/utils/pactl.c:430
-#, fuzzy, c-format
+#, c-format
msgid ""
"Client #%u\n"
"\tDriver: %s\n"
"\tOwner Module: %s\n"
"\tProperties:\n"
"\t\t%s\n"
-msgstr "A modul nem képes létrehozni a szükséges szálakat"
+msgstr ""
+"Kliens #%u\n"
+"\tEszközmeghajtó: %s\n"
+"\tTulajdonos modul: %s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:447
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get card information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a kártya adatait: â%sâ"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1662,6 +1671,12 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"Kártya #%u\n"
+"\tNév: %s\n"
+"\tEszközmeghajtó: %s\n"
+"\tTulajdonos modul: %s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:479
#, c-format
@@ -1674,9 +1689,9 @@ msgid "\tActive Profile: %s\n"
msgstr "\tAktÃv profil: %s\n"
#: ../src/utils/pactl.c:496
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "pa_context_get_sink_input_info() meghiúsult"
+msgstr "Nem sikerült lekérdezni a nyelÅ bemeneti adatait: â%sâ"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1698,11 +1713,27 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"NyelÅ bemenet #%u\n"
+"\tEszközmeghajtó: %s\n"
+"\tTulajdonos modul: %s\n"
+"\tKliens: %s\n"
+"\tNyelÅ: %u\n"
+"\tMintavételi leÃrás: %s\n"
+"\tCsatornaleképzés: %s\n"
+"\tNémÃtás: %s\n"
+"\tHangerÅ: %s\n"
+"\t %s\n"
+"\t egyensúly %0.2f\n"
+"\tPuffer késleltetés: %0.0f usec\n"
+"\tNyelŠkésleltetés: %0.0f usec\n"
+"\tÃjramintavételezési eljárás: %s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:554
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source output information: %s"
-msgstr "pa_context_get_source_output_info_list() meghiúsult"
+msgstr "Nem sikerült lekérdezni a forrás kimeneti adatait: â%sâ"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1720,11 +1751,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"Forrás kimenet #%u\n"
+"\tEszközmeghajtó: %s\n"
+"\tTulajdonos modul: %s\n"
+"\tKliens: %s\n"
+"\tForrás: %u\n"
+"\tMintavételi leÃrás: %s\n"
+"\tCsatornaleképzés: %s\n"
+"\tPuffer késleltetés: %0.0f usec\n"
+"\tForrás késleltetés: %0.0f usec\n"
+"\tÃjramintavételezési eljárás: %s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:605
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sample information: %s"
-msgstr "csomópont-információ lekérdezése nem sikerült"
+msgstr "Nem sikerült lekérdezni a mintavétel adatait: â%sâ"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1743,6 +1786,19 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"Minta #%u\n"
+"\tNév: %s\n"
+"\tMintavételi leÃrás: %s\n"
+"\tCsatornaleképzés: %s\n"
+"\tHangerÅ: %s\n"
+"\t %s\n"
+"\t egyensúly %0.2f\n"
+"\tIdÅtartam: %0.1fs\n"
+"\tMéret: %s\n"
+"\tLassú: %s\n"
+"\tFájlnév: %s\n"
+"\tTulajdonságok:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:653
#: ../src/utils/pactl.c:663
@@ -1751,14 +1807,11 @@ msgid "Failure: %s"
msgstr "Hiba: %s"
#: ../src/utils/pactl.c:687
-#, fuzzy, c-format
+#, c-format
msgid "Failed to upload sample: %s"
-msgstr ""
-"A feltöltés a kiszolgálóra meghiúsult,\n"
-"késÅbb próbálja meg újra."
+msgstr "Nem sikerült feltölteni a mintát: %s"
#: ../src/utils/pactl.c:704
-#, fuzzy
msgid "Premature end of file"
msgstr "IdÅ elÅtti fájlvége"
@@ -1807,14 +1860,12 @@ msgid ""
msgstr "A program kapcsolói ütköznek"
#: ../src/utils/pactl.c:979
-#, fuzzy
msgid "Please specify a sample file to load"
-msgstr "A glade fájl betöltése meghiúsult, ellenÅrizze a telepÃtését."
+msgstr "Adja meg a betöltendŠmintafájlt"
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "Nem sikerült megnyitni az átmeneti fájlt"
+msgstr "Nem sikerült megnyitni az hangfájlt."
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
@@ -1854,7 +1905,7 @@ msgstr ""
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
-msgstr ""
+msgstr "Meg kell adnia a kártya nevét vagy azonosÃtóját és a profil nevét"
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
@@ -1862,7 +1913,7 @@ msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a port nevét."
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
-msgstr ""
+msgstr "Meg kell adnia a forrás nevét vagy azonosÃtóját és a port nevét"
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
@@ -1879,11 +1930,11 @@ msgstr "A hangerŠmegadása érvénytelen."
#: ../src/utils/pactl.c:1166
msgid "You have to specify a source name/index and a volume"
-msgstr ""
+msgstr "Meg kell adnia a forrás nevét vagy azonosÃtóját és a hangerejét"
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr ""
+msgstr "Meg kell adnia a nyelÅ bemenet azonosÃtóját és a hangerejét"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
@@ -1895,11 +1946,11 @@ msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a némÃtás log
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr ""
+msgstr "Meg kell adnia a forrás nevét vagy azonosÃtóját és a némÃtás logikai változóját"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr ""
+msgstr "Meg kell adnia a nyelÅ bemenet azonosÃtóját és a némÃtás logikai változóját"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
@@ -1919,11 +1970,17 @@ msgid ""
" -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 megjelenÃtÅ] [-S kiszolgáló] [-O nyelÅ] [-I forrás] [-c fájl] [-d|-e|-i|-r]\n"
+"\n"
+" -d MegjelenÃti az aktuális X11 megjelenÃtÅhöz csatlakoztatott PulseAudio adatokat (alapértelmezés)\n"
+" -e Helyi PulseAudio adatok exportálása az X11 megjelenÃtÅre\n"
+" -i Helyi PulseAudio adatok importálása az X11 megjelenÃtÅrÅl helyi környezeti változókba és süti fájlokba\n"
+" -r EltávolÃtja a PulseAudio adatokat z X11 megjelenÃtÅrÅl\n"
#: ../src/utils/pax11publish.c:94
-#, fuzzy, c-format
+#, c-format
msgid "Failed to parse command line.\n"
-msgstr "Nem lehet feldolgozni a(z) â%sâ parancssort: %s"
+msgstr "Nem sikerült feldolgozni a parancssort.\n"
#: ../src/utils/pax11publish.c:108
#, c-format
@@ -1946,34 +2003,34 @@ msgid "Cookie: %s\n"
msgstr "Süti: %s\n"
#: ../src/utils/pax11publish.c:132
-#, fuzzy, c-format
+#, c-format
msgid "Failed to parse cookie data\n"
-msgstr "sikertelen a szimbólum adatainak a betöltése"
+msgstr "Nem sikerült feldolgozni a süti adatokat.\n"
#: ../src/utils/pax11publish.c:137
-#, fuzzy, c-format
+#, c-format
msgid "Failed to save cookie data\n"
-msgstr "sikertelen a szimbólum adatainak a betöltése"
+msgstr "Nem sikerült elmenteni a süti adatokat.\n"
#: ../src/utils/pax11publish.c:152
-#, fuzzy, c-format
+#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr "nem sikerült olvasásra megnyitni a beállÃtási fájlt"
+msgstr "Nem sikerült betölteni a kliens konfigurációs fájlt.\n"
#: ../src/utils/pax11publish.c:157
-#, fuzzy, c-format
+#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr "Az adatok olvasása meghiúsult az adatfolyamból"
+msgstr "Nem sikerült elolvasni a környezetváltozó konfigurációs adatokat.\n"
#: ../src/utils/pax11publish.c:174
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get FQDN.\n"
-msgstr "nem sikerült a képességek lekérdezése"
+msgstr "Nem sikerült lekérdezni a teljes tartománynevet (FQDN).\n"
#: ../src/utils/pax11publish.c:194
-#, fuzzy, c-format
+#, c-format
msgid "Failed to load cookie data\n"
-msgstr "sikertelen a szimbólum adatainak a betöltése"
+msgstr "Nem sikerült betölteni a süti adatokat.\n"
#: ../src/utils/pax11publish.c:211
#, c-format
@@ -1982,12 +2039,12 @@ msgstr "Még nincs elkészÃtve.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
+msgstr "Nem fut a PulseAudio démon vagy nem fut munkamenet démonként sem."
#: ../src/utils/pacmd.c:74
-#, fuzzy, c-format
+#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-msgstr "svc_unix.c - AF_UNIX gond van illesztÅpont létrehozásával"
+msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
#: ../src/utils/pacmd.c:91
#, c-format
commit 02a69d8b45ce293194d63974a6376646c841992d
Author: kami911 <kami911 at fedoraproject.org>
Date: Sat Oct 17 09:48:40 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index b59bef5..b34c8ff 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -149,9 +149,9 @@ msgid "System wide mode unsupported on this platform."
msgstr "A rendszerszintű üzemmód nem támogatott ezen az operációs rendszeren."
#: ../src/daemon/main.c:297
-#, fuzzy, c-format
+#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr "<b>Sikertelen bejelentkezést</b>"
+msgstr "setrlimit(%s, (%u, %u)) meghiúsult: %s"
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
@@ -255,9 +255,9 @@ msgid "Found %u CPUs."
msgstr "%u CPU található a rendszerben."
#: ../src/daemon/main.c:741
-#, fuzzy, c-format
+#, c-format
msgid "Page size is %lu bytes"
-msgstr "minimális szegmensméret = %lu\n"
+msgstr "Oldalméret: %lu bájt"
#: ../src/daemon/main.c:744
msgid "Compiled with Valgrind support: yes"
@@ -433,57 +433,48 @@ msgid ""
msgstr ""
#: ../src/daemon/cmdline.c:247
-#, fuzzy
msgid "--daemonize expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--daemonize paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:254
-#, fuzzy
msgid "--fail expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--fail paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:264
msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
msgstr ""
#: ../src/daemon/cmdline.c:276
-#, fuzzy
msgid "--high-priority expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--high-priority paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:283
-#, fuzzy
msgid "--realtime expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--realtime paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:290
-#, fuzzy
msgid "--disallow-module-loading expects boolean argument"
-msgstr "a(z) â%sâ elsÅ paraméterként karakterláncot vár"
+msgstr "--disallow-module-loading paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:297
-#, fuzzy
msgid "--disallow-exit expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--disallow-exit paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:304
-#, fuzzy
msgid "--use-pid-file expects boolean argument"
-msgstr "a(z) â%sâ elsÅ paraméterként karakterláncot vár"
+msgstr "--use-pid-file paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr ""
+msgstr "Ãrvénytelen naplózási cél: használja a âsyslogâ, a âstderrâ vagy az âautoâ értéket."
#: ../src/daemon/cmdline.c:328
-#, fuzzy
msgid "--log-time expects boolean argument"
-msgstr "â%sâ elsÅ paraméterként time_t-t vár"
+msgstr "--log-time paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:335
-#, fuzzy
msgid "--log-meta expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--log-meta paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:354
#, c-format
@@ -491,19 +482,16 @@ msgid "Invalid resample method '%s'."
msgstr "Ãrvénytelen újramintavételezési eljárás: â%sâ."
#: ../src/daemon/cmdline.c:361
-#, fuzzy
msgid "--system expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--system paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:368
-#, fuzzy
msgid "--no-cpu-limit expects boolean argument"
-msgstr "a(z) â%sâ elsÅ paraméterként karakterláncot vár"
+msgstr "--no-cpu-limit paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:375
-#, fuzzy
msgid "--disable-shm expects boolean argument"
-msgstr "â%sâ legalább egy paramétert vár"
+msgstr "--disable-shm paraméter logikai értéket vár el"
#: ../src/daemon/dumpmodules.c:60
#, c-format
@@ -617,7 +605,7 @@ msgstr "Nem sikerült megnyitni a konfigurációs fájlt: %s"
#: ../src/daemon/daemon-conf.c:562
msgid "The specified default channel map has a different number of channels than the specified default number of channels."
-msgstr ""
+msgstr "Az alapértelmezetten megadott mintavételi leÃrás csatornáinak száma eltér az alapértelmezetten megadott csatornaszámtól."
#: ../src/daemon/daemon-conf.c:638
#, c-format
@@ -1050,9 +1038,8 @@ msgid "Playback stream drained."
msgstr "A lejátszás adatfolyamához csatlakozva."
#: ../src/utils/pacat.c:123
-#, fuzzy
msgid "Draining connection to server."
-msgstr "Kapcsolat visszaállÃtása a kiszolgálóhoz"
+msgstr "Csatlakozás a kiszolgálóhoz kapcsolathoz."
#: ../src/utils/pacat.c:136
#, c-format
@@ -1087,22 +1074,22 @@ msgstr "A âpa_stream_get_buffer_attr()â függvényhÃvás meghiúsult: %s"
#: ../src/utils/pacat.c:314
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr ""
+msgstr "Pufferméretek: maximális nagyság: %u, hossz: %u, elÅpufferelés: %u, minimum: %u"
#: ../src/utils/pacat.c:317
-#, fuzzy, c-format
+#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "--Nincsenek sorok a pufferben--"
+msgstr "Pufferméretek: maximális nagyság: %u, részek mérete: %u"
#: ../src/utils/pacat.c:321
-#, fuzzy, c-format
+#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "A csatornaleképzés nem feleltethetÅ meg a mintavételi leÃrásnak."
+msgstr "Mintavételi leÃrás: â%sâ és csatornaleképzés: â%sâ használata."
#: ../src/utils/pacat.c:325
-#, fuzzy, c-format
+#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "Kapcsolódva az eszközhöz a következÅn: %s"
+msgstr "Csatlakozva a következÅ eszközhöz: â%sâ (%u, %ssuspended)."
#: ../src/utils/pacat.c:335
#, c-format
@@ -1135,18 +1122,18 @@ msgid "Stream started.%s"
msgstr "%s adatfolyam elindÃtva."
#: ../src/utils/pacat.c:376
-#, fuzzy, c-format
+#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "Nem sikerült megnyitni a kimeneti eszközt"
+msgstr "Az adatfolyam áthelyezve a következÅ eszközre: â%sâ (%u, %ssuspended). %s"
#: ../src/utils/pacat.c:376
msgid "not "
msgstr "nem"
#: ../src/utils/pacat.c:383
-#, fuzzy, c-format
+#, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr "E787: A puffer váratlanul megváltozott"
+msgstr "Az adatfolyam-puffer beállÃtásai megváltoztak: %s"
#: ../src/utils/pacat.c:415
#, c-format
@@ -1244,12 +1231,15 @@ msgid ""
msgstr ""
#: ../src/utils/pacat.c:731
-#, fuzzy, c-format
+#, c-format
msgid ""
"pacat %s\n"
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-msgstr "A program kapcsolói ütköznek"
+msgstr ""
+"pacat %s\n"
+"ÃsszeépÃtve a libpulse %s programkönyvtárral\n"
+"Csatolva a libpulse %s programkönyvtárhoz\n"
#: ../src/utils/pacat.c:764
#: ../src/utils/pactl.c:953
@@ -1315,7 +1305,7 @@ msgstr "Nem sikerült megnyitni a hangfájlt."
#: ../src/utils/pacat.c:959
msgid "Warning: specified sample specification will be overwritten with specification from file."
-msgstr ""
+msgstr "Figyelmeztetés: a megadott mintavételi leÃrás felül lesz Ãrva a fájlból származó mintavételi leÃrással."
#: ../src/utils/pacat.c:962
#: ../src/utils/pactl.c:997
@@ -1324,7 +1314,7 @@ msgstr "Nem sikerült meghatározni a mintavételi leÃrást a fájlból."
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr ""
+msgstr "Figyelmeztetés: Nem sikerült meghatározni a csatornaleképzést a fájlból."
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
@@ -1337,7 +1327,7 @@ msgstr "Hiba történt a csatornaleképzés fájlba Ãrása közben."
#: ../src/utils/pacat.c:1008
#, c-format
msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
+msgstr "A(z) â%sâ adatfolyam megnyitása a következÅ mintavételi leÃrás: â%sâ és csatornaleképzés: â%sâ használatával."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1428,12 +1418,15 @@ msgid ""
msgstr ""
#: ../src/utils/pasuspender.c:248
-#, fuzzy, c-format
+#, c-format
msgid ""
"pasuspender %s\n"
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-msgstr "A program kapcsolói ütköznek"
+msgstr ""
+"pasuspender %s\n"
+"ÃsszeépÃtve a libpulse %s programkönyvtárral\n"
+"Csatolva a libpulse %s programkönyvtárhoz\n"
#: ../src/utils/pasuspender.c:277
#, c-format
@@ -1852,12 +1845,15 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:933
-#, fuzzy, c-format
+#, c-format
msgid ""
"pactl %s\n"
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-msgstr "A program kapcsolói ütköznek"
+msgstr ""
+"pactl %s\n"
+"ÃsszeépÃtve a libpulse %s programkönyvtárral\n"
+"Csatolva a libpulse %s programkönyvtárhoz\n"
#: ../src/utils/pactl.c:979
msgid "Please specify a sample file to load"
@@ -1869,7 +1865,7 @@ msgstr "Nem sikerült megnyitni az hangfájlt."
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
-msgstr "RGB-adat betöltése a TIFF fájlból sikertelen"
+msgstr "Figyelmeztetés: Nem sikerült meghatározni a mintavételi leÃrást a fájlból."
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
@@ -1897,11 +1893,11 @@ msgstr "Meg kell adnia a modul azonosÃtóját."
#: ../src/utils/pactl.c:1090
msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
+msgstr "Nem adhat meg egynél több nyelÅt. Egy logikai értéket kell megadnia."
#: ../src/utils/pactl.c:1103
msgid "You may not specify more than one source. You have to specify a boolean value."
-msgstr ""
+msgstr "Nem adhat meg egynél több forrást. Egy logikai értéket kell megadnia."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2090,6 +2086,9 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
+"Az ALSA modul értesÃtése nyomán új adatokat kellett volna Ãrni az eszközre, de jelenleg semmilyen Ãrandó adat nincsen.\n"
+"Ez egy hiba lehet a(z) â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
+"Az értesÃtés a POLLOUT jelzésen keresztül érkezett â viszont a âsnd_pcm_avail()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, mint a minimum."
#: ../src/modules/alsa/alsa-source.c:506
#: ../src/modules/alsa/alsa-source.c:656
@@ -2099,6 +2098,9 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
+"Az ALSA modul értesÃtése nyomán új adatokat kellett volna olvasni az eszközrÅl, de jelenleg semmilyen olvasandó adat nincsen.\n"
+"Ez egy hiba lehet a(z) â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
+"Az értesÃtés a POLLIN jelzésen keresztül érkezett â viszont a âsnd_pcm_avail()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, mint a minimum."
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
commit f1436b88931e85087a16fcaefb28424512f15743
Author: kami911 <kami911 at fedoraproject.org>
Date: Sat Oct 17 10:53:38 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index b34c8ff..bf69bb4 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -169,7 +169,7 @@ msgstr "A démon a következÅ PID azonosÃtóval fut: %u"
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr "A démon forszÃrozott leállÃtása nem sikerült: %s"
+msgstr "A démon kilövése nem sikerült: %s"
#: ../src/daemon/main.c:571
msgid "This program is not intended to be run as root (unless --system is specified)."
@@ -912,7 +912,7 @@ msgstr "A kapcsolat megszakadt."
#: ../src/pulse/error.c:55
msgid "Entity killed"
-msgstr "Egység forszÃrozottan leállÃtva"
+msgstr "Egység kilÅve"
#: ../src/pulse/error.c:56
msgid "Invalid server"
@@ -2049,7 +2049,7 @@ msgstr "Kapcsolódás: %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr "A PulseAudio démon leállÃtása nem sikerült."
+msgstr "A PulseAudio démon kilövése nem sikerült."
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
commit df85322ec3eaef957a797fbf53bbc17997ae377b
Author: pmkovar <pmkovar at fedoraproject.org>
Date: Sat Oct 17 15:16:40 2009 +0000
Sending translation for Czech
diff --git a/po/cs.po b/po/cs.po
index 3660685..6d6c3a5 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-30 09:44+0000\n"
-"PO-Revision-Date: 2009-09-30 20:33+0200\n"
+"POT-Creation-Date: 2009-10-17 09:51+0000\n"
+"PO-Revision-Date: 2009-10-17 17:08+0200\n"
"Last-Translator: Petr Kovar <pknbe at volny.cz>\n"
"Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -1308,7 +1308,8 @@ msgstr "ZÃskán signál, ukonÄovánÃ."
msgid "Failed to get latency: %s"
msgstr "NezdaÅilo se zÃskat latenci: %s"
-#: ../src/utils/pacat.c:580, c-format
+#: ../src/utils/pacat.c:580
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Äas: %0.3f sekund; latence: %0.0f μs"
@@ -1732,7 +1733,7 @@ msgstr ""
"\tHlasitost: %s%s%s\n"
"\t vyváženà %0.2f\n"
"\tZákladnà hlasitost %s%s%s\n"
-"\tZdroj monitoru: %s\n"
+"\tZdroj sledovánÃ: %s\n"
"\tLatence: %0.0f μs, konfigurováno %0.0f μs\n"
"\tPÅÃznaky: %s%s%s%s%s%s\n"
"\tVlastnosti:\n"
@@ -1786,7 +1787,7 @@ msgstr ""
"\tHlasitost: %s%s%s\n"
"\t vyváženà %0.2f\n"
"\tZákladnà hlasitost %s%s%s\n"
-"\tMonitor zdroje: %s\n"
+"\tSledovánà zdroje: %s\n"
"\tLatence: %0.0f μs, konfigurováno %0.0f μs\n"
"\tPÅÃznaky: %s%s%s%s%s%s\n"
"\tVlastnosti:\n"
@@ -2464,11 +2465,13 @@ msgstr "Analogový výstup (LFE)"
msgid "Analog Mono Output"
msgstr "Analogový výstup mono"
-#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1981
+#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#, c-format
msgid "%s / %s"
msgstr "%s / %s"
commit abdd7b4bcb90ccc6c06d00f5a63ab4dc4bb651c8
Author: perplex <perplex at fedoraproject.org>
Date: Sun Oct 18 12:20:39 2009 +0000
Sending translation for Italian
diff --git a/po/it.po b/po/it.po
index 22e0244..c0c70e4 100644
--- a/po/it.po
+++ b/po/it.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-08-26 21:46+0200\n"
+"POT-Creation-Date: 2009-10-18 05:22+0000\n"
+"PO-Revision-Date: 2009-10-18 11:46+0200\n"
"Last-Translator: Milo Casagrande <milo at ubuntu.com>\n"
"Language-Team: Italian <tp at lists.linux.it>\n"
"MIME-Version: 1.0\n"
@@ -62,11 +62,11 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "Mantiene sempre almeno un sink caricato anche se è nullo"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "Output dummy"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
@@ -88,12 +88,11 @@ msgstr ""
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "Sink NULL temporizzato"
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "Output %s"
+msgstr "Output nullo"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -1139,11 +1138,11 @@ msgstr "Fork del client"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "Errore di input/output"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "Dispositivo o risorsa occupata"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1355,9 +1354,9 @@ msgstr "Recupero della latenza non riuscito: %s"
# dubbio: tempo o durata??
#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "Tempo: %0.3f sec; Latenza: %0.0f microsec. \r"
+msgstr "Tempo: %0.3f sec; Latenza: %0.0f microsec."
#: ../src/utils/pacat.c:599
#, c-format
@@ -1716,9 +1715,9 @@ msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() non riuscita.\n"
#: ../src/utils/pactl.c:135
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get statistics: %s"
-msgstr "Recupero delle statistiche non riuscito: %s\n"
+msgstr "Recupero delle statistiche non riuscito: %s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1738,9 +1737,9 @@ msgid "Sample cache size: %s\n"
msgstr "Dimensione della cache dei campioni: %s\n"
#: ../src/utils/pactl.c:156
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get server information: %s"
-msgstr "Recupero delle informazioni del server non riuscito: %s\n"
+msgstr "Recupero delle informazioni del server non riuscito: %s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1766,9 +1765,9 @@ msgstr ""
"Cookie: %08x\n"
#: ../src/utils/pactl.c:205
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink information: %s"
-msgstr "Recupero delle informazioni del sink non riuscito: %s\n"
+msgstr "Recupero delle informazioni del sink non riuscito: %s"
# nel relativo messaggio per il source
# c'è "monitor of sink", quindi assumo che
@@ -1823,9 +1822,9 @@ msgid "\tActive Port: %s\n"
msgstr "\tPorta attiva: %s\n"
#: ../src/utils/pactl.c:297
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source information: %s"
-msgstr "Recupero delle informazioni della sorgente non riuscito: %s\n"
+msgstr "Recupero delle informazioni della sorgente non riuscito: %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1875,9 +1874,9 @@ msgid "n/a"
msgstr "N/D"
#: ../src/utils/pactl.c:375
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get module information: %s"
-msgstr "Recupero delle informazioni del modulo non riuscito: %s\n"
+msgstr "Recupero delle informazioni del modulo non riuscito: %s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1897,9 +1896,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:412
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get client information: %s"
-msgstr "Recupero delle informazioni del client non riuscito: %s\n"
+msgstr "Recupero delle informazioni del client non riuscito: %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1917,9 +1916,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:447
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get card information: %s"
-msgstr "Recupero delle informazioni della scheda non riuscito: %s\n"
+msgstr "Recupero delle informazioni della scheda non riuscito: %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1953,10 +1952,9 @@ msgstr "\tProfilo attivo: %s\n"
#
# from http://pulseaudio.org/wiki/WritingVolumeControlUIs
#: ../src/utils/pactl.c:496
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink input information: %s"
-msgstr ""
-"Recupero delle informazioni dell'ingresso per il sink non riuscito: %s\n"
+msgstr "Recupero delle informazioni dell'ingresso per il sink non riuscito: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -2000,10 +1998,10 @@ msgstr ""
#
# from http://pulseaudio.org/wiki/WritingVolumeControlUIs
#: ../src/utils/pactl.c:554
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source output information: %s"
msgstr ""
-"Recupero delle informazioni dell'uscita per la sorgente non riuscito: %s\n"
+"Recupero delle informazioni dell'uscita per la sorgente non riuscito: %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -2035,9 +2033,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:605
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sample information: %s"
-msgstr "Recupero delle informazioni del campione non riuscito: %s\n"
+msgstr "Recupero delle informazioni del campione non riuscito: %s"
# campiona lazy??
#: ../src/utils/pactl.c:623
@@ -2072,27 +2070,25 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#, c-format
msgid "Failure: %s"
-msgstr "Fallimento: %s\n"
+msgstr "Fallimento: %s"
#: ../src/utils/pactl.c:687
-#, fuzzy, c-format
+#, c-format
msgid "Failed to upload sample: %s"
-msgstr "Caricamento del campione non riuscito: %s\n"
+msgstr "Caricamento del campione non riuscito: %s"
#: ../src/utils/pactl.c:704
-#, fuzzy
msgid "Premature end of file"
-msgstr "Fine del file prematura\n"
+msgstr "Fine del file prematura"
#: ../src/utils/pactl.c:863
-#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr "Ricevuto SIGINT, in uscita.\n"
+msgstr "Ricevuto SIGINT, uscita."
#: ../src/utils/pactl.c:869
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2130,15 +2126,21 @@ msgstr ""
"%s [OPZIONI] upload-sample NOMEFILE [NOME]\n"
"%s [OPZIONI] play-sample NOME [SINK]\n"
"%s [OPZIONI] remove-sample NOME\n"
-"%s [OPZIONI] move-sink-input ID SINK\n"
-"%s [OPZIONI] move-source-output ID SORGENTE\n"
+"%s [OPZIONI] move-sink-input SINKINPUT SINK\n"
+"%s [OPZIONI] move-source-output SOURCEOUTPUT SORGENTE\n"
"%s [OPZIONI] load-module NOME [ARGOMENTI...]\n"
-"%s [OPZIONI] unload-module ID\n"
-"%s [OPZIONI] suspend-sink [SINK] 1|0\n"
-"%s [OPZIONI] suspend-source [SORGENTE] 1|0\n"
-"%s [OPZIONI] set-card-profile [SCHEDA] [PROFILO] \n"
-"%s [OPZIONI] set-sink-port [SINK] [PORTA] \n"
-"%s [OPZIONI] set-source-port [SORGENTE] [PORTA] \n"
+"%s [OPZIONI] unload-module MODULO\n"
+"%s [OPZIONI] suspend-sink SINK 1|0\n"
+"%s [OPZIONI] suspend-source SORGENTE 1|0\n"
+"%s [OPZIONI] set-card-profile SCHEDA PROFILO\n"
+"%s [OPZIONI] set-sink-port SINK PORTA\n"
+"%s [OPZIONI] set-source-port SORGENTE PORTA\n"
+"%s [OPZIONI] set-sink-volume SINK VOLUME\n"
+"%s [OPZIONI] set-source-volume SORGENTE VOLUME\n"
+"%s [OPZIONI] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [OPZIONI] set-sink-mute SINK 1|0\n"
+"%s [OPZIONI] set-source-mute SORGENTE 1|0\n"
+"%s [OPZIONI] set-sink-input-mute SINKINPUT 1|0\n"
"\n"
" -h, --help Mostra questo aiuto\n"
" --version Mostra la versione\n"
@@ -2158,139 +2160,113 @@ msgstr ""
"Link eseguito con libpulse %s\n"
#: ../src/utils/pactl.c:979
-#, fuzzy
msgid "Please specify a sample file to load"
-msgstr "Specificare un file campione da caricare\n"
+msgstr "Specificare un file campione da caricare"
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "Apertura del file audio non riuscita.\n"
+msgstr "Apertura del file audio non riuscita."
#: ../src/utils/pactl.c:1004
-#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
"Attenzione: determinazione della specifica di campionamento dal file non "
-"riuscita.\n"
+"riuscita."
#: ../src/utils/pactl.c:1014
-#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr "Ã necessario specificare un nome di campione da riprodurre\n"
+msgstr "Ã necessario specificare un nome di campione da riprodurre"
#: ../src/utils/pactl.c:1026
-#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr "Ã necessario specificare un nome di campione da rimuovere\n"
+msgstr "Ã necessario specificare un nome di campione da rimuovere"
#: ../src/utils/pactl.c:1035
-#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr "Ã necessario specificare un indice di ingresso per sink e un sink\n"
+msgstr "Ã necessario specificare un indice di ingresso per sink e un sink"
#: ../src/utils/pactl.c:1045
-#, fuzzy
msgid "You have to specify a source output index and a source"
msgstr ""
-"Ã necessario specificare una indice di uscita per sorgente e una sorgente\n"
+"Ã necessario specificare una indice di uscita per sorgente e una sorgente"
#: ../src/utils/pactl.c:1060
-#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr "Ã necessario specificare un nome di modulo e gli argomenti.\n"
+msgstr "Ã necessario specificare un nome di modulo e gli argomenti."
#: ../src/utils/pactl.c:1080
-#, fuzzy
msgid "You have to specify a module index"
-msgstr "Ã necessario specificare un indice di modulo\n"
+msgstr "Ã necessario specificare un indice di modulo"
#: ../src/utils/pactl.c:1090
-#, fuzzy
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Non è possibile specificare più di un sink. à necessario specificare un "
-"valore booleano.\n"
+"valore booleano."
#: ../src/utils/pactl.c:1103
-#, fuzzy
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
"Non è possibile specificare più di una sorgente. à necessario specificare un "
-"valore booleano.\n"
+"valore booleano."
#: ../src/utils/pactl.c:1115
-#, fuzzy
msgid "You have to specify a card name/index and a profile name"
msgstr ""
-"Ã necessario specificare un nome/indice di scheda e un nome di profilo.\n"
+"Ã necessario specificare un nome/indice di scheda e un nome di profilo."
#: ../src/utils/pactl.c:1126
-#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta\n"
+msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta"
#: ../src/utils/pactl.c:1137
-#, fuzzy
msgid "You have to specify a source name/index and a port name"
-msgstr ""
-"Ã necessario specificare un nome/indice di sorgente e un nome di porta\n"
+msgstr "Ã necessario specificare un nome/indice di sorgente e un nome di porta"
#: ../src/utils/pactl.c:1149
-#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta\n"
+msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
-#, fuzzy
msgid "Invalid volume specification"
-msgstr "Specifica di campionamento non valida"
+msgstr "Specifica di volume non valida"
#: ../src/utils/pactl.c:1166
-#, fuzzy
msgid "You have to specify a source name/index and a volume"
-msgstr ""
-"Ã necessario specificare un nome/indice di sorgente e un nome di porta\n"
+msgstr "Ã necessario specificare un nome/indice di sorgente e un nome di porta"
#: ../src/utils/pactl.c:1183
-#, fuzzy
msgid "You have to specify a sink input index and a volume"
-msgstr "Ã necessario specificare un indice di ingresso per sink e un sink\n"
+msgstr "Ã necessario specificare un indice di ingresso per sink e un sink"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr ""
+msgstr "Indice dell'input del sink non valido"
#: ../src/utils/pactl.c:1204
-#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta\n"
+msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta"
#: ../src/utils/pactl.c:1221
-#, fuzzy
msgid "You have to specify a source name/index and a mute boolean"
-msgstr ""
-"Ã necessario specificare un nome/indice di sorgente e un nome di porta\n"
+msgstr "Ã necessario specificare un nome/indice di sorgente e un nome di porta"
#: ../src/utils/pactl.c:1238
-#, fuzzy
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Ã necessario specificare un indice di ingresso per sink e un sink\n"
+msgstr "Ã necessario specificare un indice di ingresso per sink e un sink"
#: ../src/utils/pactl.c:1243
-#, fuzzy
msgid "Invalid sink input index specification"
-msgstr "Specifica di campionamento non valida"
+msgstr "Specifica dell'indice di input del sink non valida"
#: ../src/utils/pactl.c:1262
-#, fuzzy
msgid "No valid command specified."
-msgstr "Nessun comando valido specificato.\n"
+msgstr "Nessun comando valido specificato."
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2475,133 +2451,122 @@ msgstr "Server sonoro PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Dispositivi di uscita"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "Input %s"
+msgstr "Dispositivi di ingresso"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Audio su @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "Input %s"
+msgstr "Ingresso"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Ingresso docking station"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Microfono docking station"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Line-In"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Microfono"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Microfono esterno"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Audio interno"
+msgstr "Microfono interno"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Controllo automatico del guadagno"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Nessun controllo automatico del guadagno"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Boost"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Nessun boost"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Amplificatore"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Nessun amplificatore"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Mono analogico"
+msgstr "Ingresso analogico"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Mono analogico"
+msgstr "Microfono analogico"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Mono analogico"
+msgstr "Line-in analogico"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Mono analogico"
+msgstr "Radio analogica"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Stereo analogico"
+msgstr "Video analogico"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Output %s"
+msgstr "Uscita analogica"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Mono analogico"
+msgstr "Cuffie analogiche"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Uscita analogica (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Mono analogico"
+msgstr "Uscita mono analogica"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2612,19 +2577,16 @@ msgid "Analog Stereo"
msgstr "Stereo analogico"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Surround analogico 4.1"
+msgstr "Surround analogico 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Surround analogico 4.0"
+msgstr "Surround analogico 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Surround analogico 4.1"
+msgstr "Surround analogico 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2643,19 +2605,16 @@ msgid "Analog Surround 5.1"
msgstr "Surround analogico 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Surround analogico 4.0"
+msgstr "Surround analogico 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Surround analogico 4.1"
+msgstr "Surround analogico 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Surround analogico 4.0"
+msgstr "Surround analogico 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2666,9 +2625,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Stereo digitale (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Surround digitale 4.0 (IEC958/AC3)"
+msgstr "Surround digitale 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2683,235 +2641,13 @@ msgid "Digital Stereo (HDMI)"
msgstr "Stereo digitale (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Mono analogico"
+msgstr "Duplex mono analogico"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Stereo analogico"
+msgstr "Duplex stereo analogico"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Stereo digitale (IEC958)"
-
-#~ msgid "Invalid client name '%s'\n"
-#~ msgstr "Nome del client \"%s\" non valido\n"
-
-#~ msgid "Failed to determine sample specification from file.\n"
-#~ msgstr ""
-#~ "Determinazione della specifica di campionamento dal file non riuscita.\n"
-
-#~ msgid "select(): %s"
-#~ msgstr "select(): %s"
-
-#~ msgid "Cannot connect to system bus: %s"
-#~ msgstr "Impossibile effettuare la connessione al bus di sistema: %s"
-
-#~ msgid "Cannot get caller from PID: %s"
-#~ msgstr "Impossibile ottenere il chiamante dal PID: %s"
-
-#~ msgid "Cannot set UID on caller object."
-#~ msgstr "Impossibile impostare l'UID sull'oggetto chiamante."
-
-#~ msgid "Failed to get CK session."
-#~ msgstr "Recupero della sessione CK non riuscito."
-
-#~ msgid "Cannot set UID on session object."
-#~ msgstr "Impossibile impostare l'UID sull'oggetto sessione."
-
-#~ msgid "Cannot allocate PolKitAction."
-#~ msgstr "Impossibile allocare PolKitAction."
-
-#~ msgid "Cannot set action_id"
-#~ msgstr "Impossibile impostare action_id"
-
-#~ msgid "Cannot allocate PolKitContext."
-#~ msgstr "Impossibile allocare PolKitContext."
-
-#~ msgid "Cannot initialize PolKitContext: %s"
-#~ msgstr "Impossibile inizializzare PolKitContext: %s"
-
-#~ msgid "Could not determine whether caller is authorized: %s"
-#~ msgstr "Impossibile determinare se il chiamante è autorizzato: %s"
-
-#~ msgid "Cannot obtain auth: %s"
-#~ msgstr "Impossibile ottenere l'autorizzazione: %s"
-
-#~ msgid "PolicyKit responded with '%s'"
-#~ msgstr "PolicyKit ha risposto con \"%s\""
-
-#~ msgid ""
-#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
-#~ "daemon"
-#~ msgstr ""
-#~ "Scheduling high-priority (valori negativi di \"nice\") per il demone "
-#~ "PulseAudio"
-
-#~ msgid "Real-time scheduling for the PulseAudio daemon"
-#~ msgstr "Scheduling realt-time per il demone PulseAudio"
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr ""
-#~ "La politica di sistema previene PulseAudio dall'ottenere lo scheduling "
-#~ "high-priority."
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr ""
-#~ "La politica di sistema previene PulseAudio dall'ottenere lo scheduling "
-#~ "real-time."
-
-#~ msgid "read() failed: %s\n"
-#~ msgstr "read() non riuscita: %s\n"
-
-#, fuzzy
-#~ msgid "pa_context_connect() failed: %s\n"
-#~ msgstr "pa_context_connect() non riuscita: %s"
-
-#~ msgid "We're in the group '%s', allowing high-priority scheduling."
-#~ msgstr ""
-#~ "Attualmente nel gruppo \"%s\", che consente scheduling high-priority."
-
-#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr "Attualmente nel gruppo \"%s\", che consente scheduling real-time."
-
-#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr "Privilegi acquire-high-priority assegnati da PolicyKit."
-
-#~ msgid "PolicyKit refuses acquire-high-priority privilege."
-#~ msgstr "Privilegi acquire-high-priority rifiutati da PolicyKit."
-
-#~ msgid "PolicyKit grants us acquire-real-time privilege."
-#~ msgstr "Privilegi acquire-real-time assegnati da PolicyKit."
-
-#~ msgid "PolicyKit refuses acquire-real-time privilege."
-#~ msgstr "Privilegi acquire-real-time rifiutati da PolicyKit."
-
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
-#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
-#~ "limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
-#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-#~ msgstr ""
-#~ "Lo SUID root e lo scheduling real-time o high-priority erano richiesti "
-#~ "nella configurazione, ma mancano i privilegi necessari:\n"
-#~ "non si è nel gruppo «%s», PolicyKit non consente di acquisire i privilegi "
-#~ "richiesti e non è possibile incrementare i limiti RLIMIT_NICE/"
-#~ "RLIMIT_RTPRIO della risorsa.\n"
-#~ "Per abilitare lo scheduling real-time/high-priority, acquisire i "
-#~ "privilegi PolicyKit appropriati, diventare un membro di «%s» oppure "
-#~ "incrementare i limiti RLIMIT_NICE/RLIMIT_RTPRIO della risorsa per questo "
-#~ "utente."
-
-#~ msgid ""
-#~ "High-priority scheduling enabled in configuration but not allowed by "
-#~ "policy."
-#~ msgstr ""
-#~ "Scheduling high-priority abilitato nella configurazione, ma non ammesso "
-#~ "dalla politica."
-
-#~ msgid "Successfully increased RLIMIT_RTPRIO"
-#~ msgstr "Incremento di RLIMIT_RTPRIO riuscito"
-
-#~ msgid "RLIMIT_RTPRIO failed: %s"
-#~ msgstr "RLIMIT_RTPRIO non riuscito: %s"
-
-# abbandono??
-#~ msgid "Giving up CAP_NICE"
-#~ msgstr "Abbandono del CAP_NICE"
-
-#~ msgid ""
-#~ "Real-time scheduling enabled in configuration but not allowed by policy."
-#~ msgstr ""
-#~ "Scheduling real-time abilitato nella configurazione, ma non ammesso dalla "
-#~ "politica."
-
-#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
-#~ msgstr "Limitazione delle capacità a CAP_SYS_NICE riuscita."
-
-#~ msgid "time_new() failed.\n"
-#~ msgstr "time_new() non riuscita.\n"
-
-#~ msgid "Output %s + Input %s"
-#~ msgstr "Output %s + Input %s"
-
-#~ msgid "Stream successfully created\n"
-#~ msgstr "Creazione dello stream riuscita\n"
-
-# fixme!!! errror
-#~ msgid "Stream errror: %s\n"
-#~ msgstr "Errore nello stream: %s\n"
-
-#~ msgid "Connection established.\n"
-#~ msgstr "Connessione stabilita.\n"
-
-#~ msgid ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ " -h, --help Show this help\n"
-#~ " --version Show version\n"
-#~ "\n"
-#~ " -v, --verbose Enable verbose operation\n"
-#~ "\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"
-#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
-#~ msgstr ""
-#~ "%s [OPZIONI] [FILE]\n"
-#~ "\n"
-#~ " -h, --help Mostra questo aiuto\n"
-#~ " --version Mostra la versione\n"
-#~ "\n"
-#~ " -v, --verbose Abilita la modalità prolissa\n"
-#~ "\n"
-#~ " -s, --server=SERVER Il nome del server a cui "
-#~ "connettersi\n"
-#~ " -d, --device=DEVICE Il nome del sink a cui "
-#~ "connettersi\n"
-#~ " -n, --client-name=NOME Come chiamare questo client sul "
-#~ "server\n"
-#~ " --stream-name=NOME Come chiamare questo stream sul "
-#~ "server\n"
-#~ " --volume=VOLUME Specifica il volume iniziale "
-#~ "(lineare) \n"
-#~ " nell'intervallo 0...65536\n"
-#~ " --channel-map=MAPPA_CANALI Imposta la mappa di canali da "
-#~ "usare\n"
-
-#~ msgid ""
-#~ "paplay %s\n"
-#~ "Compiled with libpulse %s\n"
-#~ "Linked with libpulse %s\n"
-#~ msgstr ""
-#~ "paplay %s\n"
-#~ "Compilato con libpulse %s\n"
-#~ "Link eseguito con libpulse %s\n"
-
-#~ msgid "Invalid channel map\n"
-#~ msgstr "Mappa dei canali non valida\n"
-
-#~ msgid "Failed to open file '%s'\n"
-#~ msgstr "Apertura del file \"%s\" non riuscita\n"
-
-#~ msgid "Channel map doesn't match file.\n"
-#~ msgstr "La mappa dei canali non corrisponde al file.\n"
-
-#~ msgid "Using sample spec '%s'\n"
-#~ msgstr "In uso la specifica di campionamento \"%s\"\n"
+msgstr "Duplex stereo digitale (IEC958)"
commit eccff7b11bc09d9e5f4b70bb3652ec92f153c867
Author: kami911 <kami911 at fedoraproject.org>
Date: Thu Oct 22 06:26:23 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index bf69bb4..50557e1 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -26,6 +26,8 @@ msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
+"A âsnd_pcm_avail()â függvény visszatérési értéke váratlanul nagy értékű: %lu bájt (%lu ms).\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
@@ -33,6 +35,8 @@ msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
+"A âsnd_pcm_delay()â függvény visszatérési értéke váratlanul nagy értékű: %li bájt (%s%lu ms).\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
@@ -40,10 +44,12 @@ msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
+"A âsnd_pcm_mmap_begin()â függvény visszatérési értéke váratlanul nagy értékű: %lu bájt (%lu ms).\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "Mindig maradjon meg legalább egy nyelÅt, még ha az csak az üres nyelÅ."
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
@@ -55,7 +61,7 @@ msgstr "Látszólagos LADSPA nyelÅ"
#: ../src/modules/module-ladspa-sink.c:53
msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
-msgstr ""
+msgstr "sink_name=<nyelÅ neve> sink_properties=<nyelÅ tulajdonságai> master=<szűrendÅ nyelÅ neve> format=<sample format> rate=<mintavételezési ráta> channels=<csatornák száma> channel_map=<csatornaleképzés> plugin=<ladspa bÅvÃtmény neve> label=<ladspa bÅvÃtmény cÃmkéje> control=<bemenetszabályzó értékek vesszÅvel elválasztott listája>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -146,7 +152,7 @@ msgstr "A rendszergazdai jogosultságok sikeresen visszaadva."
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr "A rendszerszintű üzemmód nem támogatott ezen az operációs rendszeren."
+msgstr "A rendszer üzemmód nem támogatott ezen az operációs rendszeren."
#: ../src/daemon/main.c:297
#, c-format
@@ -180,26 +186,24 @@ msgid "Root privileges required."
msgstr "Rendszergazdai jogosultságok szükségesek."
#: ../src/daemon/main.c:578
-#, fuzzy
msgid "--start not supported for system instances."
-msgstr "A cÃmcsalád a gépnévhez nem támogatott"
+msgstr "--start nem támogatott rendszer üzemmód használata esetén."
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr ""
+msgstr "Futtatás rendszer üzemmódban, de a --disallow-exit paraméter nincs beállÃtva."
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
+msgstr "Futtatás rendszer üzemmódban, de a --disallow-module-loading paraméter nincs beállÃtva."
#: ../src/daemon/main.c:589
-#, fuzzy
msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "A rendszeróra teszt módban nem kerül beállÃtásra.\n"
+msgstr "Futtatás rendszer üzemmódban, az SHM üzemmód forszÃrozott letiltása."
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr ""
+msgstr "Futtatás rendszer üzemmódban, kilépés üresjárati idÅtúllépés esetén beállÃtás forszÃrozott letiltása."
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
@@ -281,18 +285,16 @@ msgid "Optimized build: no"
msgstr "Optimalizált összeépÃtés: Nem"
#: ../src/daemon/main.c:758
-#, fuzzy
msgid "NDEBUG defined, all asserts disabled."
-msgstr "Már minden elsÅdleges partÃció megadásra került!\n"
+msgstr "NDEBUG megadva, minden lehetÅség letiltva."
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
+msgstr "FASTPATH megadva, Ãgy csak a gyors útvonalképzés lehetÅségei lesznek letiltva."
#: ../src/daemon/main.c:762
-#, fuzzy
msgid "All asserts enabled."
-msgstr "Adatok indexelése minden engedélyezett modulból"
+msgstr "Minden lehetÅség engedélyezve."
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
@@ -334,6 +336,9 @@ msgid ""
"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
+"A PulseAudio rendszer üzemmódban fut. Ãltalánosságban ezen üzemmód használata nem ajánlott.\n"
+"Ha mindenképpen ilyen üzemmódban kÃvánja futtatni a PulseAudio rendszert, ne lepÅdjön meg, ha egyes funkciók esetleg nem az elvárások szerint működnek.\n"
+"További tájékoztatás: http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode amelybÅl megtudhatja miért nem tanácsos a rendszer üzemmód használata."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -341,11 +346,11 @@ msgstr "A âpa_pid_file_create()â függvényhÃvás meghiúsult: %s"
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr ""
+msgstr "A nagypontosságú idÅzÃtÅk elérhetÅek."
#: ../src/daemon/main.c:821
msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr ""
+msgstr "A nagypontosságú idÅzÃtÅk nem érhetÅek el. Napjaink Linux rendszereiben érdemes engedélyezni a nagypontosságú idÅzÃtÅket."
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
@@ -357,7 +362,7 @@ msgstr "Nem sikerült elÅkészÃteni a démont."
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr ""
+msgstr "A démont noha elindult, de nem töltött be modulokat, Ãgy a hangrendszer nem üzemképes."
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
@@ -442,7 +447,7 @@ msgstr "--fail paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:264
msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr ""
+msgstr "--log-level paraméter a naplózás szintjének értékét várja el (Ez lehet a 0..4 számtartomány, vagy a következÅk egyike: debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -1011,7 +1016,7 @@ msgstr "Nem sikerült megnyitni a(z) â%sâ konfigurációs fájlt: %s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
-msgstr ""
+msgstr "Nincs betölthetÅ süti. KÃsérlet a kapcsolat felvételére sütik használata nélkül."
#: ../src/pulse/context.c:693
#, c-format
@@ -1229,6 +1234,42 @@ msgid ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
+"%s [KAPCSOLÃ]\n"
+"\n"
+" -h, --help Ezen súgó megjelenÃtése\n"
+" --version Az alkalmazás verziószámának megjelenÃtése\n"
+"\n"
+" -r, --record Kapcsolat létrehozása felvételhez\n"
+" -p, --playback Kapcsolat létrehozása lejátszáshoz\n"
+"\n"
+" -v, --verbose Történések részletezése\n"
+"\n"
+" -s, --server=KISZOLGÃLà Kapcsolódás a megadott KISZOLGÃLà kiszolgálóhoz\n"
+" -d, --device=ESZKÃZ Kapcsolódás az ESZKÃZ nevű nyelÅhöz vagy forráshoz\n"
+" -n, --client-name=NÃV A kliens neve ezen a szerveren\n"
+" --stream-name=NÃV Adatfolyam neve a kiszolgálón\n"
+" --volume=HANGERŠKezdeti (lineáris) hangerŠmegadása a következŠtartományban: 0...65536\n"
+" --rate=MINTAVÃTEL Mintavételezés érzéke Hz-ben (alapértelmezés: 44100)\n"
+" --format=MINTAFORMÃTUM A mintavétel tÃpusa a következÅkbÅl: s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be, s24le, s24be,\n"
+" s24-32le, s24-32be (alapértelmezés: s16ne)\n"
+" --channels=CSATORNÃK Csatornák száma: 1 - mono, 2 - sztereó\n"
+" (defaults to 2)\n"
+" --channel-map=CSATORNALEKÃPZÃS Az alapértelmezés helyett használandó csatornaleképzés\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"
+" 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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
+" --raw Nyers PCM adatok felvétele vagy lejátszása.\n"
+" --file-format=FORMÃTUM FORMÃTUM alakú PCM adatok felvétele vagy lejátszása.\n"
+" --list-file-formats ElérhetŠfájlformátumok listája.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1416,6 +1457,11 @@ msgid ""
" -s, --server=SERVER The name of the server to connect to\n"
"\n"
msgstr ""
+"%s [KAPCSOLÃ] ... \n"
+"\n"
+" -h, --help MegjelenÃti ezt a súgót\n"
+" --version Az alkalmazás verziószámának megjelenÃtése\n"
+"\n"
#: ../src/utils/pasuspender.c:248
#, c-format
@@ -1451,7 +1497,7 @@ msgstr "Nem sikerült a statisztika lekérdezése: %s"
#: ../src/utils/pactl.c:141
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
-msgstr ""
+msgstr "Jelenleg lefoglalt blokkok száma: %u, amely összesen %s bájtot jelent.\n"
#: ../src/utils/pactl.c:144
#, c-format
@@ -1843,6 +1889,33 @@ msgid ""
" -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"
+"%s [options] exit\n"
+"%s [options] upload-sample FÃJLNÃV [NÃV]\n"
+"%s [options] play-sample NÃV [NYELÅ]\n"
+"%s [options] remove-sample NÃV\n"
+"%s [options] move-sink-input NYELÅBEMENET NYELÅ\n"
+"%s [options] move-source-output FORRÃSKIMENET FORRÃS\n"
+"%s [options] load-module NÃV [PARAMÃTEREK ...]\n"
+"%s [options] unload-module MODUL\n"
+"%s [options] suspend-sink NYELÅ 1|0\n"
+"%s [options] suspend-source FORRÃS 1|0\n"
+"%s [options] set-card-profile KÃRTYA PROFIL\n"
+"%s [options] set-sink-port NYELÅ PORT\n"
+"%s [options] set-source-port FORRÃS PORT\n"
+"%s [options] set-sink-volume NYELÅ HANGERÅ\n"
+"%s [options] set-source-volume FORRÃS HANGERÅ\n"
+"%s [options] set-sink-input-volume NYELÅBEMENET HANGERÅ\n"
+"%s [options] set-sink-mute NYELÅ 1|0\n"
+"%s [options] set-source-mute FORRÃS 1|0\n"
+"%s [options] set-sink-input-mute NYELÅBEMENET 1|0\n"
+"\n"
+" -h, --help MegjelenÃti ezt a súgót\n"
+" --version Az alkalmazás verziószámának megjelenÃtése\n"
+"\n"
+" -s, --server=KISZOLGÃLà Kapcsolódás a megadott KISZOLGÃLà kiszolgálóhoz\n"
+" -n, --client-name=NÃV A kliens neve ezen a szerveren\n"
#: ../src/utils/pactl.c:933
#, c-format
@@ -2074,9 +2147,8 @@ msgstr "Ãrás: %s"
#: ../src/pulsecore/lock-autospawn.c:136
#: ../src/pulsecore/lock-autospawn.c:219
-#, fuzzy
msgid "Cannot access autospawn lock."
-msgstr "A modul nem képes megfelelÅen zárolni az adatokat"
+msgstr "Nem érhetÅ zárolás az automatikus indÃtáshoz."
#: ../src/modules/alsa/alsa-sink.c:530
#: ../src/modules/alsa/alsa-sink.c:689
@@ -2087,7 +2159,7 @@ msgid ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
"Az ALSA modul értesÃtése nyomán új adatokat kellett volna Ãrni az eszközre, de jelenleg semmilyen Ãrandó adat nincsen.\n"
-"Ez egy hiba lehet a(z) â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
"Az értesÃtés a POLLOUT jelzésen keresztül érkezett â viszont a âsnd_pcm_avail()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, mint a minimum."
#: ../src/modules/alsa/alsa-source.c:506
@@ -2099,7 +2171,7 @@ msgid ""
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
"Az ALSA modul értesÃtése nyomán új adatokat kellett volna olvasni az eszközrÅl, de jelenleg semmilyen olvasandó adat nincsen.\n"
-"Ez egy hiba lehet a(z) â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
"Az értesÃtés a POLLIN jelzésen keresztül érkezett â viszont a âsnd_pcm_avail()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, mint a minimum."
#: ../src/modules/alsa/module-alsa-card.c:152
commit f771b8aa5b0543b5c9c0c2fdf4316a8f8b901422
Author: kami911 <kami911 at fedoraproject.org>
Date: Thu Oct 22 10:23:52 2009 +0000
Sending translation for Hungarian
diff --git a/po/hu.po b/po/hu.po
index 50557e1..a6d059e 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -286,15 +286,15 @@ msgstr "Optimalizált összeépÃtés: Nem"
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
-msgstr "NDEBUG megadva, minden lehetÅség letiltva."
+msgstr "NDEBUG megadva, minden érvényesÃtés letiltva."
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr "FASTPATH megadva, Ãgy csak a gyors útvonalképzés lehetÅségei lesznek letiltva."
+msgstr "FASTPATH megadva, Ãgy csak a gyors útvonal-érvényesÃtés lesz letiltva."
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
-msgstr "Minden lehetÅség engedélyezve."
+msgstr "Minden érvényesÃtés engedélyezve."
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
commit ba19d9ba9d3a8a08ee2a6eb75c946779d5a89033
Author: igor <igor at fedoraproject.org>
Date: Thu Oct 22 20:19:26 2009 +0000
Sending translation for Brazilian Portuguese
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 6f44ca5..50dc91c 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-08-24 19:26-0300\n"
+"POT-Creation-Date: 2009-10-22 16:22+0000\n"
+"PO-Revision-Date: 2009-10-22 18:19-0300\n"
"Last-Translator: Igor Pires Soares <igor at projetofedora.org>\n"
"Language-Team: Brazilian-Portuguese <fedora-trans-pt_br at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -19,7 +19,8 @@ msgstr ""
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: Brazil\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:858
+#: ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
msgstr "%s %s"
@@ -27,75 +28,53 @@ msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
-"O snd_pcm_avail() retornou um valor que é excepcionalmente grande: %lu bytes "
-"(%lu ms).\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
-"relate esse problema aos desenvolvedores do ALSA."
+"O snd_pcm_avail() retornou um valor que é excepcionalmente grande: %lu bytes (%lu ms).\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema aos desenvolvedores do ALSA."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
-"lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
-"O snd_pcm_delay() retornou um valor que é excepcionalmente grande: %li bytes "
-"(%s%lu ms).\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
-"relate esse problema aos desenvolvedores do ALSA."
+"O snd_pcm_delay() retornou um valor que é excepcionalmente grande: %li bytes (%s%lu ms).\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema aos desenvolvedores do ALSA."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
-"O snd_pcm_mmap_begin() retornou um valor que é excepcionalmente grande: %lu "
-"bytes (%lu ms).\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
-"relate esse problema aos desenvolvedores do ALSA."
+"O snd_pcm_mmap_begin() retornou um valor que é excepcionalmente grande: %lu bytes (%lu ms).\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema aos desenvolvedores do ALSA."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "Sempre manter pelo menos um destino carregado mesmo se for nulo"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "SaÃda fictÃcia"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
msgstr "Destino Virtual LADSPA"
#: ../src/modules/module-ladspa-sink.c:53
-msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
-msgstr ""
-"sink_name=<nome do destino> sink_properties=<propriedades do destino> "
-"master=<nome do destino a ser filtrado> format=<formato de amostragem> "
-"rate=<taxa da amostragem> channels=<número de canais> channel_map=<mapa dos "
-"canais> plugin=<nome do plugin ladspa> label=<rótulo do plugin ladspa> "
-"control=<lista separada por vÃrgulas dos valores de controle da entrada>"
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgstr "sink_name=<nome do destino> sink_properties=<propriedades do destino> master=<nome do destino a ser filtrado> format=<formato de amostragem> rate=<taxa da amostragem> channels=<número de canais> channel_map=<mapa dos canais> plugin=<nome do plugin ladspa> label=<rótulo do plugin ladspa> control=<lista separada por vÃrgulas dos valores de controle da entrada>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "Destino nulo temporizado"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
-msgstr ""
+msgstr "SaÃda nula"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -151,7 +130,8 @@ msgstr "O GID do usuário'%s' e do grupo '%s' não combinam."
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "O diretório pessoal do usuário \"%s\" não é \"%s\", ignorando."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:208
+#: ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Falha ao criar \"%s\": %s"
@@ -203,12 +183,8 @@ msgid "Failed to kill daemon: %s"
msgstr "Falha em encerrar o daemon: %s"
#: ../src/daemon/main.c:571
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
-msgstr ""
-"Este programa não é para ser executado como root (a não ser que --system "
-"seja especificado)."
+msgid "This program is not intended to be run as root (unless --system is specified)."
+msgstr "Este programa não é para ser executado como root (a não ser que --system seja especificado)."
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -224,8 +200,7 @@ msgstr "Executando em no modo system, mas --disallow-exit não foi configurado!"
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
-"Executando no modo system, mas --disallow-module-loading não foi configurado!"
+msgstr "Executando no modo system, mas --disallow-module-loading não foi configurado!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
@@ -233,8 +208,7 @@ msgstr "Executando no modo system, desabilitando forçadamente o modo SHM!"
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr ""
-"Executando no modo system, desabilitando forçadamente o exit idle time!"
+msgstr "Executando no modo system, desabilitando forçadamente o exit idle time!"
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
@@ -250,7 +224,8 @@ msgstr "O pipe falhou: %s"
msgid "fork() failed: %s"
msgstr "O fork() falhou: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:646
+#: ../src/utils/pacat.c:508
#, c-format
msgid "read() failed: %s"
msgstr "A operação read() falhou: %s"
@@ -320,9 +295,7 @@ msgstr "NDEBUG definido, todas as declarações desabilitadas."
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
-"FASTPATH definido, somente as declarações do \"fast path\" foram "
-"desabilitadas."
+msgstr "FASTPATH definido, somente as declarações do \"fast path\" foram desabilitadas."
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
@@ -364,19 +337,13 @@ msgstr "Executando em modo do sistema: %s"
#: ../src/daemon/main.c:792
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
-"OK, então você está executando o PA no modo de sistema. Por favor, note que "
-"é mais provável que você não deveria estar fazendo isso.\n"
-"Todavia, se você o fizer, então a culpa será sua se as coisas não "
-"funcionarem como esperado.\n"
-"Por favor, leia o http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode para "
-"obter um explicação sobre porque o modo de sistema é uma má idéia."
+"OK, então você está executando o PA no modo de sistema. Por favor, note que é mais provável que você não deveria estar fazendo isso.\n"
+"Todavia, se você o fizer, então a culpa será sua se as coisas não funcionarem como esperado.\n"
+"Por favor, leia o http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode para obter um explicação sobre porque o modo de sistema é uma má idéia."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -387,12 +354,8 @@ msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timers de alta resolução frequinhos disponÃveis! Bon appetit!"
#: ../src/daemon/main.c:821
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
-msgstr ""
-"Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de "
-"alta resolução habilitados!"
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+msgstr "Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de alta resolução habilitados!"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
@@ -404,8 +367,7 @@ msgstr "Falha em iniciar o daemon."
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr ""
-"O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
+msgstr "O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
@@ -430,48 +392,37 @@ 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"
@@ -482,12 +433,10 @@ 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"
@@ -498,79 +447,56 @@ msgstr ""
" -h, --help Mostra esta ajuda\n"
" --version Mostra a versão\n"
" --dump-conf Descarrega a configuração padrão\n"
-" --dump-modules Descarrega a lista de módulos "
-"disponÃveis\n"
-" --dump-resample-methods Descarrega os métodos de "
-"reamostragem\n"
-" --cleanup-shm Limpa os segmentos de memória "
-"compartilhados\n"
-" --start Inicia o daemon se ele não estiver "
-"em execução\n"
+" --dump-modules Descarrega a lista de módulos disponÃveis\n"
+" --dump-resample-methods Descarrega os métodos de reamostragem\n"
+" --cleanup-shm Limpa os segmentos de memória compartilhados\n"
+" --start Inicia o daemon se ele não estiver em execução\n"
" -k --kill Encerra um daemon em execução\n"
-" --check Verifica se há um daemon em execução "
-"(somente retorna o código de saÃda)\n"
+" --check Verifica se há um daemon em execução (somente retorna o código de saÃda)\n"
"\n"
"OPÃÃES:\n"
-" --system[=BOOL] Executa como uma instância do "
-"sistema em escala ampla\n"
+" --system[=BOOL] Executa como uma instância do sistema em escala ampla\n"
" -D, --daemonize[=BOOL] Torna-se um daemom após o inÃcio\n"
" --fail[=BOOL] Sai quando a partida falha\n"
" --high-priority[=BOOL] Tenta definir um nÃvel alto de nice\n"
" (disponÃvel apenas, quando SUID ou\n"
" com RLIMIT_NICE) elevado\n"
-" --realtime[=BOOL] Tenta habilitar o escalonamento em "
-"tempo real\n"
-" (disponÃvel apenas como root, quando "
-"SUID ou\n"
+" --realtime[=BOOL] Tenta habilitar o escalonamento em tempo real\n"
+" (disponÃvel apenas como root, quando SUID ou\n"
" com RLIMIT_RTPRIO) elevado\n"
-" --disallow-module-loading[=BOOL] Não permite carga/descarga de módulo "
-"requerido pelo usuário\n"
+" --disallow-module-loading[=BOOL] Não permite carga/descarga de módulo requerido pelo usuário\n"
" depois da partida\n"
-" --disallow-exit[=BOOL] Não permite saÃda requisitada pelo "
-"usuário\n"
-" --exit-idle-time=SECS Termina um daemon quando ocioso e "
-"este\n"
+" --disallow-exit[=BOOL] Não permite saÃda requisitada pelo usuário\n"
+" --exit-idle-time=SECS Termina um daemon quando ocioso e este\n"
" tempo foi decorrido\n"
-" --module-idle-time=SECS Descarrega os módulos "
-"autocarregáveis quando ociosos e\n"
+" --module-idle-time=SECS Descarrega os módulos autocarregáveis quando ociosos e\n"
" este tempo foi decorrido\n"
-" --scache-idle-time=SECS Descarrega amostras quando ociosas "
-"e\n"
+" --scache-idle-time=SECS Descarrega amostras quando ociosas e\n"
" este tempo foi decorrido\n"
-" --log-level[=LEVEL] Aumenta ou define o grau de "
-"detalhamento\n"
+" --log-level[=LEVEL] Aumenta ou define o grau de detalhamento\n"
" -v Aumenta o nÃvel de detalhamento\n"
" --log-target={auto,syslog,stderr} Especifica o destino do log\n"
-" --log-meta[=BOOL] Inclui a localização do código na "
-"mensagem de log\n"
-" --log-time[=BOOL] Inclui carimbos de hora nas "
-"mensagens de log\n"
-" --log-backtrace=FRAMES Inclui um backtrace na mensagem de "
-"log\n"
-" -p, --dl-search-path=PATH Define o caminho de pesquisa para "
-"objetos (plugins)\n"
+" --log-meta[=BOOL] Inclui a localização do código na mensagem de log\n"
+" --log-time[=BOOL] Inclui carimbos de hora nas mensagens de log\n"
+" --log-backtrace=FRAMES Inclui um backtrace na mensagem de log\n"
+" -p, --dl-search-path=PATH Define o caminho de pesquisa para objetos (plugins)\n"
" dinamicamente compartilhados\n"
-" --resample-method=METHOD Usa o método de reamostragem "
-"especificado\n"
+" --resample-method=METHOD Usa o método de reamostragem especificado\n"
" (Veja --dump-resample-methods para\n"
" valores possÃveis)\n"
" --use-pid-file[=BOOL] Cria um arquivo PID\n"
-" --no-cpu-limit[=BOOL] Não instala um limitador de carga de "
-"CPU em\n"
+" --no-cpu-limit[=BOOL] Não instala um limitador de carga de CPU em\n"
" plataformas que o suportem.\n"
-" --disable-shm[=BOOL] Desabilita o suporte à memória "
-"compartilhada.\n"
+" --disable-shm[=BOOL] Desabilita o suporte à memória compartilhada.\n"
"\n"
"SCRIPT DE INÃCIO:\n"
" -L, --load=\"ARGUMENTOS DO MÃDULO\" Carrega um plugin especificado com\n"
" o argumento especificado\n"
" -F, --file=NOME_DO_ARQUIVO Executa o script especificado\n"
-" -C Abre uma linha de comando no TTY em "
-"execução\n"
+" -C Abre uma linha de comando no TTY em execução\n"
" depois da partida\n"
"\n"
-" -n Não carrega o arquivo de script "
-"padrão\n"
+" -n Não carrega o arquivo de script padrão\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
@@ -581,12 +507,8 @@ msgid "--fail expects boolean argument"
msgstr "--fail espera argumento booleano"
#: ../src/daemon/cmdline.c:264
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of debug, info, notice, warn, error)."
-msgstr ""
-"--log-level espera um argumento em nÃvel de log (seja numérico na faixa de "
-"0..4 seja algum entre 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 espera um argumento em nÃvel de log (seja numérico na faixa de 0..4 seja algum entre debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -748,12 +670,8 @@ msgid "Failed to open configuration file: %s"
msgstr "Falha em abrir o arquivo de configuração: %s"
#: ../src/daemon/daemon-conf.c:562
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
-msgstr ""
-"O mapa padrão dos canais especificado tem um número diferente de canais do "
-"que o número de canais padrão especificado."
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+msgstr "O mapa padrão dos canais especificado tem um número diferente de canais do que o número de canais padrão especificado."
#: ../src/daemon/daemon-conf.c:638
#, c-format
@@ -772,7 +690,8 @@ msgstr "Sistema de som PulseAudio"
msgid "Start the PulseAudio Sound System"
msgstr "Iniciar o sistema de som PulseAudio"
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105
+#: ../src/pulse/channelmap.c:757
msgid "Mono"
msgstr "Mono"
@@ -976,9 +895,12 @@ msgstr "Posterior Superior Esquerdo"
msgid "Top Rear Right"
msgstr "Posterior Superior Direito"
-#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484
+#: ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295
+#: ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341
+#: ../src/pulse/volume.c:371
msgid "(invalid)"
msgstr "(Inválido)"
@@ -1108,11 +1030,11 @@ msgstr "Cliente bifurcado"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "Erro de entrada/saÃda"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "Dispositivo ou recurso ocupado"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1139,7 +1061,8 @@ msgstr "%0.1f KiB"
msgid "%u B"
msgstr "%u B"
-#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55
+#: ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
msgstr "XOpenDisplay() falhou"
@@ -1199,7 +1122,8 @@ msgstr "pa_stream_write() falhou: %s"
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() falhou: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:237
+#: ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() falhou: %s"
@@ -1297,7 +1221,8 @@ msgstr "pa_stream_connect_playback() falhou: %s"
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() falhou: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:470
+#: ../src/utils/pactl.c:857
#, c-format
msgid "Connection failure: %s"
msgstr "Falha na conexão: %s"
@@ -1343,48 +1268,29 @@ 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, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the "
-"specified value.\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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
" --raw Record/play raw PCM data.\n"
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
@@ -1397,56 +1303,34 @@ msgstr ""
" -r, --record Cria uma conexão para gravação\n"
" -p, --playback Cria uma conexão para reprodução\n"
"\n"
-" -v, --verbose Habilita operações no modo "
-"detalhado\n"
+" -v, --verbose Habilita operações no modo detalhado\n"
"\n"
" -s, --server=SERVIDOR Nome do servidor a conectar-se\n"
-" -d, --device=DISPOSITIVO O nome do destino/fonte a "
-"conectar-se\n"
-" -n, --client-name=NOME Como chamar este cliente no "
-"servidor\n"
+" -d, --device=DISPOSITIVO O nome do destino/fonte a conectar-se\n"
+" -n, --client-name=NOME Como chamar este cliente no servidor\n"
" --stream-name=NOME Como chamar este fluxo no servidor\n"
-" --volume=VOLUME Especifica a faixa (linear) inicial "
-"de volume no intervalo 0...65536\n"
-" --rate=TAXA_DE_AMOSTRAGEM Taxa de amostragem em Hz (o "
-"padrão é 44100)\n"
-" --format=FORMATO_DE_AMOSTRAGEM Tipo de amostragem, um de s16le, "
-"s16be, u8, float32le,\n"
-" float32be, ulaw, alaw, s32le, s32be, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (o padrão é "
-"s16ne)\n"
-" --channels=CANAIS O número de canais, 1 para mono, 2 "
-"para estéreo\n"
+" --volume=VOLUME Especifica a faixa (linear) inicial de volume no intervalo 0...65536\n"
+" --rate=TAXA_DE_AMOSTRAGEM Taxa de amostragem em Hz (o padrão é 44100)\n"
+" --format=FORMATO_DE_AMOSTRAGEM Tipo de amostragem, um de s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be, s24le, s24be,\n"
+" s24-32le, s24-32be (o padrão é s16ne)\n"
+" --channels=CANAIS O número de canais, 1 para mono, 2 para estéreo\n"
" (o padrão é 2)\n"
-" --channel-map=MAPA_DE_CANAIS Mapeamento de canais a ser usado "
-"no lugar do padrão\n"
-" --fix-format Obtém o formato da amostragem do "
-"destino onde o fluxo\n"
+" --channel-map=MAPA_DE_CANAIS Mapeamento de canais a ser usado no lugar do padrão\n"
+" --fix-format Obtém o formato da amostragem do destino onde o fluxo\n"
" está sendo conectado.\n"
-" --fix-rate Obtém a taxa de amostragem do "
-"destino onde o fluxo está\n"
+" --fix-rate Obtém a taxa de amostragem do destino onde o fluxo está\n"
" sendo conectado.\n"
-" --fix-channels Obtém o número de canais e o mapa de "
-"canais\n"
-" do destino onde o fluxo está sendo "
-"conectado.\n"
-" --no-remix Não realizar upmix nem downmix dos "
-"canais.\n"
-" --no-remap Mapear os canais por Ãndice em vez "
-"de nome.\n"
-" --latency=BYTES Requisitar a latência especificada "
-"em bytes.\n"
-" --process-time=BYTES Requisitar o tempo de processo "
-"especificado por requisições em bytes.\n"
-" --property=PROPRIEDADE=VALOR Define a propriedade especificada "
-"para o valor especificado.\n"
-" --raw Grava/reproduz dados PCM não "
-"tratados.\n"
-" --file-format=FORMATO_DO_ARQ. Grava/reproduz dados PCM "
-"formatados.\n"
-" --list-file-formats Lista os formatos de arquivo "
-"disponÃveis.\n"
+" --fix-channels Obtém o número de canais e o mapa de canais\n"
+" do destino onde o fluxo está sendo conectado.\n"
+" --no-remix Não realizar upmix nem downmix dos canais.\n"
+" --no-remap Mapear os canais por Ãndice em vez de nome.\n"
+" --latency=BYTES Requisitar a latência especificada em bytes.\n"
+" --process-time=BYTES Requisitar o tempo de processo especificado por requisições em bytes.\n"
+" --property=PROPRIEDADE=VALOR Define a propriedade especificada para o valor especificado.\n"
+" --raw Grava/reproduz dados PCM não tratados.\n"
+" --file-format=FORMATO_DO_ARQ. Grava/reproduz dados PCM formatados.\n"
+" --list-file-formats Lista os formatos de arquivo disponÃveis.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1459,7 +1343,8 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:764
+#: ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nome do cliente \"%s\" inválido"
@@ -1521,14 +1406,11 @@ msgid "Failed to open audio file."
msgstr "Falha ao abrir o arquivo de áudio."
#: ../src/utils/pacat.c:959
-msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
-msgstr ""
-"Aviso: a especificação de amostragem especificada será sobrescrita pela "
-"especificação do arquivo."
+msgid "Warning: specified sample specification will be overwritten with specification from file."
+msgstr "Aviso: a especificação de amostragem especificada será sobrescrita pela especificação do arquivo."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:962
+#: ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
msgstr "Falha ao determinar a especificação de amostragem a partir do arquivo."
@@ -1546,11 +1428,8 @@ msgstr "Aviso: falha ao gravar o mapa de canais no arquivo."
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
-"Abrindo um fluxo %s com a especificação de amostragem \"%s\" e mapeamento de "
-"canais \"%s\"."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr "Abrindo um fluxo %s com a especificação de amostragem \"%s\" e mapeamento de canais \"%s\"."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1560,7 +1439,8 @@ msgstr "gravando"
msgid "playback"
msgstr "playback"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1035
+#: ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() falhou."
@@ -1568,11 +1448,13 @@ msgstr "pa_mainloop_new() falhou."
msgid "io_new() failed."
msgstr "io_new() falhou."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1061
+#: ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
msgstr "pa_context_new() falhou."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1069
+#: ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() falhou: %s"
@@ -1581,7 +1463,8 @@ msgstr "pa_context_new() falhou: %s"
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() falhou."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1082
+#: ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() falhou."
@@ -1608,9 +1491,7 @@ msgstr "Falha ao prosseguir: %s\n"
#: ../src/utils/pasuspender.c:147
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr ""
-"AVISO: O servidor de som não é local, Sound server is not local, não está em "
-"suspenso.\n"
+msgstr "AVISO: O servidor de som não é local, Sound server is not local, não está em suspenso.\n"
#: ../src/utils/pasuspender.c:159
#, c-format
@@ -1634,8 +1515,7 @@ 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"
@@ -1763,12 +1643,14 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:268
+#: ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
msgstr "\tPortas:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:274
+#: ../src/utils/pactl.c:366
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPorta ativa: %s\n"
@@ -1817,10 +1699,18 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:345
+#: ../src/utils/pactl.c:401
+#: ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473
+#: ../src/utils/pactl.c:532
+#: ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543
+#: ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:637
+#: ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
msgstr "n/a"
@@ -2011,7 +1901,8 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:653
+#: ../src/utils/pactl.c:663
#, fuzzy, c-format
msgid "Failure: %s"
msgstr "Falha: %s\n"
@@ -2059,10 +1950,8 @@ 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 [opções] stat\n"
"%s [opções] list\n"
@@ -2084,8 +1973,7 @@ msgstr ""
" --version Mostra a versão\n"
"\n"
" -s, --server=SERVER O nome do servidor a ser conectado\n"
-" -n, --client-name=NAME Como chamar este cliente no "
-"servidor \n"
+" -n, --client-name=NAME Como chamar este cliente no servidor \n"
#: ../src/utils/pactl.c:933
#, c-format
@@ -2111,9 +1999,7 @@ msgstr "Falha em abrir o arquivo de som.\n"
#: ../src/utils/pactl.c:1004
#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
-msgstr ""
-"Aviso: falha ao determinar a especificação da amostragem a partir do "
-"arquivo.\n"
+msgstr "Aviso: falha ao determinar a especificação da amostragem a partir do arquivo.\n"
#: ../src/utils/pactl.c:1014
#, fuzzy
@@ -2147,20 +2033,13 @@ msgstr "Você deve especificar um Ãndice de um módulo\n"
#: ../src/utils/pactl.c:1090
#, fuzzy
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"Você não pode especificar mais de um destino. Você tem que especificar um "
-"valor booleano.\n"
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "Você não pode especificar mais de um destino. Você tem que especificar um valor booleano.\n"
#: ../src/utils/pactl.c:1103
#, fuzzy
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
-msgstr ""
-"Você não pode especificar mais de uma fonte. Você tem que especificar um "
-"valor booleano.\n"
+msgid "You may not specify more than one source. You have to specify a boolean value."
+msgstr "Você não pode especificar mais de uma fonte. Você tem que especificar um valor booleano.\n"
#: ../src/utils/pactl.c:1115
#, fuzzy
@@ -2182,9 +2061,12 @@ msgstr "Você tem que especificar um nome/Ãndice da fonte e o nome da porta\n"
msgid "You have to specify a sink name/index and a volume"
msgstr "Você tem que especificar um nome/Ãndice do destino e o nome da porta\n"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1154
+#: ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193
+#: ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226
+#: ../src/utils/pactl.c:1248
#, fuzzy
msgid "Invalid volume specification"
msgstr "Especificação de amostragem inválida"
@@ -2201,7 +2083,7 @@ msgstr "Você tem que especificar a entrada para o destino e um destino\n"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr ""
+msgstr "Ãndice de entrada de destino inválido"
#: ../src/utils/pactl.c:1204
#, fuzzy
@@ -2235,17 +2117,14 @@ 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 Mostra os dados atuais do PulseAudio associados ao display X11 "
-"(padrão)\n"
+" -d Mostra os dados atuais do PulseAudio associados ao display X11 (padrão)\n"
" -e Exporta os dados locais do PulseAudio para um display X11 \n"
-" -i Importa os dados do PulseAudio de um display X11 para as variáveis "
-"de ambiente locais e para o arquivo de cookie.\n"
+" -i Importa os dados do PulseAudio de um display X11 para as variáveis de ambiente locais e para o arquivo de cookie.\n"
" -r Remove os dados do PulseAudio do display X11\n"
#: ../src/utils/pax11publish.c:94
@@ -2310,9 +2189,7 @@ msgstr "Ainda não implementado.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
-"Nenhum daemon do PulseAudio em execução ou não está em execução como daemon "
-"de sessão."
+msgstr "Nenhum daemon do PulseAudio em execução ou não está em execução como daemon de sessão."
#: ../src/utils/pacmd.c:74
#, c-format
@@ -2337,53 +2214,46 @@ msgstr "O daemon não responde."
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:171
+#: ../src/utils/pacmd.c:188
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:207
+#: ../src/utils/pacmd.c:223
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:136
+#: ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
msgstr "Não foi possÃvel acessar a trava de autogeração."
-#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530
+#: ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-"O ALSA nos acordou para gravar novos dados no dispositivo, mas não há nada a "
-"ser gravado!\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
-"relate esse problema para os desenvolvedores do ALSA.\n"
-"Nós fomos acordados com o conjunto POLLOUT -- entretanto, a snd_pcm_avail() "
-"subseqüente retornou 0 ou outro valor < min_avail."
+"O ALSA nos acordou para gravar novos dados no dispositivo, mas não há nada a ser gravado!\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema para os desenvolvedores do ALSA.\n"
+"Nós fomos acordados com o conjunto POLLOUT -- entretanto, a snd_pcm_avail() subseqüente retornou 0 ou outro valor < min_avail."
-#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506
+#: ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-"O ALSA nos acordou para ler novos dados no dispositivo, mas não há nada a "
-"ser lido!\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
-"relate esse problema para os desenvolvedores do ALSA.\n"
-"Nós fomos acordados com o conjunto POLLIN -- entretanto, a snd_pcm_avail() "
-"subseqüente retornou 0 ou outro valor < min_avail."
+"O ALSA nos acordou para ler novos dados no dispositivo, mas não há nada a ser lido!\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema para os desenvolvedores do ALSA.\n"
+"Nós fomos acordados com o conjunto POLLIN -- entretanto, a snd_pcm_avail() subseqüente retornou 0 ou outro valor < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
@@ -2411,40 +2281,40 @@ msgstr "Servidor de som PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Dispositivos de saÃda"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "Dispositivos de entrada"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Ãudio em @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "Entrada"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Entrada da base de encaixe"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Microfone da base de encaixe"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Entrada de linha"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Microfone"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Microfone externo"
#: ../src/modules/alsa/alsa-mixer.c:1707
#, fuzzy
@@ -2453,85 +2323,86 @@ msgstr "Ãudio interno"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Rádio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "VÃdeo"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Ganho de controle automático"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Sem ganho de controle automático"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Impulso"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Sem impulso"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Amplificador"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Sem amplificador"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "Entrada analógica"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "Microfone analógico"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "Entrada de linha analógica"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Rádio analógico"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "VÃdeo analógico"
#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Output"
-msgstr ""
+msgstr "SaÃda analógica"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "Fones de ouvido analógico"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "SaÃda analógica (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "SaÃda analógica monofônica"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, fuzzy, c-format
msgid "%s+%s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1984
+#: ../src/modules/alsa/alsa-mixer.c:3404
#, fuzzy, c-format
msgid "%s / %s"
msgstr "%s %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Monofônico analógico"
#: ../src/modules/alsa/alsa-mixer.c:2791
#, fuzzy
@@ -2595,166 +2466,129 @@ msgstr "Surround 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "Estéreo digital (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "Surround 4.0 digital (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "Surround digital 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "Surround digital 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "Estéreo digital (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "Duplex monofônico analógico"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "Duplex estéreo analógico"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "Duplex estéreo digital (IEC958)"
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Nome do cliente \"%s\" inválido\n"
-
#~ msgid "Failed to determine sample specification from file.\n"
#~ msgstr ""
#~ "Falha ao determinar a especificação de amostragem a partir do arquivo.\n"
-
#~ msgid "select(): %s"
#~ msgstr "select(): %s"
-
#~ msgid "Cannot connect to system bus: %s"
#~ msgstr "Não foi possÃvel conectar com o barramento do sistema: %s"
-
#~ msgid "Cannot get caller from PID: %s"
#~ msgstr "Não foi possÃvel obter quem chamou pelo PID: %s"
-
#~ msgid "Cannot set UID on caller object."
#~ msgstr "Não foi possÃvel definir o UID sobre o objeto que chamou."
-
#~ msgid "Failed to get CK session."
#~ msgstr "Falha em obter a sessão CK."
-
#~ msgid "Cannot set UID on session object."
#~ msgstr "Não foi possÃvel definir o UID do objeto da sessão."
-
#~ msgid "Cannot allocate PolKitAction."
#~ msgstr "Não foi possÃvel alocar o PolKitAction."
-
#~ msgid "Cannot set action_id"
#~ msgstr "Não foi possÃvel definir a action_id"
-
#~ msgid "Cannot allocate PolKitContext."
#~ msgstr "Não foi possÃvel alocar o PolKitContext."
-
#~ msgid "Cannot initialize PolKitContext: %s"
#~ msgstr "Não foi possÃvel iniciar o PolKitContext: %s"
-
#~ msgid "Could not determine whether caller is authorized: %s"
#~ msgstr "Não foi possÃvel determinar se o solicitante está autorizado: %s"
-
#~ msgid "Cannot obtain auth: %s"
#~ msgstr "Não foi possÃvel obter auth: %s"
-
#~ msgid "PolicyKit responded with '%s'"
#~ msgstr "PolicyKit respondeu com '%s'"
-
#~ msgid ""
#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
#~ "daemon"
#~ msgstr ""
#~ "Escalonamento de alta prioridade (nÃvel de nice Unix negativo) para o "
#~ "daemon do PulseAudio"
-
#~ msgid "Real-time scheduling for the PulseAudio daemon"
#~ msgstr "Escalonamento em tempo real para o daemon do PulseAudio"
-
#~ msgid ""
#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
#~ msgstr ""
#~ "Uma polÃtica do sistema impede que o PulseAudio adquira escalonamento de "
#~ "alta prioridade."
-
#~ msgid ""
#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
#~ msgstr ""
#~ "Uma polÃtica do sistema impede que o PulseAudio adquira o escalonamento "
#~ "em tempo real."
-
#~ msgid "read() failed: %s\n"
#~ msgstr "read() falhou: %s\n"
-
#~ msgid "pa_context_connect() failed: %s\n"
#~ msgstr "pa_context_connect() falhou: %s\n"
-
#~ msgid "We're in the group '%s', allowing high-priority scheduling."
#~ msgstr "Estamos no grupo '%s', permitindo escalonamento de alta prioridade."
-
#~ msgid "We're in the group '%s', allowing real-time scheduling."
#~ msgstr "Estamos no grupo '%s', permitindo escalonamento em tempo real."
-
#~ msgid "PolicyKit grants us acquire-high-priority privilege."
#~ msgstr ""
#~ "O PolicyKit assegura-nos a aquisição de privilégio de alta prioridade."
-
#~ msgid "PolicyKit refuses acquire-high-priority privilege."
#~ msgstr "O PolicyKit recusa a aquisição de privilégios de alta prioridade."
-
#~ msgid "PolicyKit grants us acquire-real-time privilege."
#~ msgstr "O PolicyKit assegura-nos a aquisição de privilégios de tempo-real."
-
#~ msgid "PolicyKit refuses acquire-real-time privilege."
#~ msgstr "O PolicyKit recusa a aquisição de privilégios de tempo real."
-
#~ 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."
-
#~ msgid "Successfully increased RLIMIT_RTPRIO"
#~ msgstr "RLIMIT_RTPRIO aumentado com sucesso"
-
#~ msgid "RLIMIT_RTPRIO failed: %s"
#~ msgstr "RLIMIT_RTPRIO falhou: %s"
-
#~ msgid "Giving up CAP_NICE"
#~ msgstr "Abandonando CAP_NICE"
-
#~ 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."
-
#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
#~ msgstr "As capacidades foram limitadas com sucesso para CAP_SYS_NICE."
-
#~ msgid "time_new() failed.\n"
#~ msgstr "time_new() falhou.\n"
-
#~ msgid "Stream successfully created\n"
#~ msgstr "Fluxo criado com sucesso\n"
-
#~ msgid "Stream errror: %s\n"
#~ msgstr "Erro de fluxo: %s\n"
-
#~ msgid "Connection established.\n"
#~ msgstr "Conexão estabelecida.\n"
-
#~ msgid ""
#~ "%s [options] [FILE]\n"
#~ "\n"
@@ -2793,7 +2627,6 @@ msgstr ""
#~ " --volume=VOLUME Especifica o volume inicial "
#~ "(linear) no intervalo 0...65536\n"
#~ " --channel-map=CHANNELMAP Define o mapa do canal para uso\n"
-
#~ msgid ""
#~ "paplay %s\n"
#~ "Compiled with libpulse %s\n"
@@ -2802,16 +2635,12 @@ msgstr ""
#~ "paplay %s\n"
#~ "Compilado com libpulse %s\n"
#~ "Linkado com libpulse %s\n"
-
#~ msgid "Invalid channel map\n"
#~ msgstr "Mapa de canais inválido\n"
-
#~ msgid "Failed to open file '%s'\n"
#~ msgstr "Falha ao abrir o arquivo '%s'\n"
-
#~ msgid "Channel map doesn't match file.\n"
#~ msgstr "O mapa dos canais não coincide com o arquivo.\n"
-
#~ msgid "Using sample spec '%s'\n"
#~ msgstr "Usando a especificação da amostragem '%s'\n"
@@ -2830,19 +2659,14 @@ msgstr ""
#, fuzzy
#~ msgid "--log-time boolean argument"
#~ msgstr "--disallow-exit argumento booleano"
-
#~ msgid "Default sink name (%s) does not exist in name register."
#~ msgstr "O nome padrão do destino (%s) não existe no registro de nomes."
-
#~ msgid "Buffer overrun, dropping incoming data\n"
#~ msgstr "Houve estouro de buffer, os dados que chegaram foram descartados\n"
-
#~ msgid "pa_stream_drop() failed: %s\n"
#~ msgstr "pa_stream_drop() falhou: %s\n"
-
#~ msgid "muted"
#~ msgstr "mudo"
-
#~ msgid ""
#~ "*** Autoload Entry #%u ***\n"
#~ "Name: %s\n"
@@ -2855,13 +2679,10 @@ msgstr ""
#~ "Tipo: %s\n"
#~ "Módulo: %s\n"
#~ "Argumento: %s\n"
-
#~ msgid "sink"
#~ msgstr "destino"
-
#~ msgid "source"
#~ msgstr "fonte"
-
#~ msgid ""
#~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
#~ "For enabling real-time scheduling please acquire the appropriate "
@@ -2871,13 +2692,12 @@ msgstr ""
#~ "outra vez.\n"
#~ " Para habilitar o escalonamento em tempo real, por favo, adquira os "
#~ "privilégios adequados pelo PolicyKit, ou torne-se membro do'"
-
#~ msgid ""
#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
#~ "user."
#~ msgstr ""
#~ "', ou eleve o RLIMIT_NICE/RLIMIT_RTPRIO dos limites do recurso para este "
#~ "usuário."
-
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair(): %s"
+
commit 667126b5fe062a4dbe8fe42ecbf51d03cfccd232
Author: igor <igor at fedoraproject.org>
Date: Fri Oct 23 16:45:43 2009 +0000
Sending translation for Brazilian Portuguese
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 50dc91c..257aa36 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-22 16:22+0000\n"
-"PO-Revision-Date: 2009-10-22 18:19-0300\n"
+"POT-Creation-Date: 2009-10-23 09:53+0000\n"
+"PO-Revision-Date: 2009-10-23 14:42-0300\n"
"Last-Translator: Igor Pires Soares <igor at projetofedora.org>\n"
"Language-Team: Brazilian-Portuguese <fedora-trans-pt_br at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -697,7 +697,7 @@ msgstr "Mono"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
-msgstr "Fronto-cental"
+msgstr "Frontal central"
#: ../src/pulse/channelmap.c:108
msgid "Front Left"
@@ -869,31 +869,31 @@ msgstr "Auxiliar 31"
#: ../src/pulse/channelmap.c:156
msgid "Top Center"
-msgstr "Central Superior"
+msgstr "Central superior"
#: ../src/pulse/channelmap.c:158
msgid "Top Front Center"
-msgstr "Central Frontal Superior"
+msgstr "Central frontal superior"
#: ../src/pulse/channelmap.c:159
msgid "Top Front Left"
-msgstr "Frontal Superior Esquerdo"
+msgstr "Frontal superior esquerdo"
#: ../src/pulse/channelmap.c:160
msgid "Top Front Right"
-msgstr "Fontal Superior Direito"
+msgstr "Fontal superior direito"
#: ../src/pulse/channelmap.c:162
msgid "Top Rear Center"
-msgstr "Central Superior Posterior"
+msgstr "Central superior posterior"
#: ../src/pulse/channelmap.c:163
msgid "Top Rear Left"
-msgstr "Posterior Superior Esquerdo"
+msgstr "Posterior superior esquerdo"
#: ../src/pulse/channelmap.c:164
msgid "Top Rear Right"
-msgstr "Posterior Superior Direito"
+msgstr "Posterior superior direito"
#: ../src/pulse/channelmap.c:484
#: ../src/pulse/sample.c:170
@@ -934,7 +934,7 @@ msgstr "OK"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr "Acesso Negado"
+msgstr "Acesso negado"
#: ../src/pulse/error.c:45
msgid "Unknown command"
@@ -1246,9 +1246,9 @@ msgid "Failed to get latency: %s"
msgstr "Falha ao obter a latência: %s"
#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "Tempo: %0.3f s; Latência: %0.0f us. \r"
+msgstr "Tempo: %0.3f sec;; Latência: %0.0f usec."
#: ../src/utils/pacat.c:599
#, c-format
@@ -1552,9 +1552,9 @@ msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() falhou.\n"
#: ../src/utils/pactl.c:135
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get statistics: %s"
-msgstr "Falha em obter as estatÃsticas: %s\n"
+msgstr "Falha ao obter estatÃsticas: %s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1572,9 +1572,9 @@ msgid "Sample cache size: %s\n"
msgstr "Tamanho do cache para amostragem: %s\n"
#: ../src/utils/pactl.c:156
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get server information: %s"
-msgstr "Falha em obter a informação do servidor: %s\n"
+msgstr "Falha ao obter informações do servidor: %s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1600,9 +1600,9 @@ msgstr ""
"Cookie: %08x\n"
#: ../src/utils/pactl.c:205
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink information: %s"
-msgstr "Falha em obter a informação do destino: %s\n"
+msgstr "Falha ao obter informações do destino: %s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1656,9 +1656,9 @@ msgid "\tActive Port: %s\n"
msgstr "\tPorta ativa: %s\n"
#: ../src/utils/pactl.c:297
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source information: %s"
-msgstr "Falha em obter a informação da fonte: %s\n"
+msgstr "Falha ao obter informações da fonte: %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1716,9 +1716,9 @@ msgid "n/a"
msgstr "n/a"
#: ../src/utils/pactl.c:375
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get module information: %s"
-msgstr "Falha em obter a informação do módulo: %s\n"
+msgstr "Falha ao obter informações do módulo: %s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1738,9 +1738,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:412
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get client information: %s"
-msgstr "Falhou ao obter a informação do cliente: %s\n"
+msgstr "Falha ao obter informações do cliente: %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1758,9 +1758,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:447
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get card information: %s"
-msgstr "Falha ao obter as informações da placa: %s\n"
+msgstr "Falha ao obter informações da placa: %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1790,9 +1790,9 @@ msgid "\tActive Profile: %s\n"
msgstr "\tPerfil ativo: %s\n"
#: ../src/utils/pactl.c:496
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "Falha na obtenção da informação de entrada do destino: %s\n"
+msgstr "Falha ao obter informações da entrada do destino: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1832,9 +1832,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:554
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source output information: %s"
-msgstr "Falha em obter informações sobre a saÃda da fonte: %s\n"
+msgstr "Falha ao obter informações da saÃda da fonte: %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1866,9 +1866,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:605
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sample information: %s"
-msgstr "Falha em obter informações sobre a amostragem: %s\n"
+msgstr "Falha ao obter informações sobre a amostragem: %s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1903,27 +1903,25 @@ msgstr ""
#: ../src/utils/pactl.c:653
#: ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#, c-format
msgid "Failure: %s"
-msgstr "Falha: %s\n"
+msgstr "Falha: %s"
#: ../src/utils/pactl.c:687
-#, fuzzy, c-format
+#, c-format
msgid "Failed to upload sample: %s"
-msgstr "Falha em carregar a amostra: %s\n"
+msgstr "Falha ao enviar a amostra: %s"
#: ../src/utils/pactl.c:704
-#, fuzzy
msgid "Premature end of file"
-msgstr "Fim prematuro do arquivo\n"
+msgstr "Fim prematuro do arquivo"
#: ../src/utils/pactl.c:863
-#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr "Recebido o SIGINT, saindo.\n"
+msgstr "SIGINT recebido, saindo."
#: ../src/utils/pactl.c:869
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1959,21 +1957,27 @@ msgstr ""
"%s [opções] upload-sample NOME_DO_ARQUIVO [NOME]\n"
"%s [opções] play-sample NOME [DESTINO]\n"
"%s [opções] remove-sample NOME\n"
-"%s [opções] move-sink-input ID DESTINO\n"
-"%s [opções] move-source-output ID FONTE\n"
+"%s [opções] move-sink-input ENTRADA DESTINO\n"
+"%s [opções] move-source-output SAÃDA FONTE\n"
"%s [opções] load-module NOME [ARGS ...]\n"
-"%s [opções] unload-module ID\n"
+"%s [opções] unload-module MÃDULO\n"
"%s [opções] suspend-sink [DESTINO] 1|0\n"
"%s [opções] suspend-source [FONTE] 1|0\n"
-"%s [opções] set-card-profile [PLACA] [PERFIL] \n"
-"%s [opções] set-sink-port [DESTINO] [PORTA] \n"
-"%s [opções] set-source-port [FONTE] [PORTA] \n"
+"%s [opções] set-card-profile [PLACA] [PERFIL]\n"
+"%s [opções] set-sink-port [DESTINO] [PORTA]\n"
+"%s [opções] set-source-port [FONTE] [PORTA]\n"
+"%s [opções] set-sink-volume DESTINO VOLUME\n"
+"%s [opções] set-source-volume FONTE VOLUME\n"
+"%s [opções] set-sink-input-volume ENTRADA VOLUME\n"
+"%s [opções] set-sink-mute DESTINO 1|0\n"
+"%s [opções] set-source-mute FONTE 1|0\n"
+"%s [opções] set-sink-input-mute ENTRADA 1|0\n"
"\n"
" -h, --help Mostra essa ajuda\n"
" --version Mostra a versão\n"
"\n"
-" -s, --server=SERVER O nome do servidor a ser conectado\n"
-" -n, --client-name=NAME Como chamar este cliente no servidor \n"
+" -s, --server=SERVIDOR O nome do servidor a ser conectado\n"
+" -n, --client-name=NOME Como chamar este cliente no servidor \n"
#: ../src/utils/pactl.c:933
#, c-format
@@ -1987,79 +1991,64 @@ msgstr ""
"Linkado com libpulse %s\n"
#: ../src/utils/pactl.c:979
-#, fuzzy
msgid "Please specify a sample file to load"
-msgstr "Por favor, especifique o arquivo de amostra a ser carregado\n"
+msgstr "Por favor, especifique um arquivo de amostra a ser carregado"
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "Falha em abrir o arquivo de som.\n"
+msgstr "Falha ao abrir o arquivo de som."
#: ../src/utils/pactl.c:1004
-#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
-msgstr "Aviso: falha ao determinar a especificação da amostragem a partir do arquivo.\n"
+msgstr "Aviso: falha ao determinar a especificação da amostragem a partir do arquivo."
#: ../src/utils/pactl.c:1014
-#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr "Você deve especificar um nome da amostra para ser executada\n"
+msgstr "Você deve especificar um nome para amostra a ser reproduzida"
#: ../src/utils/pactl.c:1026
-#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr "Você deve especificar um nome da amostra para ser removida\n"
+msgstr "Você deve especificar um nome para a amostra a ser removida"
#: ../src/utils/pactl.c:1035
-#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr "Você tem que especificar a entrada para o destino e um destino\n"
+msgstr "Você deve especificar a entrada do destino e um destino"
#: ../src/utils/pactl.c:1045
-#, fuzzy
msgid "You have to specify a source output index and a source"
-msgstr "Você tem que especificar um Ãndice de saÃda da fonte e uma fonte\n"
+msgstr "Você deve especificar um Ãndice de saÃda da fonte e uma fonte"
#: ../src/utils/pactl.c:1060
-#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr "Você deve especificar um nome do módulo e seus argumentos\n"
+msgstr "Você deve especificar um nome para o módulo e seus argumentos."
#: ../src/utils/pactl.c:1080
-#, fuzzy
msgid "You have to specify a module index"
-msgstr "Você deve especificar um Ãndice de um módulo\n"
+msgstr "Você deve especificar um Ãndice do módulo"
#: ../src/utils/pactl.c:1090
-#, fuzzy
msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "Você não pode especificar mais de um destino. Você tem que especificar um valor booleano.\n"
+msgstr "Você não pode especificar mais de um destino. Você deve especificar um valor booleano."
#: ../src/utils/pactl.c:1103
-#, fuzzy
msgid "You may not specify more than one source. You have to specify a boolean value."
-msgstr "Você não pode especificar mais de uma fonte. Você tem que especificar um valor booleano.\n"
+msgstr "Você não pode especificar mais de uma fonte. Você deve especificar um valor booleano."
#: ../src/utils/pactl.c:1115
-#, fuzzy
msgid "You have to specify a card name/index and a profile name"
-msgstr "Você tem que especificar um nome/Ãndice da placa e um nome de perfil\n"
+msgstr "Você deve especificar um nome/Ãndice para a placa e um nome de perfil"
#: ../src/utils/pactl.c:1126
-#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr "Você tem que especificar um nome/Ãndice do destino e o nome da porta\n"
+msgstr "Você deve especificar um nome/Ãndice do destino e o nome da porta"
#: ../src/utils/pactl.c:1137
-#, fuzzy
msgid "You have to specify a source name/index and a port name"
-msgstr "Você tem que especificar um nome/Ãndice da fonte e o nome da porta\n"
+msgstr "Você deve especificar um nome/Ãndice da fonte e o nome da porta"
#: ../src/utils/pactl.c:1149
-#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr "Você tem que especificar um nome/Ãndice do destino e o nome da porta\n"
+msgstr "Você deve especificar um nome/Ãndice do destino e um volume"
#: ../src/utils/pactl.c:1154
#: ../src/utils/pactl.c:1171
@@ -2067,48 +2056,40 @@ msgstr "Você tem que especificar um nome/Ãndice do destino e o nome da porta\n
#: ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226
#: ../src/utils/pactl.c:1248
-#, fuzzy
msgid "Invalid volume specification"
-msgstr "Especificação de amostragem inválida"
+msgstr "Especificação de volume inválida"
#: ../src/utils/pactl.c:1166
-#, fuzzy
msgid "You have to specify a source name/index and a volume"
-msgstr "Você tem que especificar um nome/Ãndice da fonte e o nome da porta\n"
+msgstr "Você deve especificar um nome/Ãndice da fonte e um volume"
#: ../src/utils/pactl.c:1183
-#, fuzzy
msgid "You have to specify a sink input index and a volume"
-msgstr "Você tem que especificar a entrada para o destino e um destino\n"
+msgstr "Você deve especificar um Ãndice de entrada para o destino e um volume"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
msgstr "Ãndice de entrada de destino inválido"
#: ../src/utils/pactl.c:1204
-#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Você tem que especificar um nome/Ãndice do destino e o nome da porta\n"
+msgstr "Você deve especificar um nome/Ãndice do destino e um booleano do mudo"
#: ../src/utils/pactl.c:1221
-#, fuzzy
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Você tem que especificar um nome/Ãndice da fonte e o nome da porta\n"
+msgstr "Você deve especificar um nome/Ãndice da fonte e um booleano do mudo"
#: ../src/utils/pactl.c:1238
-#, fuzzy
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Você tem que especificar a entrada para o destino e um destino\n"
+msgstr "Você deve especificar um Ãndice de entrada para o destino e um booleano do mudo"
#: ../src/utils/pactl.c:1243
-#, fuzzy
msgid "Invalid sink input index specification"
-msgstr "Especificação de amostragem inválida"
+msgstr "Especificação do Ãndice de entrada de destino inválida"
#: ../src/utils/pactl.c:1262
-#, fuzzy
msgid "No valid command specified."
-msgstr "Nenhum comando válido especificado.\n"
+msgstr "Nenhum comando válido especificado."
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2266,9 +2247,8 @@ msgid "High Fidelity Playback (A2DP)"
msgstr "Reprodução de alta fidelidade (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
-#, fuzzy
msgid "High Fidelity Capture (A2DP)"
-msgstr "Reprodução de alta fidelidade (A2DP)"
+msgstr "Captura de alta fidelidade (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
@@ -2317,9 +2297,8 @@ msgid "External Microphone"
msgstr "Microfone externo"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Ãudio interno"
+msgstr "Microfone interno"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
@@ -2390,79 +2369,67 @@ msgid "Analog Mono Output"
msgstr "SaÃda analógica monofônica"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984
#: ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
msgstr "Monofônico analógico"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "Stereo"
+msgstr "Estéreo analógico"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Surround 4.1"
+msgstr "Surround analógico 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Surround 4.0"
+msgstr "Surround analógico 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Surround 4.1"
+msgstr "Surround analógico 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "Surround 4.0"
+msgstr "Surround analógico 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "Surround 4.1"
+msgstr "Surround analógico 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "Surround 5.0"
+msgstr "Surround analógico 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "Surround 5.1"
+msgstr "Surround analógico 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Surround 4.0"
+msgstr "Surround analógico 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Surround 4.1"
+msgstr "Surround analógico 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Surround 4.0"
+msgstr "Surround analógico 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "Surround 7.1"
+msgstr "Surround analógico 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
commit f0382d1d20476d306ff277c6d4034d94008216a7
Author: thalia <thalia at fedoraproject.org>
Date: Mon Oct 26 15:19:34 2009 +0000
Sending translation for Greek
diff --git a/po/el.po b/po/el.po
index be677d1..d9b2a4d 100644
--- a/po/el.po
+++ b/po/el.po
@@ -2,13 +2,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Dimitris Glezos <dimitris at glezos.com>, 2008.
+# Thalia Papoutsaki <saliyath at gmail.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: el\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2008-08-22 19:40+0300\n"
-"Last-Translator: Dimitris Glezos <dimitris at glezos.com>\n"
+"POT-Creation-Date: 2009-10-26 09:45+0000\n"
+"PO-Revision-Date: 2009-10-26 17:15+0200\n"
+"Last-Translator: Thalia Papoutsaki <saliyath at gmail.com>\n"
"Language-Team: Greek <fedora-trans-el at redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -16,36 +17,31 @@ msgstr ""
"X-Generator: KAider 0.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:858
+#: ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
-"lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/module-always-sink.c:39
@@ -61,12 +57,7 @@ msgid "Virtual LADSPA sink"
msgstr ""
#: ../src/modules/module-ladspa-sink.c:53
-msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
msgstr ""
#: ../src/modules/module-null-sink.c:55
@@ -83,7 +74,7 @@ msgstr ""
#: ../src/pulsecore/sink.c:2618
msgid "Modem"
-msgstr ""
+msgstr "Modem"
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
@@ -131,7 +122,8 @@ msgstr ""
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr ""
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:208
+#: ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
msgstr ""
@@ -183,9 +175,7 @@ msgid "Failed to kill daemon: %s"
msgstr ""
#: ../src/daemon/main.c:571
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
+msgid "This program is not intended to be run as root (unless --system is specified)."
msgstr ""
#: ../src/daemon/main.c:573
@@ -226,7 +216,8 @@ msgstr ""
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:646
+#: ../src/utils/pacat.c:508
#, c-format
msgid "read() failed: %s"
msgstr ""
@@ -338,12 +329,9 @@ msgstr ""
#: ../src/daemon/main.c:792
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:809
@@ -355,12 +343,8 @@ msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
#: ../src/daemon/main.c:821
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
-msgstr ""
-"ÎικΠμοÏ
, ο ÏÏ
ÏÎ®Î½Î±Ï ÏοÏ
είναι για Ïα μÏάζα! Î ÏÏÏÏαÏη ÏοÏ
ÏÎµÏ ÏήμεÏα είναι "
-"Linux με ενεÏγοÏοιημÎνα Ïα high-resolution timers!"
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+msgstr "ÎικΠμοÏ
, ο ÏÏ
ÏÎ®Î½Î±Ï ÏοÏ
είναι για Ïα μÏάζα! Î ÏÏÏÏαÏη ÏοÏ
ÏÎµÏ ÏήμεÏα είναι Linux με ενεÏγοÏοιημÎνα Ïα high-resolution timers!"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
@@ -397,48 +381,37 @@ 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"
@@ -449,12 +422,10 @@ 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"
@@ -469,9 +440,7 @@ msgid "--fail expects boolean argument"
msgstr ""
#: ../src/daemon/cmdline.c:264
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of 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 ""
#: ../src/daemon/cmdline.c:276
@@ -536,22 +505,22 @@ msgstr ""
#: ../src/daemon/dumpmodules.c:66
#, c-format
msgid "Version: %s\n"
-msgstr ""
+msgstr "ÎκδοÏη: %s\n"
#: ../src/daemon/dumpmodules.c:68
#, c-format
msgid "Description: %s\n"
-msgstr ""
+msgstr "ΠεÏιγÏαÏή: %s\n"
#: ../src/daemon/dumpmodules.c:70
#, c-format
msgid "Author: %s\n"
-msgstr ""
+msgstr "ΣÏ
γγÏαÏÎαÏ: %s\n"
#: ../src/daemon/dumpmodules.c:72
#, c-format
msgid "Usage: %s\n"
-msgstr ""
+msgstr "ΧÏήÏη: %s\n"
#: ../src/daemon/dumpmodules.c:73
#, c-format
@@ -634,9 +603,7 @@ msgid "Failed to open configuration file: %s"
msgstr ""
#: ../src/daemon/daemon-conf.c:562
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
msgstr ""
#: ../src/daemon/daemon-conf.c:638
@@ -656,9 +623,10 @@ msgstr ""
msgid "Start the PulseAudio Sound System"
msgstr ""
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105
+#: ../src/pulse/channelmap.c:757
msgid "Mono"
-msgstr ""
+msgstr "Mono"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
@@ -706,131 +674,131 @@ msgstr ""
#: ../src/pulse/channelmap.c:123
msgid "Auxiliary 0"
-msgstr ""
+msgstr "Auxiliary 0"
#: ../src/pulse/channelmap.c:124
msgid "Auxiliary 1"
-msgstr ""
+msgstr "Auxiliary 1"
#: ../src/pulse/channelmap.c:125
msgid "Auxiliary 2"
-msgstr ""
+msgstr "Auxiliary 2"
#: ../src/pulse/channelmap.c:126
msgid "Auxiliary 3"
-msgstr ""
+msgstr "Auxiliary 3"
#: ../src/pulse/channelmap.c:127
msgid "Auxiliary 4"
-msgstr ""
+msgstr "Auxiliary 4"
#: ../src/pulse/channelmap.c:128
msgid "Auxiliary 5"
-msgstr ""
+msgstr "Auxiliary 5"
#: ../src/pulse/channelmap.c:129
msgid "Auxiliary 6"
-msgstr ""
+msgstr "Auxiliary 6"
#: ../src/pulse/channelmap.c:130
msgid "Auxiliary 7"
-msgstr ""
+msgstr "Auxiliary 7"
#: ../src/pulse/channelmap.c:131
msgid "Auxiliary 8"
-msgstr ""
+msgstr "Auxiliary 8"
#: ../src/pulse/channelmap.c:132
msgid "Auxiliary 9"
-msgstr ""
+msgstr "Auxiliary 9"
#: ../src/pulse/channelmap.c:133
msgid "Auxiliary 10"
-msgstr ""
+msgstr "Auxiliary 10"
#: ../src/pulse/channelmap.c:134
msgid "Auxiliary 11"
-msgstr ""
+msgstr "Auxiliary 11"
#: ../src/pulse/channelmap.c:135
msgid "Auxiliary 12"
-msgstr ""
+msgstr "Auxiliary 12"
#: ../src/pulse/channelmap.c:136
msgid "Auxiliary 13"
-msgstr ""
+msgstr "Auxiliary 13"
#: ../src/pulse/channelmap.c:137
msgid "Auxiliary 14"
-msgstr ""
+msgstr "Auxiliary 14"
#: ../src/pulse/channelmap.c:138
msgid "Auxiliary 15"
-msgstr ""
+msgstr "Auxiliary 15"
#: ../src/pulse/channelmap.c:139
msgid "Auxiliary 16"
-msgstr ""
+msgstr "Auxiliary 16"
#: ../src/pulse/channelmap.c:140
msgid "Auxiliary 17"
-msgstr ""
+msgstr "Auxiliary 17"
#: ../src/pulse/channelmap.c:141
msgid "Auxiliary 18"
-msgstr ""
+msgstr "Auxiliary 18"
#: ../src/pulse/channelmap.c:142
msgid "Auxiliary 19"
-msgstr ""
+msgstr "Auxiliary 19"
#: ../src/pulse/channelmap.c:143
msgid "Auxiliary 20"
-msgstr ""
+msgstr "Auxiliary 20"
#: ../src/pulse/channelmap.c:144
msgid "Auxiliary 21"
-msgstr ""
+msgstr "Auxiliary 21"
#: ../src/pulse/channelmap.c:145
msgid "Auxiliary 22"
-msgstr ""
+msgstr "Auxiliary 22"
#: ../src/pulse/channelmap.c:146
msgid "Auxiliary 23"
-msgstr ""
+msgstr "Auxiliary 23"
#: ../src/pulse/channelmap.c:147
msgid "Auxiliary 24"
-msgstr ""
+msgstr "Auxiliary 24"
#: ../src/pulse/channelmap.c:148
msgid "Auxiliary 25"
-msgstr ""
+msgstr "Auxiliary 25"
#: ../src/pulse/channelmap.c:149
msgid "Auxiliary 26"
-msgstr ""
+msgstr "Auxiliary 26"
#: ../src/pulse/channelmap.c:150
msgid "Auxiliary 27"
-msgstr ""
+msgstr "Auxiliary 27"
#: ../src/pulse/channelmap.c:151
msgid "Auxiliary 28"
-msgstr ""
+msgstr "Auxiliary 28"
#: ../src/pulse/channelmap.c:152
msgid "Auxiliary 29"
-msgstr ""
+msgstr "Auxiliary 29"
#: ../src/pulse/channelmap.c:153
msgid "Auxiliary 30"
-msgstr ""
+msgstr "Auxiliary 30"
#: ../src/pulse/channelmap.c:154
msgid "Auxiliary 31"
-msgstr ""
+msgstr "Auxiliary 31"
#: ../src/pulse/channelmap.c:156
msgid "Top Center"
@@ -860,39 +828,42 @@ msgstr ""
msgid "Top Rear Right"
msgstr ""
-#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484
+#: ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295
+#: ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341
+#: ../src/pulse/volume.c:371
msgid "(invalid)"
-msgstr ""
+msgstr "(μη ÎγκÏ
Ïο)"
#: ../src/pulse/channelmap.c:761
msgid "Stereo"
-msgstr ""
+msgstr "Stereo"
#: ../src/pulse/channelmap.c:766
msgid "Surround 4.0"
-msgstr ""
+msgstr "Surround 4.0"
#: ../src/pulse/channelmap.c:772
msgid "Surround 4.1"
-msgstr ""
+msgstr "Surround 4.1"
#: ../src/pulse/channelmap.c:778
msgid "Surround 5.0"
-msgstr ""
+msgstr "Surround 5.0"
#: ../src/pulse/channelmap.c:784
msgid "Surround 5.1"
-msgstr ""
+msgstr "Surround 5.1"
#: ../src/pulse/channelmap.c:791
msgid "Surround 7.1"
-msgstr ""
+msgstr "Surround 7.1"
#: ../src/pulse/error.c:43
msgid "OK"
-msgstr ""
+msgstr "ÎνÏάξει"
#: ../src/pulse/error.c:44
msgid "Access denied"
@@ -1001,29 +972,30 @@ msgstr ""
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
-msgstr ""
+msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
-msgstr ""
+msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
-msgstr ""
+msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
-msgstr ""
+msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
-msgstr ""
+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 ""
@@ -1041,14 +1013,14 @@ msgid "No cookie loaded. Attempting to connect without."
msgstr ""
#: ../src/pulse/context.c:693
-#, c-format
+#, fuzzy, c-format
msgid "fork(): %s"
-msgstr ""
+msgstr "fork(): %s"
#: ../src/pulse/context.c:748
-#, c-format
+#, fuzzy, c-format
msgid "waitpid(): %s"
-msgstr ""
+msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
@@ -1083,7 +1055,8 @@ msgstr ""
msgid "pa_stream_begin_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:237
+#: ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr ""
@@ -1181,10 +1154,11 @@ msgstr ""
msgid "pa_stream_connect_record() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:470
+#: ../src/utils/pactl.c:857
#, c-format
msgid "Connection failure: %s"
-msgstr ""
+msgstr "ÎÏοÏÏ
Ïία ÏÏνδεÏηÏ: %s"
#: ../src/utils/pacat.c:503
msgid "Got EOF."
@@ -1227,48 +1201,29 @@ 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, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the "
-"specified value.\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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
" --raw Record/play raw PCM data.\n"
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
@@ -1282,7 +1237,8 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:764
+#: ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
msgstr ""
@@ -1344,12 +1300,11 @@ msgid "Failed to open audio file."
msgstr ""
#: ../src/utils/pacat.c:959
-msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
+msgid "Warning: specified sample specification will be overwritten with specification from file."
msgstr ""
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:962
+#: ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
msgstr ""
@@ -1367,8 +1322,7 @@ msgstr ""
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
#: ../src/utils/pacat.c:1009
@@ -1379,7 +1333,8 @@ msgstr ""
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1035
+#: ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
msgstr ""
@@ -1387,11 +1342,13 @@ msgstr ""
msgid "io_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1061
+#: ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1069
+#: ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
@@ -1400,19 +1357,20 @@ msgstr ""
msgid "pa_context_rttime_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1082
+#: ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
msgstr ""
#: ../src/utils/pasuspender.c:81
-#, c-format
+#, fuzzy, c-format
msgid "fork(): %s\n"
-msgstr ""
+msgstr "fork(): %s\n"
#: ../src/utils/pasuspender.c:92
-#, c-format
+#, fuzzy, c-format
msgid "execvp(): %s\n"
-msgstr ""
+msgstr "execvp(): %s\n"
#: ../src/utils/pasuspender.c:109
#, c-format
@@ -1451,8 +1409,7 @@ 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 ""
@@ -1545,12 +1502,14 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:268
+#: ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:274
+#: ../src/utils/pactl.c:366
#, c-format
msgid "\tActive Port: %s\n"
msgstr ""
@@ -1582,10 +1541,18 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:345
+#: ../src/utils/pactl.c:401
+#: ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473
+#: ../src/utils/pactl.c:532
+#: ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543
+#: ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:637
+#: ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
msgstr ""
@@ -1718,10 +1685,11 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:653
+#: ../src/utils/pactl.c:663
+#, c-format
msgid "Failure: %s"
-msgstr "Îνομα: %s\n"
+msgstr "ÎÏοÏÏ
Ïία: %s"
#: ../src/utils/pactl.c:687
#, fuzzy, c-format
@@ -1764,10 +1732,8 @@ 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 ""
#: ../src/utils/pactl.c:933
@@ -1783,9 +1749,8 @@ msgid "Please specify a sample file to load"
msgstr ""
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï Î¿Î¼Î¬Î´Î±Ï ÏÏηÏÏÏν '%s'."
+msgstr "ÎÏοÏÏ
Ïία ανοίγμαÏÎ¿Ï Î±ÏÏείοÏ
ήÏοÏ
."
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
@@ -1816,14 +1781,11 @@ msgid "You have to specify a module index"
msgstr ""
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
#: ../src/utils/pactl.c:1103
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
+msgid "You may not specify more than one source. You have to specify a boolean value."
msgstr ""
#: ../src/utils/pactl.c:1115
@@ -1842,9 +1804,12 @@ msgstr ""
msgid "You have to specify a sink name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1154
+#: ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193
+#: ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226
+#: ../src/utils/pactl.c:1248
msgid "Invalid volume specification"
msgstr ""
@@ -1887,8 +1852,7 @@ 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 ""
@@ -1964,7 +1928,7 @@ msgstr ""
#: ../src/utils/pacmd.c:91
#, c-format
msgid "connect(): %s"
-msgstr ""
+msgstr "ÏÏνδεÏη(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
@@ -1979,40 +1943,39 @@ msgstr ""
msgid "poll(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:171
+#: ../src/utils/pacmd.c:188
#, c-format
msgid "read(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:207
+#: ../src/utils/pacmd.c:223
#, c-format
msgid "write(): %s"
msgstr ""
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:136
+#: ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
msgstr ""
-#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530
+#: ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506
+#: ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
@@ -2081,11 +2044,11 @@ msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
@@ -2125,11 +2088,11 @@ msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Analog Radio"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "Analog Video"
#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Output"
@@ -2141,102 +2104,104 @@ msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Analog Output (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "Analog Mono Output"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
-msgstr ""
+msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1984
+#: ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
-msgstr ""
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Analog Mono"
#: ../src/modules/alsa/alsa-mixer.c:2791
msgid "Analog Stereo"
-msgstr ""
+msgstr "Analog Stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
msgid "Analog Surround 2.1"
-msgstr ""
+msgstr "Analog Surround 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
msgid "Analog Surround 3.0"
-msgstr ""
+msgstr "Analog Surround 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
msgid "Analog Surround 3.1"
-msgstr ""
+msgstr "Analog Surround 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
-msgstr ""
+msgstr "Analog Surround 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Surround 4.1"
-msgstr ""
+msgstr "Analog Surround 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 5.0"
-msgstr ""
+msgstr "Analog Surround 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 5.1"
-msgstr ""
+msgstr "Analog Surround 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 6.0"
-msgstr ""
+msgstr "Analog Surround 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 6.1"
-msgstr ""
+msgstr "Analog Surround 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 7.0"
-msgstr ""
+msgstr "Analog Surround 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
-msgstr ""
+msgstr "Analog Surround 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "Digital Stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "Digital Surround 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "Digital Surround 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "Digital Surround 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "Digital Stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "Analog Mono Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "Analog Stereo Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "Digital Stereo Duplex (IEC958)"
+
commit b54ea170b50242428e2be9e58fb8dc2f806633e5
Author: kmilos <kmilos at fedoraproject.org>
Date: Fri Oct 30 23:18:18 2009 +0000
Sending translation for Serbian
diff --git a/po/sr.po b/po/sr.po
index be03718..820b14d 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-16 22:10+0100\n"
+"POT-Creation-Date: 2009-10-30 10:22+0000\n"
+"PO-Revision-Date: 2009-10-30 22:51+0100\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian (sr) <fedora-trans-sr at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -2368,7 +2368,7 @@ msgstr "СнимаÑе виÑоке ÑаÑноÑÑи (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr "ÐвоÑÑÑано ÑелеÑониÑаÑе (HSP/HFP)"
+msgstr "ÐвоÑмеÑно ÑелеÑониÑаÑе (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
@@ -2377,217 +2377,203 @@ msgstr "PulseAudio звÑÑни ÑиÑÑем"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Ðзлазни ÑÑеÑаÑи"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "Улазни ÑÑеÑаÑи"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "ÐÑдио на @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "Улаз"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Улаз пÑикÑÑÑне ÑÑаниÑе"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ÐикÑоÑон пÑикÑÑÑне ÑÑаниÑе"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ÐиниÑа Ñ"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ÐикÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "СпоÑни микÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "УнÑÑÑаÑÑи звÑк"
+msgstr "УнÑÑÑаÑÑи микÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Радио"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Ðидео"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "СамоÑÑална конÑÑола поÑаÑаÑа"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Ðез ÑамоÑÑалне конÑÑоле поÑаÑаÑа"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ÐодизаÑе"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Ðез подизаÑа"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "ÐоÑаÑало"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Ðез поÑаÑала"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "Ðналогни Ñлаз"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "Ðналогни микÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "Ðналогна линиÑа Ñ"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Ðналогни Ñадио"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "Ðналогни видео"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "ÐÑазан излаз"
+msgstr "Ðналогни излаз"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "Ðналогне ÑлÑÑалиÑе"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Ðналогни излаз (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "Ðналогни моно излаз"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Ðналогни моно"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "СÑеÑео"
+msgstr "Ðналогни ÑÑеÑео"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "ÐкÑÑжÑÑÑÑи 4.1"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "ÐкÑÑжÑÑÑÑи 4.0"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "ÐкÑÑжÑÑÑÑи 4.1"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "ÐкÑÑжÑÑÑÑи 4.0"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "ÐкÑÑжÑÑÑÑи 4.1"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "ÐкÑÑжÑÑÑÑи 5.0"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "ÐкÑÑжÑÑÑÑи 5.1"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "ÐкÑÑжÑÑÑÑи 4.0"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "ÐкÑÑжÑÑÑÑи 4.1"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "ÐкÑÑжÑÑÑÑи 4.0"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "ÐкÑÑжÑÑÑÑи 7.1"
+msgstr "Ðналогни окÑÑжÑÑÑÑи 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ÐигиÑални ÑÑеÑео (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ÐигиÑални окÑÑжÑÑÑÑи 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ÐигиÑални окÑÑжÑÑÑÑи 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ÐигиÑални окÑÑжÑÑÑÑи 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ÐигиÑални ÑÑеÑео (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "ÐвоÑмеÑни аналогни моно"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "ÐвоÑмеÑни аналогни ÑÑеÑео"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ÐвоÑмеÑни дигиÑални ÑÑеÑео (IEC958)"
commit b18e123c72d9414475aab7014d6af10afc3b33d9
Author: kmilos <kmilos at fedoraproject.org>
Date: Fri Oct 30 23:18:50 2009 +0000
Sending translation for Serbian (Latin)
diff --git a/po/sr at latin.po b/po/sr at latin.po
index e6945ad..45e83d6 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-16 22:10+0100\n"
+"POT-Creation-Date: 2009-10-30 10:22+0000\n"
+"PO-Revision-Date: 2009-10-30 22:51+0100\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian (sr) <fedora-trans-sr at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -2371,7 +2371,7 @@ msgstr "Snimanje visoke taÄnosti (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr "Dvostrano telefoniranje (HSP/HFP)"
+msgstr "Dvosmerno telefoniranje (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
@@ -2380,217 +2380,203 @@ msgstr "PulseAudio zvuÄni sistem"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Izlazni ureÄaji"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "Ulazni ureÄaji"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Audio na @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "Ulaz"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Ulaz prikljuÄne stanice"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Mikrofon prikljuÄne stanice"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Linija u"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Spoljni mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Unutrašnji zvuk"
+msgstr "Unutrašnji mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Samostalna kontrola pojaÄanja"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Bez samostalne kontrole pojaÄanja"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Podizanje"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Bez podizanja"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "PojaÄalo"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Bez pojaÄala"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "Analogni ulaz"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "Analogni mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "Analogna linija u"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Analogni radio"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "Analogni video"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Prazan izlaz"
+msgstr "Analogni izlaz"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "Analogne slušalice"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Analogni izlaz (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "Analogni mono izlaz"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Analogni mono"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "Stereo"
+msgstr "Analogni stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "OkružujuÄi 4.1"
+msgstr "Analogni okružujuÄi 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "OkružujuÄi 4.0"
+msgstr "Analogni okružujuÄi 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "OkružujuÄi 4.1"
+msgstr "Analogni okružujuÄi 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "OkružujuÄi 4.0"
+msgstr "Analogni okružujuÄi 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "OkružujuÄi 4.1"
+msgstr "Analogni okružujuÄi 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "OkružujuÄi 5.0"
+msgstr "Analogni okružujuÄi 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "OkružujuÄi 5.1"
+msgstr "Analogni okružujuÄi 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "OkružujuÄi 4.0"
+msgstr "Analogni okružujuÄi 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "OkružujuÄi 4.1"
+msgstr "Analogni okružujuÄi 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "OkružujuÄi 4.0"
+msgstr "Analogni okružujuÄi 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "OkružujuÄi 7.1"
+msgstr "Analogni okružujuÄi 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "Digitalni stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "Digitalni okružujuÄi 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "Digitalni okružujuÄi 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "Digitalni okružujuÄi 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "Digitalni stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "Dvosmerni analogni mono"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "Dvosmerni analogni stereo"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "Dvosmerni digitalni stereo (IEC958)"
commit 5778b16f954b8f9d511ae8da658be6520b6a3a57
Author: vpv <vpv at fedoraproject.org>
Date: Mon Nov 9 13:04:10 2009 +0000
Sending translation for Finnish
diff --git a/po/fi.po b/po/fi.po
index 515def3..13b5e15 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -1,14 +1,14 @@
-# pulseaudio translation to Finnish (fi).
+# pavucontrol Finnish (fi) translation.
# Copyright (C) 2008 Timo Jyrinki
-# This file is distributed under the same license as the pulseaudio package.
-# Timo Jyrinki <timo.jyrinki at iki.fi>, 2008.
-# Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>, 2009.
+# This file is distributed under the same license as the pavucontrol package.
+# Timo Jyrinki <timo.jyrinki at iki.fi>
+# Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>, 2009
msgid ""
msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-15 13:24+0300\n"
+"POT-Creation-Date: 2009-11-09 09:45+0000\n"
+"PO-Revision-Date: 2009-11-09 15:03+0200\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
"MIME-Version: 1.0\n"
@@ -16,2821 +16,388 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
-#, c-format
-msgid "%s %s"
-msgstr "%s %s"
-
-#: ../src/modules/alsa/alsa-util.c:1106
-#, c-format
-msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
-msgstr ""
-"snd_pcm_avail() palautti poikkeuksellisen suuren arvon: %lu tavua (%lu ms).\n"
-"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
-"ongelmasta ALSA-kehittäjille."
-
-#: ../src/modules/alsa/alsa-util.c:1147
-#, c-format
-msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
-"lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
-msgstr ""
-"snd_pcm_delay() palautti poikkeuksellisen suuren arvon: %li tavua (%s%lu "
-"ms).\n"
-"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
-"ongelmasta ALSA-kehittäjille."
-
-#: ../src/modules/alsa/alsa-util.c:1194
-#, c-format
-msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
-msgstr ""
-"snd_pcm_mmap_begin() palautti poikkeuksellisen suuren arvon: %lu tavua (%lu "
-"ms).\n"
-"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
-"ongelmasta ALSA-kehittäjille."
-
-#: ../src/modules/module-always-sink.c:39
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Pidä aina vähintään yksi nielu ladattuna, vaikka se olisi tyhjä nielu"
-
-#: ../src/modules/module-always-sink.c:83
-msgid "Dummy Output"
-msgstr "Valeulostulo"
-
-#: ../src/modules/module-ladspa-sink.c:49
-msgid "Virtual LADSPA sink"
-msgstr "Virtuaalinen LADSPA-nielu"
-
-#: ../src/modules/module-ladspa-sink.c:53
-msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
-msgstr ""
-"sink_name=<nielun nimi> sink_properties=<nielun asetukset> "
-"master=<suodatettavan nielun nimi> format=<näytemuoto> "
-"rate=<näytteenottotaajuus> channels=<kanavien määrä> "
-"channel_map=<kanavakartta> plugin=<ladspa-liitännäisen nimi> label=<ladspa-"
-"liitännäisen nimiö (label)> control=<pilkulla erotettu luettelo "
-"syötteenhallinta-arvoja>"
-
-#: ../src/modules/module-null-sink.c:55
-msgid "Clocked NULL sink"
-msgstr "Kellotettu tyhjä nielu"
-
-#: ../src/modules/module-null-sink.c:291
-msgid "Null Output"
-msgstr "Tyhjä ulostulo"
-
-#: ../src/pulsecore/sink.c:2613
-msgid "Internal Audio"
-msgstr "Sisäinen äänentoisto"
-
-#: ../src/pulsecore/sink.c:2618
-msgid "Modem"
-msgstr "Modeemi"
-
-#: ../src/daemon/ltdl-bind-now.c:124
-msgid "Failed to find original lt_dlopen loader."
-msgstr "Alkuperäisen lt_dlopen-lataimen löytäminen epäonnistui."
-
-#: ../src/daemon/ltdl-bind-now.c:129
-msgid "Failed to allocate new dl loader."
-msgstr "Uuden dl-lataaminen varaaminen epäonnistui."
-
-#: ../src/daemon/ltdl-bind-now.c:142
-msgid "Failed to add bind-now-loader."
-msgstr "bind-now-loaderin lisääminen epäonnistui."
-
-#: ../src/daemon/main.c:141
-#, c-format
-msgid "Got signal %s."
-msgstr "Saatiin signaali %s."
-
-#: ../src/daemon/main.c:168
-msgid "Exiting."
-msgstr "Poistutaan."
-
-#: ../src/daemon/main.c:186
-#, c-format
-msgid "Failed to find user '%s'."
-msgstr "Käyttäjää â%sâ ei löydetty."
-
-#: ../src/daemon/main.c:191
-#, c-format
-msgid "Failed to find group '%s'."
-msgstr "Ryhmää â%sâ ei löydetty."
-
-#: ../src/daemon/main.c:195
-#, c-format
-msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr "Löydettiin käyttäjä â%sâ (UID %lu) ja ryhmä â%sâ (GID %lu)."
-
-#: ../src/daemon/main.c:200
-#, c-format
-msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "Käyttäjän â%sâ ja ryhmän â%sâ GID:t eivät vastaa toisiaan."
-
-#: ../src/daemon/main.c:205
-#, c-format
-msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "Käyttäjän â%sâ kotihakemisto ei ole â%sâ, ohitetaan."
-
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
-#, c-format
-msgid "Failed to create '%s': %s"
-msgstr "Hakemiston â%sâ luominen epäonnistui: %s"
-
-#: ../src/daemon/main.c:220
-#, c-format
-msgid "Failed to change group list: %s"
-msgstr "Ryhmäluettelon vaihtaminen epäonnistui: %s"
-
-#: ../src/daemon/main.c:236
-#, c-format
-msgid "Failed to change GID: %s"
-msgstr "GID:n vaihtaminen epäonnistui: %s"
-
-#: ../src/daemon/main.c:252
-#, c-format
-msgid "Failed to change UID: %s"
-msgstr "UID:n vaihtaminen epäonnistui: %s"
-
-#: ../src/daemon/main.c:271
-msgid "Successfully dropped root privileges."
-msgstr "Root-oikeuksista luopuminen onnistui."
-
-#: ../src/daemon/main.c:279
-msgid "System wide mode unsupported on this platform."
-msgstr "Järjestelmänlaajuista tilaa ei tueta tällä alustalla."
-
-#: ../src/daemon/main.c:297
-#, c-format
-msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr "setrlimit(%s, (%u, %u)) epäonnistui: %s"
-
-#: ../src/daemon/main.c:474
-msgid "Failed to parse command line."
-msgstr "Komentorivin jäsentäminen epäonnistui."
-
-#: ../src/daemon/main.c:541
-msgid "Daemon not running"
-msgstr "Taustaprosessi ei ole käynnissä"
-
-#: ../src/daemon/main.c:543
-#, c-format
-msgid "Daemon running as PID %u"
-msgstr "Taustaprosessi käynnissä prosessitunnisteella %u"
-
-#: ../src/daemon/main.c:553
-#, c-format
-msgid "Failed to kill daemon: %s"
-msgstr "Taustaprosessin lopettaminen epäonnistui: %s"
-
-#: ../src/daemon/main.c:571
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
-msgstr ""
-"Tätä ohjelmaa ei ole tarkoitettu suoritettavaksi pääkäyttäjänä (ellei --"
-"system ole määritelty)."
-
-#: ../src/daemon/main.c:573
-msgid "Root privileges required."
-msgstr "Pääkäyttäjän (root) oikeudet vaaditaan."
-
-#: ../src/daemon/main.c:578
-msgid "--start not supported for system instances."
-msgstr "--start-valitsinta ei tueta järjestelmätilassa."
-
-#: ../src/daemon/main.c:583
-msgid "Running in system mode, but --disallow-exit not set!"
-msgstr ""
-"Suoritetaan järjestelmätilassa, mutta --disallow-exit ei ole asetettuna!"
-
-#: ../src/daemon/main.c:586
-msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
-"Suoritetaan järjestelmätilassa, mutta -disallow-module-loading ei ole "
-"asetettuna!"
-
-#: ../src/daemon/main.c:589
-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:594
-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:621
-msgid "Failed to acquire stdio."
-msgstr "stdio:n saaminen epäonnistui."
-
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
-msgstr "putki epäonnistui: %s"
-
-#: ../src/daemon/main.c:632
-#, c-format
-msgid "fork() failed: %s"
-msgstr "fork() epäonnistui: %s"
-
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
-#, c-format
-msgid "read() failed: %s"
-msgstr "read() epäonnistui: %s"
-
-#: ../src/daemon/main.c:652
-msgid "Daemon startup failed."
-msgstr "Taustaprosessin käynnistys epäonnistui."
-
-#: ../src/daemon/main.c:654
-msgid "Daemon startup successful."
-msgstr "Taustaprosessin käynnistys onnistui."
-
-#: ../src/daemon/main.c:731
-#, c-format
-msgid "This is PulseAudio %s"
-msgstr "Tämä on PulseAudio %s"
-
-#: ../src/daemon/main.c:732
-#, c-format
-msgid "Compilation host: %s"
-msgstr "Käännöksen isäntäkone: %s"
-
-#: ../src/daemon/main.c:733
-#, c-format
-msgid "Compilation CFLAGS: %s"
-msgstr "Käännösaikaiset C-liput (CFLAGS): %s"
-
-#: ../src/daemon/main.c:736
-#, c-format
-msgid "Running on host: %s"
-msgstr "Käynnissä isäntäkoneella: %s"
-
-#: ../src/daemon/main.c:739
-#, c-format
-msgid "Found %u CPUs."
-msgstr "Löydettiin %u CPU:ta."
-
-#: ../src/daemon/main.c:741
-#, c-format
-msgid "Page size is %lu bytes"
-msgstr "Sivun koko on %lu tavua"
-
-#: ../src/daemon/main.c:744
-msgid "Compiled with Valgrind support: yes"
-msgstr "Käännetty Valgrind-tuella: kyllä"
-
-#: ../src/daemon/main.c:746
-msgid "Compiled with Valgrind support: no"
-msgstr "Käännetty Valgrind-tuella: ei"
-
-#: ../src/daemon/main.c:749
-#, c-format
-msgid "Running in valgrind mode: %s"
-msgstr "Käynnissä valgrind-tilassa: %s"
-
-#: ../src/daemon/main.c:752
-msgid "Optimized build: yes"
-msgstr "Optimoitu rakentaminen: kyllä"
-
-#: ../src/daemon/main.c:754
-msgid "Optimized build: no"
-msgstr "Optimoitu rakentaminen: ei"
-
-#: ../src/daemon/main.c:758
-msgid "NDEBUG defined, all asserts disabled."
-msgstr "NDEBUG on määritelty, kaikki assertit ovat poissa käytöstä."
-
-#: ../src/daemon/main.c:760
-msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr "FASTPATH on määritelty, vain fast path -assertit ovat poissa käytöstä."
-
-#: ../src/daemon/main.c:762
-msgid "All asserts enabled."
-msgstr "Kaikki assertit ovat käytössä."
-
-#: ../src/daemon/main.c:766
-msgid "Failed to get machine ID"
-msgstr "Konetunnisteen nouto epäonnistui"
-
-#: ../src/daemon/main.c:769
-#, c-format
-msgid "Machine ID is %s."
-msgstr "Konetunniste on %s."
-
-#: ../src/daemon/main.c:773
-#, c-format
-msgid "Session ID is %s."
-msgstr "Istunnon tunniste on %s."
-
-#: ../src/daemon/main.c:779
-#, c-format
-msgid "Using runtime directory %s."
-msgstr "Käytetään ajonaikaista hakemistoa %s."
-
-#: ../src/daemon/main.c:784
-#, c-format
-msgid "Using state directory %s."
-msgstr "Käytetään tilahakemistoa %s."
-
-#: ../src/daemon/main.c:787
-#, c-format
-msgid "Using modules directory %s."
-msgstr "Käytetään moduulihakemistoa %s."
-
-#: ../src/daemon/main.c:789
-#, c-format
-msgid "Running in system mode: %s"
-msgstr "Suoritetaan järjestelmätilassa: %s"
-
-#: ../src/daemon/main.c:792
-msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
-msgstr ""
-"PA:ta suoritetaan järjestelmätilassa. Näin ei luultavasti pitäisi tehdä.\n"
-"Jos silti teet näin, on sinun vikasi jos kaikki ei toimikaan odotetusti.\n"
-"Lisätietoja siitä, miksi järjestelmätilan käyttäminen on yleensä huono "
-"ajatus on osoitteessa http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode"
-
-#: ../src/daemon/main.c:809
-msgid "pa_pid_file_create() failed."
-msgstr "pa_pid_file_create() epäonnistui."
-
-#: ../src/daemon/main.c:819
-msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr "Korkean tarkkuuden ajastimet käytettävissä."
-
-#: ../src/daemon/main.c:821
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
-msgstr ""
-"Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
-"suositeltava!"
-
-#: ../src/daemon/main.c:844
-msgid "pa_core_new() failed."
-msgstr "pa_core_new() epäonnistui."
-
-#: ../src/daemon/main.c:904
-msgid "Failed to initialize daemon."
-msgstr "Taustaprosessin alustus epäonnistui."
-
-#: ../src/daemon/main.c:909
-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:926
-msgid "Daemon startup complete."
-msgstr "Taustaprosessin käynnistys valmis."
-
-#: ../src/daemon/main.c:932
-msgid "Daemon shutdown initiated."
-msgstr "Taustaprosessin sulkeminen käynnistetty."
-
-#: ../src/daemon/main.c:954
-msgid "Daemon terminated."
-msgstr "Taustaprosessi lopetettu."
-
-#: ../src/daemon/cmdline.c:115
-#, c-format
-msgid ""
-"%s [options]\n"
-"\n"
-"COMMANDS:\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
-" --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"
-" -k --kill Kill 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"
-" with elevated RLIMIT_NICE)\n"
-" --realtime[=BOOL] Try to enable realtime scheduling\n"
-" (only available as root, when SUID "
-"or\n"
-" with elevated RLIMIT_RTPRIO)\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"
-" time passed\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"
-" 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-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"
-" possible values)\n"
-" --use-pid-file[=BOOL] Create a PID file\n"
-" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
-" platforms that support it.\n"
-" --disable-shm[=BOOL] Disable shared memory support.\n"
-"\n"
-"STARTUP SCRIPT:\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"
-" after startup\n"
-"\n"
-" -n Don't load default script file\n"
-msgstr ""
-"%s [valitsimet]\n"
-"\n"
-"KOMENNOT:\n"
-" -h, --help Näytä tämä ohje\n"
-" --version Näytä versio\n"
-" --dump-conf Tulosta oletusasetukset\n"
-" --dump-modules Tulosta saatavilla olevien\n"
-" moduulien luettelo\n"
-" --dump-resample-methods Tulosta saatavilla\n"
-" olevat\n"
-" uudelleennäytteistystavat\n"
-" --cleanup-shm Puhdista vanhentuneet jaetun\n"
-" muistin segmentit\n"
-" --start Käynnistä taustaprosessi, jos se\n"
-" ei ole käynnissä\n"
-" -k --kill Tapa suoritettava taustaprosessi\n"
-" --check Tarkista onko\n"
-" taustaprosessi suoritettavana\n"
-" (palauttaa vain lopetuskoodin)\n"
-"\n"
-"VALITSIMET:\n"
-" --system[=BOOL] Suorita järjestelmänlaajuisena\n"
-" -D, --daemonize[=BOOL] Vaihda\n"
-" taustaprosessiksi käynnistyksen\n"
-" jälkeen\n"
-" --fail[=BOOL] Lopeta kun käynnistys epäonnistuu\n"
-" --high-priority[=BOOL] Yritä asettaa korkea nice-taso\n"
-" (käytettävissä vain root-\n"
-" käyttäjänä, SUIDilla tai\n"
-" kohotetulla RLIMIT_NICE-arvolla)\n"
-" --realtime[=BOOL] Yritä asettaa reaaliaikainen\n"
-" ajoitus (käytettävissä vain\n"
-" root-käyttäjänä, SUIDilla tai\n"
-" kohotetulla RLIMIT_RTPRIO-arvolla)\n"
-" --disallow-module-loading[=BOOL] Kiellä käyttäjän pyytämä moduulin\n"
-" lataus tai poisto käynnistyksen\n"
-" jälkeen\n"
-" --disallow-exit[=BOOL] Kiellä käyttäjän pyytämä\n"
-" lopettaminen\n"
-" --exit-idle-time=SEK Lopeta taustaprosessi, kun se on\n"
-" toimettomana ja tämä aika on\n"
-" kulunut\n"
-" --module-idle-time=SEK Poista automaattisesti ladatut\n"
-" moduulit, kun taustaprosessi on\n"
-" toimettomana ja tämä aika on\n"
-" kulunut\n"
-" --scache-idle-time=SEK Poista automaattisesti ladatut\n"
-" näytteet, kun taustaprosessi on\n"
-" toimettomana ja tämä aika on\n"
-" kulunut\n"
-" --log-level[=TASO] Aseta tai kasvata\n"
-" lokikirjoituksen tasoa\n"
-" -v Kasvata tulosteiden\n"
-" yksityiskohtaisuutta\n"
-" --log-target={auto,syslog,stderr} Aseta lokikirjoituksen kohde\n"
-" --log-meta[=BOOL] Lisää koodikohta\n"
-" lokiviesteihin\n"
-" --log-time[=BOOL] Lisää aikaleima lokiviesteihin\n"
-" --log-backtrace=KEHYKSET Lisää pinolistaus lokiviesteihin\n"
-" -p, --dl-search-path=POLKU Aseta dynaamisten jaettujen\n"
-" objektien (liitännäisten)\n"
-" hakupolku\n"
-" --resample-method=TAPA Käytä määritettyä\n"
-" uudelleennäytteistyksen tapaa\n"
-" (--dump-resample-methods\n"
-" luetteloi mahdolliset arvot)\n"
-" --use-pid-file[=BOOL] Luo PID-tiedosto\n"
-" --no-cpu-limit[=BOOL] Ãlä asenna suoritinkuorman\n"
-" rajoitinta alustoilla, jotka\n"
-" tukevat sitä\n"
-" --disable-shm[=BOOL] Poista jaetun muistin tuki käytöstä\n"
-"\n"
-"ALOITUSKOMENTOSARJA:\n"
-" -L, --load=\"MODUULIN ARGUMENTIT\" Lataa liitännäismoduuli annetulla\n"
-" argumentilla\n"
-" -F, --file=TIEDOSTO Suorita annettu komentosarja\n"
-" -C Avaa komentokehote nykyiseen\n"
-" päätteeseen käynnistyksen jälkeen\n"
-"\n"
-" -n Ãlä lataa oletuskomentosarja-\n"
-" tiedostoa\n"
-
-#: ../src/daemon/cmdline.c:247
-msgid "--daemonize expects boolean argument"
-msgstr "--daemonize vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:254
-msgid "--fail expects boolean argument"
-msgstr "--fail vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:264
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of debug, info, notice, warn, error)."
-msgstr ""
-"--log-level vaatii lokikirjoituksen tason argumentiksi (joko numero väliltä "
-"0..4 tai yksi seuraavista: debug, info, notice, warn, error)."
-
-#: ../src/daemon/cmdline.c:276
-msgid "--high-priority expects boolean argument"
-msgstr "--high-priority vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:283
-msgid "--realtime expects boolean argument"
-msgstr "--realtime vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:290
-msgid "--disallow-module-loading expects boolean argument"
-msgstr "--disallow-module-loading vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:297
-msgid "--disallow-exit expects boolean argument"
-msgstr "--disallow-exit vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:304
-msgid "--use-pid-file expects boolean argument"
-msgstr "--use-pid-file vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:321
-msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr ""
-"Virheellinen lokikirjoituksen kohde: käytä jotain seuraavista: âsyslogâ, "
-"âstderrâ tai âautoâ."
-
-#: ../src/daemon/cmdline.c:328
-msgid "--log-time expects boolean argument"
-msgstr "--log-time vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:335
-msgid "--log-meta expects boolean argument"
-msgstr "--log-meta vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:354
-#, c-format
-msgid "Invalid resample method '%s'."
-msgstr "Virheellinen uudelleennäytteistyksen tapa â%sâ."
-
-#: ../src/daemon/cmdline.c:361
-msgid "--system expects boolean argument"
-msgstr "--system vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:368
-msgid "--no-cpu-limit expects boolean argument"
-msgstr "--no-cpu-limit vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/cmdline.c:375
-msgid "--disable-shm expects boolean argument"
-msgstr "--disable-shm vaatii totuusarvoisen argumentin"
-
-#: ../src/daemon/dumpmodules.c:60
-#, c-format
-msgid "Name: %s\n"
-msgstr "Nimi: %s\n"
-
-#: ../src/daemon/dumpmodules.c:63
-#, c-format
-msgid "No module information available\n"
-msgstr "Moduulitietoja ei saatavilla\n"
-
-#: ../src/daemon/dumpmodules.c:66
-#, c-format
-msgid "Version: %s\n"
-msgstr "Versio: %s\n"
-
-#: ../src/daemon/dumpmodules.c:68
-#, c-format
-msgid "Description: %s\n"
-msgstr "Kuvaus: %s\n"
-
-#: ../src/daemon/dumpmodules.c:70
-#, c-format
-msgid "Author: %s\n"
-msgstr "Tekijä: %s\n"
-
-#: ../src/daemon/dumpmodules.c:72
-#, c-format
-msgid "Usage: %s\n"
-msgstr "Käyttö: %s\n"
-
-#: ../src/daemon/dumpmodules.c:73
-#, c-format
-msgid "Load Once: %s\n"
-msgstr "Lataa kerran: %s\n"
-
-#: ../src/daemon/dumpmodules.c:75
-#, c-format
-msgid "DEPRECATION WARNING: %s\n"
-msgstr "VAROITUS VANHENTUNEISUUDESTA: %s\n"
-
-#: ../src/daemon/dumpmodules.c:79
-#, c-format
-msgid "Path: %s\n"
-msgstr "Polku: %s\n"
-
-#: ../src/daemon/daemon-conf.c:232
-#, c-format
-msgid "[%s:%u] Invalid log target '%s'."
-msgstr "[%s:%u] Virheellinen lokikirjoituksen kohde â%sâ."
-
-#: ../src/daemon/daemon-conf.c:248
-#, c-format
-msgid "[%s:%u] Invalid log level '%s'."
-msgstr "[%s:%u] Virheellinen lokikirjoituksen taso â%sâ."
-
-#: ../src/daemon/daemon-conf.c:264
-#, c-format
-msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "[%s:%u] Virheellinen uudelleennäytteistyksen tapa â%sâ."
-
-#: ../src/daemon/daemon-conf.c:287
-#, c-format
-msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "[%s:%u] Virheellinen rlimit â%sâ."
-
-#: ../src/daemon/daemon-conf.c:294
-#, c-format
-msgid "[%s:%u] rlimit not supported on this platform."
-msgstr "[%s:%u] rlimitiä ei tueta tällä alustalla."
-
-#: ../src/daemon/daemon-conf.c:310
-#, c-format
-msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "[%s:%u] Virheellinen näytemuoto â%sâ."
-
-#: ../src/daemon/daemon-conf.c:328
-#, c-format
-msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "[%s:%u] Virheellinen näytteenottotaajuus â%sâ."
-
-#: ../src/daemon/daemon-conf.c:352
-#, c-format
-msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "[%s:%u] Virheelliset näytekanavat â%sâ."
-
-#: ../src/daemon/daemon-conf.c:370
-#, c-format
-msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "[%s:%u] Virheellinen kanavakartta â%sâ."
-
-#: ../src/daemon/daemon-conf.c:388
-#, c-format
-msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr "[%s:%u] Virheellinen fragmenttimäärä â%sâ."
-
-#: ../src/daemon/daemon-conf.c:406
-#, c-format
-msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "[%s:%u] Virheellinen fragmenttikoko â%sâ."
-
-#: ../src/daemon/daemon-conf.c:424
-#, c-format
-msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "[%s:%u] Virheellinen nice-taso â%sâ."
-
-#: ../src/daemon/daemon-conf.c:546
-#, c-format
-msgid "Failed to open configuration file: %s"
-msgstr "Asetustiedoston avaaminen epäonnistui: %s"
-
-#: ../src/daemon/daemon-conf.c:562
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
-msgstr ""
-"Kanavien oletusmäärä ja oletuskanavakartan kanavien määrä poikkeavat "
-"toisistaan."
-
-#: ../src/daemon/daemon-conf.c:638
-#, c-format
-msgid "### Read from configuration file: %s ###\n"
-msgstr "### Luettu asetustiedostosta: %s ###\n"
-
-#: ../src/daemon/caps.c:62
-msgid "Cleaning up privileges."
-msgstr "Luovutaan oikeuksista."
-
-#: ../src/daemon/pulseaudio.desktop.in.h:1
-msgid "PulseAudio Sound System"
-msgstr "PulseAudio-äänijärjestelmä"
-
-#: ../src/daemon/pulseaudio.desktop.in.h:2
-msgid "Start the PulseAudio Sound System"
-msgstr "Käynnistä PulseAudio-äänijärjestelmä"
-
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
-msgid "Mono"
-msgstr "Mono"
-
-#: ../src/pulse/channelmap.c:107
-msgid "Front Center"
-msgstr "Keski"
-
-#: ../src/pulse/channelmap.c:108
-msgid "Front Left"
-msgstr "Vasen etu"
-
-#: ../src/pulse/channelmap.c:109
-msgid "Front Right"
-msgstr "Oikea etu"
-
-#: ../src/pulse/channelmap.c:111
-msgid "Rear Center"
-msgstr "Takakeski"
-
-#: ../src/pulse/channelmap.c:112
-msgid "Rear Left"
-msgstr "Vasen taka"
-
-#: ../src/pulse/channelmap.c:113
-msgid "Rear Right"
-msgstr "Oikea taka"
-
-#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Alataajuus"
-
-#: ../src/pulse/channelmap.c:117
-msgid "Front Left-of-center"
-msgstr "Vasemmalle keskeltä etu"
-
-#: ../src/pulse/channelmap.c:118
-msgid "Front Right-of-center"
-msgstr "Oikealle keskeltä etu"
-
-#: ../src/pulse/channelmap.c:120
-msgid "Side Left"
-msgstr "Vasen sivu"
-
-#: ../src/pulse/channelmap.c:121
-msgid "Side Right"
-msgstr "Oikea sivu"
-
-#: ../src/pulse/channelmap.c:123
-msgid "Auxiliary 0"
-msgstr "Avustava 0"
-
-#: ../src/pulse/channelmap.c:124
-msgid "Auxiliary 1"
-msgstr "Avustava 1"
-
-#: ../src/pulse/channelmap.c:125
-msgid "Auxiliary 2"
-msgstr "Avustava 2"
-
-#: ../src/pulse/channelmap.c:126
-msgid "Auxiliary 3"
-msgstr "Avustava 3"
-
-#: ../src/pulse/channelmap.c:127
-msgid "Auxiliary 4"
-msgstr "Avustava 4"
-
-#: ../src/pulse/channelmap.c:128
-msgid "Auxiliary 5"
-msgstr "Avustava 5"
-
-#: ../src/pulse/channelmap.c:129
-msgid "Auxiliary 6"
-msgstr "Avustava 6"
-
-#: ../src/pulse/channelmap.c:130
-msgid "Auxiliary 7"
-msgstr "Avustava 7"
-
-#: ../src/pulse/channelmap.c:131
-msgid "Auxiliary 8"
-msgstr "Avustava 8"
-
-#: ../src/pulse/channelmap.c:132
-msgid "Auxiliary 9"
-msgstr "Avustava 9"
-
-#: ../src/pulse/channelmap.c:133
-msgid "Auxiliary 10"
-msgstr "Avustava 10"
-
-#: ../src/pulse/channelmap.c:134
-msgid "Auxiliary 11"
-msgstr "Avustava 11"
-
-#: ../src/pulse/channelmap.c:135
-msgid "Auxiliary 12"
-msgstr "Avustava 12"
-
-#: ../src/pulse/channelmap.c:136
-msgid "Auxiliary 13"
-msgstr "Avustava 13"
-
-#: ../src/pulse/channelmap.c:137
-msgid "Auxiliary 14"
-msgstr "Avustava 14"
-
-#: ../src/pulse/channelmap.c:138
-msgid "Auxiliary 15"
-msgstr "Avustava 15"
-
-#: ../src/pulse/channelmap.c:139
-msgid "Auxiliary 16"
-msgstr "Avustava 16"
-
-#: ../src/pulse/channelmap.c:140
-msgid "Auxiliary 17"
-msgstr "Avustava 17"
-
-#: ../src/pulse/channelmap.c:141
-msgid "Auxiliary 18"
-msgstr "Avustava 18"
-
-#: ../src/pulse/channelmap.c:142
-msgid "Auxiliary 19"
-msgstr "Avustava 19"
-
-#: ../src/pulse/channelmap.c:143
-msgid "Auxiliary 20"
-msgstr "Avustava 20"
-
-#: ../src/pulse/channelmap.c:144
-msgid "Auxiliary 21"
-msgstr "Avustava 21"
-
-#: ../src/pulse/channelmap.c:145
-msgid "Auxiliary 22"
-msgstr "Avustava 22"
-
-#: ../src/pulse/channelmap.c:146
-msgid "Auxiliary 23"
-msgstr "Avustava 23"
-
-#: ../src/pulse/channelmap.c:147
-msgid "Auxiliary 24"
-msgstr "Avustava 24"
-
-#: ../src/pulse/channelmap.c:148
-msgid "Auxiliary 25"
-msgstr "Avustava 25"
-
-#: ../src/pulse/channelmap.c:149
-msgid "Auxiliary 26"
-msgstr "Avustava 26"
-
-#: ../src/pulse/channelmap.c:150
-msgid "Auxiliary 27"
-msgstr "Avustava 27"
-
-#: ../src/pulse/channelmap.c:151
-msgid "Auxiliary 28"
-msgstr "Avustava 28"
-
-#: ../src/pulse/channelmap.c:152
-msgid "Auxiliary 29"
-msgstr "Avustava 29"
-
-#: ../src/pulse/channelmap.c:153
-msgid "Auxiliary 30"
-msgstr "Avustava 30"
-
-#: ../src/pulse/channelmap.c:154
-msgid "Auxiliary 31"
-msgstr "Avustava 31"
-
-#: ../src/pulse/channelmap.c:156
-msgid "Top Center"
-msgstr "Keski ylä"
-
-#: ../src/pulse/channelmap.c:158
-msgid "Top Front Center"
-msgstr "Keski ylä etu"
-
-#: ../src/pulse/channelmap.c:159
-msgid "Top Front Left"
-msgstr "Vasen ylä etu"
-
-#: ../src/pulse/channelmap.c:160
-msgid "Top Front Right"
-msgstr "Oikea ylä etu"
-
-#: ../src/pulse/channelmap.c:162
-msgid "Top Rear Center"
-msgstr "Keski ylä taka"
-
-#: ../src/pulse/channelmap.c:163
-msgid "Top Rear Left"
-msgstr "Vasen ylä taka"
-
-#: ../src/pulse/channelmap.c:164
-msgid "Top Rear Right"
-msgstr "Oikea ylä taka"
-
-#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
-msgid "(invalid)"
-msgstr "(virheellinen)"
-
-#: ../src/pulse/channelmap.c:761
-msgid "Stereo"
-msgstr "Stereo"
-
-#: ../src/pulse/channelmap.c:766
-msgid "Surround 4.0"
-msgstr "4.0-tilaääni"
-
-#: ../src/pulse/channelmap.c:772
-msgid "Surround 4.1"
-msgstr "4.1-tilaääni"
-
-#: ../src/pulse/channelmap.c:778
-msgid "Surround 5.0"
-msgstr "5.0-tilaääni"
-
-#: ../src/pulse/channelmap.c:784
-msgid "Surround 5.1"
-msgstr "5.1-tilaääni"
-
-#: ../src/pulse/channelmap.c:791
-msgid "Surround 7.1"
-msgstr "7.1-tilaääni"
-
-#: ../src/pulse/error.c:43
-msgid "OK"
-msgstr "OK"
-
-#: ../src/pulse/error.c:44
-msgid "Access denied"
-msgstr "Pääsy evätty"
-
-#: ../src/pulse/error.c:45
-msgid "Unknown command"
-msgstr "Tuntematon komento"
-
-#: ../src/pulse/error.c:46
-msgid "Invalid argument"
-msgstr "Virheellinen argumentti"
-
-#: ../src/pulse/error.c:47
-msgid "Entity exists"
-msgstr "Entiteetti on jo olemassa"
-
-#: ../src/pulse/error.c:48
-msgid "No such entity"
-msgstr "Ei kyseisenlaista entiteettiä"
-
-#: ../src/pulse/error.c:49
-msgid "Connection refused"
-msgstr "Yhteys hylätty"
-
-#: ../src/pulse/error.c:50
-msgid "Protocol error"
-msgstr "Yhteyskäytäntövirhe"
-
-#: ../src/pulse/error.c:51
-msgid "Timeout"
-msgstr "Aikakatkaisu"
-
-#: ../src/pulse/error.c:52
-msgid "No authorization key"
-msgstr "Ei todentamisavainta"
-
-#: ../src/pulse/error.c:53
-msgid "Internal error"
-msgstr "Sisäinen virhe"
-
-#: ../src/pulse/error.c:54
-msgid "Connection terminated"
-msgstr "Yhteys katkennut"
-
-#: ../src/pulse/error.c:55
-msgid "Entity killed"
-msgstr "Entiteetti lopetettu"
-
-#: ../src/pulse/error.c:56
-msgid "Invalid server"
-msgstr "Virheellinen palvelin"
-
-#: ../src/pulse/error.c:57
-msgid "Module initalization failed"
-msgstr "Moduulin alustus epäonnistui"
-
-#: ../src/pulse/error.c:58
-msgid "Bad state"
-msgstr "Virheellinen tila"
-
-#: ../src/pulse/error.c:59
-msgid "No data"
-msgstr "Ei dataa"
-
-#: ../src/pulse/error.c:60
-msgid "Incompatible protocol version"
-msgstr "Epäyhteensopiva yhteyskäytännön versio"
-
-#: ../src/pulse/error.c:61
-msgid "Too large"
-msgstr "Liian suuri"
-
-#: ../src/pulse/error.c:62
-msgid "Not supported"
-msgstr "Ei tuettu"
-
-#: ../src/pulse/error.c:63
-msgid "Unknown error code"
-msgstr "Tuntematon virhekoodi"
-
-#: ../src/pulse/error.c:64
-msgid "No such extension"
-msgstr "Ei kyseisenlaista laajennusta"
-
-#: ../src/pulse/error.c:65
-msgid "Obsolete functionality"
-msgstr "Puuttuva toiminnallisuus"
+#: ../src/pavucontrol.desktop.in.h:1
+msgid "Adjust the volume level"
+msgstr "Säädä äänenvoimakkuutta"
-#: ../src/pulse/error.c:66
-msgid "Missing implementation"
-msgstr "Puuttuva toteutus"
+#: ../src/pavucontrol.desktop.in.h:2 ../src/pavucontrol.cc:476
+msgid "PulseAudio Volume Control"
+msgstr "PulseAudion äänenvoimakkuuden hallinta"
-#: ../src/pulse/error.c:67
-msgid "Client forked"
-msgstr "Asiakasohjelma haarautui"
+#: ../src/pavucontrol.desktop.in.h:3 ../src/pavucontrol.glade.h:32
+msgid "Volume Control"
+msgstr "Ãänenvoimakkuus"
-#: ../src/pulse/error.c:68
-msgid "Input/Output error"
-msgstr "Siirräntävirhe"
+#: ../src/pavucontrol.glade.h:2
+#, no-c-format
+msgid "50%"
+msgstr "50%"
-#: ../src/pulse/error.c:69
-msgid "Device or resource busy"
-msgstr "Laite tai resurssi on varattu"
+#: ../src/pavucontrol.glade.h:3
+msgid "<b>Port:</b>"
+msgstr "<b>Portti:</b>"
-#: ../src/pulse/sample.c:172
-#, c-format
-msgid "%s %uch %uHz"
-msgstr "%s %u kan. %uHz"
-
-#: ../src/pulse/sample.c:184
-#, c-format
-msgid "%0.1f GiB"
-msgstr "%0.1f GiB"
-
-#: ../src/pulse/sample.c:186
-#, c-format
-msgid "%0.1f MiB"
-msgstr "%0.1f MiB"
-
-#: ../src/pulse/sample.c:188
-#, c-format
-msgid "%0.1f KiB"
-msgstr "%0.1f KiB"
-
-#: ../src/pulse/sample.c:190
-#, c-format
-msgid "%u B"
-msgstr "%u B"
+#: ../src/pavucontrol.glade.h:4
+msgid "<b>Profile:</b>"
+msgstr "<b>Profiili:</b>"
-#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
-msgid "XOpenDisplay() failed"
-msgstr "XOpenDisplay() epäonnistui"
+#: ../src/pavucontrol.glade.h:5
+msgid "<b>S_how:</b>"
+msgstr "<b>N_äytä:</b>"
-#: ../src/pulse/client-conf-x11.c:93
-msgid "Failed to parse cookie data"
-msgstr "Evästetietojen jäsennys epäonnistui"
+#: ../src/pavucontrol.glade.h:6
+msgid "<b>Sho_w:</b>"
+msgstr "<b>Nä_ytä:</b>"
-#: ../src/pulse/client-conf.c:111
-#, c-format
-msgid "Failed to open configuration file '%s': %s"
-msgstr "Asetustiedoston avaaminen epäonnistui: â%sâ: %s"
+#: ../src/pavucontrol.glade.h:7
+msgid "<b>_Show:</b>"
+msgstr "<b>_Näytä:</b>"
-#: ../src/pulse/context.c:550
-msgid "No cookie loaded. Attempting to connect without."
-msgstr "Ei ladattua evästettä. Yritetään yhdistämistä ilman."
+#: ../src/pavucontrol.glade.h:8
+msgid "<b>left-front</b>"
+msgstr "<b>vasen-etu</b>"
-#: ../src/pulse/context.c:693
-#, c-format
-msgid "fork(): %s"
-msgstr "fork(): %s"
+#: ../src/pavucontrol.glade.h:9
+msgid "<i>No application is currently playing audio.</i>"
+msgstr "<i>Yksikään sovellus ei tällä hetkellä toista ääntä.</i>"
-#: ../src/pulse/context.c:748
-#, c-format
-msgid "waitpid(): %s"
-msgstr "waitpid(): %s"
+#: ../src/pavucontrol.glade.h:10
+msgid "<i>No application is currently recording audio.</i>"
+msgstr "<i>Yksikään sovellus ei tällä hetkellä nauhoita ääntä.</i>"
-#: ../src/pulse/context.c:1438
-#, c-format
-msgid "Received message for unknown extension '%s'"
-msgstr "Saatiin viesti tuntemattomalle laajennokselle â%sâ"
+#: ../src/pavucontrol.glade.h:11
+msgid "<i>No cards available for configuration</i>"
+msgstr "<i>Yhtäkään äänikorttia ei ole käytettävissä</i>"
-#: ../src/utils/pacat.c:108
-#, c-format
-msgid "Failed to drain stream: %s"
-msgstr "Virran tyhjentäminen epäonnistui: %s"
-
-#: ../src/utils/pacat.c:113
-msgid "Playback stream drained."
-msgstr "Toistovirta on tyhjennetty."
-
-#: ../src/utils/pacat.c:123
-msgid "Draining connection to server."
-msgstr "Tyhjennetään yhteyttä palvelimelle."
-
-#: ../src/utils/pacat.c:136
-#, c-format
-msgid "pa_stream_drain(): %s"
-msgstr "pa_stream_drain(): %s"
-
-#: ../src/utils/pacat.c:159
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:197
-#, c-format
-msgid "pa_stream_begin_write() failed: %s"
-msgstr "pa_stream_write() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
-#, c-format
-msgid "pa_stream_peek() failed: %s"
-msgstr "pa_stream_peek() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:307
-msgid "Stream successfully created."
-msgstr "Virran luonti onnistui."
-
-#: ../src/utils/pacat.c:310
-#, c-format
-msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr "pa_stream_get_buffer_attr() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:314
-#, c-format
-msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "Puskuritiedot: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-
-#: ../src/utils/pacat.c:317
-#, c-format
-msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "Puskuritiedot: maxlength=%u, fragsize=%u"
-
-#: ../src/utils/pacat.c:321
-#, c-format
-msgid "Using sample spec '%s', channel map '%s'."
-msgstr "Käytetään näytemäärittelyä â%sâ, kanavakarttaa â%sâ."
-
-#: ../src/utils/pacat.c:325
-#, c-format
-msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "Yhdistetty laitteeseen %s (%u, %ssuspended)."
+#: ../src/pavucontrol.glade.h:12
+msgid "<i>No input devices available</i>"
+msgstr "<i>Sisääntulolaitteita ei saatavilla</i>"
-#: ../src/utils/pacat.c:335
-#, c-format
-msgid "Stream error: %s"
-msgstr "Virtavirhe: %s"
-
-#: ../src/utils/pacat.c:345
-#, c-format
-msgid "Stream device suspended.%s"
-msgstr "Virtalaite keskeytetty.%s"
-
-#: ../src/utils/pacat.c:347
-#, c-format
-msgid "Stream device resumed.%s"
-msgstr "Virtalaite palautettu.%s"
-
-#: ../src/utils/pacat.c:355
-#, c-format
-msgid "Stream underrun.%s"
-msgstr "Virran alivuoto.%s"
-
-#: ../src/utils/pacat.c:362
-#, c-format
-msgid "Stream overrun.%s"
-msgstr "Virran ylivuoto.%s"
-
-#: ../src/utils/pacat.c:369
-#, c-format
-msgid "Stream started.%s"
-msgstr "Virta käynnistetty.%s"
-
-#: ../src/utils/pacat.c:376
-#, c-format
-msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "Virta siirretty laitteelle %s (%u, %ssuspended).%s"
-
-#: ../src/utils/pacat.c:376
-msgid "not "
-msgstr "ei "
-
-#: ../src/utils/pacat.c:383
-#, c-format
-msgid "Stream buffer attributes changed.%s"
-msgstr "Virran puskuriattribuutteja muutettu.%s"
-
-#: ../src/utils/pacat.c:415
-#, c-format
-msgid "Connection established.%s"
-msgstr "Yhteys muodostettu.%s"
-
-#: ../src/utils/pacat.c:418
-#, c-format
-msgid "pa_stream_new() failed: %s"
-msgstr "pa_stream_new() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:450
-#, c-format
-msgid "pa_stream_connect_playback() failed: %s"
-msgstr "pa_stream_connect_playback() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:456
-#, c-format
-msgid "pa_stream_connect_record() failed: %s"
-msgstr "pa_stream_connect_record() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
-#, c-format
-msgid "Connection failure: %s"
-msgstr "Yhteysvirhe: %s"
-
-#: ../src/utils/pacat.c:503
-msgid "Got EOF."
-msgstr "Saatiin EOF."
-
-#: ../src/utils/pacat.c:540
-#, c-format
-msgid "write() failed: %s"
-msgstr "write() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:561
-msgid "Got signal, exiting."
-msgstr "Saatiin signaali, lopetetaan."
-
-#: ../src/utils/pacat.c:575
-#, c-format
-msgid "Failed to get latency: %s"
-msgstr "Latenssin selvittäminen epäonnistui: %s"
-
-#: ../src/utils/pacat.c:580
-#, c-format
-msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "Aika: %0.3f s; Latenssi: %0.0f μs."
+#: ../src/pavucontrol.glade.h:13
+msgid "<i>No output devices available</i>"
+msgstr "<i>Ulostulolaitteita ei saatavilla</i>"
-#: ../src/utils/pacat.c:599
-#, c-format
-msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "pa_stream_update_timing_info() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/pavucontrol.glade.h:14
msgid ""
-"%s [options]\n"
-"\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
-"\n"
-" -r, --record Create a connection for recording\n"
-" -p, --playback Create a connection for playback\n"
-"\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, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (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"
-" being connected to.\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"
-" --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"
-" --property=PROPERTY=VALUE Set the specified property to the "
-"specified value.\n"
-" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
-" --list-file-formats List available file formats.\n"
+"All Input Devices\n"
+"All Except Monitors\n"
+"Hardware Input Devices\n"
+"Virtual Input Devices\n"
+"Monitors"
msgstr ""
-"%s [valitsimet]\n"
-"\n"
-" -h, --help Näytä tämä ohje\n"
-" --version Näytä versio\n"
-"\n"
-" -r, --record Luo yhteys nauhoitukselle\n"
-" -p, --playback Luo yhteys toistolle\n"
-"\n"
-" -v, --verbose Yksityiskohtaiset tulosteet\n"
-"\n"
-" -s, --server=PALVELIN Sen palvelimen nimi, johon "
-"yhdistetään\n"
-" -d, --device=LAITE Sen nielun/lähteen nimi, johon "
-"yhdistetään\n"
-" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
-"kutsutaan palvelimella\n"
-" --stream-name=NIMI Kuinka tätä virtaa kutsutaan "
-"palvelimella\n"
-" --volume=ÃÃNENVOIMAKKUUS Määritä (lineaarinen) "
-"aloitusäänenvoimakkuus väliltä 0...65536\n"
-" --rate=NÃYTTEENOTTOTAAJUUS Näytteenottotaajuus hertseinä"
-"(oletus: 44100)\n"
-" --format=NÃYTEMUOTO Näytteen tyyppi, yksi seuraavista:"
-"s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw, s32le, s32be\n"
-"s24le, s24be,\n"
-" s24-32le, s24-32be (oletus s16ne)\n"
-" --channels=KANAVIA Kanavien määrä, 1=mono, 2=stereo\n"
-" (oletus: 2)\n"
-" --channel-map=KANAVAKARTTA Oletuksen sijasta käytettävä "
-"kanavakartta\n"
-" --fix-format Valitse näytemuoto nielusta, jossa "
-"virta on\n"
-" --fix-rate Valitse näytteenottotaajuus "
-"nielusta, jossa virta on\n"
-" --fix-channels Valitse kanavien määrä ja "
-"kanavakartta nielusta, johon virtaa\n"
-" yhdistetään.\n"
-" --no-remix Ãlä yli- tai alimiksaa kanavia.\n"
-" --no-remap Kartoita kanavat indeksin mukaan, "
-"älä nimen mukaan.\n"
-" --latency=TAVUA Pyydä määritettyä latenssia "
-"tavuissa.\n"
-" --process-time=TAVUA Pyydä määritettyä prosessiaikaa "
-"pyyntöä kohti tavuissa.\n"
-" --property=ASETUS=ARVO Anna määritetylle asetukselle "
-"määritetty arvo.\n"
-" --raw Tallenna/soita raakaa PCM-dataa.\n"
-" --file-format=TMUOTO Tallenna/soita tietyn muotoista PCM-"
-"dataa.\n"
-" --list-file-formats Luettele käytettävissä olevat "
-"tiedostomuodot.\n"
-
-#: ../src/utils/pacat.c:731
-#, c-format
-msgid ""
-"pacat %s\n"
-"Compiled with libpulse %s\n"
-"Linked with libpulse %s\n"
-msgstr ""
-"pacat %s\n"
-"Käännetty libpulsen versiolle %s\n"
-"Linkitetty libpulsen versiolle %s\n"
-
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
-#, c-format
-msgid "Invalid client name '%s'"
-msgstr "Virheellinen asiakasohjelman nimi â%sâ"
-
-#: ../src/utils/pacat.c:779
-#, c-format
-msgid "Invalid stream name '%s'"
-msgstr "Virheellinen virran nimi â%sâ"
-
-#: ../src/utils/pacat.c:816
-#, c-format
-msgid "Invalid channel map '%s'"
-msgstr "Virheellinen kanavakartta â%sâ"
-
-#: ../src/utils/pacat.c:845
-#, c-format
-msgid "Invalid latency specification '%s'"
-msgstr "Virheellinen latenssimääritys â%sâ"
-
-#: ../src/utils/pacat.c:852
-#, c-format
-msgid "Invalid process time specification '%s'"
-msgstr "Virheellinen prosessiajan määritys â%sâ"
-
-#: ../src/utils/pacat.c:864
-#, c-format
-msgid "Invalid property '%s'"
-msgstr "Virheellinen asetus â%sâ"
-
-#: ../src/utils/pacat.c:881
-#, c-format
-msgid "Unknown file format %s."
-msgstr "Tuntematon tiedostomuoto %s."
-
-#: ../src/utils/pacat.c:900
-msgid "Invalid sample specification"
-msgstr "Virheellinen näytemääritys"
-
-#: ../src/utils/pacat.c:910
-#, c-format
-msgid "open(): %s"
-msgstr "open(): %s"
-
-#: ../src/utils/pacat.c:915
-#, c-format
-msgid "dup2(): %s"
-msgstr "dup2(): %s"
-
-#: ../src/utils/pacat.c:922
-msgid "Too many arguments."
-msgstr "Liian monta argumenttia."
+"Kaikki sisääntulolaitteet\n"
+"Kaikki paitsi tarkkailulaitteet\n"
+"Laitteistosisääntulolaitteet\n"
+"Näennäissisääntulolaitteet\n"
+"Tarkkailulaitteet"
-#: ../src/utils/pacat.c:933
-msgid "Failed to generate sample specification for file."
-msgstr "Näytemäärityksen generointi tiedostolle epäonnistui."
-
-#: ../src/utils/pacat.c:953
-msgid "Failed to open audio file."
-msgstr "Ãänitiedoston avaaminen epäonnistui."
-
-#: ../src/utils/pacat.c:959
+#: ../src/pavucontrol.glade.h:19
msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
+"All Output Devices\n"
+"Hardware Output Devices\n"
+"Virtual Output Devices"
msgstr ""
-"Varoitus: tiedostosta luettava näytemääritys korvaa annetun määrityksen."
-
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
-msgid "Failed to determine sample specification from file."
-msgstr "Näytemäärityksen selvittäminen tiedostosta epäonnistui."
-
-#: ../src/utils/pacat.c:971
-msgid "Warning: Failed to determine channel map from file."
-msgstr "Varoitus: Kanavakartan selvittäminen tiedostosta epäonnistui."
-
-#: ../src/utils/pacat.c:982
-msgid "Channel map doesn't match sample specification"
-msgstr "Kanavakartta ei vastaa näytemääritystä"
-
-#: ../src/utils/pacat.c:993
-msgid "Warning: failed to write channel map to file."
-msgstr "Varoitus: kanavakartan kirjoittaminen tiedostoon epäonnistui."
-
-#: ../src/utils/pacat.c:1008
-#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "Avataan %svirta näytemäärityksellä â%sâ ja kanavakartalla â%sâ."
-
-#: ../src/utils/pacat.c:1009
-msgid "recording"
-msgstr "nauhoitus"
-
-#: ../src/utils/pacat.c:1009
-msgid "playback"
-msgstr "toisto"
-
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
-msgid "pa_mainloop_new() failed."
-msgstr "pa_mainloop_new() epäonnistui."
-
-#: ../src/utils/pacat.c:1054
-msgid "io_new() failed."
-msgstr "io_new() epäonnistui."
-
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
-msgid "pa_context_new() failed."
-msgstr "pa_context_new() epäonnistui."
-
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
-#, c-format
-msgid "pa_context_connect() failed: %s"
-msgstr "pa_context_connect() epäonnistui: %s"
-
-#: ../src/utils/pacat.c:1075
-msgid "pa_context_rttime_new() failed."
-msgstr "pa_context_new() epäonnistui."
-
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
-msgid "pa_mainloop_run() failed."
-msgstr "pa_mainloop_run() epäonnistui."
-
-#: ../src/utils/pasuspender.c:81
-#, c-format
-msgid "fork(): %s\n"
-msgstr "fork(): %s\n"
-
-#: ../src/utils/pasuspender.c:92
-#, c-format
-msgid "execvp(): %s\n"
-msgstr "execvp(): %s\n"
-
-#: ../src/utils/pasuspender.c:109
-#, c-format
-msgid "Failure to suspend: %s\n"
-msgstr "Keskeytys epäonnistui: %s\n"
-
-#: ../src/utils/pasuspender.c:124
-#, c-format
-msgid "Failure to resume: %s\n"
-msgstr "Palautus epäonnistui: %s\n"
-
-#: ../src/utils/pasuspender.c:147
-#, c-format
-msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "VAROITUS: Ãänipalvelin ei ole paikallinen, ei keskeytetä.\n"
-
-#: ../src/utils/pasuspender.c:159
-#, c-format
-msgid "Connection failure: %s\n"
-msgstr "Yhteysvirhe: %s\n"
-
-#: ../src/utils/pasuspender.c:176
-#, c-format
-msgid "Got SIGINT, exiting.\n"
-msgstr "Saatiin SIGINT, lopetetaan.\n"
-
-#: ../src/utils/pasuspender.c:194
-#, c-format
-msgid "WARNING: Child process terminated by signal %u\n"
-msgstr "VAROITUS: Lapsiprosessi lopetettiin signaalilla %u\n"
+"Kaikki ulostulolaitteet\n"
+"Laitteistoulostulolaitteet\n"
+"Näennäisulostulolaitteet"
-#: ../src/utils/pasuspender.c:212
-#, c-format
-msgid ""
-"%s [options] ... \n"
-"\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
-" -s, --server=SERVER The name of the server to connect "
-"to\n"
-"\n"
-msgstr ""
-"%s [valitsimet] ... \n"
-"\n"
-" -h, --help Näytä tämä ohje\n"
-" --version Näytä versio\n"
-" -s, --server=PALVELIN Sen palvelimen nimi, johon\n"
-" yhdistetään\n"
-"\n"
-
-#: ../src/utils/pasuspender.c:248
-#, c-format
+#. Applications All streams
+#: ../src/pavucontrol.glade.h:23
msgid ""
-"pasuspender %s\n"
-"Compiled with libpulse %s\n"
-"Linked with libpulse %s\n"
+"All Streams\n"
+"Applications\n"
+"Virtual Streams"
msgstr ""
-"pasuspender %s\n"
-"Käännetty libpulsen versiolle %s\n"
-"Linkitetty libpulsen versiolle %s\n"
+"Kaikki virrat\n"
+"Sovellukset\n"
+"Näennäisvirrat"
-#: ../src/utils/pasuspender.c:277
-#, c-format
-msgid "pa_mainloop_new() failed.\n"
-msgstr "pa_mainloop_new() epäonnistui.\n"
+#: ../src/pavucontrol.glade.h:26
+msgid "Card Name"
+msgstr "Kortin nimi"
-#: ../src/utils/pasuspender.c:290
-#, c-format
-msgid "pa_context_new() failed.\n"
-msgstr "pa_context_new() epäonnistui.\n"
+#: ../src/pavucontrol.glade.h:27
+msgid "Device"
+msgstr "Laite"
-#: ../src/utils/pasuspender.c:298
-#, c-format
-msgid "pa_mainloop_run() failed.\n"
-msgstr "pa_mainloop_run() epäonnistui.\n"
+#: ../src/pavucontrol.glade.h:28
+msgid "Lock channels together"
+msgstr "Lukitse kanavat yhteen"
-#: ../src/utils/pactl.c:135
-#, c-format
-msgid "Failed to get statistics: %s"
-msgstr "Tilastojen selvittäminen epäonnistui: %s"
+#: ../src/pavucontrol.glade.h:29
+msgid "Mute audio"
+msgstr "Vaimenna äänet"
-#: ../src/utils/pactl.c:141
-#, c-format
-msgid "Currently in use: %u blocks containing %s bytes total.\n"
-msgstr "Nyt käytössä: %u lohkoa sisältäen yhteensä %s tavua.\n"
-
-#: ../src/utils/pactl.c:144
-#, c-format
-msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "Koko käyttöaikana varattu: %u lohkoa sisältäen yhteensä %s tavua.\n"
-
-#: ../src/utils/pactl.c:147
-#, c-format
-msgid "Sample cache size: %s\n"
-msgstr "Näytevälimuistin koko: %s\n"
-
-#: ../src/utils/pactl.c:156
-#, c-format
-msgid "Failed to get server information: %s"
-msgstr "Palvelintietojen selvittäminen epäonnistui: %s"
-
-#: ../src/utils/pactl.c:164
-#, c-format
-msgid ""
-"User name: %s\n"
-"Host Name: %s\n"
-"Server Name: %s\n"
-"Server Version: %s\n"
-"Default Sample Specification: %s\n"
-"Default Channel Map: %s\n"
-"Default Sink: %s\n"
-"Default Source: %s\n"
-"Cookie: %08x\n"
-msgstr ""
-"Käyttäjänimi: %s\n"
-"Konenimi: %s\n"
-"Palvelimen nimi: %s\n"
-"Palvelimen versio: %s\n"
-"Oletusnäytemäärittely: %s\n"
-"Oletuskanavakartta: %s\n"
-"Oletusnielu: %s\n"
-"Oletuslähde: %s\n"
-"Eväste: %08x\n"
-
-#: ../src/utils/pactl.c:205
-#, c-format
-msgid "Failed to get sink information: %s"
-msgstr "Nielun tietojen nouto epäonnistui: %s"
-
-#: ../src/utils/pactl.c:221
-#, c-format
-msgid ""
-"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 ""
-"Nielu #%u\n"
-"\tTila: %s\n"
-"\tNimi: %s\n"
-"\tKuvaus: %s\n"
-"\tAjuri: %s\n"
-"\tNäytemäärittely: %s\n"
-"\tKanavakartta: %s\n"
-"\tOmistava moduuli: %u\n"
-"\tVaimennus: %s\n"
-"\tÃänenvoimakkuus: %s%s%s\n"
-"\t balanssi %0.2f\n"
-"\tPerusäänenvoimakkuus: %s%s%s\n"
-"\tTarkkailulähde: %s\n"
-"\tLatenssi: %0.0f μs, asetettu %0.0f μs\n"
-"\tLiput: %s%s%s%s%s%s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
-#, c-format
-msgid "\tPorts:\n"
-msgstr "\tPortit:\n"
+#: ../src/pavucontrol.glade.h:30
+msgid "Set as fallback"
+msgstr "Aseta toissijaiseksi"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
-#, c-format
-msgid "\tActive Port: %s\n"
-msgstr "\tAktiivinen portti: %s\n"
+#: ../src/pavucontrol.glade.h:31
+msgid "Stream Title"
+msgstr "Virran otsikko"
-#: ../src/utils/pactl.c:297
-#, c-format
-msgid "Failed to get source information: %s"
-msgstr "Lähteen tietojen nouto epäonnistui: %s"
+#: ../src/pavucontrol.glade.h:33
+msgid "_Configuration"
+msgstr "_Asetukset"
-#: ../src/utils/pactl.c:313
-#, c-format
-msgid ""
-"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 ""
-"Lähde #%u\n"
-"\tTila: %s\n"
-"\tNimi: %s\n"
-"\tKuvaus: %s\n"
-"\tAjuri: %s\n"
-"\tNäytemäärittely: %s\n"
-"\tKanavakartta: %s\n"
-"\tOmistava moduuli: %u\n"
-"\tVaimennus: %s\n"
-"\tÃänenvoimakkuus: %s%s%s\n"
-"\t balanssi %0.2f\n"
-"\tPerusäänenvoimakkuus: %s%s%s\n"
-"\tTarkkailtava nielu: %s\n"
-"\tLatenssi: %0.0f μs, asetettu %0.0f μs\n"
-"\tLiput: %s%s%s%s%s%s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
-msgid "n/a"
-msgstr "-"
-
-#: ../src/utils/pactl.c:375
-#, c-format
-msgid "Failed to get module information: %s"
-msgstr "Moduulin tietojen nouto epäonnistui: %s"
+#: ../src/pavucontrol.glade.h:34
+msgid "_Input Devices"
+msgstr "S_isääntulolaitteet"
-#: ../src/utils/pactl.c:393
-#, c-format
-msgid ""
-"Module #%u\n"
-"\tName: %s\n"
-"\tArgument: %s\n"
-"\tUsage counter: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
-msgstr ""
-"Moduuli #%u\n"
-"\tNimi: %s\n"
-"\tArgumentti: %s\n"
-"\tKäyttölaskuri: %s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:412
-#, c-format
-msgid "Failed to get client information: %s"
-msgstr "Asiakkaan tietojen nouto epäonnistui: %s"
-
-#: ../src/utils/pactl.c:430
-#, c-format
-msgid ""
-"Client #%u\n"
-"\tDriver: %s\n"
-"\tOwner Module: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
-msgstr ""
-"Asiakas #%u\n"
-"\tAjuri: %s\n"
-"\tOmistava moduuli: %s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
+#: ../src/pavucontrol.glade.h:35
+msgid "_Output Devices"
+msgstr "Ul_ostulolaitteet"
-#: ../src/utils/pactl.c:447
-#, c-format
-msgid "Failed to get card information: %s"
-msgstr "Kortin tietojen nouto epäonnistui: %s"
+#: ../src/pavucontrol.glade.h:36
+msgid "_Playback"
+msgstr "_Toisto"
-#: ../src/utils/pactl.c:465
-#, c-format
-msgid ""
-"Card #%u\n"
-"\tName: %s\n"
-"\tDriver: %s\n"
-"\tOwner Module: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
-msgstr ""
-"Kortti #%u\n"
-"\tNimi: %s\n"
-"\tAjuri: %s\n"
-"\tOmistava moduuli: %s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:479
-#, c-format
-msgid "\tProfiles:\n"
-msgstr "\tProfiilit:\n"
+#: ../src/pavucontrol.glade.h:37
+msgid "_Recording"
+msgstr "_Nauhoitus"
-#: ../src/utils/pactl.c:485
-#, c-format
-msgid "\tActive Profile: %s\n"
-msgstr "\tAktiivinen profiili: %s\n"
+#: ../src/pavucontrol.glade.h:38
+msgid "direction"
+msgstr "suunta"
-#: ../src/utils/pactl.c:496
-#, c-format
-msgid "Failed to get sink input information: %s"
-msgstr "Nielun sisääntulon tietojen nouto epäonnistui: %s"
+#: ../src/pavucontrol.cc:73
+msgid "Card callback failure"
+msgstr "Kortin takaisinkutsu epäonnistui"
-#: ../src/utils/pactl.c:515
-#, c-format
-msgid ""
-"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 ""
-"Nielun sisääntulo #%u\n"
-"\tAjuri: %s\n"
-"\tOmistava moduuli: %s\n"
-"\tAsiakas: %s\n"
-"\tNielu: %u\n"
-"\tNäytemäärittely: %s\n"
-"\tKanavakartta: %s\n"
-"\tVaimennus: %s\n"
-"\tÃänenvoimakkuus: %s\n"
-"\t %s\n"
-"\t balanssi %0.2f\n"
-"\tPuskurin latenssi: %0.0f μs\n"
-"\tNielun latenssi: %0.0f μs\n"
-"\tUudelleennäytteistyksen tapa: %s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:554
-#, c-format
-msgid "Failed to get source output information: %s"
-msgstr "Lähteen ulostulon tietojen nouto epäonnistui: %s"
+#: ../src/pavucontrol.cc:92
+msgid "Sink callback failure"
+msgstr "Nielun takaisinkutsu epäonnistui"
-#: ../src/utils/pactl.c:574
-#, c-format
-msgid ""
-"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 ""
-"Lähteen ulostulo #%u\n"
-"\tAjuri: %s\n"
-"\tOmistava moduuli: %s\n"
-"\tAsiakas: %s\n"
-"\tLähde: %u\n"
-"\tNäytemäärittely: %s\n"
-"\tKanavakartta: %s\n"
-"\tPuskurin latenssi: %0.0f μs\n"
-"\tLähteen latenssi: %0.0f μs\n"
-"\tUudelleennäytteistyksen tapa: %s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:605
-#, c-format
-msgid "Failed to get sample information: %s"
-msgstr "Näytetietojen nouto epäonnistui: %s"
+#: ../src/pavucontrol.cc:111
+msgid "Source callback failure"
+msgstr "Lähteen takaisinkutsu epäonnistui"
-#: ../src/utils/pactl.c:623
-#, c-format
-msgid ""
-"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 ""
-"Näyte #%u\n"
-"\tNimi: %s\n"
-"\tNäytemäärittely: %s\n"
-"\tKanavakartta: %s\n"
-"\tÃänenvoimakkuus: %s\n"
-"\t %s\n"
-"\t balanssi %0.2f\n"
-"\tKesto: %0.1fs\n"
-"\tKoko: %s\n"
-"\tLaiska: %s\n"
-"\tTiedostonimi: %s\n"
-"\tOminaisuudet:\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
-#, c-format
-msgid "Failure: %s"
-msgstr "Epäonnistuminen: %s"
+#: ../src/pavucontrol.cc:130
+msgid "Sink input callback failure"
+msgstr "Nielun sisääntulon takaisinkutsu epäonnistui"
-#: ../src/utils/pactl.c:687
-#, c-format
-msgid "Failed to upload sample: %s"
-msgstr "Näytteen lähettäminen epäonnistui: %s"
+#: ../src/pavucontrol.cc:149
+msgid "Source output callback failure"
+msgstr "Lähteen ulostulon takaisinkutsu epäonnistui"
-#: ../src/utils/pactl.c:704
-msgid "Premature end of file"
-msgstr "Ennenaikainen tiedoston päättyminen"
+#: ../src/pavucontrol.cc:183
+msgid "Client callback failure"
+msgstr "Asiakkaan takaisinkutsu"
-#: ../src/utils/pactl.c:863
-msgid "Got SIGINT, exiting."
-msgstr "Saatiin SIGINT, lopetetaan."
+#: ../src/pavucontrol.cc:199
+msgid "Server info callback failure"
+msgstr "Palvelintietojen takaisinkutsu epäonnistui"
-#: ../src/utils/pactl.c:869
+#: ../src/pavucontrol.cc:217 ../src/pavucontrol.cc:430
#, c-format
-msgid ""
-"%s [options] stat\n"
-"%s [options] list\n"
-"%s [options] exit\n"
-"%s [options] upload-sample FILENAME [NAME]\n"
-"%s [options] play-sample NAME [SINK]\n"
-"%s [options] remove-sample NAME\n"
-"%s [options] move-sink-input SINKINPUT SINK\n"
-"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
-"%s [options] load-module NAME [ARGS ...]\n"
-"%s [options] unload-module MODULE\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"
-"%s [options] set-sink-port SINK PORT\n"
-"%s [options] set-source-port SOURCE PORT\n"
-"%s [options] set-sink-volume SINK VOLUME\n"
-"%s [options] set-source-volume SOURCE VOLUME\n"
-"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
-"%s [options] set-sink-mute SINK 1|0\n"
-"%s [options] set-source-mute SOURCE 1|0\n"
-"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
-msgstr ""
-"%s [valitsimet] stat\n"
-"%s [valitsimet] list\n"
-"%s [valitsimet] exit\n"
-"%s [valitsimet] upload-sample TIEDOSTONIMI [NIMI]\n"
-"%s [valitsimet] play-sample NIMI [NIELU]\n"
-"%s [valitsimet] remove-sample NIMI\n"
-"%s [valitsimet] move-sink-input NIELUSISÃÃNMENO NIELU\n"
-"%s [valitsimet] move-source-output LÃHDEULOSTULO LÃHDE\n"
-"%s [valitsimet] load-module NIMI [ARGUMENTIT ...]\n"
-"%s [valitsimet] unload-module MODUULI\n"
-"%s [valitsimet] suspend-sink NIELU 1|0\n"
-"%s [valitsimet] suspend-source LÃHDE 1|0\n"
-"%s [valitsimet] set-card-profile KORTTI PROFIILI\n"
-"%s [valitsimet] set-sink-port NIELU PORTTI\n"
-"%s [valitsimet] set-source-port LÃHDE PORTTI\n"
-"%s [valitsimet] set-sink-volume NIELU VOIMAKKUUS\n"
-"%s [valitsimet] set-source-volume LÃHDE VOIMAKKUUS\n"
-"%s [valitsimet] set-sink-input-volume NIELUSISÃÃNMENO VOIMAKKUUS\n"
-"%s [valitsimet] set-sink-mute NIELU 1|0\n"
-"%s [valitsimet] set-source-mute LÃHDE 1|0\n"
-"%s [valitsimet] set-sink-input-mute NIELUSISÃÃNMENO 1|0\n"
-"\n"
-" -h, --help Näytä tämä ohje\n"
-" --version Näytä versio\n"
-"\n"
-" -s, --server=PALVELIN Sen palvelimen nimi, johon "
-"yhdistetään\n"
-" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
-"kutsutaan palvelimella\n"
-
-#: ../src/utils/pactl.c:933
-#, c-format
-msgid ""
-"pactl %s\n"
-"Compiled with libpulse %s\n"
-"Linked with libpulse %s\n"
-msgstr ""
-"pactl %s\n"
-"Käännetty libpulsen versiolle %s\n"
-"Linkitetty libpulsen versiolle %s\n"
-
-#: ../src/utils/pactl.c:979
-msgid "Please specify a sample file to load"
-msgstr "Anna ladattava näytetiedosto"
-
-#: ../src/utils/pactl.c:992
-msgid "Failed to open sound file."
-msgstr "Ãänitiedoston avaaminen epäonnistui."
-
-#: ../src/utils/pactl.c:1004
-msgid "Warning: Failed to determine sample specification from file."
-msgstr "Varoitus: näytemäärityksen selvitys tiedostosta epäonnistui."
-
-#: ../src/utils/pactl.c:1014
-msgid "You have to specify a sample name to play"
-msgstr "Soitettavan näytteen nimi on annettava"
-
-#: ../src/utils/pactl.c:1026
-msgid "You have to specify a sample name to remove"
-msgstr "Poistettavan näytteen nimi on annettava"
-
-#: ../src/utils/pactl.c:1035
-msgid "You have to specify a sink input index and a sink"
-msgstr "Nielun syöteindeksi ja nielu on annettava"
-
-#: ../src/utils/pactl.c:1045
-msgid "You have to specify a source output index and a source"
-msgstr "Lähteen ulostuloindeksi ja lähde on annettava"
-
-#: ../src/utils/pactl.c:1060
-msgid "You have to specify a module name and arguments."
-msgstr "Moduulin nimi ja argumentit on annettava."
-
-#: ../src/utils/pactl.c:1080
-msgid "You have to specify a module index"
-msgstr "Moduulin indeksi on annettava"
-
-#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr "Ei voi antaa enempää kuin yhden nielun. Totuusarvo on annettava."
-
-#: ../src/utils/pactl.c:1103
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
-msgstr "Ei voi antaa enempää kuin yhden lähteen. Totuusarvo on annettava."
-
-#: ../src/utils/pactl.c:1115
-msgid "You have to specify a card name/index and a profile name"
-msgstr "Kortin nimi/indeksi ja profiilin nimi on annettava"
-
-#: ../src/utils/pactl.c:1126
-msgid "You have to specify a sink name/index and a port name"
-msgstr "Nielun nimi/indeksi ja portin nimi on annettava"
-
-#: ../src/utils/pactl.c:1137
-msgid "You have to specify a source name/index and a port name"
-msgstr "Lähteen nimi/indeksi ja portin nimi on annettava"
-
-#: ../src/utils/pactl.c:1149
-msgid "You have to specify a sink name/index and a volume"
-msgstr "Nielun nimi/indeksi ja portin nimi on annettava"
-
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
-msgid "Invalid volume specification"
-msgstr "Virheellinen äänenvoimakkuuden määritys"
-
-#: ../src/utils/pactl.c:1166
-msgid "You have to specify a source name/index and a volume"
-msgstr "Lähteen nimi/indeksi ja äänenvoimakkuus on annettava"
-
-#: ../src/utils/pactl.c:1183
-msgid "You have to specify a sink input index and a volume"
-msgstr "Nielun syöteindeksi ja äänenvoimakkuus on annettava"
-
-#: ../src/utils/pactl.c:1188
-msgid "Invalid sink input index"
-msgstr "Virheellinen nielun syöteindeksi"
+msgid "Failed to initialize stream_restore extension: %s"
+msgstr "stream_restore-laajennoksen alustus epäonnistui: %s"
-#: ../src/utils/pactl.c:1204
-msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Nielun nimi/indeksi ja vaimennuksen totuusarvo on annettava"
+#: ../src/pavucontrol.cc:235
+msgid "pa_ext_stream_restore_read() failed"
+msgstr "pa_ext_stream_restore_read() epäonnistui"
-#: ../src/utils/pactl.c:1221
-msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Lähteen nimi/indeksi ja vaimennuksen totuusarvo on annettava"
+#: ../src/pavucontrol.cc:252
+msgid "pa_context_get_sink_info_by_index() failed"
+msgstr "pa_context_get_sink_info_by_index() epäonnistui"
-#: ../src/utils/pactl.c:1238
-msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Nielun syöteindeksi ja vaimennuksen totuusarvo on annettava"
+#: ../src/pavucontrol.cc:265
+msgid "pa_context_get_source_info_by_index() failed"
+msgstr "pa_context_get_source_info_by_index() epäonnistui"
-#: ../src/utils/pactl.c:1243
-msgid "Invalid sink input index specification"
-msgstr "Virheellinen nielun syöteindeksin määritys"
+#: ../src/pavucontrol.cc:278 ../src/pavucontrol.cc:291
+msgid "pa_context_get_sink_input_info() failed"
+msgstr "pa_context_get_sink_input_info() epäonnistui"
-#: ../src/utils/pactl.c:1262
-msgid "No valid command specified."
-msgstr "Mitään kelvollista komentoa ei annettu."
+#: ../src/pavucontrol.cc:304
+msgid "pa_context_get_client_info() failed"
+msgstr "pa_context_get_client_info() epäonnistui"
-#: ../src/utils/pax11publish.c:61
-#, c-format
-msgid ""
-"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
-"\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"
-" -r Remove PulseAudio data from X11 display\n"
-msgstr ""
-"%s [-D näyttö] [-S palvelin] [-O nielu] [-I lähde] [-c tiedosto] [-d|-e|-i|-"
-"r]\n"
-"\n"
-" -d Näytä nykyiseen X11-näyttöön yhdistetyn PulseAudion tiedot (oletus)\n"
-" -e Vie paikalliset PulseAudio-tiedot X11-näytölle\n"
-" -i Tuo PulseAudio-tiedot X11-näytöltä paikallisiin ympäristömuuttujiin "
-"ja\n"
-" evästetiedostoon.\n"
-" -r Poista PulseAudio-tiedostot X11-näytöltä\n"
-
-#: ../src/utils/pax11publish.c:94
-#, c-format
-msgid "Failed to parse command line.\n"
-msgstr "Komentorivin jäsentäminen epäonnistui.\n"
-
-#: ../src/utils/pax11publish.c:108
-#, c-format
-msgid "Server: %s\n"
-msgstr "Palvelin: %s\n"
-
-#: ../src/utils/pax11publish.c:110
-#, c-format
-msgid "Source: %s\n"
-msgstr "Lähde: %s\n"
+#: ../src/pavucontrol.cc:314 ../src/pavucontrol.cc:371
+msgid "pa_context_get_server_info() failed"
+msgstr "pa_context_get_server_info() epäonnistui"
-#: ../src/utils/pax11publish.c:112
-#, c-format
-msgid "Sink: %s\n"
-msgstr "Nielu: %s\n"
+#: ../src/pavucontrol.cc:327
+msgid "pa_context_get_card_info_by_index() failed"
+msgstr "pa_context_get_card_info_by_index() epäonnistui"
-#: ../src/utils/pax11publish.c:114
-#, c-format
-msgid "Cookie: %s\n"
-msgstr "Eväste: %s\n"
+#: ../src/pavucontrol.cc:362
+msgid "pa_context_subscribe() failed"
+msgstr "pa_context_subscribe() epäonnistui"
-#: ../src/utils/pax11publish.c:132
-#, c-format
-msgid "Failed to parse cookie data\n"
-msgstr "Evästetietojen jäsennys epäonnistui\n"
+#: ../src/pavucontrol.cc:378
+msgid "pa_context_client_info_list() failed"
+msgstr "pa_context_client_info_list() epäonnistui"
-#: ../src/utils/pax11publish.c:137
-#, c-format
-msgid "Failed to save cookie data\n"
-msgstr "Evästetietojen tallennus epäonnistui\n"
+#: ../src/pavucontrol.cc:385
+msgid "pa_context_get_card_info_list() failed"
+msgstr "pa_context_get_card_info_list() epäonnistui"
-#: ../src/utils/pax11publish.c:152
-#, c-format
-msgid "Failed to load client configuration file.\n"
-msgstr "Asiakasohjelman asetustiedoston lataaminen epäonnistui.\n"
+#: ../src/pavucontrol.cc:392
+msgid "pa_context_get_sink_info_list() failed"
+msgstr "pa_context_get_sink_info_list() epäonnistui"
-#: ../src/utils/pax11publish.c:157
-#, c-format
-msgid "Failed to read environment configuration data.\n"
-msgstr "Ympäristön asetustietojen lukeminen epäonnistui.\n"
+#: ../src/pavucontrol.cc:399
+msgid "pa_context_get_source_info_list() failed"
+msgstr "pa_context_get_source_info_list() epäonnistui"
-#: ../src/utils/pax11publish.c:174
-#, c-format
-msgid "Failed to get FQDN.\n"
-msgstr "Verkkonimen saaminen epäonnistui.\n"
+#: ../src/pavucontrol.cc:406
+msgid "pa_context_get_sink_input_info_list() failed"
+msgstr "pa_context_get_sink_input_info_list() epäonnistui"
-#: ../src/utils/pax11publish.c:194
-#, c-format
-msgid "Failed to load cookie data\n"
-msgstr "Evästetietojen lataaminen epäonnistui\n"
+#: ../src/pavucontrol.cc:413
+msgid "pa_context_get_source_output_info_list() failed"
+msgstr "pa_context_get_source_output_info_list() epäonnistui"
-#: ../src/utils/pax11publish.c:211
-#, c-format
-msgid "Not yet implemented.\n"
-msgstr "Toteutusta ei vielä ole.\n"
+#: ../src/pavucontrol.cc:437
+msgid "Connection failed"
+msgstr "Yhteys epäonnistui"
-#: ../src/utils/pacmd.c:69
-msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
-"PulseAudio-taustaprosessi ei ole käynnissä eikä PulseAudiota suoriteta "
-"istunnon taustaprosessina."
+#: ../src/cardwidget.cc:87
+msgid "pa_context_set_card_profile_by_index() failed"
+msgstr "pa_context_set_card_profile_by_index() epäonnistui"
-#: ../src/utils/pacmd.c:74
-#, c-format
-msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+#: ../src/channelwidget.cc:104
+msgid "<small>Silence</small>"
+msgstr "<small>Hiljaisuus</small>"
-#: ../src/utils/pacmd.c:91
-#, c-format
-msgid "connect(): %s"
-msgstr "connect(): %s"
+#: ../src/channelwidget.cc:104
+msgid "<small>Min</small>"
+msgstr "<small>Minimi</small>"
-#: ../src/utils/pacmd.c:99
-msgid "Failed to kill PulseAudio daemon."
-msgstr "PulseAudio-taustaprosessin lopettaminen epäonnistui."
+#: ../src/channelwidget.cc:105
+msgid "<small>Max</small>"
+msgstr "<small>Maksimi</small>"
-#: ../src/utils/pacmd.c:107
-msgid "Daemon not responding."
-msgstr "Taustaprosessi ei vastaa."
+#: ../src/channelwidget.cc:109
+msgid "<small><i>Base</i></small>"
+msgstr "<small><i>Perus</i></small>"
-#: ../src/utils/pacmd.c:161
-#, c-format
-msgid "poll(): %s"
-msgstr "poll(): %s"
+#: ../src/mainwindow.cc:269
+msgid "Failed to read data from stream"
+msgstr "Datan lukeminen virrasta epäonnistui"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
-#, c-format
-msgid "read(): %s"
-msgstr "read(): %s"
+#: ../src/mainwindow.cc:304 ../src/mainwindow.cc:341
+msgid "Peak detect"
+msgstr "Huipun tunnistus"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
-#, c-format
-msgid "write(): %s"
-msgstr "write(): %s"
+#: ../src/mainwindow.cc:305 ../src/mainwindow.cc:342
+msgid "Failed to create monitoring stream"
+msgstr "Tarkkailuvirran luonti epäonnistui"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
-msgid "Cannot access autospawn lock."
-msgstr "Automaattisen käynnistyksen lukkoa ei voida käyttää."
+#: ../src/mainwindow.cc:313 ../src/mainwindow.cc:351
+msgid "Failed to connect monitoring stream"
+msgstr "Tarkkailuvirtaan yhdistäminen epäonnistui"
-#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
-#, c-format
-msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
-msgstr ""
-"ALSA herätti taustaprosessin kirjoittamaan uutta dataa laitteelle, mutta "
-"mitään kirjoitettavaa ei ollut!\n"
-"Tämä on luultavasti ohjelmavirhe ALSA-ajurissa â%sâ. Raportoi tästä "
-"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLOUT "
-"asetettuna, snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, "
-"joka on < min_avail."
-
-#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
-#, c-format
+#: ../src/mainwindow.cc:466
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
-msgstr ""
-"ALSA herätti taustaprosessin lukemaan uutta dataa laitteelta, mutta mitään "
-"luettavaa ei ollut!\n"
-"Tämä on luultavasti ohjelmavirhe ALSA-ajurissa â%sâ. Raportoi tästä "
-"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLIN asetettuna, "
-"snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, on < min_avail."
-
-#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
-msgid "Off"
-msgstr "Poissa"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
-msgid "High Fidelity Playback (A2DP)"
-msgstr "Korkean äänenlaadun toisto (A2DP)"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
-msgid "High Fidelity Capture (A2DP)"
-msgstr "Korkean äänenlaadun tallennus (A2DP)"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
-msgid "Telephony Duplex (HSP/HFP)"
-msgstr ""
-
-#: ../src/modules/reserve-wrap.c:151
-msgid "PulseAudio Sound Server"
-msgstr "PulseAudio-äänipalvelin"
-
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
-msgid "Output Devices"
-msgstr ""
-
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
-msgid "Input Devices"
-msgstr "Sisääntulo %s"
-
-#: ../src/modules/module-rygel-media-server.c:774
-msgid "Audio on @HOSTNAME@"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
-msgid "Input"
-msgstr "Sisääntulo %s"
-
-#: ../src/modules/alsa/alsa-mixer.c:1702
-msgid "Docking Station Input"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1703
-msgid "Docking Station Microphone"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1704
-msgid "Line-In"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1705
-msgid "Microphone"
+"Ignoring sink-input due to it being designated as an event and thus handled "
+"by the Event widget"
msgstr ""
+"Ohitetaan nielusisäänmeno, koska se on määrätty tapahtumaksi ja siksi sen "
+"käsittelee Event-elementti"
-#: ../src/modules/alsa/alsa-mixer.c:1706
-msgid "External Microphone"
-msgstr ""
+#: ../src/mainwindow.cc:618
+msgid "System Sounds"
+msgstr "Järjestelmän äänet"
-#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
-msgid "Internal Microphone"
-msgstr "Sisäinen äänentoisto"
+#: ../src/rolewidget.cc:71
+msgid "pa_ext_stream_restore_write() failed"
+msgstr "pa_ext_stream_restore_write() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:1708
-msgid "Radio"
-msgstr ""
+#: ../src/sinkinputwidget.cc:35
+msgid "on"
+msgstr "päällä"
-#: ../src/modules/alsa/alsa-mixer.c:1709
-msgid "Video"
-msgstr ""
+#: ../src/sinkinputwidget.cc:38
+msgid "Terminate Playback"
+msgstr "Lopeta toisto"
-#: ../src/modules/alsa/alsa-mixer.c:1710
-msgid "Automatic Gain Control"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1711
-msgid "No Automatic Gain Control"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1712
-msgid "Boost"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1713
-msgid "No Boost"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1714
-msgid "Amplifier"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1715
-msgid "No Amplifier"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
-msgid "Analog Input"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
-msgid "Analog Microphone"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
-msgid "Analog Line-In"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
-msgid "Analog Radio"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
-msgid "Analog Video"
-msgstr "Analoginen stereo"
-
-#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
-msgid "Analog Output"
-msgstr "Tyhjä ulostulo"
-
-#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
-msgid "Analog Headphones"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:1780
-msgid "Analog Output (LFE)"
-msgstr ""
+#: ../src/sinkinputwidget.cc:61
+msgid "Unknown output"
+msgstr "Tuntematon ulostulo"
-#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
-msgid "Analog Mono Output"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
-msgid "%s+%s"
-msgstr "%s %s"
-
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
-msgid "%s / %s"
-msgstr "%s %s"
-
-#: ../src/modules/alsa/alsa-mixer.c:2790
-msgid "Analog Mono"
-msgstr "Analoginen mono"
-
-#: ../src/modules/alsa/alsa-mixer.c:2791
-msgid "Analog Stereo"
-msgstr "Analoginen stereo"
-
-#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
-msgid "Analog Surround 2.1"
-msgstr "Analoginen tilaääni 4.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
-msgid "Analog Surround 3.0"
-msgstr "Analoginen tilaääni 4.0"
+#: ../src/sinkinputwidget.cc:72
+msgid "pa_context_set_sink_input_volume() failed"
+msgstr "pa_context_set_sink_input_volume() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
-msgid "Analog Surround 3.1"
-msgstr "Analoginen tilaääni 4.1"
+#: ../src/sinkinputwidget.cc:87
+msgid "pa_context_set_sink_input_mute() failed"
+msgstr "pa_context_set_sink_input_mute() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2795
-msgid "Analog Surround 4.0"
-msgstr "Analoginen tilaääni 4.0"
+#: ../src/sinkinputwidget.cc:97
+msgid "pa_context_kill_sink_input() failed"
+msgstr "pa_context_kill_sink_input() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2796
-msgid "Analog Surround 4.1"
-msgstr "Analoginen tilaääni 4.1"
+#: ../src/sinkinputwidget.cc:133
+msgid "pa_context_move_sink_input_by_index() failed"
+msgstr "pa_context_move_sink_input_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2797
-msgid "Analog Surround 5.0"
-msgstr "Analoginen tilaääni 5.0"
+#: ../src/sinkwidget.cc:48
+msgid "pa_context_set_sink_volume_by_index() failed"
+msgstr "pa_context_set_sink_volume_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2798
-msgid "Analog Surround 5.1"
-msgstr "Analoginen tilaääni 5.1"
+#: ../src/sinkwidget.cc:63
+msgid "Volume Control Feedback Sound"
+msgstr "Ãänenvoimakkuuden säädön palauteääni"
-#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
-msgid "Analog Surround 6.0"
-msgstr "Analoginen tilaääni 4.0"
+#: ../src/sinkwidget.cc:80
+msgid "pa_context_set_sink_mute_by_index() failed"
+msgstr "pa_context_set_sink_mute_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
-msgid "Analog Surround 6.1"
-msgstr "Analoginen tilaääni 4.1"
+#: ../src/sinkwidget.cc:94
+msgid "pa_context_set_default_sink() failed"
+msgstr "pa_context_set_default_sink() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
-msgid "Analog Surround 7.0"
-msgstr "Analoginen tilaääni 4.0"
+#: ../src/sinkwidget.cc:114
+msgid "pa_context_set_sink_port_by_index() failed"
+msgstr "pa_context_set_sink_port_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2802
-msgid "Analog Surround 7.1"
-msgstr "Analoginen tilaääni 7.1"
+#: ../src/sourceoutputwidget.cc:35
+msgid "from"
+msgstr "lähteestä"
-#: ../src/modules/alsa/alsa-mixer.c:2803
-msgid "Digital Stereo (IEC958)"
-msgstr "Digitaalinen stereo (IEC958)"
+#: ../src/sourceoutputwidget.cc:38
+msgid "Terminate Recording"
+msgstr "Lopeta nauhoitus"
-#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
-msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Digitaalinen tilaääni 4.0 (IEC958/AC3)"
+#: ../src/sourceoutputwidget.cc:61
+msgid "Unknown input"
+msgstr "Tuntematon sisääntulo"
-#: ../src/modules/alsa/alsa-mixer.c:2805
-msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr "Digitaalinen tilaääni 4.0 (IEC958/AC3)"
+#: ../src/sourceoutputwidget.cc:71
+msgid "pa_context_kill_source_output() failed"
+msgstr "pa_context_kill_source_output() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2806
-msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr "Digitaalinen tilaääni 5.1 (IEC958/AC3)"
+#: ../src/sourceoutputwidget.cc:108
+msgid "pa_context_move_source_output_by_index() failed"
+msgstr "pa_context_move_source_output_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2807
-msgid "Digital Stereo (HDMI)"
-msgstr "Digitaalinen stereo (HDMI)"
+#: ../src/sourcewidget.cc:44
+msgid "pa_context_set_source_volume_by_index() failed"
+msgstr "pa_context_set_source_volume_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
-msgid "Analog Mono Duplex"
-msgstr "Analoginen mono"
+#: ../src/sourcewidget.cc:59
+msgid "pa_context_set_source_mute_by_index() failed"
+msgstr "pa_context_set_source_mute_by_index() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
-msgid "Analog Stereo Duplex"
-msgstr "Analoginen stereo"
+#: ../src/sourcewidget.cc:73
+msgid "pa_context_set_default_source() failed"
+msgstr "pa_context_set_default_source() epäonnistui"
-#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
-msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Digitaalinen stereo (IEC958)"
+#: ../src/sourcewidget.cc:95
+msgid "pa_context_set_source_port_by_index() failed"
+msgstr "pa_context_set_source_port_by_index() epäonnistui"
-#~ msgid "Invalid client name '%s'\n"
-#~ msgstr "Virheellinen asiakasohjelman nimi â%sâ\n"
-
-#~ msgid "Failed to determine sample specification from file.\n"
-#~ msgstr "Näytemäärityksen selvitys tiedostosta epäonnistui: %s\n"
-
-#~ msgid "select(): %s"
-#~ msgstr "select(): %s"
-
-#~ msgid "Cannot connect to system bus: %s"
-#~ msgstr "Järjestelmäväylään ei voida yhdistää: %s"
-
-#~ msgid "Cannot get caller from PID: %s"
-#~ msgstr "Kutsujaa ei saada PID:stä: %s"
-
-#~ msgid "Cannot set UID on caller object."
-#~ msgstr "UID:tä ei voida asettaa kutsujaobjektille."
-
-#~ msgid "Failed to get CK session."
-#~ msgstr "CK-istunnon saaminen epäonnistui."
-
-#~ msgid "Cannot set UID on session object."
-#~ msgstr "UID:tä ei voida asettaa istunto-objektille."
-
-#~ msgid "Cannot allocate PolKitAction."
-#~ msgstr "Ei voida varata PolKitActionia."
-
-#~ msgid "Cannot set action_id"
-#~ msgstr "Ei voida asettaa action_id:tä"
-
-#~ msgid "Cannot allocate PolKitContext."
-#~ msgstr "Ei voida varata PolKitContextia."
-
-#~ msgid "Cannot initialize PolKitContext: %s"
-#~ msgstr "Ei voida alustaa PolKitContextia: %s"
-
-#~ msgid "Could not determine whether caller is authorized: %s"
-#~ msgstr "Ei voida päätellä onko kutsujalla käyttöoikeus: %s"
-
-#~ msgid "Cannot obtain auth: %s"
-#~ msgstr "Tunnistautumista ei saada: %s"
-
-#~ msgid "PolicyKit responded with '%s'"
-#~ msgstr "PolicyKit vastasi â%sâ"
+#: ../src/streamwidget.cc:45
+msgid "Terminate"
+msgstr "Lopeta"
-#~ msgid ""
-#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
-#~ "daemon"
-#~ msgstr ""
-#~ "Korkean prioriteetin ajoitus (negatiivinen Unix-nice-taso) PulseAudio-"
-#~ "taustajärjestelmälle"
+#~ msgid "Open menu"
+#~ msgstr "Avaa valikko"
-#~ msgid "Real-time scheduling for the PulseAudio daemon"
-#~ msgstr "Reaaliaikainen ajoitus PulseAudio-taustajärjestelmälle"
+#~ msgid "_Move Stream..."
+#~ msgstr "_Siirrä virta"
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr ""
-#~ "Järjestelmäkäytäntö estää PulseAudiota saamasta korkean prioriteetin "
-#~ "ajoitusta."
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr ""
-#~ "Järjestelmäkäytäntö estää PulseAudiota saamasta reaaliaikaista ajoitusta."
-
-#~ msgid "read() failed: %s\n"
-#~ msgstr "read() epäonnistui: %s\n"
-
-#, fuzzy
-#~ msgid "pa_context_connect() failed: %s\n"
-#~ msgstr "pa_context_connect() epäonnistui: %s"
-
-#~ msgid "We're in the group '%s', allowing high-priority scheduling."
-#~ msgstr "Ollaan ryhmässä â%sâ, korkean prioriteetin ajoitus on sallittua."
-
-#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr "Ollaan ryhmässä â%sâ, tosiaikainen vuorottaminen on sallittua."
-
-#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr "PolicyKit myöntää acquire-high-priority-oikeuden."
-
-#~ msgid "PolicyKit refuses acquire-high-priority privilege."
-#~ msgstr "PolicyKit ei myönnä acquire-high-priority-oikeutta."
-
-#~ msgid "PolicyKit grants us acquire-real-time privilege."
-#~ msgstr "PolicyKit myöntää acquire-real-time-oikeuden."
-
-#~ msgid "PolicyKit refuses acquire-real-time privilege."
-#~ msgstr "PolicyKit ei myönnä acquire-real-time-oikeutta."
-
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
-#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
-#~ "limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
-#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-#~ msgstr ""
-#~ "Ohjelmaa kutsuttiin SUID-rootina ja reaaliaikaista ja/tai korkean "
-#~ "prioriteetin ajoitusta pyydettiin asetuksissa. Tarvittavat oikeudet "
-#~ "kuitenkin puuttuvat:\n"
-#~ "Ei olla ryhmässä â%sâ, PolicyKit ei myönnä pyydettyjä oikeuksia ja "
-#~ "RLIMIT_NICE/RLIMIT_RTPRIO-resurssirajoja ei ole kasvatettu.\n"
-#~ "Hanki riittävät PolicyKit-oikeudet, liity ryhmään â%sâ tai kasvata tämän "
-#~ "käyttäjän RLIMIT_NICE/RLIMIT_RTPRIO-resurssirajoja reaaliaikaisen ja/tai "
-#~ "korkean prioriteetin ajoituksen ottamiseksi käyttöön."
-
-#~ msgid ""
-#~ "High-priority scheduling enabled in configuration but not allowed by "
-#~ "policy."
-#~ msgstr ""
-#~ "Korkean prioriteetin ajoitus otettu käyttöön asetuksissa, mutta käytännöt "
-#~ "eivät salli sitä."
-
-#~ msgid "Successfully increased RLIMIT_RTPRIO"
-#~ msgstr "RLIMIT_RTPRIO:n kasvatus onnistui"
-
-#~ msgid "RLIMIT_RTPRIO failed: %s"
-#~ msgstr "RLIMIT_RTPRIO epäonnistui: %s"
-
-#~ msgid "Giving up CAP_NICE"
-#~ msgstr "Luovutaan CAP_NICE:stä"
-
-#~ 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ä."
-
-#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
-#~ msgstr "Oikeuksien rajoittaminen CAP_SYS_NICEen onnistui."
-
-#~ msgid "time_new() failed.\n"
-#~ msgstr "time_new() epäonnistui.\n"
-
-#~ msgid "Output %s + Input %s"
-#~ msgstr "Ulostulo %s + Sisääntulo %s"
-
-#~ msgid "Stream successfully created\n"
-#~ msgstr "Virran luonti onnistui\n"
-
-#~ msgid "Stream errror: %s\n"
-#~ msgstr "Virtavirhe: %s\n"
-
-#~ msgid "Connection established.\n"
-#~ msgstr "Yhteys muodostetettu.\n"
-
-#~ msgid ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ " -h, --help Show this help\n"
-#~ " --version Show version\n"
-#~ "\n"
-#~ " -v, --verbose Enable verbose operation\n"
-#~ "\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"
-#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
-#~ msgstr ""
-#~ "%s [valitsimet] [TIEDOSTO]\n"
-#~ "\n"
-#~ " -h, --help Näytä tämä ohje\n"
-#~ " --version Näytä tiedostot\n"
-#~ "\n"
-#~ " -v, --verbose Yksityiskohtaiset tulosteet\n"
-#~ "\n"
-#~ " -s, --server=PALVELIN Sen palvelimen nimi, johon\n"
-#~ " yhdistetään\n"
-#~ " -d, --device=LAITE Sen nielun nimi, johon "
-#~ "yhdistetään\n"
-#~ " -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
-#~ "kutsutaan\n"
-#~ " palvelimella\n"
-#~ " --stream-name=NIMI Kuinka tätä virtaa kutsutaan\n"
-#~ " palvelimella\n"
-#~ " --volume=ÃÃNENVOIMAKKUUS Määritä (lineaarinen) "
-#~ "aloitusäänen-\n"
-#~ " voimakkuus väliltä 0...65536\n"
-#~ " --channel-map=KANAVAKARTTA Aseta käytettävä kanavakartta\n"
-
-#~ msgid ""
-#~ "paplay %s\n"
-#~ "Compiled with libpulse %s\n"
-#~ "Linked with libpulse %s\n"
-#~ msgstr ""
-#~ "paplay %s\n"
-#~ "Käännetty libpulsen versiolle %s\n"
-#~ "Linkitetty libpulsen versiolle %s\n"
-
-#~ msgid "Invalid channel map\n"
-#~ msgstr "Virheellinen kanavakartta\n"
-
-#~ msgid "Failed to open file '%s'\n"
-#~ msgstr "Tiedoston â%sâ avaaminen epäonnistui\n"
-
-#~ msgid "Channel map doesn't match file.\n"
-#~ msgstr "Kanavakartta ei täsmää tiedostoon.\n"
-
-#~ msgid "Using sample spec '%s'\n"
-#~ msgstr "Käytetään näytemäärittelyä â%sâ\n"
-
-#~ msgid "muted"
-#~ msgstr "vaimennettu"
-
-#~ msgid ""
-#~ "*** Autoload Entry #%u ***\n"
-#~ "Name: %s\n"
-#~ "Type: %s\n"
-#~ "Module: %s\n"
-#~ "Argument: %s\n"
-#~ msgstr ""
-#~ "*** Automaattilataustietue #%u ***\n"
-#~ "Nimi: %s\n"
-#~ "Tyyppi: %s\n"
-#~ "Moduuli: %s\n"
-#~ "Argumentto: %s\n"
-
-#~ msgid "sink"
-#~ msgstr "nielu"
-
-#~ msgid "source"
-#~ msgstr "lähde"
+#~ msgid "_Default"
+#~ msgstr "_Oletus"
commit 68841d0dc878dcc868a91409008fe60888428931
Author: vpv <vpv at fedoraproject.org>
Date: Mon Nov 9 13:05:56 2009 +0000
Sending translation for Finnish
diff --git a/po/fi.po b/po/fi.po
index 13b5e15..515def3 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -1,14 +1,14 @@
-# pavucontrol Finnish (fi) translation.
+# pulseaudio translation to Finnish (fi).
# Copyright (C) 2008 Timo Jyrinki
-# This file is distributed under the same license as the pavucontrol package.
-# Timo Jyrinki <timo.jyrinki at iki.fi>
-# Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>, 2009
+# This file is distributed under the same license as the pulseaudio package.
+# Timo Jyrinki <timo.jyrinki at iki.fi>, 2008.
+# Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-09 09:45+0000\n"
-"PO-Revision-Date: 2009-11-09 15:03+0200\n"
+"POT-Creation-Date: 2009-09-29 23:47+0200\n"
+"PO-Revision-Date: 2009-09-15 13:24+0300\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
"MIME-Version: 1.0\n"
@@ -16,388 +16,2821 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/pavucontrol.desktop.in.h:1
-msgid "Adjust the volume level"
-msgstr "Säädä äänenvoimakkuutta"
+#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../src/modules/alsa/alsa-util.c:1106
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_avail() palautti poikkeuksellisen suuren arvon: %lu tavua (%lu ms).\n"
+"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
+"ongelmasta ALSA-kehittäjille."
+
+#: ../src/modules/alsa/alsa-util.c:1147
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_delay() palautti poikkeuksellisen suuren arvon: %li tavua (%s%lu "
+"ms).\n"
+"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
+"ongelmasta ALSA-kehittäjille."
+
+#: ../src/modules/alsa/alsa-util.c:1194
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_mmap_begin() palautti poikkeuksellisen suuren arvon: %lu tavua (%lu "
+"ms).\n"
+"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
+"ongelmasta ALSA-kehittäjille."
+
+#: ../src/modules/module-always-sink.c:39
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Pidä aina vähintään yksi nielu ladattuna, vaikka se olisi tyhjä nielu"
+
+#: ../src/modules/module-always-sink.c:83
+msgid "Dummy Output"
+msgstr "Valeulostulo"
+
+#: ../src/modules/module-ladspa-sink.c:49
+msgid "Virtual LADSPA sink"
+msgstr "Virtuaalinen LADSPA-nielu"
+
+#: ../src/modules/module-ladspa-sink.c:53
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+"sink_name=<nielun nimi> sink_properties=<nielun asetukset> "
+"master=<suodatettavan nielun nimi> format=<näytemuoto> "
+"rate=<näytteenottotaajuus> channels=<kanavien määrä> "
+"channel_map=<kanavakartta> plugin=<ladspa-liitännäisen nimi> label=<ladspa-"
+"liitännäisen nimiö (label)> control=<pilkulla erotettu luettelo "
+"syötteenhallinta-arvoja>"
+
+#: ../src/modules/module-null-sink.c:55
+msgid "Clocked NULL sink"
+msgstr "Kellotettu tyhjä nielu"
+
+#: ../src/modules/module-null-sink.c:291
+msgid "Null Output"
+msgstr "Tyhjä ulostulo"
+
+#: ../src/pulsecore/sink.c:2613
+msgid "Internal Audio"
+msgstr "Sisäinen äänentoisto"
+
+#: ../src/pulsecore/sink.c:2618
+msgid "Modem"
+msgstr "Modeemi"
+
+#: ../src/daemon/ltdl-bind-now.c:124
+msgid "Failed to find original lt_dlopen loader."
+msgstr "Alkuperäisen lt_dlopen-lataimen löytäminen epäonnistui."
+
+#: ../src/daemon/ltdl-bind-now.c:129
+msgid "Failed to allocate new dl loader."
+msgstr "Uuden dl-lataaminen varaaminen epäonnistui."
+
+#: ../src/daemon/ltdl-bind-now.c:142
+msgid "Failed to add bind-now-loader."
+msgstr "bind-now-loaderin lisääminen epäonnistui."
+
+#: ../src/daemon/main.c:141
+#, c-format
+msgid "Got signal %s."
+msgstr "Saatiin signaali %s."
+
+#: ../src/daemon/main.c:168
+msgid "Exiting."
+msgstr "Poistutaan."
+
+#: ../src/daemon/main.c:186
+#, c-format
+msgid "Failed to find user '%s'."
+msgstr "Käyttäjää â%sâ ei löydetty."
+
+#: ../src/daemon/main.c:191
+#, c-format
+msgid "Failed to find group '%s'."
+msgstr "Ryhmää â%sâ ei löydetty."
+
+#: ../src/daemon/main.c:195
+#, c-format
+msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
+msgstr "Löydettiin käyttäjä â%sâ (UID %lu) ja ryhmä â%sâ (GID %lu)."
+
+#: ../src/daemon/main.c:200
+#, c-format
+msgid "GID of user '%s' and of group '%s' don't match."
+msgstr "Käyttäjän â%sâ ja ryhmän â%sâ GID:t eivät vastaa toisiaan."
+
+#: ../src/daemon/main.c:205
+#, c-format
+msgid "Home directory of user '%s' is not '%s', ignoring."
+msgstr "Käyttäjän â%sâ kotihakemisto ei ole â%sâ, ohitetaan."
+
+#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr "Hakemiston â%sâ luominen epäonnistui: %s"
+
+#: ../src/daemon/main.c:220
+#, c-format
+msgid "Failed to change group list: %s"
+msgstr "Ryhmäluettelon vaihtaminen epäonnistui: %s"
+
+#: ../src/daemon/main.c:236
+#, c-format
+msgid "Failed to change GID: %s"
+msgstr "GID:n vaihtaminen epäonnistui: %s"
+
+#: ../src/daemon/main.c:252
+#, c-format
+msgid "Failed to change UID: %s"
+msgstr "UID:n vaihtaminen epäonnistui: %s"
+
+#: ../src/daemon/main.c:271
+msgid "Successfully dropped root privileges."
+msgstr "Root-oikeuksista luopuminen onnistui."
+
+#: ../src/daemon/main.c:279
+msgid "System wide mode unsupported on this platform."
+msgstr "Järjestelmänlaajuista tilaa ei tueta tällä alustalla."
+
+#: ../src/daemon/main.c:297
+#, c-format
+msgid "setrlimit(%s, (%u, %u)) failed: %s"
+msgstr "setrlimit(%s, (%u, %u)) epäonnistui: %s"
+
+#: ../src/daemon/main.c:474
+msgid "Failed to parse command line."
+msgstr "Komentorivin jäsentäminen epäonnistui."
+
+#: ../src/daemon/main.c:541
+msgid "Daemon not running"
+msgstr "Taustaprosessi ei ole käynnissä"
+
+#: ../src/daemon/main.c:543
+#, c-format
+msgid "Daemon running as PID %u"
+msgstr "Taustaprosessi käynnissä prosessitunnisteella %u"
+
+#: ../src/daemon/main.c:553
+#, c-format
+msgid "Failed to kill daemon: %s"
+msgstr "Taustaprosessin lopettaminen epäonnistui: %s"
+
+#: ../src/daemon/main.c:571
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Tätä ohjelmaa ei ole tarkoitettu suoritettavaksi pääkäyttäjänä (ellei --"
+"system ole määritelty)."
+
+#: ../src/daemon/main.c:573
+msgid "Root privileges required."
+msgstr "Pääkäyttäjän (root) oikeudet vaaditaan."
+
+#: ../src/daemon/main.c:578
+msgid "--start not supported for system instances."
+msgstr "--start-valitsinta ei tueta järjestelmätilassa."
+
+#: ../src/daemon/main.c:583
+msgid "Running in system mode, but --disallow-exit not set!"
+msgstr ""
+"Suoritetaan järjestelmätilassa, mutta --disallow-exit ei ole asetettuna!"
+
+#: ../src/daemon/main.c:586
+msgid "Running in system mode, but --disallow-module-loading not set!"
+msgstr ""
+"Suoritetaan järjestelmätilassa, mutta -disallow-module-loading ei ole "
+"asetettuna!"
+
+#: ../src/daemon/main.c:589
+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:594
+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:621
+msgid "Failed to acquire stdio."
+msgstr "stdio:n saaminen epäonnistui."
+
+#: ../src/daemon/main.c:627
+#, c-format
+msgid "pipe failed: %s"
+msgstr "putki epäonnistui: %s"
+
+#: ../src/daemon/main.c:632
+#, c-format
+msgid "fork() failed: %s"
+msgstr "fork() epäonnistui: %s"
+
+#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#, c-format
+msgid "read() failed: %s"
+msgstr "read() epäonnistui: %s"
+
+#: ../src/daemon/main.c:652
+msgid "Daemon startup failed."
+msgstr "Taustaprosessin käynnistys epäonnistui."
+
+#: ../src/daemon/main.c:654
+msgid "Daemon startup successful."
+msgstr "Taustaprosessin käynnistys onnistui."
+
+#: ../src/daemon/main.c:731
+#, c-format
+msgid "This is PulseAudio %s"
+msgstr "Tämä on PulseAudio %s"
+
+#: ../src/daemon/main.c:732
+#, c-format
+msgid "Compilation host: %s"
+msgstr "Käännöksen isäntäkone: %s"
+
+#: ../src/daemon/main.c:733
+#, c-format
+msgid "Compilation CFLAGS: %s"
+msgstr "Käännösaikaiset C-liput (CFLAGS): %s"
+
+#: ../src/daemon/main.c:736
+#, c-format
+msgid "Running on host: %s"
+msgstr "Käynnissä isäntäkoneella: %s"
+
+#: ../src/daemon/main.c:739
+#, c-format
+msgid "Found %u CPUs."
+msgstr "Löydettiin %u CPU:ta."
+
+#: ../src/daemon/main.c:741
+#, c-format
+msgid "Page size is %lu bytes"
+msgstr "Sivun koko on %lu tavua"
+
+#: ../src/daemon/main.c:744
+msgid "Compiled with Valgrind support: yes"
+msgstr "Käännetty Valgrind-tuella: kyllä"
+
+#: ../src/daemon/main.c:746
+msgid "Compiled with Valgrind support: no"
+msgstr "Käännetty Valgrind-tuella: ei"
+
+#: ../src/daemon/main.c:749
+#, c-format
+msgid "Running in valgrind mode: %s"
+msgstr "Käynnissä valgrind-tilassa: %s"
+
+#: ../src/daemon/main.c:752
+msgid "Optimized build: yes"
+msgstr "Optimoitu rakentaminen: kyllä"
+
+#: ../src/daemon/main.c:754
+msgid "Optimized build: no"
+msgstr "Optimoitu rakentaminen: ei"
+
+#: ../src/daemon/main.c:758
+msgid "NDEBUG defined, all asserts disabled."
+msgstr "NDEBUG on määritelty, kaikki assertit ovat poissa käytöstä."
+
+#: ../src/daemon/main.c:760
+msgid "FASTPATH defined, only fast path asserts disabled."
+msgstr "FASTPATH on määritelty, vain fast path -assertit ovat poissa käytöstä."
+
+#: ../src/daemon/main.c:762
+msgid "All asserts enabled."
+msgstr "Kaikki assertit ovat käytössä."
+
+#: ../src/daemon/main.c:766
+msgid "Failed to get machine ID"
+msgstr "Konetunnisteen nouto epäonnistui"
+
+#: ../src/daemon/main.c:769
+#, c-format
+msgid "Machine ID is %s."
+msgstr "Konetunniste on %s."
+
+#: ../src/daemon/main.c:773
+#, c-format
+msgid "Session ID is %s."
+msgstr "Istunnon tunniste on %s."
+
+#: ../src/daemon/main.c:779
+#, c-format
+msgid "Using runtime directory %s."
+msgstr "Käytetään ajonaikaista hakemistoa %s."
+
+#: ../src/daemon/main.c:784
+#, c-format
+msgid "Using state directory %s."
+msgstr "Käytetään tilahakemistoa %s."
+
+#: ../src/daemon/main.c:787
+#, c-format
+msgid "Using modules directory %s."
+msgstr "Käytetään moduulihakemistoa %s."
+
+#: ../src/daemon/main.c:789
+#, c-format
+msgid "Running in system mode: %s"
+msgstr "Suoritetaan järjestelmätilassa: %s"
+
+#: ../src/daemon/main.c:792
+msgid ""
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
+msgstr ""
+"PA:ta suoritetaan järjestelmätilassa. Näin ei luultavasti pitäisi tehdä.\n"
+"Jos silti teet näin, on sinun vikasi jos kaikki ei toimikaan odotetusti.\n"
+"Lisätietoja siitä, miksi järjestelmätilan käyttäminen on yleensä huono "
+"ajatus on osoitteessa http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode"
+
+#: ../src/daemon/main.c:809
+msgid "pa_pid_file_create() failed."
+msgstr "pa_pid_file_create() epäonnistui."
+
+#: ../src/daemon/main.c:819
+msgid "Fresh high-resolution timers available! Bon appetit!"
+msgstr "Korkean tarkkuuden ajastimet käytettävissä."
+
+#: ../src/daemon/main.c:821
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
+"suositeltava!"
+
+#: ../src/daemon/main.c:844
+msgid "pa_core_new() failed."
+msgstr "pa_core_new() epäonnistui."
+
+#: ../src/daemon/main.c:904
+msgid "Failed to initialize daemon."
+msgstr "Taustaprosessin alustus epäonnistui."
+
+#: ../src/daemon/main.c:909
+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:926
+msgid "Daemon startup complete."
+msgstr "Taustaprosessin käynnistys valmis."
+
+#: ../src/daemon/main.c:932
+msgid "Daemon shutdown initiated."
+msgstr "Taustaprosessin sulkeminen käynnistetty."
+
+#: ../src/daemon/main.c:954
+msgid "Daemon terminated."
+msgstr "Taustaprosessi lopetettu."
+
+#: ../src/daemon/cmdline.c:115
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" --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"
+" -k --kill Kill 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"
+" with elevated RLIMIT_NICE)\n"
+" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" (only available as root, when SUID "
+"or\n"
+" with elevated RLIMIT_RTPRIO)\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"
+" time passed\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"
+" 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-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"
+" possible values)\n"
+" --use-pid-file[=BOOL] Create a PID file\n"
+" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" platforms that support it.\n"
+" --disable-shm[=BOOL] Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\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"
+" after startup\n"
+"\n"
+" -n Don't load default script file\n"
+msgstr ""
+"%s [valitsimet]\n"
+"\n"
+"KOMENNOT:\n"
+" -h, --help Näytä tämä ohje\n"
+" --version Näytä versio\n"
+" --dump-conf Tulosta oletusasetukset\n"
+" --dump-modules Tulosta saatavilla olevien\n"
+" moduulien luettelo\n"
+" --dump-resample-methods Tulosta saatavilla\n"
+" olevat\n"
+" uudelleennäytteistystavat\n"
+" --cleanup-shm Puhdista vanhentuneet jaetun\n"
+" muistin segmentit\n"
+" --start Käynnistä taustaprosessi, jos se\n"
+" ei ole käynnissä\n"
+" -k --kill Tapa suoritettava taustaprosessi\n"
+" --check Tarkista onko\n"
+" taustaprosessi suoritettavana\n"
+" (palauttaa vain lopetuskoodin)\n"
+"\n"
+"VALITSIMET:\n"
+" --system[=BOOL] Suorita järjestelmänlaajuisena\n"
+" -D, --daemonize[=BOOL] Vaihda\n"
+" taustaprosessiksi käynnistyksen\n"
+" jälkeen\n"
+" --fail[=BOOL] Lopeta kun käynnistys epäonnistuu\n"
+" --high-priority[=BOOL] Yritä asettaa korkea nice-taso\n"
+" (käytettävissä vain root-\n"
+" käyttäjänä, SUIDilla tai\n"
+" kohotetulla RLIMIT_NICE-arvolla)\n"
+" --realtime[=BOOL] Yritä asettaa reaaliaikainen\n"
+" ajoitus (käytettävissä vain\n"
+" root-käyttäjänä, SUIDilla tai\n"
+" kohotetulla RLIMIT_RTPRIO-arvolla)\n"
+" --disallow-module-loading[=BOOL] Kiellä käyttäjän pyytämä moduulin\n"
+" lataus tai poisto käynnistyksen\n"
+" jälkeen\n"
+" --disallow-exit[=BOOL] Kiellä käyttäjän pyytämä\n"
+" lopettaminen\n"
+" --exit-idle-time=SEK Lopeta taustaprosessi, kun se on\n"
+" toimettomana ja tämä aika on\n"
+" kulunut\n"
+" --module-idle-time=SEK Poista automaattisesti ladatut\n"
+" moduulit, kun taustaprosessi on\n"
+" toimettomana ja tämä aika on\n"
+" kulunut\n"
+" --scache-idle-time=SEK Poista automaattisesti ladatut\n"
+" näytteet, kun taustaprosessi on\n"
+" toimettomana ja tämä aika on\n"
+" kulunut\n"
+" --log-level[=TASO] Aseta tai kasvata\n"
+" lokikirjoituksen tasoa\n"
+" -v Kasvata tulosteiden\n"
+" yksityiskohtaisuutta\n"
+" --log-target={auto,syslog,stderr} Aseta lokikirjoituksen kohde\n"
+" --log-meta[=BOOL] Lisää koodikohta\n"
+" lokiviesteihin\n"
+" --log-time[=BOOL] Lisää aikaleima lokiviesteihin\n"
+" --log-backtrace=KEHYKSET Lisää pinolistaus lokiviesteihin\n"
+" -p, --dl-search-path=POLKU Aseta dynaamisten jaettujen\n"
+" objektien (liitännäisten)\n"
+" hakupolku\n"
+" --resample-method=TAPA Käytä määritettyä\n"
+" uudelleennäytteistyksen tapaa\n"
+" (--dump-resample-methods\n"
+" luetteloi mahdolliset arvot)\n"
+" --use-pid-file[=BOOL] Luo PID-tiedosto\n"
+" --no-cpu-limit[=BOOL] Ãlä asenna suoritinkuorman\n"
+" rajoitinta alustoilla, jotka\n"
+" tukevat sitä\n"
+" --disable-shm[=BOOL] Poista jaetun muistin tuki käytöstä\n"
+"\n"
+"ALOITUSKOMENTOSARJA:\n"
+" -L, --load=\"MODUULIN ARGUMENTIT\" Lataa liitännäismoduuli annetulla\n"
+" argumentilla\n"
+" -F, --file=TIEDOSTO Suorita annettu komentosarja\n"
+" -C Avaa komentokehote nykyiseen\n"
+" päätteeseen käynnistyksen jälkeen\n"
+"\n"
+" -n Ãlä lataa oletuskomentosarja-\n"
+" tiedostoa\n"
+
+#: ../src/daemon/cmdline.c:247
+msgid "--daemonize expects boolean argument"
+msgstr "--daemonize vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:254
+msgid "--fail expects boolean argument"
+msgstr "--fail vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:264
+msgid ""
+"--log-level expects log level argument (either numeric in range 0..4 or one "
+"of debug, info, notice, warn, error)."
+msgstr ""
+"--log-level vaatii lokikirjoituksen tason argumentiksi (joko numero väliltä "
+"0..4 tai yksi seuraavista: debug, info, notice, warn, error)."
+
+#: ../src/daemon/cmdline.c:276
+msgid "--high-priority expects boolean argument"
+msgstr "--high-priority vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:283
+msgid "--realtime expects boolean argument"
+msgstr "--realtime vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:290
+msgid "--disallow-module-loading expects boolean argument"
+msgstr "--disallow-module-loading vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:297
+msgid "--disallow-exit expects boolean argument"
+msgstr "--disallow-exit vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:304
+msgid "--use-pid-file expects boolean argument"
+msgstr "--use-pid-file vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:321
+msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
+msgstr ""
+"Virheellinen lokikirjoituksen kohde: käytä jotain seuraavista: âsyslogâ, "
+"âstderrâ tai âautoâ."
+
+#: ../src/daemon/cmdline.c:328
+msgid "--log-time expects boolean argument"
+msgstr "--log-time vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:335
+msgid "--log-meta expects boolean argument"
+msgstr "--log-meta vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:354
+#, c-format
+msgid "Invalid resample method '%s'."
+msgstr "Virheellinen uudelleennäytteistyksen tapa â%sâ."
+
+#: ../src/daemon/cmdline.c:361
+msgid "--system expects boolean argument"
+msgstr "--system vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:368
+msgid "--no-cpu-limit expects boolean argument"
+msgstr "--no-cpu-limit vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/cmdline.c:375
+msgid "--disable-shm expects boolean argument"
+msgstr "--disable-shm vaatii totuusarvoisen argumentin"
+
+#: ../src/daemon/dumpmodules.c:60
+#, c-format
+msgid "Name: %s\n"
+msgstr "Nimi: %s\n"
+
+#: ../src/daemon/dumpmodules.c:63
+#, c-format
+msgid "No module information available\n"
+msgstr "Moduulitietoja ei saatavilla\n"
+
+#: ../src/daemon/dumpmodules.c:66
+#, c-format
+msgid "Version: %s\n"
+msgstr "Versio: %s\n"
+
+#: ../src/daemon/dumpmodules.c:68
+#, c-format
+msgid "Description: %s\n"
+msgstr "Kuvaus: %s\n"
+
+#: ../src/daemon/dumpmodules.c:70
+#, c-format
+msgid "Author: %s\n"
+msgstr "Tekijä: %s\n"
+
+#: ../src/daemon/dumpmodules.c:72
+#, c-format
+msgid "Usage: %s\n"
+msgstr "Käyttö: %s\n"
+
+#: ../src/daemon/dumpmodules.c:73
+#, c-format
+msgid "Load Once: %s\n"
+msgstr "Lataa kerran: %s\n"
+
+#: ../src/daemon/dumpmodules.c:75
+#, c-format
+msgid "DEPRECATION WARNING: %s\n"
+msgstr "VAROITUS VANHENTUNEISUUDESTA: %s\n"
+
+#: ../src/daemon/dumpmodules.c:79
+#, c-format
+msgid "Path: %s\n"
+msgstr "Polku: %s\n"
+
+#: ../src/daemon/daemon-conf.c:232
+#, c-format
+msgid "[%s:%u] Invalid log target '%s'."
+msgstr "[%s:%u] Virheellinen lokikirjoituksen kohde â%sâ."
+
+#: ../src/daemon/daemon-conf.c:248
+#, c-format
+msgid "[%s:%u] Invalid log level '%s'."
+msgstr "[%s:%u] Virheellinen lokikirjoituksen taso â%sâ."
+
+#: ../src/daemon/daemon-conf.c:264
+#, c-format
+msgid "[%s:%u] Invalid resample method '%s'."
+msgstr "[%s:%u] Virheellinen uudelleennäytteistyksen tapa â%sâ."
+
+#: ../src/daemon/daemon-conf.c:287
+#, c-format
+msgid "[%s:%u] Invalid rlimit '%s'."
+msgstr "[%s:%u] Virheellinen rlimit â%sâ."
+
+#: ../src/daemon/daemon-conf.c:294
+#, c-format
+msgid "[%s:%u] rlimit not supported on this platform."
+msgstr "[%s:%u] rlimitiä ei tueta tällä alustalla."
+
+#: ../src/daemon/daemon-conf.c:310
+#, c-format
+msgid "[%s:%u] Invalid sample format '%s'."
+msgstr "[%s:%u] Virheellinen näytemuoto â%sâ."
+
+#: ../src/daemon/daemon-conf.c:328
+#, c-format
+msgid "[%s:%u] Invalid sample rate '%s'."
+msgstr "[%s:%u] Virheellinen näytteenottotaajuus â%sâ."
+
+#: ../src/daemon/daemon-conf.c:352
+#, c-format
+msgid "[%s:%u] Invalid sample channels '%s'."
+msgstr "[%s:%u] Virheelliset näytekanavat â%sâ."
+
+#: ../src/daemon/daemon-conf.c:370
+#, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Virheellinen kanavakartta â%sâ."
+
+#: ../src/daemon/daemon-conf.c:388
+#, c-format
+msgid "[%s:%u] Invalid number of fragments '%s'."
+msgstr "[%s:%u] Virheellinen fragmenttimäärä â%sâ."
+
+#: ../src/daemon/daemon-conf.c:406
+#, c-format
+msgid "[%s:%u] Invalid fragment size '%s'."
+msgstr "[%s:%u] Virheellinen fragmenttikoko â%sâ."
+
+#: ../src/daemon/daemon-conf.c:424
+#, c-format
+msgid "[%s:%u] Invalid nice level '%s'."
+msgstr "[%s:%u] Virheellinen nice-taso â%sâ."
+
+#: ../src/daemon/daemon-conf.c:546
+#, c-format
+msgid "Failed to open configuration file: %s"
+msgstr "Asetustiedoston avaaminen epäonnistui: %s"
+
+#: ../src/daemon/daemon-conf.c:562
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+"Kanavien oletusmäärä ja oletuskanavakartan kanavien määrä poikkeavat "
+"toisistaan."
+
+#: ../src/daemon/daemon-conf.c:638
+#, c-format
+msgid "### Read from configuration file: %s ###\n"
+msgstr "### Luettu asetustiedostosta: %s ###\n"
+
+#: ../src/daemon/caps.c:62
+msgid "Cleaning up privileges."
+msgstr "Luovutaan oikeuksista."
+
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr "PulseAudio-äänijärjestelmä"
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr "Käynnistä PulseAudio-äänijärjestelmä"
+
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
+msgid "Mono"
+msgstr "Mono"
+
+#: ../src/pulse/channelmap.c:107
+msgid "Front Center"
+msgstr "Keski"
+
+#: ../src/pulse/channelmap.c:108
+msgid "Front Left"
+msgstr "Vasen etu"
+
+#: ../src/pulse/channelmap.c:109
+msgid "Front Right"
+msgstr "Oikea etu"
+
+#: ../src/pulse/channelmap.c:111
+msgid "Rear Center"
+msgstr "Takakeski"
+
+#: ../src/pulse/channelmap.c:112
+msgid "Rear Left"
+msgstr "Vasen taka"
+
+#: ../src/pulse/channelmap.c:113
+msgid "Rear Right"
+msgstr "Oikea taka"
+
+#: ../src/pulse/channelmap.c:115
+msgid "Low Frequency Emmiter"
+msgstr "Alataajuus"
+
+#: ../src/pulse/channelmap.c:117
+msgid "Front Left-of-center"
+msgstr "Vasemmalle keskeltä etu"
+
+#: ../src/pulse/channelmap.c:118
+msgid "Front Right-of-center"
+msgstr "Oikealle keskeltä etu"
+
+#: ../src/pulse/channelmap.c:120
+msgid "Side Left"
+msgstr "Vasen sivu"
+
+#: ../src/pulse/channelmap.c:121
+msgid "Side Right"
+msgstr "Oikea sivu"
+
+#: ../src/pulse/channelmap.c:123
+msgid "Auxiliary 0"
+msgstr "Avustava 0"
+
+#: ../src/pulse/channelmap.c:124
+msgid "Auxiliary 1"
+msgstr "Avustava 1"
+
+#: ../src/pulse/channelmap.c:125
+msgid "Auxiliary 2"
+msgstr "Avustava 2"
+
+#: ../src/pulse/channelmap.c:126
+msgid "Auxiliary 3"
+msgstr "Avustava 3"
+
+#: ../src/pulse/channelmap.c:127
+msgid "Auxiliary 4"
+msgstr "Avustava 4"
+
+#: ../src/pulse/channelmap.c:128
+msgid "Auxiliary 5"
+msgstr "Avustava 5"
+
+#: ../src/pulse/channelmap.c:129
+msgid "Auxiliary 6"
+msgstr "Avustava 6"
+
+#: ../src/pulse/channelmap.c:130
+msgid "Auxiliary 7"
+msgstr "Avustava 7"
+
+#: ../src/pulse/channelmap.c:131
+msgid "Auxiliary 8"
+msgstr "Avustava 8"
+
+#: ../src/pulse/channelmap.c:132
+msgid "Auxiliary 9"
+msgstr "Avustava 9"
+
+#: ../src/pulse/channelmap.c:133
+msgid "Auxiliary 10"
+msgstr "Avustava 10"
+
+#: ../src/pulse/channelmap.c:134
+msgid "Auxiliary 11"
+msgstr "Avustava 11"
+
+#: ../src/pulse/channelmap.c:135
+msgid "Auxiliary 12"
+msgstr "Avustava 12"
+
+#: ../src/pulse/channelmap.c:136
+msgid "Auxiliary 13"
+msgstr "Avustava 13"
+
+#: ../src/pulse/channelmap.c:137
+msgid "Auxiliary 14"
+msgstr "Avustava 14"
+
+#: ../src/pulse/channelmap.c:138
+msgid "Auxiliary 15"
+msgstr "Avustava 15"
+
+#: ../src/pulse/channelmap.c:139
+msgid "Auxiliary 16"
+msgstr "Avustava 16"
+
+#: ../src/pulse/channelmap.c:140
+msgid "Auxiliary 17"
+msgstr "Avustava 17"
+
+#: ../src/pulse/channelmap.c:141
+msgid "Auxiliary 18"
+msgstr "Avustava 18"
+
+#: ../src/pulse/channelmap.c:142
+msgid "Auxiliary 19"
+msgstr "Avustava 19"
+
+#: ../src/pulse/channelmap.c:143
+msgid "Auxiliary 20"
+msgstr "Avustava 20"
+
+#: ../src/pulse/channelmap.c:144
+msgid "Auxiliary 21"
+msgstr "Avustava 21"
+
+#: ../src/pulse/channelmap.c:145
+msgid "Auxiliary 22"
+msgstr "Avustava 22"
+
+#: ../src/pulse/channelmap.c:146
+msgid "Auxiliary 23"
+msgstr "Avustava 23"
+
+#: ../src/pulse/channelmap.c:147
+msgid "Auxiliary 24"
+msgstr "Avustava 24"
+
+#: ../src/pulse/channelmap.c:148
+msgid "Auxiliary 25"
+msgstr "Avustava 25"
+
+#: ../src/pulse/channelmap.c:149
+msgid "Auxiliary 26"
+msgstr "Avustava 26"
+
+#: ../src/pulse/channelmap.c:150
+msgid "Auxiliary 27"
+msgstr "Avustava 27"
+
+#: ../src/pulse/channelmap.c:151
+msgid "Auxiliary 28"
+msgstr "Avustava 28"
+
+#: ../src/pulse/channelmap.c:152
+msgid "Auxiliary 29"
+msgstr "Avustava 29"
+
+#: ../src/pulse/channelmap.c:153
+msgid "Auxiliary 30"
+msgstr "Avustava 30"
+
+#: ../src/pulse/channelmap.c:154
+msgid "Auxiliary 31"
+msgstr "Avustava 31"
+
+#: ../src/pulse/channelmap.c:156
+msgid "Top Center"
+msgstr "Keski ylä"
+
+#: ../src/pulse/channelmap.c:158
+msgid "Top Front Center"
+msgstr "Keski ylä etu"
+
+#: ../src/pulse/channelmap.c:159
+msgid "Top Front Left"
+msgstr "Vasen ylä etu"
+
+#: ../src/pulse/channelmap.c:160
+msgid "Top Front Right"
+msgstr "Oikea ylä etu"
+
+#: ../src/pulse/channelmap.c:162
+msgid "Top Rear Center"
+msgstr "Keski ylä taka"
+
+#: ../src/pulse/channelmap.c:163
+msgid "Top Rear Left"
+msgstr "Vasen ylä taka"
+
+#: ../src/pulse/channelmap.c:164
+msgid "Top Rear Right"
+msgstr "Oikea ylä taka"
+
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
+msgid "(invalid)"
+msgstr "(virheellinen)"
+
+#: ../src/pulse/channelmap.c:761
+msgid "Stereo"
+msgstr "Stereo"
+
+#: ../src/pulse/channelmap.c:766
+msgid "Surround 4.0"
+msgstr "4.0-tilaääni"
+
+#: ../src/pulse/channelmap.c:772
+msgid "Surround 4.1"
+msgstr "4.1-tilaääni"
+
+#: ../src/pulse/channelmap.c:778
+msgid "Surround 5.0"
+msgstr "5.0-tilaääni"
+
+#: ../src/pulse/channelmap.c:784
+msgid "Surround 5.1"
+msgstr "5.1-tilaääni"
+
+#: ../src/pulse/channelmap.c:791
+msgid "Surround 7.1"
+msgstr "7.1-tilaääni"
+
+#: ../src/pulse/error.c:43
+msgid "OK"
+msgstr "OK"
+
+#: ../src/pulse/error.c:44
+msgid "Access denied"
+msgstr "Pääsy evätty"
+
+#: ../src/pulse/error.c:45
+msgid "Unknown command"
+msgstr "Tuntematon komento"
+
+#: ../src/pulse/error.c:46
+msgid "Invalid argument"
+msgstr "Virheellinen argumentti"
+
+#: ../src/pulse/error.c:47
+msgid "Entity exists"
+msgstr "Entiteetti on jo olemassa"
+
+#: ../src/pulse/error.c:48
+msgid "No such entity"
+msgstr "Ei kyseisenlaista entiteettiä"
+
+#: ../src/pulse/error.c:49
+msgid "Connection refused"
+msgstr "Yhteys hylätty"
+
+#: ../src/pulse/error.c:50
+msgid "Protocol error"
+msgstr "Yhteyskäytäntövirhe"
+
+#: ../src/pulse/error.c:51
+msgid "Timeout"
+msgstr "Aikakatkaisu"
+
+#: ../src/pulse/error.c:52
+msgid "No authorization key"
+msgstr "Ei todentamisavainta"
+
+#: ../src/pulse/error.c:53
+msgid "Internal error"
+msgstr "Sisäinen virhe"
+
+#: ../src/pulse/error.c:54
+msgid "Connection terminated"
+msgstr "Yhteys katkennut"
+
+#: ../src/pulse/error.c:55
+msgid "Entity killed"
+msgstr "Entiteetti lopetettu"
+
+#: ../src/pulse/error.c:56
+msgid "Invalid server"
+msgstr "Virheellinen palvelin"
+
+#: ../src/pulse/error.c:57
+msgid "Module initalization failed"
+msgstr "Moduulin alustus epäonnistui"
+
+#: ../src/pulse/error.c:58
+msgid "Bad state"
+msgstr "Virheellinen tila"
+
+#: ../src/pulse/error.c:59
+msgid "No data"
+msgstr "Ei dataa"
+
+#: ../src/pulse/error.c:60
+msgid "Incompatible protocol version"
+msgstr "Epäyhteensopiva yhteyskäytännön versio"
+
+#: ../src/pulse/error.c:61
+msgid "Too large"
+msgstr "Liian suuri"
+
+#: ../src/pulse/error.c:62
+msgid "Not supported"
+msgstr "Ei tuettu"
+
+#: ../src/pulse/error.c:63
+msgid "Unknown error code"
+msgstr "Tuntematon virhekoodi"
+
+#: ../src/pulse/error.c:64
+msgid "No such extension"
+msgstr "Ei kyseisenlaista laajennusta"
+
+#: ../src/pulse/error.c:65
+msgid "Obsolete functionality"
+msgstr "Puuttuva toiminnallisuus"
-#: ../src/pavucontrol.desktop.in.h:2 ../src/pavucontrol.cc:476
-msgid "PulseAudio Volume Control"
-msgstr "PulseAudion äänenvoimakkuuden hallinta"
+#: ../src/pulse/error.c:66
+msgid "Missing implementation"
+msgstr "Puuttuva toteutus"
-#: ../src/pavucontrol.desktop.in.h:3 ../src/pavucontrol.glade.h:32
-msgid "Volume Control"
-msgstr "Ãänenvoimakkuus"
+#: ../src/pulse/error.c:67
+msgid "Client forked"
+msgstr "Asiakasohjelma haarautui"
-#: ../src/pavucontrol.glade.h:2
-#, no-c-format
-msgid "50%"
-msgstr "50%"
+#: ../src/pulse/error.c:68
+msgid "Input/Output error"
+msgstr "Siirräntävirhe"
-#: ../src/pavucontrol.glade.h:3
-msgid "<b>Port:</b>"
-msgstr "<b>Portti:</b>"
+#: ../src/pulse/error.c:69
+msgid "Device or resource busy"
+msgstr "Laite tai resurssi on varattu"
-#: ../src/pavucontrol.glade.h:4
-msgid "<b>Profile:</b>"
-msgstr "<b>Profiili:</b>"
+#: ../src/pulse/sample.c:172
+#, c-format
+msgid "%s %uch %uHz"
+msgstr "%s %u kan. %uHz"
+
+#: ../src/pulse/sample.c:184
+#, c-format
+msgid "%0.1f GiB"
+msgstr "%0.1f GiB"
+
+#: ../src/pulse/sample.c:186
+#, c-format
+msgid "%0.1f MiB"
+msgstr "%0.1f MiB"
+
+#: ../src/pulse/sample.c:188
+#, c-format
+msgid "%0.1f KiB"
+msgstr "%0.1f KiB"
+
+#: ../src/pulse/sample.c:190
+#, c-format
+msgid "%u B"
+msgstr "%u B"
-#: ../src/pavucontrol.glade.h:5
-msgid "<b>S_how:</b>"
-msgstr "<b>N_äytä:</b>"
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
+msgid "XOpenDisplay() failed"
+msgstr "XOpenDisplay() epäonnistui"
-#: ../src/pavucontrol.glade.h:6
-msgid "<b>Sho_w:</b>"
-msgstr "<b>Nä_ytä:</b>"
+#: ../src/pulse/client-conf-x11.c:93
+msgid "Failed to parse cookie data"
+msgstr "Evästetietojen jäsennys epäonnistui"
-#: ../src/pavucontrol.glade.h:7
-msgid "<b>_Show:</b>"
-msgstr "<b>_Näytä:</b>"
+#: ../src/pulse/client-conf.c:111
+#, c-format
+msgid "Failed to open configuration file '%s': %s"
+msgstr "Asetustiedoston avaaminen epäonnistui: â%sâ: %s"
-#: ../src/pavucontrol.glade.h:8
-msgid "<b>left-front</b>"
-msgstr "<b>vasen-etu</b>"
+#: ../src/pulse/context.c:550
+msgid "No cookie loaded. Attempting to connect without."
+msgstr "Ei ladattua evästettä. Yritetään yhdistämistä ilman."
-#: ../src/pavucontrol.glade.h:9
-msgid "<i>No application is currently playing audio.</i>"
-msgstr "<i>Yksikään sovellus ei tällä hetkellä toista ääntä.</i>"
+#: ../src/pulse/context.c:693
+#, c-format
+msgid "fork(): %s"
+msgstr "fork(): %s"
-#: ../src/pavucontrol.glade.h:10
-msgid "<i>No application is currently recording audio.</i>"
-msgstr "<i>Yksikään sovellus ei tällä hetkellä nauhoita ääntä.</i>"
+#: ../src/pulse/context.c:748
+#, c-format
+msgid "waitpid(): %s"
+msgstr "waitpid(): %s"
-#: ../src/pavucontrol.glade.h:11
-msgid "<i>No cards available for configuration</i>"
-msgstr "<i>Yhtäkään äänikorttia ei ole käytettävissä</i>"
+#: ../src/pulse/context.c:1438
+#, c-format
+msgid "Received message for unknown extension '%s'"
+msgstr "Saatiin viesti tuntemattomalle laajennokselle â%sâ"
-#: ../src/pavucontrol.glade.h:12
-msgid "<i>No input devices available</i>"
-msgstr "<i>Sisääntulolaitteita ei saatavilla</i>"
+#: ../src/utils/pacat.c:108
+#, c-format
+msgid "Failed to drain stream: %s"
+msgstr "Virran tyhjentäminen epäonnistui: %s"
+
+#: ../src/utils/pacat.c:113
+msgid "Playback stream drained."
+msgstr "Toistovirta on tyhjennetty."
+
+#: ../src/utils/pacat.c:123
+msgid "Draining connection to server."
+msgstr "Tyhjennetään yhteyttä palvelimelle."
+
+#: ../src/utils/pacat.c:136
+#, c-format
+msgid "pa_stream_drain(): %s"
+msgstr "pa_stream_drain(): %s"
+
+#: ../src/utils/pacat.c:159
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_stream_write() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:197
+#, c-format
+msgid "pa_stream_begin_write() failed: %s"
+msgstr "pa_stream_write() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#, c-format
+msgid "pa_stream_peek() failed: %s"
+msgstr "pa_stream_peek() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:307
+msgid "Stream successfully created."
+msgstr "Virran luonti onnistui."
+
+#: ../src/utils/pacat.c:310
+#, c-format
+msgid "pa_stream_get_buffer_attr() failed: %s"
+msgstr "pa_stream_get_buffer_attr() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:314
+#, c-format
+msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr "Puskuritiedot: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+
+#: ../src/utils/pacat.c:317
+#, c-format
+msgid "Buffer metrics: maxlength=%u, fragsize=%u"
+msgstr "Puskuritiedot: maxlength=%u, fragsize=%u"
+
+#: ../src/utils/pacat.c:321
+#, c-format
+msgid "Using sample spec '%s', channel map '%s'."
+msgstr "Käytetään näytemäärittelyä â%sâ, kanavakarttaa â%sâ."
+
+#: ../src/utils/pacat.c:325
+#, c-format
+msgid "Connected to device %s (%u, %ssuspended)."
+msgstr "Yhdistetty laitteeseen %s (%u, %ssuspended)."
-#: ../src/pavucontrol.glade.h:13
-msgid "<i>No output devices available</i>"
-msgstr "<i>Ulostulolaitteita ei saatavilla</i>"
+#: ../src/utils/pacat.c:335
+#, c-format
+msgid "Stream error: %s"
+msgstr "Virtavirhe: %s"
+
+#: ../src/utils/pacat.c:345
+#, c-format
+msgid "Stream device suspended.%s"
+msgstr "Virtalaite keskeytetty.%s"
+
+#: ../src/utils/pacat.c:347
+#, c-format
+msgid "Stream device resumed.%s"
+msgstr "Virtalaite palautettu.%s"
+
+#: ../src/utils/pacat.c:355
+#, c-format
+msgid "Stream underrun.%s"
+msgstr "Virran alivuoto.%s"
+
+#: ../src/utils/pacat.c:362
+#, c-format
+msgid "Stream overrun.%s"
+msgstr "Virran ylivuoto.%s"
+
+#: ../src/utils/pacat.c:369
+#, c-format
+msgid "Stream started.%s"
+msgstr "Virta käynnistetty.%s"
+
+#: ../src/utils/pacat.c:376
+#, c-format
+msgid "Stream moved to device %s (%u, %ssuspended).%s"
+msgstr "Virta siirretty laitteelle %s (%u, %ssuspended).%s"
+
+#: ../src/utils/pacat.c:376
+msgid "not "
+msgstr "ei "
+
+#: ../src/utils/pacat.c:383
+#, c-format
+msgid "Stream buffer attributes changed.%s"
+msgstr "Virran puskuriattribuutteja muutettu.%s"
+
+#: ../src/utils/pacat.c:415
+#, c-format
+msgid "Connection established.%s"
+msgstr "Yhteys muodostettu.%s"
+
+#: ../src/utils/pacat.c:418
+#, c-format
+msgid "pa_stream_new() failed: %s"
+msgstr "pa_stream_new() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:450
+#, c-format
+msgid "pa_stream_connect_playback() failed: %s"
+msgstr "pa_stream_connect_playback() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:456
+#, c-format
+msgid "pa_stream_connect_record() failed: %s"
+msgstr "pa_stream_connect_record() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#, c-format
+msgid "Connection failure: %s"
+msgstr "Yhteysvirhe: %s"
+
+#: ../src/utils/pacat.c:503
+msgid "Got EOF."
+msgstr "Saatiin EOF."
+
+#: ../src/utils/pacat.c:540
+#, c-format
+msgid "write() failed: %s"
+msgstr "write() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:561
+msgid "Got signal, exiting."
+msgstr "Saatiin signaali, lopetetaan."
+
+#: ../src/utils/pacat.c:575
+#, c-format
+msgid "Failed to get latency: %s"
+msgstr "Latenssin selvittäminen epäonnistui: %s"
+
+#: ../src/utils/pacat.c:580
+#, c-format
+msgid "Time: %0.3f sec; Latency: %0.0f usec."
+msgstr "Aika: %0.3f s; Latenssi: %0.0f μs."
-#: ../src/pavucontrol.glade.h:14
+#: ../src/utils/pacat.c:599
+#, c-format
+msgid "pa_stream_update_timing_info() failed: %s"
+msgstr "pa_stream_update_timing_info() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:609
+#, c-format
msgid ""
-"All Input Devices\n"
-"All Except Monitors\n"
-"Hardware Input Devices\n"
-"Virtual Input Devices\n"
-"Monitors"
+"%s [options]\n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+"\n"
+" -r, --record Create a connection for recording\n"
+" -p, --playback Create a connection for playback\n"
+"\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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
+" being connected to.\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"
+" --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"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
+" --raw Record/play raw PCM data.\n"
+" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --list-file-formats List available file formats.\n"
msgstr ""
-"Kaikki sisääntulolaitteet\n"
-"Kaikki paitsi tarkkailulaitteet\n"
-"Laitteistosisääntulolaitteet\n"
-"Näennäissisääntulolaitteet\n"
-"Tarkkailulaitteet"
+"%s [valitsimet]\n"
+"\n"
+" -h, --help Näytä tämä ohje\n"
+" --version Näytä versio\n"
+"\n"
+" -r, --record Luo yhteys nauhoitukselle\n"
+" -p, --playback Luo yhteys toistolle\n"
+"\n"
+" -v, --verbose Yksityiskohtaiset tulosteet\n"
+"\n"
+" -s, --server=PALVELIN Sen palvelimen nimi, johon "
+"yhdistetään\n"
+" -d, --device=LAITE Sen nielun/lähteen nimi, johon "
+"yhdistetään\n"
+" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
+"kutsutaan palvelimella\n"
+" --stream-name=NIMI Kuinka tätä virtaa kutsutaan "
+"palvelimella\n"
+" --volume=ÃÃNENVOIMAKKUUS Määritä (lineaarinen) "
+"aloitusäänenvoimakkuus väliltä 0...65536\n"
+" --rate=NÃYTTEENOTTOTAAJUUS Näytteenottotaajuus hertseinä"
+"(oletus: 44100)\n"
+" --format=NÃYTEMUOTO Näytteen tyyppi, yksi seuraavista:"
+"s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be\n"
+"s24le, s24be,\n"
+" s24-32le, s24-32be (oletus s16ne)\n"
+" --channels=KANAVIA Kanavien määrä, 1=mono, 2=stereo\n"
+" (oletus: 2)\n"
+" --channel-map=KANAVAKARTTA Oletuksen sijasta käytettävä "
+"kanavakartta\n"
+" --fix-format Valitse näytemuoto nielusta, jossa "
+"virta on\n"
+" --fix-rate Valitse näytteenottotaajuus "
+"nielusta, jossa virta on\n"
+" --fix-channels Valitse kanavien määrä ja "
+"kanavakartta nielusta, johon virtaa\n"
+" yhdistetään.\n"
+" --no-remix Ãlä yli- tai alimiksaa kanavia.\n"
+" --no-remap Kartoita kanavat indeksin mukaan, "
+"älä nimen mukaan.\n"
+" --latency=TAVUA Pyydä määritettyä latenssia "
+"tavuissa.\n"
+" --process-time=TAVUA Pyydä määritettyä prosessiaikaa "
+"pyyntöä kohti tavuissa.\n"
+" --property=ASETUS=ARVO Anna määritetylle asetukselle "
+"määritetty arvo.\n"
+" --raw Tallenna/soita raakaa PCM-dataa.\n"
+" --file-format=TMUOTO Tallenna/soita tietyn muotoista PCM-"
+"dataa.\n"
+" --list-file-formats Luettele käytettävissä olevat "
+"tiedostomuodot.\n"
+
+#: ../src/utils/pacat.c:731
+#, c-format
+msgid ""
+"pacat %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+"pacat %s\n"
+"Käännetty libpulsen versiolle %s\n"
+"Linkitetty libpulsen versiolle %s\n"
+
+#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#, c-format
+msgid "Invalid client name '%s'"
+msgstr "Virheellinen asiakasohjelman nimi â%sâ"
+
+#: ../src/utils/pacat.c:779
+#, c-format
+msgid "Invalid stream name '%s'"
+msgstr "Virheellinen virran nimi â%sâ"
+
+#: ../src/utils/pacat.c:816
+#, c-format
+msgid "Invalid channel map '%s'"
+msgstr "Virheellinen kanavakartta â%sâ"
+
+#: ../src/utils/pacat.c:845
+#, c-format
+msgid "Invalid latency specification '%s'"
+msgstr "Virheellinen latenssimääritys â%sâ"
+
+#: ../src/utils/pacat.c:852
+#, c-format
+msgid "Invalid process time specification '%s'"
+msgstr "Virheellinen prosessiajan määritys â%sâ"
+
+#: ../src/utils/pacat.c:864
+#, c-format
+msgid "Invalid property '%s'"
+msgstr "Virheellinen asetus â%sâ"
+
+#: ../src/utils/pacat.c:881
+#, c-format
+msgid "Unknown file format %s."
+msgstr "Tuntematon tiedostomuoto %s."
+
+#: ../src/utils/pacat.c:900
+msgid "Invalid sample specification"
+msgstr "Virheellinen näytemääritys"
+
+#: ../src/utils/pacat.c:910
+#, c-format
+msgid "open(): %s"
+msgstr "open(): %s"
+
+#: ../src/utils/pacat.c:915
+#, c-format
+msgid "dup2(): %s"
+msgstr "dup2(): %s"
+
+#: ../src/utils/pacat.c:922
+msgid "Too many arguments."
+msgstr "Liian monta argumenttia."
-#: ../src/pavucontrol.glade.h:19
+#: ../src/utils/pacat.c:933
+msgid "Failed to generate sample specification for file."
+msgstr "Näytemäärityksen generointi tiedostolle epäonnistui."
+
+#: ../src/utils/pacat.c:953
+msgid "Failed to open audio file."
+msgstr "Ãänitiedoston avaaminen epäonnistui."
+
+#: ../src/utils/pacat.c:959
msgid ""
-"All Output Devices\n"
-"Hardware Output Devices\n"
-"Virtual Output Devices"
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
msgstr ""
-"Kaikki ulostulolaitteet\n"
-"Laitteistoulostulolaitteet\n"
-"Näennäisulostulolaitteet"
+"Varoitus: tiedostosta luettava näytemääritys korvaa annetun määrityksen."
+
+#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+msgid "Failed to determine sample specification from file."
+msgstr "Näytemäärityksen selvittäminen tiedostosta epäonnistui."
+
+#: ../src/utils/pacat.c:971
+msgid "Warning: Failed to determine channel map from file."
+msgstr "Varoitus: Kanavakartan selvittäminen tiedostosta epäonnistui."
+
+#: ../src/utils/pacat.c:982
+msgid "Channel map doesn't match sample specification"
+msgstr "Kanavakartta ei vastaa näytemääritystä"
+
+#: ../src/utils/pacat.c:993
+msgid "Warning: failed to write channel map to file."
+msgstr "Varoitus: kanavakartan kirjoittaminen tiedostoon epäonnistui."
+
+#: ../src/utils/pacat.c:1008
+#, c-format
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr "Avataan %svirta näytemäärityksellä â%sâ ja kanavakartalla â%sâ."
+
+#: ../src/utils/pacat.c:1009
+msgid "recording"
+msgstr "nauhoitus"
+
+#: ../src/utils/pacat.c:1009
+msgid "playback"
+msgstr "toisto"
+
+#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+msgid "pa_mainloop_new() failed."
+msgstr "pa_mainloop_new() epäonnistui."
+
+#: ../src/utils/pacat.c:1054
+msgid "io_new() failed."
+msgstr "io_new() epäonnistui."
+
+#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+msgid "pa_context_new() failed."
+msgstr "pa_context_new() epäonnistui."
+
+#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#, c-format
+msgid "pa_context_connect() failed: %s"
+msgstr "pa_context_connect() epäonnistui: %s"
+
+#: ../src/utils/pacat.c:1075
+msgid "pa_context_rttime_new() failed."
+msgstr "pa_context_new() epäonnistui."
+
+#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+msgid "pa_mainloop_run() failed."
+msgstr "pa_mainloop_run() epäonnistui."
+
+#: ../src/utils/pasuspender.c:81
+#, c-format
+msgid "fork(): %s\n"
+msgstr "fork(): %s\n"
+
+#: ../src/utils/pasuspender.c:92
+#, c-format
+msgid "execvp(): %s\n"
+msgstr "execvp(): %s\n"
+
+#: ../src/utils/pasuspender.c:109
+#, c-format
+msgid "Failure to suspend: %s\n"
+msgstr "Keskeytys epäonnistui: %s\n"
+
+#: ../src/utils/pasuspender.c:124
+#, c-format
+msgid "Failure to resume: %s\n"
+msgstr "Palautus epäonnistui: %s\n"
+
+#: ../src/utils/pasuspender.c:147
+#, c-format
+msgid "WARNING: Sound server is not local, not suspending.\n"
+msgstr "VAROITUS: Ãänipalvelin ei ole paikallinen, ei keskeytetä.\n"
+
+#: ../src/utils/pasuspender.c:159
+#, c-format
+msgid "Connection failure: %s\n"
+msgstr "Yhteysvirhe: %s\n"
+
+#: ../src/utils/pasuspender.c:176
+#, c-format
+msgid "Got SIGINT, exiting.\n"
+msgstr "Saatiin SIGINT, lopetetaan.\n"
+
+#: ../src/utils/pasuspender.c:194
+#, c-format
+msgid "WARNING: Child process terminated by signal %u\n"
+msgstr "VAROITUS: Lapsiprosessi lopetettiin signaalilla %u\n"
-#. Applications All streams
-#: ../src/pavucontrol.glade.h:23
+#: ../src/utils/pasuspender.c:212
+#, c-format
+msgid ""
+"%s [options] ... \n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" -s, --server=SERVER The name of the server to connect "
+"to\n"
+"\n"
+msgstr ""
+"%s [valitsimet] ... \n"
+"\n"
+" -h, --help Näytä tämä ohje\n"
+" --version Näytä versio\n"
+" -s, --server=PALVELIN Sen palvelimen nimi, johon\n"
+" yhdistetään\n"
+"\n"
+
+#: ../src/utils/pasuspender.c:248
+#, c-format
msgid ""
-"All Streams\n"
-"Applications\n"
-"Virtual Streams"
+"pasuspender %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
msgstr ""
-"Kaikki virrat\n"
-"Sovellukset\n"
-"Näennäisvirrat"
+"pasuspender %s\n"
+"Käännetty libpulsen versiolle %s\n"
+"Linkitetty libpulsen versiolle %s\n"
-#: ../src/pavucontrol.glade.h:26
-msgid "Card Name"
-msgstr "Kortin nimi"
+#: ../src/utils/pasuspender.c:277
+#, c-format
+msgid "pa_mainloop_new() failed.\n"
+msgstr "pa_mainloop_new() epäonnistui.\n"
-#: ../src/pavucontrol.glade.h:27
-msgid "Device"
-msgstr "Laite"
+#: ../src/utils/pasuspender.c:290
+#, c-format
+msgid "pa_context_new() failed.\n"
+msgstr "pa_context_new() epäonnistui.\n"
-#: ../src/pavucontrol.glade.h:28
-msgid "Lock channels together"
-msgstr "Lukitse kanavat yhteen"
+#: ../src/utils/pasuspender.c:298
+#, c-format
+msgid "pa_mainloop_run() failed.\n"
+msgstr "pa_mainloop_run() epäonnistui.\n"
-#: ../src/pavucontrol.glade.h:29
-msgid "Mute audio"
-msgstr "Vaimenna äänet"
+#: ../src/utils/pactl.c:135
+#, c-format
+msgid "Failed to get statistics: %s"
+msgstr "Tilastojen selvittäminen epäonnistui: %s"
-#: ../src/pavucontrol.glade.h:30
-msgid "Set as fallback"
-msgstr "Aseta toissijaiseksi"
+#: ../src/utils/pactl.c:141
+#, c-format
+msgid "Currently in use: %u blocks containing %s bytes total.\n"
+msgstr "Nyt käytössä: %u lohkoa sisältäen yhteensä %s tavua.\n"
+
+#: ../src/utils/pactl.c:144
+#, c-format
+msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
+msgstr "Koko käyttöaikana varattu: %u lohkoa sisältäen yhteensä %s tavua.\n"
+
+#: ../src/utils/pactl.c:147
+#, c-format
+msgid "Sample cache size: %s\n"
+msgstr "Näytevälimuistin koko: %s\n"
+
+#: ../src/utils/pactl.c:156
+#, c-format
+msgid "Failed to get server information: %s"
+msgstr "Palvelintietojen selvittäminen epäonnistui: %s"
+
+#: ../src/utils/pactl.c:164
+#, c-format
+msgid ""
+"User name: %s\n"
+"Host Name: %s\n"
+"Server Name: %s\n"
+"Server Version: %s\n"
+"Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
+"Default Sink: %s\n"
+"Default Source: %s\n"
+"Cookie: %08x\n"
+msgstr ""
+"Käyttäjänimi: %s\n"
+"Konenimi: %s\n"
+"Palvelimen nimi: %s\n"
+"Palvelimen versio: %s\n"
+"Oletusnäytemäärittely: %s\n"
+"Oletuskanavakartta: %s\n"
+"Oletusnielu: %s\n"
+"Oletuslähde: %s\n"
+"Eväste: %08x\n"
+
+#: ../src/utils/pactl.c:205
+#, c-format
+msgid "Failed to get sink information: %s"
+msgstr "Nielun tietojen nouto epäonnistui: %s"
+
+#: ../src/utils/pactl.c:221
+#, c-format
+msgid ""
+"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 ""
+"Nielu #%u\n"
+"\tTila: %s\n"
+"\tNimi: %s\n"
+"\tKuvaus: %s\n"
+"\tAjuri: %s\n"
+"\tNäytemäärittely: %s\n"
+"\tKanavakartta: %s\n"
+"\tOmistava moduuli: %u\n"
+"\tVaimennus: %s\n"
+"\tÃänenvoimakkuus: %s%s%s\n"
+"\t balanssi %0.2f\n"
+"\tPerusäänenvoimakkuus: %s%s%s\n"
+"\tTarkkailulähde: %s\n"
+"\tLatenssi: %0.0f μs, asetettu %0.0f μs\n"
+"\tLiput: %s%s%s%s%s%s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#, c-format
+msgid "\tPorts:\n"
+msgstr "\tPortit:\n"
-#: ../src/pavucontrol.glade.h:31
-msgid "Stream Title"
-msgstr "Virran otsikko"
+#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#, c-format
+msgid "\tActive Port: %s\n"
+msgstr "\tAktiivinen portti: %s\n"
-#: ../src/pavucontrol.glade.h:33
-msgid "_Configuration"
-msgstr "_Asetukset"
+#: ../src/utils/pactl.c:297
+#, c-format
+msgid "Failed to get source information: %s"
+msgstr "Lähteen tietojen nouto epäonnistui: %s"
-#: ../src/pavucontrol.glade.h:34
-msgid "_Input Devices"
-msgstr "S_isääntulolaitteet"
+#: ../src/utils/pactl.c:313
+#, c-format
+msgid ""
+"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 ""
+"Lähde #%u\n"
+"\tTila: %s\n"
+"\tNimi: %s\n"
+"\tKuvaus: %s\n"
+"\tAjuri: %s\n"
+"\tNäytemäärittely: %s\n"
+"\tKanavakartta: %s\n"
+"\tOmistava moduuli: %u\n"
+"\tVaimennus: %s\n"
+"\tÃänenvoimakkuus: %s%s%s\n"
+"\t balanssi %0.2f\n"
+"\tPerusäänenvoimakkuus: %s%s%s\n"
+"\tTarkkailtava nielu: %s\n"
+"\tLatenssi: %0.0f μs, asetettu %0.0f μs\n"
+"\tLiput: %s%s%s%s%s%s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:645
+msgid "n/a"
+msgstr "-"
+
+#: ../src/utils/pactl.c:375
+#, c-format
+msgid "Failed to get module information: %s"
+msgstr "Moduulin tietojen nouto epäonnistui: %s"
-#: ../src/pavucontrol.glade.h:35
-msgid "_Output Devices"
-msgstr "Ul_ostulolaitteet"
+#: ../src/utils/pactl.c:393
+#, c-format
+msgid ""
+"Module #%u\n"
+"\tName: %s\n"
+"\tArgument: %s\n"
+"\tUsage counter: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+"Moduuli #%u\n"
+"\tNimi: %s\n"
+"\tArgumentti: %s\n"
+"\tKäyttölaskuri: %s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:412
+#, c-format
+msgid "Failed to get client information: %s"
+msgstr "Asiakkaan tietojen nouto epäonnistui: %s"
+
+#: ../src/utils/pactl.c:430
+#, c-format
+msgid ""
+"Client #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+"Asiakas #%u\n"
+"\tAjuri: %s\n"
+"\tOmistava moduuli: %s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
-#: ../src/pavucontrol.glade.h:36
-msgid "_Playback"
-msgstr "_Toisto"
+#: ../src/utils/pactl.c:447
+#, c-format
+msgid "Failed to get card information: %s"
+msgstr "Kortin tietojen nouto epäonnistui: %s"
-#: ../src/pavucontrol.glade.h:37
-msgid "_Recording"
-msgstr "_Nauhoitus"
+#: ../src/utils/pactl.c:465
+#, c-format
+msgid ""
+"Card #%u\n"
+"\tName: %s\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+"Kortti #%u\n"
+"\tNimi: %s\n"
+"\tAjuri: %s\n"
+"\tOmistava moduuli: %s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:479
+#, c-format
+msgid "\tProfiles:\n"
+msgstr "\tProfiilit:\n"
-#: ../src/pavucontrol.glade.h:38
-msgid "direction"
-msgstr "suunta"
+#: ../src/utils/pactl.c:485
+#, c-format
+msgid "\tActive Profile: %s\n"
+msgstr "\tAktiivinen profiili: %s\n"
-#: ../src/pavucontrol.cc:73
-msgid "Card callback failure"
-msgstr "Kortin takaisinkutsu epäonnistui"
+#: ../src/utils/pactl.c:496
+#, c-format
+msgid "Failed to get sink input information: %s"
+msgstr "Nielun sisääntulon tietojen nouto epäonnistui: %s"
-#: ../src/pavucontrol.cc:92
-msgid "Sink callback failure"
-msgstr "Nielun takaisinkutsu epäonnistui"
+#: ../src/utils/pactl.c:515
+#, c-format
+msgid ""
+"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 ""
+"Nielun sisääntulo #%u\n"
+"\tAjuri: %s\n"
+"\tOmistava moduuli: %s\n"
+"\tAsiakas: %s\n"
+"\tNielu: %u\n"
+"\tNäytemäärittely: %s\n"
+"\tKanavakartta: %s\n"
+"\tVaimennus: %s\n"
+"\tÃänenvoimakkuus: %s\n"
+"\t %s\n"
+"\t balanssi %0.2f\n"
+"\tPuskurin latenssi: %0.0f μs\n"
+"\tNielun latenssi: %0.0f μs\n"
+"\tUudelleennäytteistyksen tapa: %s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:554
+#, c-format
+msgid "Failed to get source output information: %s"
+msgstr "Lähteen ulostulon tietojen nouto epäonnistui: %s"
-#: ../src/pavucontrol.cc:111
-msgid "Source callback failure"
-msgstr "Lähteen takaisinkutsu epäonnistui"
+#: ../src/utils/pactl.c:574
+#, c-format
+msgid ""
+"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 ""
+"Lähteen ulostulo #%u\n"
+"\tAjuri: %s\n"
+"\tOmistava moduuli: %s\n"
+"\tAsiakas: %s\n"
+"\tLähde: %u\n"
+"\tNäytemäärittely: %s\n"
+"\tKanavakartta: %s\n"
+"\tPuskurin latenssi: %0.0f μs\n"
+"\tLähteen latenssi: %0.0f μs\n"
+"\tUudelleennäytteistyksen tapa: %s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:605
+#, c-format
+msgid "Failed to get sample information: %s"
+msgstr "Näytetietojen nouto epäonnistui: %s"
-#: ../src/pavucontrol.cc:130
-msgid "Sink input callback failure"
-msgstr "Nielun sisääntulon takaisinkutsu epäonnistui"
+#: ../src/utils/pactl.c:623
+#, c-format
+msgid ""
+"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 ""
+"Näyte #%u\n"
+"\tNimi: %s\n"
+"\tNäytemäärittely: %s\n"
+"\tKanavakartta: %s\n"
+"\tÃänenvoimakkuus: %s\n"
+"\t %s\n"
+"\t balanssi %0.2f\n"
+"\tKesto: %0.1fs\n"
+"\tKoko: %s\n"
+"\tLaiska: %s\n"
+"\tTiedostonimi: %s\n"
+"\tOminaisuudet:\n"
+"\t\t%s\n"
+
+#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#, c-format
+msgid "Failure: %s"
+msgstr "Epäonnistuminen: %s"
-#: ../src/pavucontrol.cc:149
-msgid "Source output callback failure"
-msgstr "Lähteen ulostulon takaisinkutsu epäonnistui"
+#: ../src/utils/pactl.c:687
+#, c-format
+msgid "Failed to upload sample: %s"
+msgstr "Näytteen lähettäminen epäonnistui: %s"
-#: ../src/pavucontrol.cc:183
-msgid "Client callback failure"
-msgstr "Asiakkaan takaisinkutsu"
+#: ../src/utils/pactl.c:704
+msgid "Premature end of file"
+msgstr "Ennenaikainen tiedoston päättyminen"
-#: ../src/pavucontrol.cc:199
-msgid "Server info callback failure"
-msgstr "Palvelintietojen takaisinkutsu epäonnistui"
+#: ../src/utils/pactl.c:863
+msgid "Got SIGINT, exiting."
+msgstr "Saatiin SIGINT, lopetetaan."
-#: ../src/pavucontrol.cc:217 ../src/pavucontrol.cc:430
+#: ../src/utils/pactl.c:869
#, c-format
-msgid "Failed to initialize stream_restore extension: %s"
-msgstr "stream_restore-laajennoksen alustus epäonnistui: %s"
+msgid ""
+"%s [options] stat\n"
+"%s [options] list\n"
+"%s [options] exit\n"
+"%s [options] upload-sample FILENAME [NAME]\n"
+"%s [options] play-sample NAME [SINK]\n"
+"%s [options] remove-sample NAME\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [options] load-module NAME [ARGS ...]\n"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
+msgstr ""
+"%s [valitsimet] stat\n"
+"%s [valitsimet] list\n"
+"%s [valitsimet] exit\n"
+"%s [valitsimet] upload-sample TIEDOSTONIMI [NIMI]\n"
+"%s [valitsimet] play-sample NIMI [NIELU]\n"
+"%s [valitsimet] remove-sample NIMI\n"
+"%s [valitsimet] move-sink-input NIELUSISÃÃNMENO NIELU\n"
+"%s [valitsimet] move-source-output LÃHDEULOSTULO LÃHDE\n"
+"%s [valitsimet] load-module NIMI [ARGUMENTIT ...]\n"
+"%s [valitsimet] unload-module MODUULI\n"
+"%s [valitsimet] suspend-sink NIELU 1|0\n"
+"%s [valitsimet] suspend-source LÃHDE 1|0\n"
+"%s [valitsimet] set-card-profile KORTTI PROFIILI\n"
+"%s [valitsimet] set-sink-port NIELU PORTTI\n"
+"%s [valitsimet] set-source-port LÃHDE PORTTI\n"
+"%s [valitsimet] set-sink-volume NIELU VOIMAKKUUS\n"
+"%s [valitsimet] set-source-volume LÃHDE VOIMAKKUUS\n"
+"%s [valitsimet] set-sink-input-volume NIELUSISÃÃNMENO VOIMAKKUUS\n"
+"%s [valitsimet] set-sink-mute NIELU 1|0\n"
+"%s [valitsimet] set-source-mute LÃHDE 1|0\n"
+"%s [valitsimet] set-sink-input-mute NIELUSISÃÃNMENO 1|0\n"
+"\n"
+" -h, --help Näytä tämä ohje\n"
+" --version Näytä versio\n"
+"\n"
+" -s, --server=PALVELIN Sen palvelimen nimi, johon "
+"yhdistetään\n"
+" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
+"kutsutaan palvelimella\n"
+
+#: ../src/utils/pactl.c:933
+#, c-format
+msgid ""
+"pactl %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+"pactl %s\n"
+"Käännetty libpulsen versiolle %s\n"
+"Linkitetty libpulsen versiolle %s\n"
+
+#: ../src/utils/pactl.c:979
+msgid "Please specify a sample file to load"
+msgstr "Anna ladattava näytetiedosto"
+
+#: ../src/utils/pactl.c:992
+msgid "Failed to open sound file."
+msgstr "Ãänitiedoston avaaminen epäonnistui."
+
+#: ../src/utils/pactl.c:1004
+msgid "Warning: Failed to determine sample specification from file."
+msgstr "Varoitus: näytemäärityksen selvitys tiedostosta epäonnistui."
+
+#: ../src/utils/pactl.c:1014
+msgid "You have to specify a sample name to play"
+msgstr "Soitettavan näytteen nimi on annettava"
+
+#: ../src/utils/pactl.c:1026
+msgid "You have to specify a sample name to remove"
+msgstr "Poistettavan näytteen nimi on annettava"
+
+#: ../src/utils/pactl.c:1035
+msgid "You have to specify a sink input index and a sink"
+msgstr "Nielun syöteindeksi ja nielu on annettava"
+
+#: ../src/utils/pactl.c:1045
+msgid "You have to specify a source output index and a source"
+msgstr "Lähteen ulostuloindeksi ja lähde on annettava"
+
+#: ../src/utils/pactl.c:1060
+msgid "You have to specify a module name and arguments."
+msgstr "Moduulin nimi ja argumentit on annettava."
+
+#: ../src/utils/pactl.c:1080
+msgid "You have to specify a module index"
+msgstr "Moduulin indeksi on annettava"
+
+#: ../src/utils/pactl.c:1090
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr "Ei voi antaa enempää kuin yhden nielun. Totuusarvo on annettava."
+
+#: ../src/utils/pactl.c:1103
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
+msgstr "Ei voi antaa enempää kuin yhden lähteen. Totuusarvo on annettava."
+
+#: ../src/utils/pactl.c:1115
+msgid "You have to specify a card name/index and a profile name"
+msgstr "Kortin nimi/indeksi ja profiilin nimi on annettava"
+
+#: ../src/utils/pactl.c:1126
+msgid "You have to specify a sink name/index and a port name"
+msgstr "Nielun nimi/indeksi ja portin nimi on annettava"
+
+#: ../src/utils/pactl.c:1137
+msgid "You have to specify a source name/index and a port name"
+msgstr "Lähteen nimi/indeksi ja portin nimi on annettava"
+
+#: ../src/utils/pactl.c:1149
+msgid "You have to specify a sink name/index and a volume"
+msgstr "Nielun nimi/indeksi ja portin nimi on annettava"
+
+#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+msgid "Invalid volume specification"
+msgstr "Virheellinen äänenvoimakkuuden määritys"
+
+#: ../src/utils/pactl.c:1166
+msgid "You have to specify a source name/index and a volume"
+msgstr "Lähteen nimi/indeksi ja äänenvoimakkuus on annettava"
+
+#: ../src/utils/pactl.c:1183
+msgid "You have to specify a sink input index and a volume"
+msgstr "Nielun syöteindeksi ja äänenvoimakkuus on annettava"
+
+#: ../src/utils/pactl.c:1188
+msgid "Invalid sink input index"
+msgstr "Virheellinen nielun syöteindeksi"
-#: ../src/pavucontrol.cc:235
-msgid "pa_ext_stream_restore_read() failed"
-msgstr "pa_ext_stream_restore_read() epäonnistui"
+#: ../src/utils/pactl.c:1204
+msgid "You have to specify a sink name/index and a mute boolean"
+msgstr "Nielun nimi/indeksi ja vaimennuksen totuusarvo on annettava"
-#: ../src/pavucontrol.cc:252
-msgid "pa_context_get_sink_info_by_index() failed"
-msgstr "pa_context_get_sink_info_by_index() epäonnistui"
+#: ../src/utils/pactl.c:1221
+msgid "You have to specify a source name/index and a mute boolean"
+msgstr "Lähteen nimi/indeksi ja vaimennuksen totuusarvo on annettava"
-#: ../src/pavucontrol.cc:265
-msgid "pa_context_get_source_info_by_index() failed"
-msgstr "pa_context_get_source_info_by_index() epäonnistui"
+#: ../src/utils/pactl.c:1238
+msgid "You have to specify a sink input index and a mute boolean"
+msgstr "Nielun syöteindeksi ja vaimennuksen totuusarvo on annettava"
-#: ../src/pavucontrol.cc:278 ../src/pavucontrol.cc:291
-msgid "pa_context_get_sink_input_info() failed"
-msgstr "pa_context_get_sink_input_info() epäonnistui"
+#: ../src/utils/pactl.c:1243
+msgid "Invalid sink input index specification"
+msgstr "Virheellinen nielun syöteindeksin määritys"
-#: ../src/pavucontrol.cc:304
-msgid "pa_context_get_client_info() failed"
-msgstr "pa_context_get_client_info() epäonnistui"
+#: ../src/utils/pactl.c:1262
+msgid "No valid command specified."
+msgstr "Mitään kelvollista komentoa ei annettu."
-#: ../src/pavucontrol.cc:314 ../src/pavucontrol.cc:371
-msgid "pa_context_get_server_info() failed"
-msgstr "pa_context_get_server_info() epäonnistui"
+#: ../src/utils/pax11publish.c:61
+#, c-format
+msgid ""
+"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
+"\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"
+" -r Remove PulseAudio data from X11 display\n"
+msgstr ""
+"%s [-D näyttö] [-S palvelin] [-O nielu] [-I lähde] [-c tiedosto] [-d|-e|-i|-"
+"r]\n"
+"\n"
+" -d Näytä nykyiseen X11-näyttöön yhdistetyn PulseAudion tiedot (oletus)\n"
+" -e Vie paikalliset PulseAudio-tiedot X11-näytölle\n"
+" -i Tuo PulseAudio-tiedot X11-näytöltä paikallisiin ympäristömuuttujiin "
+"ja\n"
+" evästetiedostoon.\n"
+" -r Poista PulseAudio-tiedostot X11-näytöltä\n"
+
+#: ../src/utils/pax11publish.c:94
+#, c-format
+msgid "Failed to parse command line.\n"
+msgstr "Komentorivin jäsentäminen epäonnistui.\n"
+
+#: ../src/utils/pax11publish.c:108
+#, c-format
+msgid "Server: %s\n"
+msgstr "Palvelin: %s\n"
+
+#: ../src/utils/pax11publish.c:110
+#, c-format
+msgid "Source: %s\n"
+msgstr "Lähde: %s\n"
-#: ../src/pavucontrol.cc:327
-msgid "pa_context_get_card_info_by_index() failed"
-msgstr "pa_context_get_card_info_by_index() epäonnistui"
+#: ../src/utils/pax11publish.c:112
+#, c-format
+msgid "Sink: %s\n"
+msgstr "Nielu: %s\n"
-#: ../src/pavucontrol.cc:362
-msgid "pa_context_subscribe() failed"
-msgstr "pa_context_subscribe() epäonnistui"
+#: ../src/utils/pax11publish.c:114
+#, c-format
+msgid "Cookie: %s\n"
+msgstr "Eväste: %s\n"
-#: ../src/pavucontrol.cc:378
-msgid "pa_context_client_info_list() failed"
-msgstr "pa_context_client_info_list() epäonnistui"
+#: ../src/utils/pax11publish.c:132
+#, c-format
+msgid "Failed to parse cookie data\n"
+msgstr "Evästetietojen jäsennys epäonnistui\n"
-#: ../src/pavucontrol.cc:385
-msgid "pa_context_get_card_info_list() failed"
-msgstr "pa_context_get_card_info_list() epäonnistui"
+#: ../src/utils/pax11publish.c:137
+#, c-format
+msgid "Failed to save cookie data\n"
+msgstr "Evästetietojen tallennus epäonnistui\n"
-#: ../src/pavucontrol.cc:392
-msgid "pa_context_get_sink_info_list() failed"
-msgstr "pa_context_get_sink_info_list() epäonnistui"
+#: ../src/utils/pax11publish.c:152
+#, c-format
+msgid "Failed to load client configuration file.\n"
+msgstr "Asiakasohjelman asetustiedoston lataaminen epäonnistui.\n"
-#: ../src/pavucontrol.cc:399
-msgid "pa_context_get_source_info_list() failed"
-msgstr "pa_context_get_source_info_list() epäonnistui"
+#: ../src/utils/pax11publish.c:157
+#, c-format
+msgid "Failed to read environment configuration data.\n"
+msgstr "Ympäristön asetustietojen lukeminen epäonnistui.\n"
-#: ../src/pavucontrol.cc:406
-msgid "pa_context_get_sink_input_info_list() failed"
-msgstr "pa_context_get_sink_input_info_list() epäonnistui"
+#: ../src/utils/pax11publish.c:174
+#, c-format
+msgid "Failed to get FQDN.\n"
+msgstr "Verkkonimen saaminen epäonnistui.\n"
-#: ../src/pavucontrol.cc:413
-msgid "pa_context_get_source_output_info_list() failed"
-msgstr "pa_context_get_source_output_info_list() epäonnistui"
+#: ../src/utils/pax11publish.c:194
+#, c-format
+msgid "Failed to load cookie data\n"
+msgstr "Evästetietojen lataaminen epäonnistui\n"
-#: ../src/pavucontrol.cc:437
-msgid "Connection failed"
-msgstr "Yhteys epäonnistui"
+#: ../src/utils/pax11publish.c:211
+#, c-format
+msgid "Not yet implemented.\n"
+msgstr "Toteutusta ei vielä ole.\n"
-#: ../src/cardwidget.cc:87
-msgid "pa_context_set_card_profile_by_index() failed"
-msgstr "pa_context_set_card_profile_by_index() epäonnistui"
+#: ../src/utils/pacmd.c:69
+msgid "No PulseAudio daemon running, or not running as session daemon."
+msgstr ""
+"PulseAudio-taustaprosessi ei ole käynnissä eikä PulseAudiota suoriteta "
+"istunnon taustaprosessina."
-#: ../src/channelwidget.cc:104
-msgid "<small>Silence</small>"
-msgstr "<small>Hiljaisuus</small>"
+#: ../src/utils/pacmd.c:74
+#, c-format
+msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/channelwidget.cc:104
-msgid "<small>Min</small>"
-msgstr "<small>Minimi</small>"
+#: ../src/utils/pacmd.c:91
+#, c-format
+msgid "connect(): %s"
+msgstr "connect(): %s"
-#: ../src/channelwidget.cc:105
-msgid "<small>Max</small>"
-msgstr "<small>Maksimi</small>"
+#: ../src/utils/pacmd.c:99
+msgid "Failed to kill PulseAudio daemon."
+msgstr "PulseAudio-taustaprosessin lopettaminen epäonnistui."
-#: ../src/channelwidget.cc:109
-msgid "<small><i>Base</i></small>"
-msgstr "<small><i>Perus</i></small>"
+#: ../src/utils/pacmd.c:107
+msgid "Daemon not responding."
+msgstr "Taustaprosessi ei vastaa."
-#: ../src/mainwindow.cc:269
-msgid "Failed to read data from stream"
-msgstr "Datan lukeminen virrasta epäonnistui"
+#: ../src/utils/pacmd.c:161
+#, c-format
+msgid "poll(): %s"
+msgstr "poll(): %s"
-#: ../src/mainwindow.cc:304 ../src/mainwindow.cc:341
-msgid "Peak detect"
-msgstr "Huipun tunnistus"
+#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#, c-format
+msgid "read(): %s"
+msgstr "read(): %s"
-#: ../src/mainwindow.cc:305 ../src/mainwindow.cc:342
-msgid "Failed to create monitoring stream"
-msgstr "Tarkkailuvirran luonti epäonnistui"
+#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#, c-format
+msgid "write(): %s"
+msgstr "write(): %s"
-#: ../src/mainwindow.cc:313 ../src/mainwindow.cc:351
-msgid "Failed to connect monitoring stream"
-msgstr "Tarkkailuvirtaan yhdistäminen epäonnistui"
+#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+msgid "Cannot access autospawn lock."
+msgstr "Automaattisen käynnistyksen lukkoa ei voida käyttää."
-#: ../src/mainwindow.cc:466
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA herätti taustaprosessin kirjoittamaan uutta dataa laitteelle, mutta "
+"mitään kirjoitettavaa ei ollut!\n"
+"Tämä on luultavasti ohjelmavirhe ALSA-ajurissa â%sâ. Raportoi tästä "
+"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLOUT "
+"asetettuna, snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, "
+"joka on < min_avail."
+
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
+#, c-format
msgid ""
-"Ignoring sink-input due to it being designated as an event and thus handled "
-"by the Event widget"
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA herätti taustaprosessin lukemaan uutta dataa laitteelta, mutta mitään "
+"luettavaa ei ollut!\n"
+"Tämä on luultavasti ohjelmavirhe ALSA-ajurissa â%sâ. Raportoi tästä "
+"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLIN asetettuna, "
+"snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, on < min_avail."
+
+#: ../src/modules/alsa/module-alsa-card.c:152
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
+#: ../src/modules/alsa/alsa-mixer.c:2931
+msgid "Off"
+msgstr "Poissa"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+msgid "High Fidelity Playback (A2DP)"
+msgstr "Korkean äänenlaadun toisto (A2DP)"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+msgid "High Fidelity Capture (A2DP)"
+msgstr "Korkean äänenlaadun tallennus (A2DP)"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+msgid "Telephony Duplex (HSP/HFP)"
+msgstr ""
+
+#: ../src/modules/reserve-wrap.c:151
+msgid "PulseAudio Sound Server"
+msgstr "PulseAudio-äänipalvelin"
+
+#: ../src/modules/module-rygel-media-server.c:569
+#: ../src/modules/module-rygel-media-server.c:583
+msgid "Output Devices"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:570
+#: ../src/modules/module-rygel-media-server.c:584
+#, fuzzy
+msgid "Input Devices"
+msgstr "Sisääntulo %s"
+
+#: ../src/modules/module-rygel-media-server.c:774
+msgid "Audio on @HOSTNAME@"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1701
+#, fuzzy
+msgid "Input"
+msgstr "Sisääntulo %s"
+
+#: ../src/modules/alsa/alsa-mixer.c:1702
+msgid "Docking Station Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1703
+msgid "Docking Station Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1704
+msgid "Line-In"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1705
+msgid "Microphone"
msgstr ""
-"Ohitetaan nielusisäänmeno, koska se on määrätty tapahtumaksi ja siksi sen "
-"käsittelee Event-elementti"
-#: ../src/mainwindow.cc:618
-msgid "System Sounds"
-msgstr "Järjestelmän äänet"
+#: ../src/modules/alsa/alsa-mixer.c:1706
+msgid "External Microphone"
+msgstr ""
-#: ../src/rolewidget.cc:71
-msgid "pa_ext_stream_restore_write() failed"
-msgstr "pa_ext_stream_restore_write() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:1707
+#, fuzzy
+msgid "Internal Microphone"
+msgstr "Sisäinen äänentoisto"
-#: ../src/sinkinputwidget.cc:35
-msgid "on"
-msgstr "päällä"
+#: ../src/modules/alsa/alsa-mixer.c:1708
+msgid "Radio"
+msgstr ""
-#: ../src/sinkinputwidget.cc:38
-msgid "Terminate Playback"
-msgstr "Lopeta toisto"
+#: ../src/modules/alsa/alsa-mixer.c:1709
+msgid "Video"
+msgstr ""
-#: ../src/sinkinputwidget.cc:61
-msgid "Unknown output"
-msgstr "Tuntematon ulostulo"
+#: ../src/modules/alsa/alsa-mixer.c:1710
+msgid "Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1711
+msgid "No Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1712
+msgid "Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1713
+msgid "No Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1714
+msgid "Amplifier"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1715
+msgid "No Amplifier"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1773
+#, fuzzy
+msgid "Analog Input"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1774
+#, fuzzy
+msgid "Analog Microphone"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1775
+#, fuzzy
+msgid "Analog Line-In"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1776
+#, fuzzy
+msgid "Analog Radio"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
+#, fuzzy
+msgid "Analog Video"
+msgstr "Analoginen stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1778
+#, fuzzy
+msgid "Analog Output"
+msgstr "Tyhjä ulostulo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1779
+#, fuzzy
+msgid "Analog Headphones"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1780
+msgid "Analog Output (LFE)"
+msgstr ""
-#: ../src/sinkinputwidget.cc:72
-msgid "pa_context_set_sink_input_volume() failed"
-msgstr "pa_context_set_sink_input_volume() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:1781
+#, fuzzy
+msgid "Analog Mono Output"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1981
+#, fuzzy, c-format
+msgid "%s+%s"
+msgstr "%s %s"
+
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#, fuzzy, c-format
+msgid "%s / %s"
+msgstr "%s %s"
+
+#: ../src/modules/alsa/alsa-mixer.c:2790
+msgid "Analog Mono"
+msgstr "Analoginen mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:2791
+msgid "Analog Stereo"
+msgstr "Analoginen stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:2792
+#, fuzzy
+msgid "Analog Surround 2.1"
+msgstr "Analoginen tilaääni 4.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2793
+#, fuzzy
+msgid "Analog Surround 3.0"
+msgstr "Analoginen tilaääni 4.0"
-#: ../src/sinkinputwidget.cc:87
-msgid "pa_context_set_sink_input_mute() failed"
-msgstr "pa_context_set_sink_input_mute() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2794
+#, fuzzy
+msgid "Analog Surround 3.1"
+msgstr "Analoginen tilaääni 4.1"
-#: ../src/sinkinputwidget.cc:97
-msgid "pa_context_kill_sink_input() failed"
-msgstr "pa_context_kill_sink_input() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2795
+msgid "Analog Surround 4.0"
+msgstr "Analoginen tilaääni 4.0"
-#: ../src/sinkinputwidget.cc:133
-msgid "pa_context_move_sink_input_by_index() failed"
-msgstr "pa_context_move_sink_input_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2796
+msgid "Analog Surround 4.1"
+msgstr "Analoginen tilaääni 4.1"
-#: ../src/sinkwidget.cc:48
-msgid "pa_context_set_sink_volume_by_index() failed"
-msgstr "pa_context_set_sink_volume_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2797
+msgid "Analog Surround 5.0"
+msgstr "Analoginen tilaääni 5.0"
-#: ../src/sinkwidget.cc:63
-msgid "Volume Control Feedback Sound"
-msgstr "Ãänenvoimakkuuden säädön palauteääni"
+#: ../src/modules/alsa/alsa-mixer.c:2798
+msgid "Analog Surround 5.1"
+msgstr "Analoginen tilaääni 5.1"
-#: ../src/sinkwidget.cc:80
-msgid "pa_context_set_sink_mute_by_index() failed"
-msgstr "pa_context_set_sink_mute_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2799
+#, fuzzy
+msgid "Analog Surround 6.0"
+msgstr "Analoginen tilaääni 4.0"
-#: ../src/sinkwidget.cc:94
-msgid "pa_context_set_default_sink() failed"
-msgstr "pa_context_set_default_sink() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2800
+#, fuzzy
+msgid "Analog Surround 6.1"
+msgstr "Analoginen tilaääni 4.1"
-#: ../src/sinkwidget.cc:114
-msgid "pa_context_set_sink_port_by_index() failed"
-msgstr "pa_context_set_sink_port_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2801
+#, fuzzy
+msgid "Analog Surround 7.0"
+msgstr "Analoginen tilaääni 4.0"
-#: ../src/sourceoutputwidget.cc:35
-msgid "from"
-msgstr "lähteestä"
+#: ../src/modules/alsa/alsa-mixer.c:2802
+msgid "Analog Surround 7.1"
+msgstr "Analoginen tilaääni 7.1"
-#: ../src/sourceoutputwidget.cc:38
-msgid "Terminate Recording"
-msgstr "Lopeta nauhoitus"
+#: ../src/modules/alsa/alsa-mixer.c:2803
+msgid "Digital Stereo (IEC958)"
+msgstr "Digitaalinen stereo (IEC958)"
-#: ../src/sourceoutputwidget.cc:61
-msgid "Unknown input"
-msgstr "Tuntematon sisääntulo"
+#: ../src/modules/alsa/alsa-mixer.c:2804
+#, fuzzy
+msgid "Digital Surround 4.0 (IEC958)"
+msgstr "Digitaalinen tilaääni 4.0 (IEC958/AC3)"
-#: ../src/sourceoutputwidget.cc:71
-msgid "pa_context_kill_source_output() failed"
-msgstr "pa_context_kill_source_output() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2805
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr "Digitaalinen tilaääni 4.0 (IEC958/AC3)"
-#: ../src/sourceoutputwidget.cc:108
-msgid "pa_context_move_source_output_by_index() failed"
-msgstr "pa_context_move_source_output_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2806
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr "Digitaalinen tilaääni 5.1 (IEC958/AC3)"
-#: ../src/sourcewidget.cc:44
-msgid "pa_context_set_source_volume_by_index() failed"
-msgstr "pa_context_set_source_volume_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2807
+msgid "Digital Stereo (HDMI)"
+msgstr "Digitaalinen stereo (HDMI)"
-#: ../src/sourcewidget.cc:59
-msgid "pa_context_set_source_mute_by_index() failed"
-msgstr "pa_context_set_source_mute_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2928
+#, fuzzy
+msgid "Analog Mono Duplex"
+msgstr "Analoginen mono"
-#: ../src/sourcewidget.cc:73
-msgid "pa_context_set_default_source() failed"
-msgstr "pa_context_set_default_source() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2929
+#, fuzzy
+msgid "Analog Stereo Duplex"
+msgstr "Analoginen stereo"
-#: ../src/sourcewidget.cc:95
-msgid "pa_context_set_source_port_by_index() failed"
-msgstr "pa_context_set_source_port_by_index() epäonnistui"
+#: ../src/modules/alsa/alsa-mixer.c:2930
+#, fuzzy
+msgid "Digital Stereo Duplex (IEC958)"
+msgstr "Digitaalinen stereo (IEC958)"
-#: ../src/streamwidget.cc:45
-msgid "Terminate"
-msgstr "Lopeta"
+#~ msgid "Invalid client name '%s'\n"
+#~ msgstr "Virheellinen asiakasohjelman nimi â%sâ\n"
+
+#~ msgid "Failed to determine sample specification from file.\n"
+#~ msgstr "Näytemäärityksen selvitys tiedostosta epäonnistui: %s\n"
+
+#~ msgid "select(): %s"
+#~ msgstr "select(): %s"
+
+#~ msgid "Cannot connect to system bus: %s"
+#~ msgstr "Järjestelmäväylään ei voida yhdistää: %s"
+
+#~ msgid "Cannot get caller from PID: %s"
+#~ msgstr "Kutsujaa ei saada PID:stä: %s"
+
+#~ msgid "Cannot set UID on caller object."
+#~ msgstr "UID:tä ei voida asettaa kutsujaobjektille."
+
+#~ msgid "Failed to get CK session."
+#~ msgstr "CK-istunnon saaminen epäonnistui."
+
+#~ msgid "Cannot set UID on session object."
+#~ msgstr "UID:tä ei voida asettaa istunto-objektille."
+
+#~ msgid "Cannot allocate PolKitAction."
+#~ msgstr "Ei voida varata PolKitActionia."
+
+#~ msgid "Cannot set action_id"
+#~ msgstr "Ei voida asettaa action_id:tä"
+
+#~ msgid "Cannot allocate PolKitContext."
+#~ msgstr "Ei voida varata PolKitContextia."
+
+#~ msgid "Cannot initialize PolKitContext: %s"
+#~ msgstr "Ei voida alustaa PolKitContextia: %s"
+
+#~ msgid "Could not determine whether caller is authorized: %s"
+#~ msgstr "Ei voida päätellä onko kutsujalla käyttöoikeus: %s"
+
+#~ msgid "Cannot obtain auth: %s"
+#~ msgstr "Tunnistautumista ei saada: %s"
+
+#~ msgid "PolicyKit responded with '%s'"
+#~ msgstr "PolicyKit vastasi â%sâ"
-#~ msgid "Open menu"
-#~ msgstr "Avaa valikko"
+#~ msgid ""
+#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
+#~ "daemon"
+#~ msgstr ""
+#~ "Korkean prioriteetin ajoitus (negatiivinen Unix-nice-taso) PulseAudio-"
+#~ "taustajärjestelmälle"
-#~ msgid "_Move Stream..."
-#~ msgstr "_Siirrä virta"
+#~ msgid "Real-time scheduling for the PulseAudio daemon"
+#~ msgstr "Reaaliaikainen ajoitus PulseAudio-taustajärjestelmälle"
-#~ msgid "_Default"
-#~ msgstr "_Oletus"
+#~ msgid ""
+#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
+#~ msgstr ""
+#~ "Järjestelmäkäytäntö estää PulseAudiota saamasta korkean prioriteetin "
+#~ "ajoitusta."
+
+#~ msgid ""
+#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
+#~ msgstr ""
+#~ "Järjestelmäkäytäntö estää PulseAudiota saamasta reaaliaikaista ajoitusta."
+
+#~ msgid "read() failed: %s\n"
+#~ msgstr "read() epäonnistui: %s\n"
+
+#, fuzzy
+#~ msgid "pa_context_connect() failed: %s\n"
+#~ msgstr "pa_context_connect() epäonnistui: %s"
+
+#~ msgid "We're in the group '%s', allowing high-priority scheduling."
+#~ msgstr "Ollaan ryhmässä â%sâ, korkean prioriteetin ajoitus on sallittua."
+
+#~ msgid "We're in the group '%s', allowing real-time scheduling."
+#~ msgstr "Ollaan ryhmässä â%sâ, tosiaikainen vuorottaminen on sallittua."
+
+#~ msgid "PolicyKit grants us acquire-high-priority privilege."
+#~ msgstr "PolicyKit myöntää acquire-high-priority-oikeuden."
+
+#~ msgid "PolicyKit refuses acquire-high-priority privilege."
+#~ msgstr "PolicyKit ei myönnä acquire-high-priority-oikeutta."
+
+#~ msgid "PolicyKit grants us acquire-real-time privilege."
+#~ msgstr "PolicyKit myöntää acquire-real-time-oikeuden."
+
+#~ msgid "PolicyKit refuses acquire-real-time privilege."
+#~ msgstr "PolicyKit ei myönnä acquire-real-time-oikeutta."
+
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
+#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+#~ "limits.\n"
+#~ "For enabling real-time/high-priority scheduling please acquire the "
+#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
+#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
+#~ msgstr ""
+#~ "Ohjelmaa kutsuttiin SUID-rootina ja reaaliaikaista ja/tai korkean "
+#~ "prioriteetin ajoitusta pyydettiin asetuksissa. Tarvittavat oikeudet "
+#~ "kuitenkin puuttuvat:\n"
+#~ "Ei olla ryhmässä â%sâ, PolicyKit ei myönnä pyydettyjä oikeuksia ja "
+#~ "RLIMIT_NICE/RLIMIT_RTPRIO-resurssirajoja ei ole kasvatettu.\n"
+#~ "Hanki riittävät PolicyKit-oikeudet, liity ryhmään â%sâ tai kasvata tämän "
+#~ "käyttäjän RLIMIT_NICE/RLIMIT_RTPRIO-resurssirajoja reaaliaikaisen ja/tai "
+#~ "korkean prioriteetin ajoituksen ottamiseksi käyttöön."
+
+#~ msgid ""
+#~ "High-priority scheduling enabled in configuration but not allowed by "
+#~ "policy."
+#~ msgstr ""
+#~ "Korkean prioriteetin ajoitus otettu käyttöön asetuksissa, mutta käytännöt "
+#~ "eivät salli sitä."
+
+#~ msgid "Successfully increased RLIMIT_RTPRIO"
+#~ msgstr "RLIMIT_RTPRIO:n kasvatus onnistui"
+
+#~ msgid "RLIMIT_RTPRIO failed: %s"
+#~ msgstr "RLIMIT_RTPRIO epäonnistui: %s"
+
+#~ msgid "Giving up CAP_NICE"
+#~ msgstr "Luovutaan CAP_NICE:stä"
+
+#~ 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ä."
+
+#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
+#~ msgstr "Oikeuksien rajoittaminen CAP_SYS_NICEen onnistui."
+
+#~ msgid "time_new() failed.\n"
+#~ msgstr "time_new() epäonnistui.\n"
+
+#~ msgid "Output %s + Input %s"
+#~ msgstr "Ulostulo %s + Sisääntulo %s"
+
+#~ msgid "Stream successfully created\n"
+#~ msgstr "Virran luonti onnistui\n"
+
+#~ msgid "Stream errror: %s\n"
+#~ msgstr "Virtavirhe: %s\n"
+
+#~ msgid "Connection established.\n"
+#~ msgstr "Yhteys muodostetettu.\n"
+
+#~ msgid ""
+#~ "%s [options] [FILE]\n"
+#~ "\n"
+#~ " -h, --help Show this help\n"
+#~ " --version Show version\n"
+#~ "\n"
+#~ " -v, --verbose Enable verbose operation\n"
+#~ "\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"
+#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
+#~ msgstr ""
+#~ "%s [valitsimet] [TIEDOSTO]\n"
+#~ "\n"
+#~ " -h, --help Näytä tämä ohje\n"
+#~ " --version Näytä tiedostot\n"
+#~ "\n"
+#~ " -v, --verbose Yksityiskohtaiset tulosteet\n"
+#~ "\n"
+#~ " -s, --server=PALVELIN Sen palvelimen nimi, johon\n"
+#~ " yhdistetään\n"
+#~ " -d, --device=LAITE Sen nielun nimi, johon "
+#~ "yhdistetään\n"
+#~ " -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
+#~ "kutsutaan\n"
+#~ " palvelimella\n"
+#~ " --stream-name=NIMI Kuinka tätä virtaa kutsutaan\n"
+#~ " palvelimella\n"
+#~ " --volume=ÃÃNENVOIMAKKUUS Määritä (lineaarinen) "
+#~ "aloitusäänen-\n"
+#~ " voimakkuus väliltä 0...65536\n"
+#~ " --channel-map=KANAVAKARTTA Aseta käytettävä kanavakartta\n"
+
+#~ msgid ""
+#~ "paplay %s\n"
+#~ "Compiled with libpulse %s\n"
+#~ "Linked with libpulse %s\n"
+#~ msgstr ""
+#~ "paplay %s\n"
+#~ "Käännetty libpulsen versiolle %s\n"
+#~ "Linkitetty libpulsen versiolle %s\n"
+
+#~ msgid "Invalid channel map\n"
+#~ msgstr "Virheellinen kanavakartta\n"
+
+#~ msgid "Failed to open file '%s'\n"
+#~ msgstr "Tiedoston â%sâ avaaminen epäonnistui\n"
+
+#~ msgid "Channel map doesn't match file.\n"
+#~ msgstr "Kanavakartta ei täsmää tiedostoon.\n"
+
+#~ msgid "Using sample spec '%s'\n"
+#~ msgstr "Käytetään näytemäärittelyä â%sâ\n"
+
+#~ msgid "muted"
+#~ msgstr "vaimennettu"
+
+#~ msgid ""
+#~ "*** Autoload Entry #%u ***\n"
+#~ "Name: %s\n"
+#~ "Type: %s\n"
+#~ "Module: %s\n"
+#~ "Argument: %s\n"
+#~ msgstr ""
+#~ "*** Automaattilataustietue #%u ***\n"
+#~ "Nimi: %s\n"
+#~ "Tyyppi: %s\n"
+#~ "Moduuli: %s\n"
+#~ "Argumentto: %s\n"
+
+#~ msgid "sink"
+#~ msgstr "nielu"
+
+#~ msgid "source"
+#~ msgstr "lähde"
commit 3bfaa87d43fae773364cb2e776fdb988786e6551
Author: vpv <vpv at fedoraproject.org>
Date: Mon Nov 9 13:17:22 2009 +0000
Sending translation for Finnish
diff --git a/po/fi.po b/po/fi.po
index 515def3..cfb1437 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-15 13:24+0300\n"
+"PO-Revision-Date: 2009-11-09 15:16+0200\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
"MIME-Version: 1.0\n"
@@ -2378,133 +2378,122 @@ msgstr "PulseAudio-äänipalvelin"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Ulostulolaitteet"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "Sisääntulo %s"
+msgstr "Sisääntulolaitteet"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Ãäni koneella @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "Sisääntulo %s"
+msgstr "Sisääntulo"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Telakan sisääntulo"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Telakan mikrofoni"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Linjasisääntulo"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Mikrofoni"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Ulkoinen mikrofoni"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Sisäinen äänentoisto"
+msgstr "Sisäinen mikrofoni"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Automaattinen äänenvoimakkuuden säätö"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Ei automaattista äänenvoimakkuuden säätöä"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Vahvistus"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Ei vahvistusta"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Vahvistin"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Ei vahvistinta"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Analoginen mono"
+msgstr "Analoginen sisääntulo"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Analoginen mono"
+msgstr "Analoginen mikrofoni"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Analoginen mono"
+msgstr "Analoginen linjasisääntulo"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Analoginen mono"
+msgstr "Analoginen radio"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Analoginen stereo"
+msgstr "Analoginen video"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Tyhjä ulostulo"
+msgstr "Analoginen ulostulo"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Analoginen mono"
+msgstr "Analoginen kuulokeliitäntä"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Analoginen ulostulo (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Analoginen mono"
+msgstr "Analoginen monoulostulo"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2515,19 +2504,16 @@ msgid "Analog Stereo"
msgstr "Analoginen stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Analoginen tilaääni 4.1"
+msgstr "Analoginen tilaääni 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Analoginen tilaääni 4.0"
+msgstr "Analoginen tilaääni 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Analoginen tilaääni 4.1"
+msgstr "Analoginen tilaääni 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2546,19 +2532,16 @@ msgid "Analog Surround 5.1"
msgstr "Analoginen tilaääni 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Analoginen tilaääni 4.0"
+msgstr "Analoginen tilaääni 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Analoginen tilaääni 4.1"
+msgstr "Analoginen tilaääni 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Analoginen tilaääni 4.0"
+msgstr "Analoginen tilaääni 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2569,9 +2552,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Digitaalinen stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Digitaalinen tilaääni 4.0 (IEC958/AC3)"
+msgstr "Digitaalinen tilaääni 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
commit 3cc8d518899d9a0ff1dcebf68dd90fe4bcb726f6
Author: kkrothap <kkrothap at fedoraproject.org>
Date: Thu Nov 12 12:24:19 2009 +0000
Sending translation for Telugu
diff --git a/po/te.po b/po/te.po
index 31fa09a..ca99a27 100644
--- a/po/te.po
+++ b/po/te.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.te\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-21 17:28+0530\n"
+"POT-Creation-Date: 2009-11-12 04:07+0000\n"
+"PO-Revision-Date: 2009-11-12 13:10+0530\n"
"Last-Translator: Krishna Babu K <kkrothap at redhat.com>\n"
"Language-Team: Telugu <en at li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
"\n"
"\n"
"\n"
@@ -1520,8 +1520,7 @@ msgstr "à°¹à±à°à±à°à°°à°¿à°: à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపà±
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "%s à°¸à±à°à±à°°à±à°®à±âనౠమాదిరి విశదà±à°à°°à°£ '%s' మరియౠపà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపౠ'%s'తౠతà±à°°à±à°à±à°à±à°¨à±à°¨à°¦à°¿."
#: ../src/utils/pacat.c:1009
@@ -2111,17 +2110,14 @@ msgid "You have to specify a module index"
msgstr "à°®à±à°°à± మాడà±à°¯à±à°²à± విషయసà±à°à°¿à° à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"à°®à±à°°à± à°µà±à° సిà°à°à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "à°®à±à°°à± à°µà±à° సిà°à°à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"à°®à±à°°à± à°µà±à° à°®à±à°²à°®à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
+msgstr "à°®à±à°°à± à°µà±à° à°®à±à°²à°®à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2354,217 +2350,204 @@ msgstr "పలà±à°¸à± à°à°¡à°¿à°¯à± à°¸à±à°à°¡à± à°¸à±à°µà°¿à°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à°
à°µà±à°à±à°ªà±à°à± పరిà°à°°à°®à±à°²à±"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à°à°¨à±à°ªà±à°à± పరిà°à°°à°®à±à°²à±"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ పౠà°à°¡à°¿à°¯à±"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à°à°¨à±à°ªà±à°à±"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "à°¡à°¾à°à°¿à°à°à± à°¸à±à°à±à°·à°¨à± à°à°¨à±à°ªà±à°à±"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "à°¡à°¾à°à°¿à°à°à± à°¸à±à°à±à°·à°¨à± à°®à±à°à±à°°à±à°«à±à°¨à±"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "à°²à±à°¨à±-యినà±"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "à°®à±à°à±à°°à±à°«à±à°¨à±"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "బహిరà±à°à°¤ à°®à±à°à±à°°à±à°«à±à°¨à±"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à°
à°à°¤à°°à±à°à°¤ à°à°¡à°¿à°¯à±"
+msgstr "à°
à°à°¤à°°à±à°à°¤ à°®à±à°à±à°°à±à°«à±à°¨à±"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "à°°à±à°¡à°¿à°¯à±"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "à°µà±à°¡à°¿à°¯à±"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "à°¸à±à°µà°¯à°à°à°¾à°²à°à°à°à°¾ à°ªà±à°à°¦à± నియà°à°¤à±à°°à°£"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "à°¸à±à°µà°¯à°à°à°¾à°²à°à°à°à°¾ à°ªà±à°à°¦à± ఠనియà°à°¤à±à°°à°£ à°²à±à°¦à±"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "à°¬à±à°¸à±à°à±"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "à°¬à±à°¸à±à°à± à°²à±à°¦à±"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à°à°à°ªà±à°²à°¿à°«à±à°°à±"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à°à°à°ªà±à°²à°¿à°«à±à°°à± à°²à±à°¦à±"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± యినà±à°ªà±à°à±"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°®à±à°à±à°°à±à°«à±à°¨à±"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°²à±à°¨à±-యినà±"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°°à±à°¡à°¿à°¯à±"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°µà±à°¡à°¿à°¯à±"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Null à°
à°µà±à°à±à°ªà±à°à±"
+msgstr "à°à°¨à°²à°¾à°à± à°
à°µà±à°à±à°ªà±à°à±"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°¹à±à°¡à±âà°«à±à°¨à±à°¸à±"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°
à°µà±à°à±à°ªà±à°à± (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°®à±à°¨à± à°
à°µà±à°à±à°ªà±à°à±"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°®à±à°¨à±"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "à°¸à±à°à±à°°à°¿à°¯à±"
+msgstr "à°à°¨à°²à°¾à°à± à°¸à±à°à±à°°à°¿à°¯à±"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "సరà±à°à°¡à± 4.1"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "సరà±à°à°¡à± 4.0"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "సరà±à°à°¡à± 4.1"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "సరà±à°à°¡à± 4.0"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "సరà±à°à°¡à± 4.1"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "సరà±à°à°¡à± 5.0"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "సరà±à°à°¡à± 5.1"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "సరà±à°à°¡à± 4.0"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "సరà±à°à°¡à± 4.1"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "సరà±à°à°¡à± 4.0"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "సరà±à°à°¡à± 7.1"
+msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "à°¡à°¿à°à°¿à°à°²à± à°¸à±à°à±à°°à°¿à°¯à± (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "à°¡à°¿à°à°¿à°à°²à± సరà±à°à°¡à± 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "à°¡à°¿à°à°¿à°à°²à± సరà±à°à°¡à± 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "à°¡à°¿à°à°¿à°à°²à± సరà±à°à°¡à± 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "à°¡à°¿à°à°¿à°à°²à± à°¸à±à°à±à°°à°¿à°¯à± (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°®à±à°¨à± à°¡à±à°ªà±à°²à±à°à±à°¸à±"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à°à°¨à°²à°¾à°à± à°¸à±à°à±à°°à°¿à°¯à± à°¡à±à°ªà±à°²à±à°à±à°¸à±"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "à°¡à°¿à°à°¿à°à°²à± à°¸à±à°à±à°°à°¿à°¯à± à°¡à±à°ªà±à°²à±à°à±à°¸à± (IEC958)"
+
commit 5c9c4e1d48131a21c17ee211f43e9b70b55db971
Author: rajesh <rajesh at fedoraproject.org>
Date: Fri Nov 13 10:19:18 2009 +0000
Sending translation for Hindi
diff --git a/po/hi.po b/po/hi.po
index 2e313ba..5ebd929 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-21 16:29+0530\n"
+"POT-Creation-Date: 2009-11-13 03:15+0000\n"
+"PO-Revision-Date: 2009-11-13 15:42+0530\n"
"Last-Translator: Rajesh Ranjan <rajesh672 at gmail.com>\n"
"Language-Team: Hindi <hindi.sf.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
"\n"
"\n"
"\n"
@@ -208,8 +208,7 @@ msgstr "डà¥à¤®à¥à¤¨ हà¤à¤¾à¤¨à¥ मà¥à¤ विफल: %s"
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
-msgstr ""
-"यह पà¥à¤°à¥à¤à¥à¤°à¤¾à¤® बतà¥à¤° रà¥à¤ à¤à¤²à¤¾à¤¨à¥ à¤à¥ लिठà¤à¤à¥à¤à¤¿à¤¤ नहà¥à¤ हॠ(unless --system is specified)."
+msgstr "यह पà¥à¤°à¥à¤à¥à¤°à¤¾à¤® बतà¥à¤° रà¥à¤ à¤à¤²à¤¾à¤¨à¥ à¤à¥ लिठà¤à¤à¥à¤à¤¿à¤¤ नहà¥à¤ हॠ(unless --system is specified)."
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -385,8 +384,7 @@ msgstr "ताà¤à¤¼à¤¾ à¤à¤à¥à¤ विà¤à¥à¤¦à¤¨ à¤à¤¾à¤à¤®à¤° à¤à¤ª
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-msgstr ""
-"à¤à¤ªà¤à¤¾ à¤à¤°à¥à¤¨à¥à¤² बà¥à¤°à¥ सà¥à¤¥à¤¿à¤¤à¤¿ मà¥à¤ हà¥! सलाह हॠà¤à¤¿ à¤à¤à¥à¤ विà¤à¥à¤¦à¤¨ यà¥à¤à¥à¤¤ लिनà¤à¥à¤¸ सà¤à¥à¤°à¤¿à¤¯ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¿à¤!"
+msgstr "à¤à¤ªà¤à¤¾ à¤à¤°à¥à¤¨à¥à¤² बà¥à¤°à¥ सà¥à¤¥à¤¿à¤¤à¤¿ मà¥à¤ हà¥! सलाह हॠà¤à¤¿ à¤à¤à¥à¤ विà¤à¥à¤¦à¤¨ यà¥à¤à¥à¤¤ लिनà¤à¥à¤¸ सà¤à¥à¤°à¤¿à¤¯ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¿à¤!"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
@@ -1524,8 +1522,7 @@ msgstr "à¤à¥à¤¤à¤¾à¤µà¤¨à¥: फ़ाà¤à¤² मà¥à¤ à¤à¥à¤¨à¤² मà¥à¤ª
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "à¤à¤¿à¤¸à¥ %s सà¥à¤à¥à¤°à¥à¤® à¤à¥ à¤à¤¿à¤¸à¥ नमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤¤à¤¾ '%s' à¤à¤° à¤à¥à¤¨à¤² मà¥à¤ª '%s' सॠà¤à¥à¤² रहा हà¥."
#: ../src/utils/pacat.c:1009
@@ -2115,10 +2112,8 @@ msgid "You have to specify a module index"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ मà¥à¤¡à¥à¤¯à¥à¤² सà¥à¤à¥ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"à¤à¤ª à¤à¤ सिà¤à¤ सॠà¤
धिठनिरà¥à¤¦à¤¿à¤·à¥à¤ नहà¥à¤ à¤à¤° सà¤à¤¤à¥ हà¥à¤. à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ बà¥à¤²à¤¿à¤¯à¤¨ मान à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "à¤à¤ª à¤à¤ सिà¤à¤ सॠà¤
धिठनिरà¥à¤¦à¤¿à¤·à¥à¤ नहà¥à¤ à¤à¤° सà¤à¤¤à¥ हà¥à¤. à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ बà¥à¤²à¤¿à¤¯à¤¨ मान à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
#: ../src/utils/pactl.c:1103
msgid ""
@@ -2361,217 +2356,204 @@ msgstr "पलà¥à¤¸à¤à¤¡à¤¿à¤¯à¥ धà¥à¤µà¤¨à¤¿ सरà¥à¤µà¤°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à¤à¤à¤à¤ªà¥à¤ यà¥à¤à¥à¤¤à¤¿"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à¤à¤¨à¤ªà¥à¤ यà¥à¤à¥à¤¤à¤¿"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ पर à¤à¤¡à¤¿à¤¯à¥"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à¤à¤¨à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "डà¥à¤à¤¿à¤à¤ सà¥à¤à¥à¤¶à¤¨ à¤à¤¨à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "डà¥à¤à¤¿à¤à¤ सà¥à¤à¥à¤¶à¤¨ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "लाà¤à¤¨ à¤à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "बाहरॠमाà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à¤à¤à¤¤à¤°à¤¿à¤ à¤à¤¡à¤¿à¤¯à¥"
+msgstr "à¤à¤à¤¤à¤°à¤¿à¤ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "रà¥à¤¡à¤¿à¤¯à¥"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "वà¥à¤¡à¤¿à¤¯à¥"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "सà¥à¤µà¤à¤¾à¤²à¤¿à¤¤ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿ नियà¤à¤¤à¥à¤°à¤£"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "à¤à¥à¤ सà¥à¤µà¤à¤¾à¤²à¤¿à¤¤ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿ नियà¤à¤¤à¥à¤°à¤£ नहà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "बà¥à¤¸à¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "à¤à¥à¤ बढ़ावा नहà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à¤à¤à¤ªà¥à¤²à¥à¤«à¤¾à¤¯à¤°"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à¤à¥à¤ à¤à¤à¤ªà¥à¤²à¥à¤«à¤¾à¤¯à¤° नहà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤¨à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ लाà¤à¤¨ à¤à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ रà¥à¤¡à¤¿à¤¯à¥"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ वà¥à¤¡à¤¿à¤¯à¥"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "रिà¤à¥à¤¤ à¤à¤à¤à¤ªà¥à¤"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ हà¥à¤¡à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤² à¤à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ मà¥à¤¨à¥"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "सà¥à¤à¥à¤°à¤¿à¤¯à¥"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सà¥à¤à¥à¤°à¤¿à¤¯à¥"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 5.0"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "सरà¥à¤°à¤¾à¤à¤à¤¡ 7.1"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "डिà¤à¤¿à¤à¤² सà¥à¤à¥à¤°à¤¿à¤¯à¥ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "डिà¤à¤¿à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "डिà¤à¤¿à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "डिà¤à¤¿à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "डिà¤à¤¿à¤à¤² सà¥à¤à¤
प (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤² डà¥à¤ªà¥à¤²à¥à¤à¥à¤¸"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सà¥à¤à¥à¤°à¤¿à¤¯à¥ डà¥à¤ªà¥à¤²à¥à¤à¥à¤¸"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "डिà¤à¤¿à¤à¤² सà¥à¤à¥à¤°à¤¿à¤¯à¥ डà¥à¤ªà¥à¤²à¥à¤à¥à¤¸ (IEC958)"
+
commit 46c591992489fcb4f3aebe7bce1d63680fa25655
Author: ifelix <ifelix at fedoraproject.org>
Date: Fri Nov 13 11:27:52 2009 +0000
Sending translation for Tamil
diff --git a/po/ta.po b/po/ta.po
index 000b559..1a88bf2 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.ta\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-18 13:43+0530\n"
+"POT-Creation-Date: 2009-11-13 08:56+0000\n"
+"PO-Revision-Date: 2009-11-13 16:54+0530\n"
"Last-Translator: I. Felix <ifelix at redhat.com>\n"
"Language-Team: Tamil <fedora-trans-ta at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -37,6 +37,7 @@ msgstr ""
"\n"
"\n"
"\n"
+"\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
@@ -241,8 +242,7 @@ msgstr "à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
-"à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, à®à®©à®¾à®²à¯ --disallow-module-loading à®
à®®à¯à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯!"
+msgstr "à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, à®à®©à®¾à®²à¯ --disallow-module-loading à®
à®®à¯à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
@@ -1524,8 +1524,7 @@ msgstr "à®à®²à®¿ à®à¯à®ªà¯à®ªà®¿à®©à¯ திறà®à¯à® à®®à¯à®à®¿à®¯à®µ
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr ""
-"à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯à®à®©à¯ à®à¯à®±à®¿à®à¯à®à®¿à®à¯à® மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯ à®®à¯à®²à¯à®´à¯à®¤à®ªà¯à®ªà®à®²à®¾à®®à¯."
+msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯à®à®©à¯ à®à¯à®±à®¿à®à¯à®à®¿à®à¯à® மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯ à®®à¯à®²à¯à®´à¯à®¤à®ªà¯à®ªà®à®²à®¾à®®à¯."
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
@@ -1545,10 +1544,8 @@ msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà¯à®à¯à®à¯ à®à¯à®©
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
-"à®à®°à¯ %s ஸà¯à®à¯à®°à®®à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯ '%s' மறà¯à®±à¯à®®à¯ à®à¯à®©à®²à¯ வரà¯à®ªà®à¯à®à®®à¯ '%s' à®à®à®©à¯ திறà®à¯à®à®¿à®±à®¤à¯."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr "à®à®°à¯ %s ஸà¯à®à¯à®°à®®à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯ '%s' மறà¯à®±à¯à®®à¯ à®à¯à®©à®²à¯ வரà¯à®ªà®à¯à®à®®à¯ '%s' à®à®à®©à¯ திறà®à¯à®à®¿à®±à®¤à¯."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1680,8 +1677,7 @@ msgstr "தறà¯à®ªà¯à®¤à¯ பயனிலà¯à®³à¯à®³à®¤à¯: %u தà¯à®à¯
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
-"வாழà¯à®à¯à®à¯ à®®à¯à®´à¯à®µà®¤à¯à®®à¯ à®à®¤à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯: %u தà¯à®à¯à®¤à®¿à®à®³à¯ %s பà¯à®à¯à®à®³à¯ à®®à¯à®¤à¯à®¤à®®à®¾à® à®à¯à®£à¯à®à¯à®³à¯à®³à®¤à¯.\n"
+msgstr "வாழà¯à®à¯à®à¯ à®®à¯à®´à¯à®µà®¤à¯à®®à¯ à®à®¤à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯: %u தà¯à®à¯à®¤à®¿à®à®³à¯ %s பà¯à®à¯à®à®³à¯ à®®à¯à®¤à¯à®¤à®®à®¾à® à®à¯à®£à¯à®à¯à®³à¯à®³à®¤à¯.\n"
#: ../src/utils/pactl.c:147
#, c-format
@@ -2137,17 +2133,14 @@ msgid "You have to specify a module index"
msgstr "தà¯à®à¯à®¤à®¿ à®
à®à¯à®à®µà®£à¯à®¯à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"à®à®°à¯ à®à®¿à®à¯à®à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "à®à®°à¯ à®à®¿à®à¯à®à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"à®à®°à¯ à®®à¯à®²à®¤à¯à®¤à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
+msgstr "à®à®°à¯ à®®à¯à®²à®¤à¯à®¤à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2382,217 +2375,204 @@ msgstr "PulseAudio à®à®²à®¿ à®à¯à®µà¯à®¯à®à®®à¯"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯ à®à®¾à®¤à®©à®à¯à®à®³à¯"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à®à®³à¯à®³à¯à®à¯ à®à®¾à®¤à®©à®à¯à®à®³à¯"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@à®à®²à¯ à®à®à®¿à®¯à¯"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à®à®³à¯à®³à¯à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "à®à®¾à®à¯à®à®¿à®à¯ ஸà¯à®à¯à®·à®©à¯ à®à®³à¯à®³à¯à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "à®à®¾à®à¯à®à®¿à®à¯ ஸà¯à®à¯à®·à®©à¯ à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "லà¯à®©à¯à®à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "வà¯à®³à®¿à®¯à®¾à®°à¯à®¨à¯à®¤ à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à®à®à¯à®ªà¯à®± à®à®à®¿à®¯à¯"
+msgstr "à®à®à¯à®ªà¯à®± à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "à®°à¯à®à®¿à®¯à¯"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "வà¯à®à®¿à®¯à¯"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "தானியà®à¯à® லாப à®à®à¯à®à¯à®ªà¯à®ªà®¾à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "தானியà®à¯à® லாப à®à®à¯à®à¯à®ªà¯à®ªà®¾à®à¯ à®à®¤à¯à®µà¯à®®à®¿à®²à¯à®²à¯"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "பà¯à®¸à¯à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "பà¯à®¸à¯à®à¯ à®à®²à¯à®²à¯"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à®à®®à¯à®ªà®¿à®³à®¿à®à®ªà¯à®¯à®°à¯"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à®à®®à¯à®ªà¯à®³à®¿à®à®ªà¯à®¯à®°à¯ à®à®²à¯à®²à¯"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à®
னலாà®à¯ à®à®³à¯à®³à®¿à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à®
னலாà®à¯ à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à®
னலாà®à¯ லà¯à®©à¯à®à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à®
னலாà®à¯ à®°à¯à®à®¿à®¯à¯"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à®
னலாà®à¯ வà¯à®à®¿à®¯à¯"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "பà¯à®à¯à®à®¿à®¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯"
+msgstr "à®
னலாà®à¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à®
னலாà®à¯ ஹà¯à®à¯à®à®ªà¯à®©à¯à®à®³à¯"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à®
னலாà®à¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à®
னலாà®à¯ à®®à¯à®©à¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à®
னலாà®à¯ à®®à¯à®©à¯"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "ஸà¯à®à®¿à®°à®¿à®¯à¯"
+msgstr "à®
னலாà®à¯ ஸà¯à®à®¿à®°à®¿à®¯à¯"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Surround 4.1"
+msgstr "Analog Surround 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Surround 4.0"
+msgstr "Analog Surround 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Surround 4.1"
+msgstr "Analog Surround 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "Surround 4.0"
+msgstr "Analog Surround 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "Surround 4.1"
+msgstr "Analog Surround 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "Surround 5.0"
+msgstr "Analog Surround 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "Surround 5.1"
+msgstr "Analog Surround 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Surround 4.0"
+msgstr "Analog Surround 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Surround 4.1"
+msgstr "Analog Surround 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Surround 4.0"
+msgstr "Analog Surround 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "Surround 7.1"
+msgstr "Analog Surround 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "Digital Stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "Digital Surround 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "Digital Surround 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "Digital Surround 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "Digital Stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "Analog Mono Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "Analog Stereo Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "Digital Stereo Duplex (IEC958)"
+
commit 72759593e3669fc61ff8058b33734f878b4d2e63
Author: mgiri <mgiri at fedoraproject.org>
Date: Sat Nov 14 10:11:13 2009 +0000
Sending translation for Oriya
diff --git a/po/or.po b/po/or.po
index c4a8d19..4efdc1f 100644
--- a/po/or.po
+++ b/po/or.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.or\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-11 12:56+0530\n"
+"POT-Creation-Date: 2009-11-14 08:57+0000\n"
+"PO-Revision-Date: 2009-11-14 15:33+0530\n"
"Last-Translator: Manoj Kumar Giri <mgiri at redhat.com>\n"
"Language-Team: Oriya <oriya-it at googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
"\n"
"\n"
"\n"
@@ -1530,8 +1530,7 @@ msgstr "à¬àତାବନà: à¬ààାନàଲ ମààାପà¬à ଫ
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "ନମàନା ବିଶàଷ ଲà¬àଷଣ '%s' à¬à¬¬à¬ à¬ààାନàଲ ମààାପ '%s' ସହିତ à¬àà¬à¬¿à¬ %s ଧାରାà¬à à¬àଲàà¬
à¬à¬¿à¥¤"
#: ../src/utils/pacat.c:1009
@@ -2118,17 +2117,14 @@ msgid "You have to specify a module index"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬à¬à¬¾à¬à¬¶ à¬
ନàà¬àରମଣିà¬à¬¾à¬à à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾ à¬à¬à¬¿à¬¤ ନàହà¬"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠà¬à¬¤àସ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
+msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠà¬à¬¤àସ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2362,217 +2358,204 @@ msgstr "PulseAudio ଧàà±à¬¨à¬¿ ସରàà¬à¬°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "ଫଳାଫଳ à¬à¬ªà¬à¬°à¬£"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "ନିବàଶ à¬à¬ªà¬à¬°à¬£"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ ରà ଧàà±à¬¨à¬¿"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "ନିବàଶ"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ଡà¬à¬¿à¬àଠଷàà¬àସନ ନିବàଶ"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ଡà¬à¬¿à¬àଠଷàà¬àସନ ମାà¬à¬àରàଫàନ"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ଲାà¬à¬¨-à¬à¬¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ମାà¬à¬àରàଫàନ"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "ବାହàà ମାà¬à¬àରàଫàନ"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à¬à¬ààନàତରàଣ ଧàà±à¬¨à¬¿"
+msgstr "à¬à¬ààନàତରàଣ ମାà¬à¬àରàଫàନ"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "ରàଡିà¬"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "à¬à¬¿à¬¡à¬¼à¬¿à¬"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "ସàà±àà¬à¬à¬¾à¬³à¬¿à¬¤ ଲାଠନିàନàତàରଣ"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "à¬àଣସି ସàà±àà¬à¬à¬¾à¬³à¬¿à¬¤ ଲାଠନିàନàତàରଣ ନାହିà¬"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ବàଦàଧି"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "ବàଦàଧି ନାହିà¬"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à¬à¬®àପàଲିଫାàର"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à¬à¬®àପàଲିଫାàର ନାହିà¬"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠନିବàଶ"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠମାà¬à¬àରàଫàନ"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠଲାà¬à¬¨-à¬à¬¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠରàଡ଼ିà¬"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¿à¬¡à¬¼à¬¿à¬"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "ଶàନàà ଫଳାଫଳ"
+msgstr "à¬à¬¨à¬¾à¬²àଠଫଳାଫଳ"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠହàଡ଼ଫàନà¬àଡ଼ିà¬"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠଫଳାଫଳ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠମàନà ଫଳାଫଳ"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠମàନà"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "ଷàà¬àରିà¬"
+msgstr "à¬à¬¨à¬¾à¬²àଠଷàà¬àରିà¬"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.1"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.0"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.1"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.0"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.1"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "à¬à¬¤àଠପାରàଶàà± 5.0"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "à¬à¬¤àଠପାରàଶàà± 5.1"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.0"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.1"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "à¬à¬¤àଠପାରàଶàà± 4.0"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "à¬à¬¤àଠପାରàଶàà± 7.1"
+msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ଡିà¬à¬¿à¬à¬¾à¬² ଷàà¬àରିଠ(IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ଡିà¬à¬¿à¬à¬¾à¬² à¬à¬¤àଠପାରàଶàà± 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ଡିà¬à¬¿à¬à¬¾à¬² à¬à¬¤àଠପାରàଶàà± 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ଡିà¬à¬¿à¬à¬¾à¬² à¬à¬¤àଠପାରàଶàà± 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ଡିà¬à¬¿à¬à¬¾à¬² ଷàà¬àରିଠ(HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠମàନà ଡ଼àପàଲàà¬àସ"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à¬à¬¨à¬¾à¬²àଠଷàà¬àରିଠଡ଼àପàଲàà¬àସ"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ଡିà¬à¬¿à¬à¬¾à¬² ଷàà¬àରିଠଡ଼àପàଲàà¬àସ (IEC958)"
+
commit f4e18f7d01886301ecbf419a641c1561f1dbd845
Author: swkothar <swkothar at fedoraproject.org>
Date: Mon Dec 7 11:54:08 2009 +0000
Sending translation for Gujarati
diff --git a/po/gu.po b/po/gu.po
index e174451..2486027 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -1,14 +1,14 @@
-# translation of PulseAudio-up.po to Gujarati
+# translation of PulseAudio.po to Gujarati
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Sweta Kothari <swkothar at redhat.com>, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: PulseAudio-up\n"
+"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-11 13:02+0530\n"
+"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"PO-Revision-Date: 2009-12-07 17:22+0530\n"
"Last-Translator: Sweta Kothari <swkothar at redhat.com>\n"
"Language-Team: Gujarati\n"
"MIME-Version: 1.0\n"
@@ -203,8 +203,7 @@ msgstr "ડિમનનૠમારવાનà«àª નિષà«àª«àª³: %s"
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
-msgstr ""
-"ઠપà«àª°àªà«àª°àª¿àª¯àª¾àª¨à« રà«àª તરà«àªà« àªàª²àª¾àªµàªµàª¾ માàªà« વિàªàª¾àª° થયà«àª² નથૠ(નહિઠતૠ--system ઠસà«àªªàª·à«àª થયà«àª² àªà«)."
+msgstr "ઠપà«àª°àªà«àª°àª¿àª¯àª¾àª¨à« રà«àª તરà«àªà« àªàª²àª¾àªµàªµàª¾ માàªà« વિàªàª¾àª° થયà«àª² નથૠ(નહિઠતૠ--system ઠસà«àªªàª·à«àª થયà«àª² àªà«)."
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -732,8 +731,7 @@ msgstr "રà«àªªàª°à«àªàª¾àªàªàª¨ ફાàªàª²àª¨à« àªà«àª²àªµàª¾àª¨à«
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
-msgstr ""
-"સà«àªªàª·à«àª થયà«àª² મà«àª³àªà«àª¤ àªà«àª¨àª² મà«àªª પાસૠસà«àªªàª·à«àª થયà«àª² àªà«àª¨àª²à«àª¨à« મà«àª³àªà«àª¤ સàªàªà«àª¯àª¾ àªàª°àª¤àª¾ વિવિધ àªà«àª¨àª²à«àª¨à« સàªàªà«àª¯àª¾ àªà«."
+msgstr "સà«àªªàª·à«àª થયà«àª² મà«àª³àªà«àª¤ àªà«àª¨àª² મà«àªª પાસૠસà«àªªàª·à«àª થયà«àª² àªà«àª¨àª²à«àª¨à« મà«àª³àªà«àª¤ સàªàªà«àª¯àª¾ àªàª°àª¤àª¾ વિવિધ àªà«àª¨àª²à«àª¨à« સàªàªà«àª¯àª¾ àªà«."
#: ../src/daemon/daemon-conf.c:638
#, c-format
@@ -1511,8 +1509,7 @@ msgstr "àªà«àª¤àª£à«: ફાàªàª²àª®àª¾àª àªà«àª¨àª² મà«àªªàª¨à« લ
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£ '%s' àª
નૠàªà«àª¨àª² નàªà«àª·àª¾ '%s' સાથૠ%s સà«àªà«àª°à«àª®àª¨à« àªà«àª²à« રહà«àª¯àª¾ àªà«."
#: ../src/utils/pacat.c:1009
@@ -2101,17 +2098,14 @@ msgid "You have to specify a module index"
msgstr "તમારૠમà«àª¡à«àª¯à«àª² àª
નà«àªà«àª°àª®àª£àª¿àªàª¾àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"તમૠàªàª સિàªàª àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "તમૠàªàª સિàªàª àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"તમૠàªàª સà«àª¤à«àª°à«àª¤ àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
+msgstr "તમૠàªàª સà«àª¤à«àª°à«àª¤ àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2346,217 +2340,204 @@ msgstr "PulseAudio સાàªàª¨à«àª¡ સરà«àªµàª°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "àªàªàªàªªà«àª àªàªªàªàª°àª£à«"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "àªàª¨àªªà«àª àªàªªàªàª°àª£à«"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ પર àªàª¡àª¿àª¯à«"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "àªàª¨àªªà«àª"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ડà«àªàª¿àªàª સà«àªà«àª¶àª¨ àªàª¨àªªà«àª"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ડà«àªàª¿àªàª સà«àªà«àª¶àª¨ માàªàªà«àª°à«àª«à«àª¨"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "લાàªàª¨-àªàª¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "માàªàªà«àª°à«àª«à«àª¨"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "બહારનાઠમાàªàªà«àª°à«àª«à«àª¨"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "àªàªàª¤àª°àª¿àª àªàª¡àª¿àª¯à«"
+msgstr "àªàªàª¤àª°àª¿àª માàªàªà«àª°à«àª«à«àª¨"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "રà«àª¡àª¿àª¯à«"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "વિડિયà«"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Automatic Gain Control"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Automatic Gain Control નથà«"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "બà«àª¸à«àª"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "બà«àª¸à«àª નથà«"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "પરિવરà«àª§àª"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "પરિવરà«àª§àª નથà«"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "àªàª¨àª²à«àª àªàª¨àªªà«àª"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "àªàª¨àª²à«àª માàªàªà«àª°à«àª«à«àª¨"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "àªàª¨àª²à«àª લાàªàª¨-àªàª¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "àªàª¨àª²à«àª રà«àª¡àª¿àª¯à«"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "àªàª¨àª²à«àª વિડિયà«"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "શà«àª¨à«àª¯ àªàªàªàªªà«àª"
+msgstr "àªàª¨àª²à«àª àªàªàªàªªà«àª"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "àªàª¨àª²à«àª હà«
ડફà«àª¨à«"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "àªàª¨àª²à«àª àªàªàªàªªà«àª (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "àªàª¨àª²à«àª મà«àª¨à« àªàªàªàªªà«àª"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "àªàª¨àª²à«àª મà«àª¨à«"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "સà«àªà«àª°àª¿àª"
+msgstr "àªàª¨àª²à«àª સà«àªà«àª°àª¿àª"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "સરાàªàª¨à«àª¡ 4.1"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "સરાàªàª¨à«àª¡ 4.0"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "સરાàªàª¨à«àª¡ 4.1"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "સરાàªàª¨à«àª¡ 4.0"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "સરાàªàª¨à«àª¡ 4.1"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "સરાàªàª¨à«àª¡ 5.0"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "સરાàªàª¨à«àª¡ 5.1"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "સરાàªàª¨à«àª¡ 4.0"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "સરાàªàª¨à«àª¡ 4.1"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "સરાàªàª¨à«àª¡ 4.0"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "સરાàªàª¨à«àª¡ 7.1"
+msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ડિàªàª¿àªàª² સà«àªà«àª°àª¿àª (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ડિàªàª¿àªàª² સરાàªàª¨à«àª¡ 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ડિàªàª¿àªàª² સરાàªàª¨à«àª¡ 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ડિàªàª¿àªàª² સરાàªàª¨à«àª¡ 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ડિàªàª¿àªàª² સà«àªà«àª°àª¿àª (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "àªàª¨àª²à«àª મà«àª¨à« ડà«àªªà«àª²à«àªà«àª·"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "àªàª¨àª²à«àª સà«àªà«àª°àª¿àª ડà«àªªà«àª²à«àªà«àª·"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ડિàªàª¿àªàª² સà«àªà«àª°àª¿àª ડà«àªªà«àª²à«àªà«àª· (IEC958)"
+
commit 4f77643c859683f661425132b7246f98d8797c40
Author: hedda <hedda at fedoraproject.org>
Date: Tue Dec 8 05:17:36 2009 +0000
Sending translation for German
diff --git a/po/de.po b/po/de.po
index 38a5006..25b015b 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,23 +1,26 @@
+# translation of pulseaudio.master-tx.de.po to
# German translation of pulseaudio
# Copyright (C) 2008 pulseaudio
# This file is distributed under the same license as the pulseaudio package.
#
+#
# Fabian Affolter <fab at fedoraproject.org>, 2008-2009.
# Micha Pietsch <barney at fedoraproject.org>, 2008, 2009.
-#
+# Hedda Peters <hpeters at redhat.com>, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: pulseaudio\n"
+"Project-Id-Version: pulseaudio.master-tx.de\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-28 16:49+0100\n"
-"Last-Translator: Joerg (kital) Simon <jsimon at fedoraproject.org>\n"
-"Language-Team: German <fedora-trans-de at redhat.com>\n"
+"POT-Creation-Date: 2009-12-08 02:51+0000\n"
+"PO-Revision-Date: 2009-12-08 15:14+1000\n"
+"Last-Translator: Hedda Peters <hpeters at redhat.com>\n"
+"Language-Team: \n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: German\n"
+"X-Generator: KBabel 1.11.4\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
@@ -32,10 +35,10 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
-"snd_pcm_avail() gibt einen Wert zurück, welche auÃerordentlich groà ist: %lu "
+"snd_pcm_avail() gibt einen Wert zurück, der ausserordentlich gross ist: %lu "
"bytes (%lu ms).\n"
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
-"diesen Punkt den ALSA-Entwicklern."
+"dieses Problem den ALSA-Entwicklern."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
@@ -45,10 +48,10 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
-"snd_pcm_delay() gibt einen Wert zurück, welche auÃerordentlich groà ist: %li "
+"snd_pcm_delay() gibt einen Wert zurück, der ausserordentlich gross ist: %li "
"bytes (%s%lu ms).\n"
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
-"diesen Punkt den ALSA-Entwicklern."
+"dieses Problem den ALSA-Entwicklern."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
@@ -58,21 +61,20 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
-"snd_pcm_mmap_begin() gibt einen Wert zurück, welche auÃerordentlich groà "
+"snd_pcm_mmap_begin() gibt einen Wert zurück, der ausserordentlich gross "
"ist: %lu bytes (%lu ms).\n"
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
-"diesen Punkt den ALSA-Entwicklern."
+"dieses Problem den ALSA-Entwicklern."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "Hält stets einen Sink geladen, selbst wenn dies ein Null-Sink ist"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
msgstr "Dummy-Ausgabe"
#: ../src/modules/module-ladspa-sink.c:49
-#, fuzzy
msgid "Virtual LADSPA sink"
msgstr "Virtueller LADSPA-Sink"
@@ -84,15 +86,17 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
+"sink_name=<Name des Sinks> sink_properties=<Eigenschaften des Sinks> "
+"master=<Name des zu filternden Sinks> format=<Sample-Format> rate=<Sample-Rate> "
+"channels=<Anzahl der Channels> channel_map=<Channel-Map> plugin=<ladspa Plugin-Name> label=<ladspa Plugin-Label> control=<kommagetrennte Liste von Eingabekontrollwerten>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "Clocked NULL Sink"
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "Ausgang %s"
+msgstr "Null-Ausgabe"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -409,7 +413,7 @@ msgid "Daemon terminated."
msgstr "Daemon beendet."
#: ../src/daemon/cmdline.c:115
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -489,8 +493,7 @@ 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"
+" --cleanup-shm Bereinige veraltete Bereiche des gemeinsamen Speichers\n"
" --start Starte Daemon, falls noch nicht "
"geschehen\n"
" -k --kill Laufenden Daemon beenden\n"
@@ -501,7 +504,7 @@ msgstr ""
" --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"
+" --high-priority[=BOOL] Versuche höchste Priorität zu setzen\n"
" (Nur verfügbar als root, wenn SUID "
"oder\n"
" mit erhöhtem RLIMIT_NICE)\n"
@@ -511,90 +514,93 @@ msgstr ""
"oder\n"
" mit erhöhtem RLIMIT_RTPRIO)\n"
" --disallow-module-loading[=BOOL] Verbiete (Ent-)laden durch Nutzer "
-"angeforderter\n"
+"angefordertere\n"
" Module nach dem Start\n"
" --disallow-exit[=BOOL] Verbiete Beenden auf Anfrage des "
"Nutzers\n"
-" --exit-idle-time=SECS Beende Daemon, wenn für diese Zeit \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"
+"geladene\n"
" Samples nach dieser Zeit\n"
-" --log-level[=STUFE] Grad der Ausführlichkeit angeben\n"
+" --log-level[=LEVEL] 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"
-" Objekte (Plugins)\n"
-" --resample-method=METHODE Nutze diese Resampling-Methode\n"
+" --log-meta[=BOOL] Speicherort des Codes in Protokollnachrichten"
+"angeben\n"
+" --log-time[=BOOL] Zeitstempel in Protokollnachrichten angeben\n"
+" --log-backtrace=FRAMES Backtrace in Protokollnachrichten angeben\n"
+" -p, --dl-search-path=PATH Suchpfad für dynamisch "
+"freigegebene\n"
+" Objekte (Plugins) angeben\n"
+" --resample-method=METHOD 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"
" Systemen nicht installieren.\n"
-" --disable-shm[=BOOL] Keine Unterstützung für Shared "
-"Memory.\n"
+" --disable-shm[=BOOL] Unterstützung für Shared "
+"Memory deaktivieren.\n"
"\n"
-"STARTUP-SCRIPT:\n"
-" -L, --load=\"MODUL-ARGUMENTE\" Plugin-Modul mit diesen Parametern \n"
+"STARTUP SCRIPT:\n"
+" -L, --load=\"MODULE ARGUMENTS\" Plugin-Modul mit diesen Parametern\n"
" laden.\n"
-" -F, --file=DATEINAMEN Dieses Skript ausführen\n"
-" -C Nach Start auf laufendem TTY \n"
+" -F, --file=FILENAME Dieses Skript ausführen\n"
+" -C Nach Start auf laufendem TTY\n"
" eine Kommandozeile öffnen\n"
"\n"
" -n Standardskript nicht laden\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
-msgstr "Option --daemonize erfordert bool'schen Wert"
+msgstr "--daemonize erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:254
msgid "--fail expects boolean argument"
-msgstr "Option --fail erfordert bool'schen Wert"
+msgstr "--fail erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:264
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 "
+"--log-level erfordert Parameter für Grad der Protokollierung (entweder numerisch "
"im Bereich 0..4 or einen dieser: debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
-msgstr "Option --high-priority erfordert bool'schen Wert"
+msgstr "--high-priority erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:283
msgid "--realtime expects boolean argument"
-msgstr "Option --realtime erfordert bool'schen Wert"
+msgstr "--realtime erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:290
msgid "--disallow-module-loading expects boolean argument"
-msgstr "Option --disallow-module-loading erfordert bool'schen Wert"
+msgstr "--disallow-module-loading erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:297
msgid "--disallow-exit expects boolean argument"
-msgstr "--disallow-exit erfordert boolsches Argument"
+msgstr "--disallow-exit erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:304
msgid "--use-pid-file expects boolean argument"
-msgstr "Option --use-pid-file erfordert bool'schen Wert"
+msgstr "--use-pid-file erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:321
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:328
msgid "--log-time expects boolean argument"
-msgstr "--realtime erfordert boolsches Argument"
+msgstr "--realtime erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:335
msgid "--log-meta expects boolean argument"
-msgstr "--log-meta erfordert boolschen Wert"
+msgstr "--log-meta erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:354
#, c-format
@@ -603,15 +609,15 @@ msgstr "Ungültige Resample-Methode '%s'."
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
-msgstr "--System erwartet Boolean-Argument"
+msgstr "--system erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:368
msgid "--no-cpu-limit expects boolean argument"
-msgstr "Option --no-cpu-limit erfordert bool'schen Wert"
+msgstr "--no-cpu-limit erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:375
msgid "--disable-shm expects boolean argument"
-msgstr "Option --disable-shm erfordert bool'schen Wert"
+msgstr "--disable-shm erfordert Boolsche Variable"
#: ../src/daemon/dumpmodules.c:60
#, c-format
@@ -649,9 +655,9 @@ msgid "Load Once: %s\n"
msgstr "Lade einmalig: %s\n"
#: ../src/daemon/dumpmodules.c:75
-#, fuzzy, c-format
+#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr "DEPRECATION WARNING: %s\n"
+msgstr "WARNUNG (DEPRECATION): %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -988,7 +994,7 @@ msgstr "OK"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr "Zugriff abgelehnt"
+msgstr "Zugriff verweigert"
#: ../src/pulse/error.c:45
msgid "Unknown command"
@@ -996,7 +1002,7 @@ msgstr "Unbekannter Befehl"
#: ../src/pulse/error.c:46
msgid "Invalid argument"
-msgstr "Ungültiges Argument"
+msgstr "Ungültiger Parameter"
#: ../src/pulse/error.c:47
msgid "Entity exists"
@@ -1307,7 +1313,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() fehlgeschlagen: %s"
#: ../src/utils/pacat.c:609
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1376,18 +1382,19 @@ msgstr ""
" -v, --verbose Ausführliche Meldungen\n"
"\n"
" -s, --server=SERVER Name des zu verbindenden Servers\n"
-" -d, --device=DEVICE Name zu verbindender Sink/Quelle\n"
+" -d, --device=DEVICE Name des/der 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"
" --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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (Standard ist 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"
@@ -1404,6 +1411,11 @@ msgstr ""
" --latency=BYTES Diese Latenz verwenden.\n"
" --process-time=BYTES Diese Prozesszeit pro Anfrage "
"verwenden.\n"
+" --property=PROPERTY=VALUE Die angegebene Eigenschaft auf den"
+"spezifizierten Wert setzen.\n"
+" --raw PCM-Rohdaten aufnehmen/wiedergeben.\n"
+" --file-format=FFORMAT Formatierte PCM-Daten aufnehmen/wiedergeben.\n"
+" --list-file-formats Verfügbare Dateiformate auflisten.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1501,10 +1513,8 @@ msgstr "Warnung: Schreiben der Kanalzuordnung in Datei fehlgeschlagen."
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
-"Ãffnen eines %s-Streams mit Sample-Angabe '%s' und Kanalzuordnung '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr "Ãffnen eines %s-Streams mit Sample-Angabe '%s' und Kanalzuordnung '%s'."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1664,11 +1674,11 @@ msgstr ""
"Name des Nutzers: %s\n"
"Rechnername: %s\n"
"Name des Servers: %s\n"
-"Version des Server: %s\n"
+"Version des Servers: %s\n"
"Standard-Sample-Angabe: %s\n"
"Standard-Kanal-Zuordnung: %s\n"
-"Standard-Ausgabe: %s\n"
-"-Standard-Quelle: %s\n"
+"Standard-Sink: %s\n"
+"Standard-Quelle: %s\n"
"Cookie: %08x\n"
#: ../src/utils/pactl.c:205
@@ -1697,19 +1707,19 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"Senke #%u\n"
+"Sink #%u\n"
"\tStatus: %s\n"
"\tName: %s\n"
"\tBeschreibung: %s\n"
"\tTreiber: %s\n"
"\tSample-Angabe: %s\n"
"\tKanalzuordnung: %s\n"
-"\tOwner-Modul: %u\n"
+"\tBesitzer-Modul: %u\n"
"\tStumm: %s\n"
"\tLautstärke: %s%s%s\n"
"\t Verteilung %0.2f\n"
"\tBasis-Lautstärke: %s%s%s\n"
-"\tQuelle Monitor: %s\n"
+"\tQuellen-Monitor: %s\n"
"\tLatenz: %0.0f usec, eingestellt %0.0f usec\n"
"\tFlags: %s%s%s%s%s%s\n"
"\tEigenschaften:\n"
@@ -1763,7 +1773,7 @@ msgstr ""
"\tLautstärke: %s%s%s\n"
"\t Verteilung %0.2f\n"
"\tBasis-Lautstärke: %s%s%s\n"
-"\tSenke-Monitor: %s\n"
+"\tSink-Monitor: %s\n"
"\tLatenz: %0.0f usec, eingestellt %0.0f usec\n"
"\tFlags: %s%s%s%s%s%s\n"
"\tEigenschaften:\n"
@@ -1854,7 +1864,7 @@ msgstr "\tAktive Profile: %s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "Konnte Sink-Eingabe-Informationen nicht holen: %s"
+msgstr "Erhalten der Sink-Eingabe-Informationen fehlgeschlagen: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1876,9 +1886,9 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"Eingabe-Senke #%u\n"
+"Sink-Eingabe #%u\n"
"\tTreiber: %s\n"
-"\tOwner-Modul: %s\n"
+"\tBesitzer-Modul: %s\n"
"\tClient: %s\n"
"\tSink: %u\n"
"\tSample-Angabe: %s\n"
@@ -2079,8 +2089,7 @@ msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
#: ../src/utils/pactl.c:1045
msgid "You have to specify a source output index and a source"
-msgstr ""
-"Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben"
+msgstr "Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben"
#: ../src/utils/pactl.c:1060
msgid "You have to specify a module name and arguments."
@@ -2091,19 +2100,14 @@ msgid "You have to specify a module index"
msgstr "Sie müssen einen Indexwert für ein Modul angeben"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"Sie sollten nur eine Senke angeben. Sie müssen zumindest einen bool'schen "
-"Wert übergeben."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "Sie sollten nur einen Sink angeben. Sie müssen zumindest eine Boolsche Variable übergeben."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"Sie sollten nur eine Quelle angeben. Sie müssen zumindest einen bool'schen "
-"Wert übergeben."
+msgstr "Sie sollten nur eine Quelle angeben. Sie müssen zumindest eine Boolsche Variable übergeben."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2111,7 +2115,7 @@ msgstr "Sie müssen einen Karten-Name/Indexwert und einen Profilnamen angeben"
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
-msgstr "Sie müssen einen Senkennamen/-Indexwert und einen Portnamen angeben"
+msgstr "Sie müssen einen Sink-Namen/-Indexwert und einen Portnamen angeben"
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
@@ -2119,7 +2123,7 @@ msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
-msgstr "Sie müssen einen Senkennamen/-Indexwert und einen Portnamen angeben"
+msgstr "Sie müssen einen Sink-Namen/-Indexwert und eine Lautstärke angeben"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
@@ -2133,7 +2137,7 @@ msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
+msgstr "Sie müssen einen Sink-Eingabe-Indexwert und eine Lautstärke angeben."
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
@@ -2141,15 +2145,15 @@ msgstr "Ungültiger Sink-Eingabe-Index"
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Sie müssen einen Senkennamen/-Indexwert und einen Portnamen angeben"
+msgstr "Sie müssen einen Sink-Namen/-Indexwert und eine Boolsche Variable für Stummschaltung angeben"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
+msgstr "Sie müssen einen Quellennamen/-Indexwert und eine Boolsche Variable für Stummschaltung angeben"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
+msgstr "Sie müssen einen Sink-Eingabe-Indexwert und eine Boolsche Variable für Stummschaltung angeben"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
@@ -2206,7 +2210,7 @@ msgstr "Cookie: %s\n"
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr "Paresen der Cookie-Daten fehlgeschlagen.\n"
+msgstr "Parsen der Cookie-Daten fehlgeschlagen.\n"
#: ../src/utils/pax11publish.c:137
#, c-format
@@ -2254,7 +2258,7 @@ msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr "Terminieren des PulseAudio-Daemon fehlgeschlagen."
+msgstr "Beenden des PulseAudio-Daemon fehlgeschlagen."
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
@@ -2277,7 +2281,7 @@ msgstr "write(): %s"
#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
-msgstr "Fehler beim Zugriff auf Autostart -Sperre."
+msgstr "Fehler beim Zugriff auf Autostart-Sperre."
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
@@ -2289,6 +2293,10 @@ msgid ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
msgstr ""
+"ALSA weckte uns auf, um neue Daten auf das Gerät zu schreiben, doch es gab nichts zum Schreiben!\n"
+"Dies ist höchstwahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie diesen Fehler den ALSA-Entwicklern.\n"
+"Wir wurden durch das POLLOUT-Set geweckt, allerdings lieferte ein anschliessender snd_pcm_avail() "
+"den Wert 0 oder einen anderen Wert < min_avail."
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
@@ -2300,6 +2308,10 @@ msgid ""
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
msgstr ""
+"ALSA weckte uns auf, um neue Daten vom Gerät zu lesen, doch es gab nichts zum Lesen!\n"
+"Dies ist höchstwahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie diesen Fehler den ALSA-Entwicklern.\n"
+"Wir wurden durch das POLLIN-Set geweckt, allerdings lieferte ein anschliessender snd_pcm_avail() "
+"den Wert 0 oder einen anderen Wert < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
@@ -2326,133 +2338,122 @@ msgstr "PulseAudio Sound Server"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Ausgabegeräte"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "Eingang %s"
+msgstr "Eingabegeräte"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Audio auf @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "Eingang %s"
+msgstr "Eingabe"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Docking Station Eingabe"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Docking Station Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Line-In"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Externes Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Internes Audio"
+msgstr "Internes Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Video"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Automatische Verstärkungsregelung"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Keine automatische Verstärkungsregelung"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Boost"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Kein Boost"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Verstärker"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Kein Verstärker"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Analog Mono"
+msgstr "Analoge Eingabe"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Analog Mono"
+msgstr "Analoges Mikrofon"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Analog Mono"
+msgstr "Analoges Line-In"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Analog Mono"
+msgstr "Analoges Radio"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Analog Stereo"
+msgstr "Analoges Video"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Ausgang %s"
+msgstr "Analoge Ausgabe"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Analog Mono"
+msgstr "Analoge Kopfhörer"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Analoge Ausgabe (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Analog Mono"
+msgstr "Analoge Mono-Ausgabe"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2463,19 +2464,16 @@ msgid "Analog Stereo"
msgstr "Analog Stereo"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Analog Surround 4.1"
+msgstr "Analog Surround 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Analog Surround 4.0"
+msgstr "Analog Surround 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Analog Surround 4.1"
+msgstr "Analog Surround 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2494,19 +2492,16 @@ msgid "Analog Surround 5.1"
msgstr "Analog Surround 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Analog Surround 4.0"
+msgstr "Analog Surround 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Analog Surround 4.1"
+msgstr "Analog Surround 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Analog Surround 4.0"
+msgstr "Analog Surround 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2517,9 +2512,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Digital Stereo (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Digital Surround 4.0 (IEC958/AC3)"
+msgstr "Digital Surround 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2534,276 +2528,14 @@ msgid "Digital Stereo (HDMI)"
msgstr "Digital Stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Analog Mono"
+msgstr "Analog Mono Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Analog Stereo"
+msgstr "Analog Stereo Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Digital Stereo (IEC958)"
-
-#~ msgid "Invalid client name '%s'\n"
-#~ msgstr "Ungültiger Client-Name '%s'\n"
-
-#~ msgid "Failed to determine sample specification from file.\n"
-#~ msgstr "Beziehen der Sample-Informationen der Datei fehlgeschlagen.\n"
-
-#~ msgid "select(): %s"
-#~ msgstr "select(): %s"
-
-#~ msgid "Cannot connect to system bus: %s"
-#~ msgstr "Kann nicht mit dem System-Bus verbinden: %s"
-
-#~ msgid "Cannot get caller from PID: %s"
-#~ msgstr "Kann Caller von PID nicht beziehen: %s"
-
-#~ msgid "Cannot set UID on caller object."
-#~ msgstr "Kann UID für Caller-Objekt nicht setzen."
-
-#~ msgid "Failed to get CK session."
-#~ msgstr "Kann CK-Session nicht beziehen."
-
-#~ msgid "Cannot set UID on session object."
-#~ msgstr "Kann UID für Session-Objekt nicht setzen."
-
-#~ msgid "Cannot allocate PolKitAction."
-#~ msgstr "Konnte PolKitAction nicht zuordnen."
-
-#~ msgid "Cannot set action_id"
-#~ msgstr "Kann action_id nicht setzen"
-
-#~ msgid "Cannot allocate PolKitContext."
-#~ msgstr "Konnte PolKitContext nicht zuordnen."
-
-#~ msgid "Cannot initialize PolKitContext: %s"
-#~ msgstr "Konnte PolKitContext nicht initialisieren: %s"
-
-#~ msgid "Could not determine whether caller is authorized: %s"
-#~ msgstr "Autorisierung des Callers konnte nicht sichergestellt werden: %s"
-
-#~ msgid "Cannot obtain auth: %s"
-#~ msgstr "Keine Authorisierung erhalten: %s"
-
-#~ msgid "PolicyKit responded with '%s'"
-#~ msgstr "PolicyKit antwortete mit '%s'"
-
-#, fuzzy
-#~ msgid ""
-#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
-#~ "daemon"
-#~ msgstr ""
-#~ "Hochprioritäts-Terminierung () (negative Unix nice level) für den "
-#~ "PulseAudio-Dienst"
-
-#~ msgid "Real-time scheduling for the PulseAudio daemon"
-#~ msgstr "Echtzeit-Terminierung des PulseAudio-Daemon"
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr ""
-#~ "System-Richtlinien verhindert PulseAudio beim Erlangen des high-priority "
-#~ "scheduling."
+msgstr "Digital Stereo Duplex (IEC958)"
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr ""
-#~ "System-Richtlinien verhindert PulseAudio beim Erlangen der Echtzeit-"
-#~ "Terminierung."
-
-#~ msgid "read() failed: %s\n"
-#~ msgstr "read() fehlgeschlagen: %s\n"
-
-#~ msgid "pa_context_connect() failed: %s\n"
-#~ msgstr "pa_context_connect() fehlgeschlagen: %s\n"
-
-#~ 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."
-
-#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr ""
-#~ "Wir befinden uns in der Gruppe '%s', was Echtzeit-Scheduling ermöglicht."
-
-#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr "Richtlinien gewähren das Recht aquire-high-priority."
-
-#~ msgid "PolicyKit refuses acquire-high-priority privilege."
-#~ msgstr "Richtlinien verweigern das Recht acquire-high-priority."
-
-#~ msgid "PolicyKit grants us acquire-real-time privilege."
-#~ msgstr "Richtlinien gewähren das Recht aquire-real-time."
-
-#~ msgid "PolicyKit refuses acquire-real-time privilege."
-#~ msgstr "Richtlinien verweigern das Recht acquire-real-time."
-
-#, fuzzy
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
-#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
-#~ "limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
-#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-#~ msgstr ""
-#~ "' 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 ""
-#~ "High-priority scheduling enabled in configuration but not allowed by "
-#~ "policy."
-#~ msgstr "Scheduling höchster Priorität konfiguriert, jedoch nicht erlaubt."
-
-#~ msgid "Successfully increased RLIMIT_RTPRIO"
-#~ msgstr "RLIMIT_RTPRIO erfolgreich erhöht"
-
-#~ msgid "RLIMIT_RTPRIO failed: %s"
-#~ msgstr "RLIMIT_RTPRIO fehlgeschlagen: %s"
-
-#~ msgid "Giving up CAP_NICE"
-#~ msgstr "Verwerfe CAP_NICE"
-
-#~ msgid ""
-#~ "Real-time scheduling enabled in configuration but not allowed by policy."
-#~ msgstr "Echtzeit-Scheduling konfiguriert, jedoch nicht erlaubt."
-
-#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
-#~ msgstr "Fähigkeiten erfolgreich auf CAP_SYS_NICE reduziert."
-
-#~ msgid "time_new() failed.\n"
-#~ msgstr "time_new() fehlgeschlagen.\n"
-
-#~ msgid "Output %s + Input %s"
-#~ msgstr "Ausgabe %s + Eingabe %s"
-
-#~ msgid "Stream successfully created\n"
-#~ msgstr "Stream erfolgreich erzeugt\n"
-
-#~ msgid "Stream errror: %s\n"
-#~ msgstr "Stream-Fehler: %s\n"
-
-#~ msgid "Connection established.\n"
-#~ msgstr "Verbindung hergestellt.\n"
-
-#~ msgid ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ " -h, --help Show this help\n"
-#~ " --version Show version\n"
-#~ "\n"
-#~ " -v, --verbose Enable verbose operation\n"
-#~ "\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"
-#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
-#~ msgstr ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ " -h, --help Zeige diese Hilfe\n"
-#~ " --version Zeige Version\n"
-#~ "\n"
-#~ " -v, --verbose Ausführliche Meldungen\n"
-#~ "\n"
-#~ " -s, --server=SERVER Name des Zielservers\n"
-#~ " -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"
-#~ " --channel-map=CHANNELMAP Diese Kanalzuordnung nutzen\n"
-
-#~ msgid ""
-#~ "paplay %s\n"
-#~ "Compiled with libpulse %s\n"
-#~ "Linked with libpulse %s\n"
-#~ msgstr ""
-#~ "paplay %s\n"
-#~ "Kompliert mit libpulse %s\n"
-#~ "Gelinkt mit libpulse %s\n"
-
-#~ msgid "Invalid channel map\n"
-#~ msgstr "Ungültige Kanal-Zuweisung\n"
-
-#~ msgid "Failed to open file '%s'\n"
-#~ msgstr "Ãffnen der Datei '%s' fehlgeschlagen\n"
-
-#~ msgid "Channel map doesn't match file.\n"
-#~ msgstr "Kanal-Zuweisung stimmt mit Datei nicht überein.\n"
-
-#~ msgid "Using sample spec '%s'\n"
-#~ msgstr "Sampling-Angabe '%s' wird benutzt\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '"
-#~ msgstr ""
-#~ "Konfiguration fordert Aufruf der SUID root und Echtzeit-Scheduling "
-#~ "höchster Priorität. Allerdings fehlen die nötigen Rechte:\n"
-#~ "Wir befinden uns nicht in der Gruppe '"
-
-#~ msgid "--log-time boolean argument"
-#~ msgstr "--log-time erfordert bool'schen Wert"
-
-#~ msgid ""
-#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
-#~ "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"
-#~ "Type: %s\n"
-#~ "Module: %s\n"
-#~ "Argument: %s\n"
-#~ msgstr ""
-#~ "*** Autoload-Eintrag #%u ***\n"
-#~ "Name: %s\n"
-#~ "Typ: %s\n"
-#~ "Modul: %s\n"
-#~ "Argument: %s\n"
-
-#~ msgid "sink"
-#~ msgstr "Sink"
-
-#~ msgid "source"
-#~ msgstr "Quelle"
-
-#~ msgid "socketpair(): %s"
-#~ msgstr "socketpair(): %s"
commit 381be6496b97ac750ae1827c167200f7f1adf08f
Author: khasida <khasida at fedoraproject.org>
Date: Tue Dec 8 08:58:17 2009 +0000
Sending translation for Japanese
diff --git a/po/ja.po b/po/ja.po
index de7f605..bd6f8c2 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,19 +1,23 @@
+# translation of ja.po to Japanese
# PulseAudio
# Copyright (C) 2009.
# This file is distributed under the same license as the PACKAGE package.
-# Hyu_gabaru Ryu_ichi <hyu_gabaru at yahoo.co.jp>, 2009.
#
+# Hyu_gabaru Ryu_ichi <hyu_gabaru at yahoo.co.jp>, 2009.
+# Kiyoto Hashida <khashida at redhat.com>, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: 1.0\n"
+"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-10 21:05+0900\n"
-"Last-Translator: Hyu_gabaru Ryu_ichi <hyu_gabaru at yahoo.co.jp>\n"
-"Language-Team: Japanese <fedora-trans-ja at redhat.com>\n"
+"POT-Creation-Date: 2009-12-08 02:51+0000\n"
+"PO-Revision-Date: 2009-12-08 17:48+0900\n"
+"Last-Translator: Kiyoto Hashida <khashida at redhat.com>\n"
+"Language-Team: Japanese <jp at li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
@@ -28,6 +32,10 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
+"snd_pcm_avail() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %lu ãã¤ãï¼%lu "
+"msï¼ã\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« "
+"å ±åãæåºãã¦ä¸ããã"
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
@@ -37,6 +45,10 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
+"snd_pcm_delay() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %li ãã¤ãï¼%s%lu"
+" msï¼ã\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« "
+"å ±åãæåºãã¦ä¸ããã"
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
@@ -46,18 +58,22 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
+"snd_pcm_mmap_begin() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %lu ãã¤ãï¼%lu "
+"msï¼ã\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« "
+"å ±åãæåºãã¦ä¸ããã"
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "null ã§ããå ´åã§ãã常ã«æä½ã§ãã·ã³ã¯ãï¼ã¤ãã¼ããããããã«ç¶æãã¾ã"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "ããã¼åºå"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr ""
+msgstr "ä»®æ³ LADSPA ã·ã³ã¯"
#: ../src/modules/module-ladspa-sink.c:53
msgid ""
@@ -67,153 +83,160 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
+"sink_name=<ã·ã³ã¯ã®åå> sink_properties=<ã·ã³ã¯ã®ããããã£> "
+"master=<ãã£ã«ã¿ããã·ã³ã¯å> format=<ãµã³ãã«å½¢å¼> rate=<ãµã³ãã«ã¬ã¼ã> "
+"channels=<ãã£ã³ãã«æ°> channel_map=<ãã£ã³ãã«ããã> plugin=<ladspa "
+"plugin ã®åå> label=<ladspa plugin ã®ã©ãã«> control=<ã³ã³ãã§éé¢ããå
¥åå¶å¾¡å¤ã® "
+"ä¸è¦§>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "ã¯ããã¯ä»ã NULL ã·ã³ã¯"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
-msgstr ""
+msgstr "Null åºå"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
-msgstr ""
+msgstr "å
é¨ãªã¼ãã£ãª"
#: ../src/pulsecore/sink.c:2618
msgid "Modem"
-msgstr ""
+msgstr "ã¢ãã "
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
-msgstr ""
+msgstr "ãªãªã¸ãã«ã® lt_dlopen ãã¼ãã¼ãè¦ã¤ããã®ã«å¤±æãã¾ããã"
#: ../src/daemon/ltdl-bind-now.c:129
msgid "Failed to allocate new dl loader."
-msgstr ""
+msgstr "æ°è¦ã® dl ãã¼ãã¼ã®å²ãå½ã¦ã«å¤±æãã¾ããã"
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr ""
+msgstr "bind-now-loader ã®è¿½å ã«å¤±æãã¾ããã"
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr ""
+msgstr "ä¿¡å· %s ãå¾ã¾ããã"
#: ../src/daemon/main.c:168
msgid "Exiting."
-msgstr ""
+msgstr "çµäºãã¦ãã¾ãã"
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
-msgstr ""
+msgstr "ã¦ã¼ã¶ã¼ '%s' ãè¦ä»ããã¾ããã§ããã"
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr ""
+msgstr "ã°ã«ã¼ã '%s' ãè¦ä»ããã¾ããã§ããã"
#: ../src/daemon/main.c:195
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr ""
+msgstr "ã¦ã¼ã¶ã¼'%s' (UID %lu) ã¨ã°ã«ã¼ã '%s' (GID %lu) ãè¦ã¤ãã¾ããã"
#: ../src/daemon/main.c:200
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr ""
+msgstr "ã¦ã¼ã¶ã¼'%s' 㨠ã°ã«ã¼ã '%s' ã® GID ãä¸è´ãã¾ããã"
#: ../src/daemon/main.c:205
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr ""
+msgstr "ã¦ã¼ã¶ã¼ '%s' ã®ãã¼ã ãã£ã¬ã¯ããªã¯ '%s' ã§ã¯ããã¾ãããç¡è¦ãã¾ãã"
#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
-msgstr ""
+msgstr "'%s' ã®ä½æã«å¤±æãã¾ãã: %s"
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
-msgstr ""
+msgstr "ã°ã«ã¼ãä¸è¦§ã®å¤æ´ã«å¤±æãã¾ãã: %s"
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
-msgstr ""
+msgstr "GID ã®å¤æ´ã«å¤±æãã¾ãã: %s"
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
-msgstr ""
+msgstr "UID ã®å¤æ´ã«å¤±æãã¾ãã: %s"
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
-msgstr ""
+msgstr "root ã®æ¨©éãæ£ããç ´æ£ãã¾ããã"
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr ""
+msgstr "ãã®ãã©ãããã©ã¼ã ã§ã¯ã·ã¹ãã å
¨åã®ã¢ã¼ãã¯ãµãã¼ããããã¾ããã"
#: ../src/daemon/main.c:297
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr ""
+msgstr "setrlimit(%s, (%u, %u)) ã¯å¤±æ: %s "
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr ""
+msgstr "ã³ãã³ãã©ã¤ã³ã®æ§æ解æã«å¤±æãã¾ããã"
#: ../src/daemon/main.c:541
msgid "Daemon not running"
-msgstr ""
+msgstr "ãã¼ã¢ã³ã¯ç¨¼åãã¦ãã¾ãã"
#: ../src/daemon/main.c:543
#, c-format
msgid "Daemon running as PID %u"
-msgstr ""
+msgstr "ãã¼ã¢ã³ã¯ PID %u ã¨ãã¦ç¨¼åãã¦ãã¾ãã"
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr ""
+msgstr "ãã¼ã¢ã³ã®ãã«ã«å¤±æãã¾ãã: %s"
#: ../src/daemon/main.c:571
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr ""
+"ãã®ããã°ã©ã 㯠root ã¨ãã¦å®è¡ãããããã«æå³ããã¦ãã¾ããï¼--system ã "
+"æå®ãã¦ããªãéãï¼ã"
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr ""
+msgstr "Root ã®æ¨©éãå¿
è¦ã§ãã"
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
-msgstr ""
+msgstr "--start ã¯ã·ã¹ãã ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ãµãã¼ããããã¾ããã"
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr ""
+msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããããã --disallow-exit ãã»ããããã¦ãã¾ãã!"
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
+msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããããã --disallow-module-loading ãã»ããããã¦ãã¾ãã!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr ""
+msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããå¼·å¶çã« SHM ã¢ã¼ããç¡å¹ã«ãã¦ãã¾ã!"
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr ""
+msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããå¼·å¶çã« exit ã®éã³æéãç¡å¹ã«ãã¦ãã¾ã!"
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
-msgstr ""
+msgstr "stdio ã®åå¾ã«å¤±æãã¾ããã"
#: ../src/daemon/main.c:627
#, c-format
@@ -1364,8 +1387,7 @@ msgstr ""
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
#: ../src/utils/pacat.c:1009
@@ -1812,8 +1834,7 @@ msgid "You have to specify a module index"
msgstr ""
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
#: ../src/utils/pactl.c:1103
@@ -2144,14 +2165,14 @@ msgid "Analog Mono Output"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2236,3 +2257,4 @@ msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
msgstr ""
+
commit 8c2c80a0526507533dfa2045cc3258970aba619c
Author: runab <runab at fedoraproject.org>
Date: Tue Dec 8 08:59:33 2009 +0000
Sending translation for Bengali (India)
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 45adef1..65b26cc 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.bn_IN\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-10 17:08+0530\n"
+"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"PO-Revision-Date: 2009-12-08 14:34+0530\n"
"Last-Translator: Runa Bhattacharjee <runab at redhat.com>\n"
"Language-Team: Bengali INDIA <anubad at lists.ankur.org.in>\n"
"MIME-Version: 1.0\n"
@@ -61,8 +61,7 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
-"সরà§à¦¬à¦¦à¦¾ à¦
নà§à¦¤à¦¤ à¦à¦à¦à¦¿ sink লà§à¦¡ à¦à¦°à§ রাà¦à¦¾ হবà§, পà§à¦°à§à§à¦à¦¨à§ null sink বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হবà§"
+msgstr "সরà§à¦¬à¦¦à¦¾ à¦
নà§à¦¤à¦¤ à¦à¦à¦à¦¿ sink লà§à¦¡ à¦à¦°à§ রাà¦à¦¾ হবà§, পà§à¦°à§à§à¦à¦¨à§ null sink বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হবà§"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
@@ -146,8 +145,7 @@ msgstr "'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦° ঠ'%s' দলà§à¦° GID-র
#: ../src/daemon/main.c:205
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr ""
-"'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ বà§à¦¯à¦à§à¦¤à¦¿à¦à¦¤ ডিরà§à¦à§à¦à¦°à¦¿ রà§à¦ªà§ '%s' ধারà§à¦¯ à¦à¦°à¦¾ হà§à¦¨à¦¿, à¦
à¦à§à¦°à¦¾à¦¹à§à¦¯ à¦à¦°à¦¾ হবà§à¥¤"
+msgstr "'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ বà§à¦¯à¦à§à¦¤à¦¿à¦à¦¤ ডিরà§à¦à§à¦à¦°à¦¿ রà§à¦ªà§ '%s' ধারà§à¦¯ à¦à¦°à¦¾ হà§à¦¨à¦¿, à¦
à¦à§à¦°à¦¾à¦¹à§à¦¯ à¦à¦°à¦¾ হবà§à¥¤"
#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
#, c-format
@@ -204,8 +202,7 @@ msgstr "ডà§à¦®à¦¨ kill à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
-msgstr ""
-"root পরিà¦à§à§ à¦à¦ পà§à¦°à§à¦à§à¦°à¦¾à¦®à¦à¦¿ সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà¦à§à¦¾ à¦à¦à¦¿à¦¤ নৠ(যদি না --system à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§)।"
+msgstr "root পরিà¦à§à§ à¦à¦ পà§à¦°à§à¦à§à¦°à¦¾à¦®à¦à¦¿ সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà¦à§à¦¾ à¦à¦à¦¿à¦¤ নৠ(যদি না --system à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§)।"
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -396,8 +393,7 @@ msgstr "ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr ""
-"লà§à¦¡ à¦à¦°à¦¾ মডিà¦à¦² বিনা ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§ à¦à¦¬à¦ à¦à§à¦¨à§ à¦à¦°à§à¦® সà¦à§à¦à¦¾à¦²à¦¨ à¦à¦°à¦¾ সমà§à¦à¦¬ নà§à¥¤"
+msgstr "লà§à¦¡ à¦à¦°à¦¾ মডিà¦à¦² বিনা ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§ à¦à¦¬à¦ à¦à§à¦¨à§ à¦à¦°à§à¦® সà¦à§à¦à¦¾à¦²à¦¨ à¦à¦°à¦¾ সমà§à¦à¦¬ নà§à¥¤"
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
@@ -1099,11 +1095,11 @@ msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦ ফরà§à¦ à¦à¦°à¦¾ হà§à§à¦à§"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "à¦à¦¨à¦ªà§à¦/à¦à¦à¦à¦ªà§à¦ তà§à¦°à§à¦à¦¿"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "ডিà¦à¦¾à¦à¦¸ à¦
থবা রিসà§à¦°à§à¦¸à¦à¦¿ বà§à¦¯à¦¸à§à¦¤"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1539,8 +1535,7 @@ msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦²à§à¦° মধà§à¦¯à§
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"à¦à¦à¦à¦¿ %s সà§à¦à§à¦°à¦¿à¦® à¦à§à¦²à¦¾ হà¦à§à¦à§à¥¤ à¦à¦à¦¿à¦° à¦à¦¨à§à¦¯ '%s'-র সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মান ঠ'%s' "
"à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবà§à¥¤"
@@ -1676,8 +1671,7 @@ msgstr "বরà§à¦¤à¦®à¦¾à¦¨à§ বà§à¦¯à¦¬à¦¹à§à¦¤: %u বà§à¦²à¦à§à¦°
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
-"সমà§à¦ªà§à¦°à§à¦£ à¦à¦°à§à¦®à¦à¦¾à¦²à§à¦° à¦à¦¨à§à¦¯ বরাদà§à¦¦ à¦à¦°à¦¾ হà§à§à¦à§: %u বà§à¦²à¦à§à¦° মধà§à¦¯à§ à¦à¦ªà¦¸à§à¦¥à¦¿à¦¤ সরà§à¦¬à¦®à§à¦ %s বাà¦à¦à¥¤\n"
+msgstr "সমà§à¦ªà§à¦°à§à¦£ à¦à¦°à§à¦®à¦à¦¾à¦²à§à¦° à¦à¦¨à§à¦¯ বরাদà§à¦¦ à¦à¦°à¦¾ হà§à§à¦à§: %u বà§à¦²à¦à§à¦° মধà§à¦¯à§ à¦à¦ªà¦¸à§à¦¥à¦¿à¦¤ সরà§à¦¬à¦®à§à¦ %s বাà¦à¦à¥¤\n"
#: ../src/utils/pactl.c:147
#, c-format
@@ -2135,8 +2129,7 @@ msgid "You have to specify a module index"
msgstr "মডিà¦à¦² à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সিà¦à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
#: ../src/utils/pactl.c:1103
@@ -2378,217 +2371,204 @@ msgstr "PulseAudio শবà§à¦¦à§à¦° সারà§à¦à¦¾à¦°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à¦à¦à¦à¦ªà§à¦ ডিà¦à¦¾à¦à¦¸"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à¦à¦¨à¦ªà§à¦ ডিà¦à¦¾à¦à¦¸"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME at -র মধà§à¦¯à§ à¦
ডিà¦"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à¦à¦¨à¦ªà§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ডà¦à¦¿à¦ সà§à¦à§à¦¶à¦¨ থà§à¦à§ à¦à¦¨à¦ªà§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ডà¦à¦¿à¦ সà§à¦à§à¦¶à¦¨à§à¦° মাà¦à¦à§à¦°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "লাà¦à¦¨-à¦à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "মাà¦à¦à§à¦°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "বহিসà§à¦¥à¦¿à¦¤ মাà¦à¦à§à¦°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à¦
à¦à§à¦¯à¦¨à§à¦¤à¦°à§à¦£ à¦
ডিà¦"
+msgstr "à¦
à¦à§à¦¯à¦¨à§à¦¤à¦°à§à¦£ মাà¦à¦à§à¦°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "রà§à¦¡à¦¿à¦"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "à¦à¦¿à¦¡à¦¿à¦"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "সà§à¦¬à§à¦à¦à§à¦°à¦¿à§ à¦à§à¦à¦¨ নিà§à¦¨à§à¦¤à§à¦°à¦£"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "সà§à¦¬à§à¦à¦à§à¦°à¦¿à§ à¦à§à¦à¦¨ নিà§à¦¨à§à¦¤à§à¦°à¦£ পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবৠনা"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "বà§à¦¸à§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "বà§à¦¸à§à¦ পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবৠনা"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "বিবরà§à¦§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "বিবরà§à¦§à¦¨ পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবৠনা"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦¨à¦ªà§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মাà¦à¦à§à¦°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ লাà¦à¦¨-à¦à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ রà§à¦¡à¦¿à¦"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦¿à¦¡à¦¿à¦"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Null ফলাফল"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦à¦à¦ªà§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ হà§à¦¡-ফà§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦à¦à¦ªà§à¦ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মà§à¦¨à§ à¦à¦à¦à¦ªà§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মà§à¦¨à§"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "সà§à¦à¦¿à¦°à¦¿à¦"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à¦°à¦¿à¦"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.১"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ২.১"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.০"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৩.০"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.১"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৩.১"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.০"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৪.০"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.১"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৪.১"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "সারাà¦à¦¨à§à¦¡ ৫.০"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৫.০"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "সারাà¦à¦¨à§à¦¡ ৫.১"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৫.১"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.০"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৬.০"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.১"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৬.১"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "সারাà¦à¦¨à§à¦¡ ৪.০"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ à§.০"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "সারাà¦à¦¨à§à¦¡ à§.১"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ à§.১"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সà§à¦à¦¿à¦°à¦¿à¦ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সারাà¦à¦¨à§à¦¡ ৪.০ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সারাà¦à¦¨à§à¦¡ ৪.০ (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সারাà¦à¦¨à§à¦¡ ৫.১ (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সà§à¦à¦¿à¦°à¦¿à¦ (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মà§à¦¨à§ ডà§à¦ªà§à¦²à§"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à¦°à¦¿à¦ ডà§à¦ªà§à¦²à§"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সà§à¦à¦¿à¦°à¦¿à¦ ডà§à¦ªà§à¦²à§ (IEC958)"
+
commit e6ffac775fdde7115c368f306eb0a77a24df375f
Author: jassy <jassy at fedoraproject.org>
Date: Tue Dec 8 09:42:42 2009 +0000
Sending translation for Punjabi
diff --git a/po/pa.po b/po/pa.po
index 16c5abe..ab97ac0 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -9,14 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pa\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-11 12:08+0530\n"
+"POT-Creation-Date: 2009-12-08 08:37+0000\n"
+"PO-Revision-Date: 2009-12-08 15:04+0530\n"
"Last-Translator: Jaswinder Singh <jsingh at redhat.com>\n"
-"Language-Team: Punjabi <Punjabi-users at lists.sourceforge.net>\n"
+"Language-Team: Punjabi/Panjabi <kde-i18n-doc at kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
@@ -1514,8 +1514,7 @@ msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '%s' à¨
ਤ੠à¨à©à¨¨à¨² ਮà©à¨ª '%s' ਨਾਲ à¨à©à¨²à©à¨¹à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
#: ../src/utils/pacat.c:1009
@@ -2105,8 +2104,7 @@ msgid "You have to specify a module index"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ ਮà©à¨¡à©à¨à¨² ਲਿਸਠਦà©à¨£à© ਪਵà©à¨à©"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
msgstr "ਤà©à¨¸à©à¨ à¨à©±à¨ ਤà©à¨ ਵੱਧ ਸਿੰਠਨਹà©à¨ ਦ੠ਸà¨à¨¦à©à¥¤ ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ ਬà©à¨²à©à¨
ਨ ਮà©à©±à¨² ਦà©à¨£à¨¾ ਪਵà©à¨à¨¾à¥¤"
#: ../src/utils/pactl.c:1103
@@ -2348,217 +2346,202 @@ msgstr "ਪਲਸà¨à¨¡à©à¨ ਸਾà¨à¨à¨¡ ਡਰਾà¨à¨µà¨°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à¨à¨à¨à¨ªà©à©±à¨ à¨à©°à¨¤à¨°"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à¨à©°à¨ªà©à©±à¨ à¨à©°à¨¤à¨°"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ à¨à©±à¨ªà¨° à¨à¨¡à©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à¨à©°à¨ªà©à©±à¨"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ਡà©à¨à¨¿à©°à¨ ਸà¨à©à¨¶à¨¨ à¨à©°à¨ªà©à©±à¨"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ਡà©à¨à¨¿à©°à¨ ਸà¨à©à¨¶à¨¨ ਮਾà¨à¨à¨°à©à¨«à©à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ਲਾà¨à¨¨-à¨à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ਮਾà¨à¨à¨°à©à¨«à©à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "ਬਾਹਰ੠ਮਾà¨à¨à¨°à©à¨«à©à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à¨
ੰਦਰà©à¨¨à© à¨à¨¡à©à¨"
+msgstr "à¨
ੰਦਰà©à¨¨à© ਮਾà¨à¨à¨°à©à¨«à©à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "ਰà©à¨¡à©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "ਵà©à¨¡à©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "à¨à¨à©à¨®à©à¨à¨¿à¨ à¨à©à¨¨ à¨à©°à¨à¨°à©à¨²"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "à¨à©à¨ à¨à¨à©à¨®à©à¨à¨¿à¨ à¨à©à¨¨ à¨à©°à¨à¨°à©à¨² ਨਹà©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ਬà©à¨¸à¨"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "à¨à©à¨ ਬà©à¨¸à¨ ਨਹà©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à¨à¨à¨ªà¨²à©à¨«à¨¾à¨à¨°"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à¨à©à¨ à¨à¨à¨ªà¨²à©à¨«à¨¾à¨à¨° ਨਹà©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ à¨à©°à¨ªà©à©±à¨"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮਾà¨à¨à¨°à©à¨«à©à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਲਾà¨à¨¨-à¨à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਰà©à¨¡à©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਵà©à¨¡à©à¨"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "à©à©à¨°à© (Null) à¨à¨à¨à¨ªà©à©±à¨"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ à¨à¨à¨à¨ªà©à©±à¨"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਹà©à©±à¨¡à¨«à©à¨¨"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ à¨à¨à¨à¨ªà©à©±à¨ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮà©à¨¨à© à¨à¨à¨à¨ªà©à©±à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮà©à¨¨à©"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "ਸà¨à©à¨°à©à¨"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸà¨à©à¨°à©à¨"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.1"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.0"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.1"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.0"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.1"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 5.0"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 5.1"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.0"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.1"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 4.0"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "ਸਰਾà¨à¨à¨¡à¨¿à©°à¨ 7.1"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ਡਿà©à©à¨à¨² ਸà¨à©à¨°à©à¨ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ਡਿà©à©à¨à¨² ਸਰਾà¨à¨à¨¡ 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ਡਿà©à©à¨à¨² ਸਰਾà¨à¨à¨¡ 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ਡਿà©à©à¨à¨² ਸਰਾà¨à¨à¨¡ 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ਡਿà©à©à¨à¨² ਸà¨à©à¨°à©à¨ (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮà©à¨¨à© ਡà©à¨ªà¨²à©à¨à¨¸"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸà¨à©à¨°à©à¨ ਡà©à¨ªà¨²à©à¨à¨¸"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ਡਿà©à©à¨à¨² ਸà¨à©à¨°à©à¨ ਡà©à¨ªà¨²à©à¨à¨¸ (IEC958)"
+
commit 257eabffeb109f6075fc0a0b10ad8c1dcdf39835
Author: leahliu <leahliu at fedoraproject.org>
Date: Wed Dec 9 02:56:48 2009 +0000
Sending translation for Chinese (Simplified)
diff --git a/po/zh_CN.po b/po/zh_CN.po
index a273066..bf3610f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-04-06 10:26+1000\n"
+"POT-Creation-Date: 2009-12-07 20:11+0000\n"
+"PO-Revision-Date: 2009-12-09 12:54+1000\n"
"Last-Translator: Leah Liu <lliu at redhat.com>\n"
"Language-Team: Simplified Chinese <zh at li.org>\n"
"MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgstr ""
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
@@ -60,15 +60,15 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "æ»æ¯ä¿æè³å°è½½å
¥ä¸ä¸ªæ¼ï¼å³ä½¿å®æ¯ç©ºç"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "åè¾åº"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr ""
+msgstr "èæ LDASPA æ¼"
#: ../src/modules/module-ladspa-sink.c:53
msgid ""
@@ -78,15 +78,19 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "å®æ¶ç空æ¼"
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "è¾åº %s"
+msgstr "空è¾åº"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -323,9 +327,9 @@ msgid "Machine ID is %s."
msgstr "machine IDæ¯%sã"
#: ../src/daemon/main.c:773
-#, fuzzy, c-format
+#, c-format
msgid "Session ID is %s."
-msgstr "machine IDæ¯%sã"
+msgstr "ä¼è¯ ID %sã"
#: ../src/daemon/main.c:779
#, c-format
@@ -338,9 +342,9 @@ msgid "Using state directory %s."
msgstr "æ£å¨ä½¿ç¨ç¶ææ件夹%sã"
#: ../src/daemon/main.c:787
-#, fuzzy, c-format
+#, c-format
msgid "Using modules directory %s."
-msgstr "æ£å¨ä½¿ç¨è¿è¡æ¶æ件夹%sã"
+msgstr "æ£å¨ä½¿ç¨æ¨¡åç®å½ %sã"
#: ../src/daemon/main.c:789
#, c-format
@@ -356,6 +360,9 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
+"ç¡®å®ï¼é£ä¹æ¨æ£å¨ç³»ç»æ¨¡å¼ä¸è¿è¡ PAã请注æï¼æ¨å¾å¯è½ä¸åºè¯¥è¿æ ·åã\n"
+"å¦ææ¨æ 论å¦ä½é½è¿æ ·åäºï¼é£ä¹åºç°æå¤æ
åµå°±æ¯æ¨çé®é¢ã\n"
+"å¨æç« http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode ä¸è§£éäºä¸ºä»ä¹ç³»ç»æ¨¡å¼é常ä¸æ¯ä¸ªå¥½ä¸»æã"
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -369,7 +376,7 @@ msgstr "æ°é²çé«å辨ç计æ¶å¨å¼é
äºï¼å个饱ï¼"
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-msgstr "èå
ï¼ä½ çå
æ ¸çèï¼ç°å¨æµè¡çæ¯å¯ç¨äºé«å辩ç计åå¨çLinuxï¼"
+msgstr "èå
ï¼æ¨çå
æ ¸çèï¼ç°å¨æµè¡çæ¯å¯ç¨äºé«å辩ç计åå¨çLinuxï¼"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
@@ -625,7 +632,7 @@ msgstr "å è½½ä¸æ¬¡ï¼%s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr ""
+msgstr "å对è¦åï¼%s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -709,9 +716,8 @@ msgid "### Read from configuration file: %s ###\n"
msgstr "### ä»é
ç½®æ件读åï¼%s ###\n"
#: ../src/daemon/caps.c:62
-#, fuzzy
msgid "Cleaning up privileges."
-msgstr "æ£å¨åæ¶ root ç¹æã"
+msgstr "åæ¶ç¹æã"
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@@ -1057,11 +1063,11 @@ msgstr "客æ·ç«¯åæ¯"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "è¾å
¥/è¾åºé误"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "设å¤æè
èµæºå¿"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1121,171 +1127,166 @@ msgid "Received message for unknown extension '%s'"
msgstr "æ¶å°æªç¥æ©å±'%s'çä¿¡æ¯"
#: ../src/utils/pacat.c:108
-#, fuzzy, c-format
+#, c-format
msgid "Failed to drain stream: %s"
-msgstr "æåºæµå¤±è´¥ï¼%s\n"
+msgstr "æåºæµå¤±è´¥ï¼%s"
#: ../src/utils/pacat.c:113
-#, fuzzy
msgid "Playback stream drained."
-msgstr "æµææ¾å®æ¯ã\n"
+msgstr "åæ¾æµæ¯ç«ã"
#: ../src/utils/pacat.c:123
-#, fuzzy
msgid "Draining connection to server."
-msgstr "Draining è¿æ¥å°æå¡å¨ã\n"
+msgstr "å°æå¡å¨ç Draining è¿æ¥ã"
#: ../src/utils/pacat.c:136
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_drain(): %s"
-msgstr "pa_stream_drain()ï¼%s\n"
+msgstr "pa_stream_drain(): %s"
#: ../src/utils/pacat.c:159
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write()失败ï¼%s\n"
+msgstr "pa_stream_write() failed: %s"
#: ../src/utils/pacat.c:197
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr "pa_stream_write()失败ï¼%s\n"
+msgstr "pa_stream_begin_write() failed: %s"
#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr "pa_stream_peek()失败ï¼%s\n"
+msgstr "pa_stream_peek() failed: %s"
#: ../src/utils/pacat.c:307
-#, fuzzy
msgid "Stream successfully created."
-msgstr "æµå建æåã\n"
+msgstr "æµå建æåã"
#: ../src/utils/pacat.c:310
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr "pa_stream_get_buffer_attr()失败ï¼%s\n"
+msgstr "pa_stream_get_buffer_attr() failed: %s"
#: ../src/utils/pacat.c:314
-#, fuzzy, c-format
+#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "ç¼å²è®¡éï¼maxlength=%uï¼tlength=%uï¼prebuf=%uï¼minreq=%u\n"
+msgstr "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
#: ../src/utils/pacat.c:317
-#, fuzzy, c-format
+#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "ç¼å²è®¡éï¼maxlength=%uï¼fragsize=%u\n"
+msgstr "Buffer metrics: maxlength=%u, fragsize=%u"
#: ../src/utils/pacat.c:321
-#, fuzzy, c-format
+#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "æ£å¨ä½¿ç¨æ ·åè§æ ¼'%s'ï¼ééæ å°'%s'ã\n"
+msgstr "æ£å¨ä½¿ç¨æ ·åè§æ ¼ '%s'ï¼ééæ å° '%s'ã"
#: ../src/utils/pacat.c:325
-#, fuzzy, c-format
+#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "å·²è¿æ¥è³è®¾å¤%s (%uï¼%sæèµ·ï¼ã\n"
+msgstr "å·²è¿æ¥è³è®¾å¤ %s (%uï¼%s æèµ·ï¼ã"
#: ../src/utils/pacat.c:335
-#, fuzzy, c-format
+#, c-format
msgid "Stream error: %s"
-msgstr "æµé误ï¼%s\n"
+msgstr "æµé误ï¼%s"
#: ../src/utils/pacat.c:345
-#, fuzzy, c-format
+#, c-format
msgid "Stream device suspended.%s"
-msgstr "æµè®¾å¤æèµ·ã%s\n"
+msgstr "æµè®¾å¤æèµ·ã%s"
#: ../src/utils/pacat.c:347
-#, fuzzy, c-format
+#, c-format
msgid "Stream device resumed.%s"
-msgstr "æµè®¾å¤æ¢å¤ã%s\n"
+msgstr "æµè®¾å¤æ¢å¤ã%s"
#: ../src/utils/pacat.c:355
-#, fuzzy, c-format
+#, c-format
msgid "Stream underrun.%s"
-msgstr "æµæ¬ è½½è¿è¡ã%s\n"
+msgstr "æµæ¬ è½½è¿è¡ã%s"
#: ../src/utils/pacat.c:362
-#, fuzzy, c-format
+#, c-format
msgid "Stream overrun.%s"
-msgstr "æµè¶
éè¿è¡ã%s\n"
+msgstr "æµè¶
éè¿è¡ã%s"
#: ../src/utils/pacat.c:369
-#, fuzzy, c-format
+#, c-format
msgid "Stream started.%s"
-msgstr "æµå·²å¯å¨ã%s\n"
+msgstr "æµå·²å¯å¨ã%s"
#: ../src/utils/pacat.c:376
-#, fuzzy, c-format
+#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "æµç§»è³è®¾å¤%s ï¼%uï¼%sæèµ·ï¼ã%s\n"
+msgstr "æµç§»è³è®¾å¤ %s ï¼%uï¼%s æèµ·ï¼ã%s"
#: ../src/utils/pacat.c:376
msgid "not "
msgstr "not "
#: ../src/utils/pacat.c:383
-#, fuzzy, c-format
+#, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr "æ´æ¹æµæ¢åºå±æ§ã%s\n"
+msgstr "æ´æ¹æµç¼å²å±æ§ã%s"
#: ../src/utils/pacat.c:415
-#, fuzzy, c-format
+#, c-format
msgid "Connection established.%s"
-msgstr "è¿æ¥å·²å»ºç«ã%s \n"
+msgstr "è¿æ¥å·²å»ºç«ã%s "
#: ../src/utils/pacat.c:418
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_new() failed: %s"
-msgstr "pa_stream_new()失败ï¼%s\n"
+msgstr "pa_stream_new() failed: %s"
#: ../src/utils/pacat.c:450
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr "pa_stream_connect_playback()失败ï¼%s\n"
+msgstr "pa_stream_connect_playback() failed: %s"
#: ../src/utils/pacat.c:456
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr "pa_stream_connect_playback()失败ï¼%s\n"
+msgstr "pa_stream_connect_record() failed: %s"
#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
-#, fuzzy, c-format
+#, c-format
msgid "Connection failure: %s"
-msgstr "è¿æ¥å¤±è´¥ï¼%s\n"
+msgstr "è¿æ¥å¤±è´¥ï¼%s"
#: ../src/utils/pacat.c:503
-#, fuzzy
msgid "Got EOF."
-msgstr "æ¶å°EOFã\n"
+msgstr "è·å¾ EOFã"
#: ../src/utils/pacat.c:540
-#, fuzzy, c-format
+#, c-format
msgid "write() failed: %s"
-msgstr "write()失败ï¼%s\n"
+msgstr "åå
¥ï¼ï¼å¤±è´¥ï¼%s"
#: ../src/utils/pacat.c:561
-#, fuzzy
msgid "Got signal, exiting."
-msgstr "æ¶å°ä¿¡å·ï¼æ£å¨éåºã\n"
+msgstr "æ¶å°ä¿¡å·ï¼æ£å¨éåºã"
#: ../src/utils/pacat.c:575
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get latency: %s"
-msgstr "è·åä¼ è¾å»¶è¿å¤±è´¥ï¼%s\n"
+msgstr "è·åä¼ è¾å»¶è¿å¤±è´¥ï¼%s"
#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "æ¶é´ï¼%0.3fç§ï¼å»¶è¿ï¼%0.0f å¾®ç§ã \r"
+msgstr "æ¶é´ï¼%0.3f ç§ï¼å»¶è¿ï¼%0.0f å¾®ç§ã"
#: ../src/utils/pacat.c:599
-#, fuzzy, c-format
+#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "pa_stream_update_timing_info()失败ï¼%s\n"
+msgstr "pa_stream_update_timing_info() failed: %s"
#: ../src/utils/pacat.c:609
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1346,7 +1347,7 @@ msgstr ""
"%s [options]\n"
"\n"
" -h, --help æ¾ç¤ºæ¤å¸®å©\n"
-" --version æ¾ç¤ºçæ¬å·\n"
+" --version æ¾ç¤ºçæ¬\n"
"\n"
" -r, --record 为å½å¶å建è¿æ¥\n"
" -p, --playback 为åæ¾å建è¿æ¥\n"
@@ -1354,24 +1355,24 @@ msgstr ""
" -v, --verbose å¯ç¨è¯¦è¿°æä½\n"
"\n"
" -s, --server=SERVER è¦è¿æ¥çæå¡å¨å\n"
-" -d, --device=DEVICE è¦è¿æ¥çsink/sourceå\n"
-" -n, --client-name=NAME æå®å®¢æ·ç«¯å¨æå¡å¨ä¸çå称\n"
-" --stream-name=NAME æå®æµå¨æå¡å¨ä¸çå称\n"
+" -d, --device=DEVICE è¦è¿æ¥çæ¼/æºå称\n"
+" -n, --client-name=NAME å¦ä½å¨æå¡å¨ä¸è°ç¨æ¤å®¢æ·ç«¯\n"
+" --stream-name=NAME å¦ä½å¨æå¡å¨ä¸è°ç¨è¿ä¸ªæµ\n"
" --volume=VOLUME æå®åå§ï¼çº¿æ§ï¼é³éï¼åå¼å¨0...65536"
"ä¹é´\n"
-" --rate=SAMPLERATE éæ ·é¢çï¼åä½Hzï¼é»è®¤ä¸º44100ï¼\n"
-" --format=SAMPLEFORMAT éæ ·ç±»åï¼ä»s16leï¼s16beï¼u8ï¼"
-"float32leï¼\n"
-" float32beï¼ulawï¼alawï¼s32leï¼s32beä¸"
-"åï¼é»è®¤ä¸ºs16neï¼\n"
+" --rate=SAMPLERATE éæ ·é¢çï¼åä½ Hzï¼é»è®¤ä¸º44100ï¼\n"
+" --format=SAMPLEFORMAT éæ ·ç±»åï¼s16leãs16beãu8ã"
+"float32le ä¹ä¸\n"
+" float32beãulawãalawãs32leãs32be ä¸"
+"åï¼é»è®¤ä¸º s16neï¼\n"
" --channels=CHANNELS ééæ°ï¼1为å声éï¼2为ç«ä½å£°ï¼é»è®¤ä¸º"
"2ï¼\n"
" --channel-map=CHANNELMAP å代é»è®¤å¼çééæ å°è¡¨\n"
-" --fix-format ä»æµè¿æ¥çé³é¢åºå£å¤åéæ ·æ ¼å¼ã\n"
-" --fix-rate ä»æµè¿æ¥çé³é¢åºå£å¤åéæ ·çã\n"
-" --fix-channels ä»æµè¿æ¥çé³é¢åºå£å¤åééæ°åééæ "
+" --fix-format ä»æµè¿æ¥çæ¼ä¸æåéæ ·æ ¼å¼ã\n"
+" --fix-rate ä»æµè¿æ¥çæ¼ä¸æåéæ ·çã\n"
+" --fix-channels ä»æµè¿æ¥çæ¼ä¸æåééæ°åééæ "
"å°è¡¨ã\n"
-" --no-remix Don't upmix or downmix channels.\n"
+" --no-remix ä¸è¦å¯¹ééè¿è¡ upmix æè
downmix æä½ã\n"
" --no-remap æ ¹æ®ä¸æ èéå称æ¥æ å°ééã\n"
" --latency=BYTES 请æ±æå®åèæ°ç延è¿ã\n"
" --process-time=BYTES æ¯æ¬¡è¯·æ±æå®åèæ°çå¤çæ¶é´ã\n"
@@ -1388,102 +1389,92 @@ msgstr ""
"Linked with libpulse %s\n"
#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
-#, fuzzy, c-format
+#, c-format
msgid "Invalid client name '%s'"
-msgstr "æ æçééæ å°æè¿°'%s'\n"
+msgstr "æ æ客æ·ç«¯å称 '%s'"
#: ../src/utils/pacat.c:779
-#, fuzzy, c-format
+#, c-format
msgid "Invalid stream name '%s'"
-msgstr "æ æçééæ ·æ¹æ³'%s'ã"
+msgstr "æ ææµå称 '%s'"
#: ../src/utils/pacat.c:816
-#, fuzzy, c-format
+#, c-format
msgid "Invalid channel map '%s'"
-msgstr "æ æçééæ å°æè¿°'%s'\n"
+msgstr "æ æééæ å° '%s'"
#: ../src/utils/pacat.c:845
-#, fuzzy, c-format
+#, c-format
msgid "Invalid latency specification '%s'"
-msgstr "æ æç延è¿è§æ ¼æè¿° %s'\n"
+msgstr "æ æ延è¿è¯´æ %s'"
#: ../src/utils/pacat.c:852
-#, fuzzy, c-format
+#, c-format
msgid "Invalid process time specification '%s'"
-msgstr "æ æçå¤çæ¶é´æè¿° '%s'\n"
+msgstr "æ æå¤çæ¶é´è¯´æ '%s'"
#: ../src/utils/pacat.c:864
-#, fuzzy, c-format
+#, c-format
msgid "Invalid property '%s'"
-msgstr "æ æçééæ ·æ¹æ³'%s'ã"
+msgstr "æ ææ§è½ '%s'"
#: ../src/utils/pacat.c:881
#, c-format
msgid "Unknown file format %s."
-msgstr ""
+msgstr "æªç¥æä»¶æ ¼å¼ %sã"
#: ../src/utils/pacat.c:900
-#, fuzzy
msgid "Invalid sample specification"
-msgstr "æ æçéæ ·æè¿°\n"
+msgstr "æ æéæ ·è¯´æ"
#: ../src/utils/pacat.c:910
-#, fuzzy, c-format
+#, c-format
msgid "open(): %s"
-msgstr "open()ï¼%s\n"
+msgstr "open(): %s"
#: ../src/utils/pacat.c:915
-#, fuzzy, c-format
+#, c-format
msgid "dup2(): %s"
-msgstr "dup2()ï¼%s\n"
+msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
-#, fuzzy
msgid "Too many arguments."
-msgstr "åæ°è¿å¤ã\n"
+msgstr "åæ°è¿å¤ã"
#: ../src/utils/pacat.c:933
-#, fuzzy
msgid "Failed to generate sample specification for file."
-msgstr "è·åéæ ·ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "为æ件è·åéæ ·è¯´æ失败ã"
#: ../src/utils/pacat.c:953
-#, fuzzy
msgid "Failed to open audio file."
-msgstr "æå¼å£°é³æ件失败ã\n"
+msgstr "æå¼å£°é³æ件失败ã"
#: ../src/utils/pacat.c:959
-#, fuzzy
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr "以éæ ·è§æ ¼'%s'æå¼%sæµã\n"
+msgstr "è¦åï¼æå®çéæ ·è¯´æå°è¦çæ件ä¸ç说æã"
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
-#, fuzzy
msgid "Failed to determine sample specification from file."
-msgstr "è·åéæ ·ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "ä»æ件ä¸ç¡®å®éæ ·è¯´æ失败ã"
#: ../src/utils/pacat.c:971
-#, fuzzy
msgid "Warning: Failed to determine channel map from file."
-msgstr "以éæ ·è§æ ¼'%s'æå¼%sæµã\n"
+msgstr "è¦åï¼ä»æ件ä¸ç¡®å®ééæ å°å¤±è´¥ã"
#: ../src/utils/pacat.c:982
-#, fuzzy
msgid "Channel map doesn't match sample specification"
-msgstr "ééæ å°ä¸éæ ·æè¿°ä¸å¹é
\n"
+msgstr "ééæ å°ä¸éæ ·è¯´æä¸å¹é
"
#: ../src/utils/pacat.c:993
-#, fuzzy
msgid "Warning: failed to write channel map to file."
-msgstr "以éæ ·è§æ ¼'%s'æå¼%sæµã\n"
+msgstr "è¦åï¼å¨æ件ä¸åå
¥ééæ å°å¤±è´¥ã"
#: ../src/utils/pacat.c:1008
-#, fuzzy, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "以éæ ·è§æ ¼'%s'æå¼%sæµã\n"
+#, c-format
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr "使ç¨éæ ·è¯´æ '%s' åééæ å° '%s' æå¼ %s æµã"
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1494,19 +1485,16 @@ msgid "playback"
msgstr "åæ¾"
#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
-#, fuzzy
msgid "pa_mainloop_new() failed."
-msgstr "pa_mainloop_new()失败ã\n"
+msgstr "pa_mainloop_new() failed."
#: ../src/utils/pacat.c:1054
-#, fuzzy
msgid "io_new() failed."
-msgstr "io_new()失败ã\n"
+msgstr "io_new() failed."
#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
-#, fuzzy
msgid "pa_context_new() failed."
-msgstr "pa_context_new()失败ã\n"
+msgstr "pa_context_new() failed."
#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
#, c-format
@@ -1514,14 +1502,12 @@ msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect()失败ï¼%s"
#: ../src/utils/pacat.c:1075
-#, fuzzy
msgid "pa_context_rttime_new() failed."
-msgstr "pa_context_new()失败ã\n"
+msgstr "pa_context_rttime_new() failed."
#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
-#, fuzzy
msgid "pa_mainloop_run() failed."
-msgstr "pa_mainloop_run()失败ã\n"
+msgstr "pa_mainloop_run() failed."
#: ../src/utils/pasuspender.c:81
#, c-format
@@ -1608,9 +1594,9 @@ msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run()失败ã\n"
#: ../src/utils/pactl.c:135
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get statistics: %s"
-msgstr "è·åç»è®¡æ°æ®å¤±è´¥ï¼%s\n"
+msgstr "è·åç»è®¡æ°æ®å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1628,9 +1614,9 @@ msgid "Sample cache size: %s\n"
msgstr "éæ ·ç¼å大å°ï¼%s\n"
#: ../src/utils/pactl.c:156
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get server information: %s"
-msgstr "è·åæå¡å¨ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·åæå¡å¨ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1656,9 +1642,9 @@ msgstr ""
"Cookieï¼%08x\n"
#: ../src/utils/pactl.c:205
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink information: %s"
-msgstr "è·åé³é¢åºå£ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·åé³é¢åºå£ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1700,19 +1686,19 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
-#, fuzzy, c-format
+#, c-format
msgid "\tPorts:\n"
-msgstr "\tProfiles:\n"
+msgstr "\tPorts:\n"
#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
-#, fuzzy, c-format
+#, c-format
msgid "\tActive Port: %s\n"
-msgstr "\tActive Profile: %s\n"
+msgstr "\tActive Port: %s\n"
#: ../src/utils/pactl.c:297
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source information: %s"
-msgstr "è·åé³é¢å
¥å£ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·åé³é¢å
¥å£ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1762,9 +1748,9 @@ msgid "n/a"
msgstr "n/a"
#: ../src/utils/pactl.c:375
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get module information: %s"
-msgstr "è·å模åä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·å模åä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1784,9 +1770,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:412
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get client information: %s"
-msgstr "è·å客æ·ç«¯ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·å客æ·ç«¯ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1804,9 +1790,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:447
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get card information: %s"
-msgstr "è·å声å¡ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·å声å¡ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1836,9 +1822,9 @@ msgid "\tActive Profile: %s\n"
msgstr "\tActive Profile: %s\n"
#: ../src/utils/pactl.c:496
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "è·åé³é¢åºå£è¾å
¥ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·åé³é¢åºå£è¾å
¥ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1878,9 +1864,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:554
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source output information: %s"
-msgstr "è·åé³é¢å
¥å£è¾åºä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·åé³é¢å
¥å£è¾åºä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1912,9 +1898,9 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:605
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sample information: %s"
-msgstr "è·åéæ ·ä¿¡æ¯å¤±è´¥ï¼%s\n"
+msgstr "è·åéæ ·ä¿¡æ¯å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1948,27 +1934,25 @@ msgstr ""
"\t\t%s\n"
#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#, c-format
msgid "Failure: %s"
-msgstr "失败ï¼%s\n"
+msgstr "失败ï¼%s"
#: ../src/utils/pactl.c:687
-#, fuzzy, c-format
+#, c-format
msgid "Failed to upload sample: %s"
-msgstr "ä¸ä¼ éæ ·å¤±è´¥ï¼%s\n"
+msgstr "ä¸ä¼ éæ ·å¤±è´¥ï¼%s"
#: ../src/utils/pactl.c:704
-#, fuzzy
msgid "Premature end of file"
-msgstr "æ件è¿æ©ç»æ\n"
+msgstr "æ件è¿æ©ç»æ"
#: ../src/utils/pactl.c:863
-#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr "æ¶å°SIGINTï¼æ£å¨éåºã\n"
+msgstr "æ¶å° SIGINTï¼æ£å¨éåºã"
#: ../src/utils/pactl.c:869
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2006,13 +1990,21 @@ msgstr ""
"%s [options] upload-sample FILENAME [NAME]\n"
"%s [options] play-sample NAME [SINK]\n"
"%s [options] remove-sample NAME\n"
-"%s [options] move-sink-input ID SINK\n"
-"%s [options] move-source-output ID SOURCE\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
"%s [options] load-module NAME [ARGS ...]\n"
-"%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"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2034,128 +2026,104 @@ msgstr ""
"Linked with libpulse %s\n"
#: ../src/utils/pactl.c:979
-#, fuzzy
msgid "Please specify a sample file to load"
-msgstr "请æå®è¦å è½½çéæ ·æ件\n"
+msgstr "请æå®è¦å è½½çéæ ·æ件"
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "æå¼å£°é³æ件失败ã\n"
+msgstr "æå¼å£°é³æ件失败ã"
#: ../src/utils/pactl.c:1004
-#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
-msgstr "以éæ ·è§æ ¼'%s'æå¼%sæµã\n"
+msgstr "è¦åï¼ä»æ件ä¸ç¡®å®éæ ·è¯´æ失败ã"
#: ../src/utils/pactl.c:1014
-#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr "ä½ å¿
é¡»æå®è¦ææ¾çéæ ·å\n"
+msgstr "æ¨å¿
é¡»æå®è¦ææ¾çéæ ·å"
#: ../src/utils/pactl.c:1026
-#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr "ä½ å¿
é¡»æå®è¦å é¤çéæ ·å\n"
+msgstr "æ¨å¿
é¡»æå®è¦å é¤çéæ ·å"
#: ../src/utils/pactl.c:1035
-#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr "ä½ å¿
é¡»æå®é³é¢åºå£ç´¢å¼åé³é¢åºå£\n"
+msgstr "æ¨å¿
é¡»æå®æ¼è¾å
¥ç´¢å¼åæ¼"
#: ../src/utils/pactl.c:1045
-#, fuzzy
msgid "You have to specify a source output index and a source"
-msgstr "ä½ å¿
é¡»æå®é³é¢å
¥å£è¾åºç´¢å¼åé³é¢å
¥å£\n"
+msgstr "æ¨å¿
é¡»æå®æºè¾åºç´¢å¼åæº"
#: ../src/utils/pactl.c:1060
-#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr "å¿
é¡»æå®æ¨¡ååååæ°ã\n"
+msgstr "å¿
é¡»æå®æ¨¡ååååæ°ã"
#: ../src/utils/pactl.c:1080
-#, fuzzy
msgid "You have to specify a module index"
-msgstr "å¿
é¡»æå®æ¨¡åç´¢å¼\n"
+msgstr "å¿
é¡»æå®æ¨¡åç´¢å¼"
#: ../src/utils/pactl.c:1090
-#, fuzzy
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr "ä¸å¯æå®å¤ä¸ªé³é¢åºå£ãå¿
é¡»æå®ä¸ä¸ªå¸å°å¼ã\n"
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "ä¸å¯æå®å¤ä¸ªæ¼ãå¿
é¡»æå®ä¸ä¸ªå¸å°å¼ã"
#: ../src/utils/pactl.c:1103
-#, fuzzy
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "ä¸å¯æå®å¤ä¸ªæºãå¿
é¡»æå®ä¸ä¸ªå¸å°å¼ã\n"
+msgstr "ä¸å¯æå®å¤ä¸ªæºãå¿
é¡»æå®ä¸ä¸ªå¸å°å¼ã"
#: ../src/utils/pactl.c:1115
-#, fuzzy
msgid "You have to specify a card name/index and a profile name"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称"
#: ../src/utils/pactl.c:1126
-#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®æ¼å称/ç´¢å¼å端å£å称"
#: ../src/utils/pactl.c:1137
-#, fuzzy
msgid "You have to specify a source name/index and a port name"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®æºå称/ç´¢å¼å端å£å称"
#: ../src/utils/pactl.c:1149
-#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®æ¼å称/ç´¢å¼åå·"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
-#, fuzzy
msgid "Invalid volume specification"
-msgstr "æ æçéæ ·æè¿°\n"
+msgstr "æ æéæ ·è¯´æ"
#: ../src/utils/pactl.c:1166
-#, fuzzy
msgid "You have to specify a source name/index and a volume"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®æºå称/ç´¢å¼åå·"
#: ../src/utils/pactl.c:1183
-#, fuzzy
msgid "You have to specify a sink input index and a volume"
-msgstr "ä½ å¿
é¡»æå®é³é¢åºå£ç´¢å¼åé³é¢åºå£\n"
+msgstr "æ¨å¿
é¡»æå®æ¼è¾å
¥ç´¢å¼åå·"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr ""
+msgstr "æ æé²è¾å
¥ç´¢å¼"
#: ../src/utils/pactl.c:1204
-#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®æ¼å称/ç´¢å¼åéé³å¸å°å¼"
#: ../src/utils/pactl.c:1221
-#, fuzzy
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "ä½ å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称\n"
+msgstr "æ¨å¿
é¡»æå®æºå称/ç´¢å¼åéé³å¸å°å¼"
#: ../src/utils/pactl.c:1238
-#, fuzzy
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "ä½ å¿
é¡»æå®é³é¢åºå£ç´¢å¼åé³é¢åºå£\n"
+msgstr "æ¨å¿
é¡»æå®é²è¾å
¥ç´¢å¼åéé³å¸å°å¼"
#: ../src/utils/pactl.c:1243
-#, fuzzy
msgid "Invalid sink input index specification"
-msgstr "æ æçéæ ·æè¿°\n"
+msgstr "æ ææ¼è¾å
¥ç´¢å¼è¯´æ"
#: ../src/utils/pactl.c:1262
-#, fuzzy
msgid "No valid command specified."
-msgstr "æªæå®ææçå½ä»¤ã\n"
+msgstr "æªæå®ææçå½ä»¤ã"
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2237,7 +2205,7 @@ msgstr "å°æªå®ç°ã\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
+msgstr "没æ PulseAudio å®æ¤è¿ç¨å¨è¿è¡ï¼æè
没æä½ä¸ºä¼è¯å®æ¤è¿ç¨è¿è¡ã"
#: ../src/utils/pacmd.c:74
#, c-format
@@ -2258,9 +2226,9 @@ msgid "Daemon not responding."
msgstr "åå°ç¨åºæªååºã"
#: ../src/utils/pacmd.c:161
-#, fuzzy, c-format
+#, c-format
msgid "poll(): %s"
-msgstr "fork()ï¼%s"
+msgstr "poll(): %s"
#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
#, c-format
@@ -2319,9 +2287,8 @@ msgid "High Fidelity Playback (A2DP)"
msgstr "é«ä¿çåæ¾ï¼A2DPï¼"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
-#, fuzzy
msgid "High Fidelity Capture (A2DP)"
-msgstr "é«ä¿çåæ¾ï¼A2DPï¼"
+msgstr "é«ä¿çééï¼A2DPï¼"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
@@ -2334,133 +2301,122 @@ msgstr "PulseAudio 声é³æå¡å¨"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "è¾åºè®¾å¤"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "è¾å
¥ %s"
+msgstr "è¾å
¥è®¾å¤"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ ä¸çé³é¢"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "è¾å
¥ %s"
+msgstr "è¾å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "æ©å±åè¾å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "æ©å±å麦å
é£"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Line-In"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "麦å
é£"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "å¤é¨éº¦å
é£"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "å
é¨é³é¢"
+msgstr "å
é¨éº¦å
é£"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "æ 线çµ"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "è§é¢"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "èªå¨å¢çæ§å¶"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "æ èªå¨å¢çæ§å¶"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "å éå¨"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "æ å éå¨"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "åè¡¡å¨"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "æ åè¡¡å¨"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "模æå声é"
+msgstr "模æè¾å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "模æå声é"
+msgstr "模æ麦å
é£"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "模æå声é"
+msgstr "模æ Line-In"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "模æå声é"
+msgstr "模ææ 线çµ"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "模æç«ä½å£°"
+msgstr "模æè§é¢"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "è¾åº %s"
+msgstr "模æè¾åº "
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "模æå声é"
+msgstr "模æè³æº"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "模æè¾åºï¼LFEï¼"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "模æå声é"
+msgstr "模æå声éè¾åº"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
-msgstr ""
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
-msgstr ""
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2471,19 +2427,16 @@ msgid "Analog Stereo"
msgstr "模æç«ä½å£°"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "模æç¯ç» 4.1"
+msgstr "模æç¯ç» 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "模æç¯ç» 4.0"
+msgstr "模æç¯ç» 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "模æç¯ç» 4.1"
+msgstr "模æç¯ç» 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2502,19 +2455,16 @@ msgid "Analog Surround 5.1"
msgstr "模æç¯ç» 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "模æç¯ç» 4.0"
+msgstr "模æç¯ç» 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "模æç¯ç» 4.1"
+msgstr "模æç¯ç» 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "模æç¯ç» 4.0"
+msgstr "模æç¯ç» 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2525,9 +2475,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "æ°åç«ä½å£°ï¼IEC958ï¼"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "æ°åç¯ç» 4.0ï¼IEC958/AC3ï¼"
+msgstr "æ°åç¯ç» 4.0ï¼IEC958ï¼"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2542,214 +2491,14 @@ msgid "Digital Stereo (HDMI)"
msgstr "æ°åç«ä½å£°ï¼HDMIï¼"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "模æå声é"
+msgstr "模æå声éåå·¥"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "模æç«ä½å£°"
+msgstr "模æç«ä½å£°åå·¥"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "æ°åç«ä½å£°ï¼IEC958ï¼"
-
-#, fuzzy
-#~ msgid "Invalid client name '%s'\n"
-#~ msgstr "æ æçééæ å°æè¿°'%s'\n"
-
-#, fuzzy
-#~ msgid "Failed to determine sample specification from file.\n"
-#~ msgstr "è·åéæ ·ä¿¡æ¯å¤±è´¥ï¼%s\n"
-
-#~ msgid "select(): %s"
-#~ msgstr "select()ï¼%s"
-
-#~ msgid "Cannot connect to system bus: %s"
-#~ msgstr "æ æ³è¿æ¥å°ç³»ç»æ»çº¿ï¼%s"
-
-#~ msgid "Cannot get caller from PID: %s"
-#~ msgstr "æ æ³ä»PIDè·åè°ç¨è
ï¼%s"
-
-#~ msgid "Cannot set UID on caller object."
-#~ msgstr "æ æ³ä¸ºè°ç¨è
设å®UIDã"
-
-#~ msgid "Failed to get CK session."
-#~ msgstr "è·åCKä¼è¯å¤±è´¥ã"
-
-#~ msgid "Cannot set UID on session object."
-#~ msgstr "æ æ³ä¸ºä¼è¯å¯¹è±¡è®¾å®UIDã"
-
-#~ msgid "Cannot allocate PolKitAction."
-#~ msgstr "ä¸è½åé
PolKitActionã"
-
-#~ msgid "Cannot set action_id"
-#~ msgstr "æ æ³è®¾å®action_id"
-
-#~ msgid "Cannot allocate PolKitContext."
-#~ msgstr "æ æ³åé
PolKitContextã"
-
-#~ msgid "Cannot initialize PolKitContext: %s"
-#~ msgstr "æ æ³å使åPolKitContext: %s"
-
-#~ msgid "Could not determine whether caller is authorized: %s"
-#~ msgstr "æ æ³å¤æè°ç¨è
æ¯å¦å·²è·å¾ææ: %s"
-
-#~ msgid "Cannot obtain auth: %s"
-#~ msgstr "æ æ³è·åææ: %s"
-
-#~ msgid "PolicyKit responded with '%s'"
-#~ msgstr "PolicyKitåå¤'%s'"
-
-#~ msgid ""
-#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
-#~ "daemon"
-#~ msgstr "PulseAudio å®æ¤è¿ç¨çé«ä¼å
è°åº¦ï¼è´ç Unix nic ç级ï¼"
-
-#~ msgid "Real-time scheduling for the PulseAudio daemon"
-#~ msgstr "PulseAudio å®æ¤è¿ç¨çå®æ¶è°åº¦ã"
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr "ç³»ç»çç¥é²æ¢ PulseAudio è·å¾é«ä¼å
è°åº¦ã"
+msgstr "æ°åç«ä½å£°åå·¥ï¼IEC958ï¼"
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr "ç³»ç»çç¥é²æ¢ PulseAudio è·å¾å®æ¶è°åº¦ã"
-
-#~ msgid "read() failed: %s\n"
-#~ msgstr "read()失败ï¼%s\n"
-
-#, fuzzy
-#~ msgid "pa_context_connect() failed: %s\n"
-#~ msgstr "pa_context_connect()失败ï¼%s"
-
-#~ msgid "We're in the group '%s', allowing high-priority scheduling."
-#~ msgstr "æ们å¨'%s'ç»ä¸ï¼å
许é«ä¼å
级è°åº¦ã"
-
-#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr "æ们å¨'%s'ç»ä¸ï¼å
许å®æ¶è°åº¦ã"
-
-#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr "PolicyKitæäºæ们âè·åé«ä¼å
级âæéã"
-
-#~ msgid "PolicyKit refuses acquire-high-priority privilege."
-#~ msgstr "PolicyKitæç»âè·åé«ä¼å
级âæéã"
-
-#~ msgid "PolicyKit grants us acquire-real-time privilege."
-#~ msgstr "PolicyKitæäºæ们âè·åå®æ¶âæéã"
-
-#~ msgid "PolicyKit refuses acquire-real-time privilege."
-#~ msgstr "PolicyKitæç»æ们âè·åå®æ¶âæéã"
-
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
-#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
-#~ "limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
-#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-#~ msgstr ""
-#~ "é
ç½®ä¸éè¦è°ç¨ SUID rootãå®æ¶å/æè
é«ä¼å
è°åº¦ãä½æ¯æ们缺å°å¿
è¦çç¹"
-#~ "æï¼\n"
-#~ "æ们ä¸å±äºç»ç¾¤ '%s'ï¼PolicyKit æç»èµäºæ们è¦æ±çç¹æï¼èæ们æ æ³å¢å "
-#~ "RLIMIT_NICE/RLIMIT_RTPRIO èµæºéå¶ã\n"
-#~ "è¦å¯ç¨å®æ¶/é«ä¼å
è°åº¦ï¼è¯·è·å¾éå½ç PolicyKit ç¹æï¼æè
æ为 '%s' æåï¼ä¹"
-#~ "å¯ä»¥ä¸ºè¿ä¸ªç¨æ·å¢å RLIMIT_NICE/RLIMIT_RTPRIO èµæºéå¶ã"
-
-#~ msgid ""
-#~ "High-priority scheduling enabled in configuration but not allowed by "
-#~ "policy."
-#~ msgstr "é
ç½®ä¸å·²å¯ç¨é«ä¼å
级è°åº¦ï¼ä½çç¥æªå
许ã"
-
-#~ msgid "Successfully increased RLIMIT_RTPRIO"
-#~ msgstr "æé«RLIMIT_RTPRIOæåã"
-
-#~ msgid "RLIMIT_RTPRIO failed: %s"
-#~ msgstr "RLIMIT_RTPRIO失败ï¼%s"
-
-#~ msgid "Giving up CAP_NICE"
-#~ msgstr "æ£å¨æ¾å¼CAP_NICE"
-
-#~ msgid ""
-#~ "Real-time scheduling enabled in configuration but not allowed by policy."
-#~ msgstr "é
ç½®ä¸å·²å¯ç¨å®æ¶è°åº¦ï¼ä½çç¥æªå
许ã"
-
-#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
-#~ msgstr "æ§è½æåéå¶å°CAP_SYS_NICEã"
-
-#~ msgid "time_new() failed.\n"
-#~ msgstr "time_new()失败ã\n"
-
-#~ msgid "Output %s + Input %s"
-#~ msgstr "è¾åº %s + è¾å
¥ %s"
-
-#~ msgid "Stream successfully created\n"
-#~ msgstr "æåå建æµ\n"
-
-#~ msgid "Stream errror: %s\n"
-#~ msgstr "æµé误ï¼%s\n"
-
-#~ msgid "Connection established.\n"
-#~ msgstr "è¿æ¥å·²å»ºç«ã\n"
-
-#~ msgid ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ " -h, --help Show this help\n"
-#~ " --version Show version\n"
-#~ "\n"
-#~ " -v, --verbose Enable verbose operation\n"
-#~ "\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"
-#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
-#~ msgstr ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ " -h, --help æ¾ç¤ºæ¤å¸®å©\n"
-#~ " --version æ¾ç¤ºçæ¬\n"
-#~ "\n"
-#~ " -v, --verbose å¯ç¨è¯¦è¿°æä½\n"
-#~ "\n"
-#~ " -s, --server=SERVER è¦è¿æ¥çæå¡å¨å\n"
-#~ " -d, --device=DEVICE è¦è¿æ¥çé³é¢åºå£å\n"
-#~ " -n, --client-name=NAME æ¤å®¢æ·ç«¯å¨æå¡å¨ä¸çå称\n"
-#~ " --stream-name=NAME æ¤æµå¨æå¡å¨ä¸çå称\n"
-#~ " --volume=VOLUME æå®åå§ï¼çº¿æ§ï¼é³éï¼åå¼å¨"
-#~ "0...65536ä¹é´\n"
-#~ " --channel-map=CHANNELMAP 设å®ä½¿ç¨çééæ å°è¡¨\n"
-
-#~ msgid ""
-#~ "paplay %s\n"
-#~ "Compiled with libpulse %s\n"
-#~ "Linked with libpulse %s\n"
-#~ msgstr ""
-#~ "paplay %s\n"
-#~ "Compiled with libpulse %s\n"
-#~ "Linked with libpulse %s\n"
-
-#~ msgid "Invalid channel map\n"
-#~ msgstr "æ æçééæ å°è¡¨\n"
-
-#~ msgid "Failed to open file '%s'\n"
-#~ msgstr "æå¼æ件'%s'失败\n"
-
-#~ msgid "Channel map doesn't match file.\n"
-#~ msgstr "ééæ å°è¡¨ä¸æ件ä¸å¹é
ã\n"
-
-#~ msgid "Using sample spec '%s'\n"
-#~ msgstr "æ£å¨ä½¿ç¨éæ ·è§æ ¼'%s'\n"
commit da2da7a982079771451fcf34500e9979e3e4f5a2
Author: anipeter <anipeter at fedoraproject.org>
Date: Wed Dec 9 07:17:01 2009 +0000
Sending translation for Malayalam
diff --git a/po/ml.po b/po/ml.po
index 4a5cbf9..c8c557d 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.ml\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-21 20:54+0530\n"
+"POT-Creation-Date: 2009-12-08 08:37+0000\n"
+"PO-Revision-Date: 2009-12-09 12:18+0530\n"
"Last-Translator: \n"
"Language-Team: <en at li.org>\n"
"MIME-Version: 1.0\n"
@@ -216,8 +216,7 @@ msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
-"സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, à´ªà´àµà´·àµ --disallow-module-loading à´¸à´àµà´à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²!"
+msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, à´ªà´àµà´·àµ --disallow-module-loading à´¸à´àµà´à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
@@ -225,8 +224,7 @@ msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr ""
-"സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, നിരàµâബനàµà´§à´®à´¾à´¯àµà´ à´à´àµà´¸à´¿à´±àµà´±àµ à´à´¡à´¿à´²àµâ സമയഠപàµà´°à´µà´°àµâà´¤àµà´¤ രഹിതമാà´àµà´àµà´¨àµà´¨àµ!"
+msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, നിരàµâബനàµà´§à´®à´¾à´¯àµà´ à´à´àµà´¸à´¿à´±àµà´±àµ à´à´¡à´¿à´²àµâ സമയഠപàµà´°à´µà´°àµâà´¤àµà´¤ രഹിതമാà´àµà´àµà´¨àµà´¨àµ!"
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
@@ -1498,8 +1496,7 @@ msgstr "à´âഡിയൠഫയലàµâ à´¤àµà´±à´àµà´àµà´¨àµà´¨à´¤à´¿
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr ""
-"à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµâ നിനàµà´¨àµà´³àµà´³ വിവരണഠവàµà´¯à´àµà´¤à´®à´¾à´àµà´à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨ സാà´à´ªà´¿à´³àµâ വിവരണഠമാറàµà´±à´¿à´¯àµà´´àµà´¤àµà´¨àµà´¨àµ."
+msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµâ നിനàµà´¨àµà´³àµà´³ വിവരണഠവàµà´¯à´àµà´¤à´®à´¾à´àµà´à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨ സാà´à´ªà´¿à´³àµâ വിവരണഠമാറàµà´±à´¿à´¯àµà´´àµà´¤àµà´¨àµà´¨àµ."
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
@@ -1519,8 +1516,7 @@ msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµà´àµà´
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "%s à´¸àµà´àµà´°àµà´ à´¤àµà´±à´àµà´àµà´¨àµà´¨àµ. à´à´¤à´¿à´¨àµà´±àµ സാà´à´ªà´¿à´³àµâ വിവരണഠ'%s'-à´à´ à´à´¾à´¨à´²àµâ മാപàµà´ªàµ '%s'-à´à´ à´à´£àµàµ."
#: ../src/utils/pacat.c:1009
@@ -2110,17 +2106,14 @@ msgid "You have to specify a module index"
msgstr "à´à´°àµ à´®àµà´¡àµà´¯àµà´³àµâ à´à´¨àµâà´¡à´àµà´¸àµ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"à´à´°àµ സിà´àµà´à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "à´à´°àµ സിà´àµà´à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"à´à´°àµ à´¸àµà´´àµà´¸à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
+msgstr "à´à´°àµ à´¸àµà´´àµà´¸à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2353,217 +2346,204 @@ msgstr "പളàµâà´¸àµà´à´¡à´¿à´¯àµ à´¸àµà´£àµà´àµ സരàµâവര
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à´à´àµà´àµà´ªàµà´àµà´àµ à´¡à´¿à´µàµà´¸àµà´à´³àµâ"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à´à´¨àµâà´ªàµà´àµà´àµ à´¡à´¿à´µàµà´¸àµà´à´³àµâ"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME at -à´²àµà´³àµà´³ à´à´¡à´¿à´¯àµ"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à´à´¨àµâà´ªàµà´àµà´àµ"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "à´¡àµà´àµà´à´¿à´àµ à´¸àµà´±àµà´±àµà´·à´¨àµâ à´à´¨àµâà´ªàµà´àµà´àµ"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "à´¡àµà´àµà´à´¿à´àµ à´¸àµà´±àµà´±àµà´·à´¨àµâ à´®àµà´àµà´°àµà´«àµà´£àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "à´²àµà´¨àµâ-à´à´¨àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "à´®àµà´àµà´°àµà´«àµà´£àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "à´à´àµà´¸àµà´±àµà´±àµà´£à´²àµâ à´®àµà´àµà´°àµà´«àµà´£àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à´à´¨àµà´±àµà´°àµâണലàµâ à´à´¡à´¿à´¯àµ"
+msgstr "à´à´¨àµà´±àµà´£à´²àµâ à´®àµà´àµà´°àµà´«àµà´£àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "à´±àµà´¡à´¿à´¯àµ"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "à´µàµà´¡à´¿à´¯àµ"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "à´à´àµà´àµà´®à´¾à´±àµà´±à´¿à´àµ à´àµà´¯à´¿à´¨àµâ à´à´£àµà´àµà´°àµà´³àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "à´à´àµà´àµà´®à´¾à´±àµà´±à´¿à´àµ à´àµà´¯à´¿à´¨àµâ à´à´£àµà´àµà´°àµà´³àµâ à´²à´àµà´¯à´®à´²àµà´²"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "à´¬àµà´¸àµà´±àµà´±àµ"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "à´¬àµà´¸àµà´±àµà´±àµ à´²à´àµà´¯à´®à´²àµà´²"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à´à´à´ªàµà´²à´¿à´«à´¯à´°àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à´à´à´ªàµà´²à´¿à´«à´¯à´°àµâ à´²à´àµà´¯à´®à´²àµà´²"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´®àµà´àµà´°àµà´«àµà´£àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´²àµà´¨àµâ-à´à´¨àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´±àµà´¡à´¿à´¯àµ"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´µàµà´¡à´¿à´¯àµ"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "നളàµâ à´à´àµà´àµà´ªàµà´àµà´àµ"
+msgstr "à´
നലàµà´àµ à´à´àµà´àµà´ªàµà´àµà´àµ"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´¹àµà´¡àµà´«àµà´£àµà´à´³àµâ"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´à´àµà´àµà´ªàµà´àµà´àµ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´®àµà´£àµ à´à´àµà´àµà´ªàµà´àµà´àµ"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´®àµà´£àµ"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ"
+msgstr "à´
നലàµà´àµ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "സറàµà´£àµà´àµ 4.1"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "സറàµà´£àµà´àµ 4.0"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "സറàµà´£àµà´àµ 4.1"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "സറàµà´£àµà´àµ 4.0"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "സറàµà´£àµà´àµ 4.1"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "സറàµà´£àµà´àµ 5.0"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "സറàµà´£àµà´àµ 5.1"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "സറàµà´£àµà´àµ 4.0"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "സറàµà´£àµà´àµ 4.1"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "സറàµà´£àµà´àµ 4.0"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "സറàµà´£àµà´àµ 7.1"
+msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ (IEC958) "
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ സറàµà´£àµà´àµ 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ സറàµà´£àµà´àµ 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ സറàµà´£àµà´àµ 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´®àµà´£àµ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à´
നലàµà´àµ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ (IEC958)"
+
commit ef05cf75d1ce12d10390c14497dc3d048e9a92c4
Author: khasida <khasida at fedoraproject.org>
Date: Wed Dec 9 09:23:46 2009 +0000
Sending translation for Japanese
diff --git a/po/ja.po b/po/ja.po
index bd6f8c2..179aeac 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-12-08 02:51+0000\n"
-"PO-Revision-Date: 2009-12-08 17:48+0900\n"
+"PO-Revision-Date: 2009-12-09 18:20+0900\n"
"Last-Translator: Kiyoto Hashida <khashida at redhat.com>\n"
"Language-Team: Japanese <jp at li.org>\n"
"MIME-Version: 1.0\n"
@@ -241,122 +241,122 @@ msgstr "stdio ã®åå¾ã«å¤±æãã¾ããã"
#: ../src/daemon/main.c:627
#, c-format
msgid "pipe failed: %s"
-msgstr ""
+msgstr "ãã¤ãã¯å¤±æ: %s"
#: ../src/daemon/main.c:632
#, c-format
msgid "fork() failed: %s"
-msgstr ""
+msgstr "fork() ã¯å¤±æ: %s"
#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
#, c-format
msgid "read() failed: %s"
-msgstr ""
+msgstr "read() ã¯å¤±æ: %s"
#: ../src/daemon/main.c:652
msgid "Daemon startup failed."
-msgstr ""
+msgstr "ãã¼ã¢ã³éå§ã«å¤±æãã¾ããã"
#: ../src/daemon/main.c:654
msgid "Daemon startup successful."
-msgstr ""
+msgstr "ãã¼ã¢ã³ãæ£å¸¸ã«éå§ãã¾ããã"
#: ../src/daemon/main.c:731
#, c-format
msgid "This is PulseAudio %s"
-msgstr ""
+msgstr "ãã㯠PulseAudio %s ã§ãã"
#: ../src/daemon/main.c:732
#, c-format
msgid "Compilation host: %s"
-msgstr ""
+msgstr "ã³ã³ãã¤ã«ãã¹ã: %s"
#: ../src/daemon/main.c:733
#, c-format
msgid "Compilation CFLAGS: %s"
-msgstr ""
+msgstr "ã³ã³ãã¤ã« CFLAGS: %s"
#: ../src/daemon/main.c:736
#, c-format
msgid "Running on host: %s"
-msgstr ""
+msgstr "ãã¹ãä¸ã§å®è¡ä¸: %s"
#: ../src/daemon/main.c:739
#, c-format
msgid "Found %u CPUs."
-msgstr ""
+msgstr "%u CPU ãè¦ã¤ãã¾ããã"
#: ../src/daemon/main.c:741
#, c-format
msgid "Page size is %lu bytes"
-msgstr ""
+msgstr "ãã¼ã¸ãµã¤ãºã¯ %lu ãã¤ãã§ã"
#: ../src/daemon/main.c:744
msgid "Compiled with Valgrind support: yes"
-msgstr ""
+msgstr "Valgrind ãµãã¼ãã§ã®ã³ã³ãã¤ã«: ã¯ã"
#: ../src/daemon/main.c:746
msgid "Compiled with Valgrind support: no"
-msgstr ""
+msgstr "Valgrind ãµãã¼ãã§ã®ã³ã³ãã¤ã«: ããã"
#: ../src/daemon/main.c:749
#, c-format
msgid "Running in valgrind mode: %s"
-msgstr ""
+msgstr "valgrind ã¢ã¼ãã§å®è¡ä¸: %s"
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
-msgstr ""
+msgstr "æé©åãããã«ã: ã¯ã"
#: ../src/daemon/main.c:754
msgid "Optimized build: no"
-msgstr ""
+msgstr "æé©åãããã«ã: ããã"
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
-msgstr ""
+msgstr "NDEBUG ã¯å®ç¾©æ¸ã¿ã§ããã¢ãµã¼ã·ã§ã³ã¯å
¨ã¦ç¡å¹ã§ãã"
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
+msgstr "FASTPATH ã¯å®ç¾©æ¸ã¿ã§ãããã¡ã¼ã¹ããã¹ã¢ãµã¼ã·ã§ã³ã®ã¿ãç¡å¹ã§ãã"
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
-msgstr ""
+msgstr "ã¢ãµã¼ã·ã§ã³ã¯å
¨ã¦æå¹ã§ãã"
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
-msgstr ""
+msgstr "ãã·ã³ ID ã®åå¾ã«å¤±æ"
#: ../src/daemon/main.c:769
#, c-format
msgid "Machine ID is %s."
-msgstr ""
+msgstr "ãã·ã³ ID 㯠%s"
#: ../src/daemon/main.c:773
#, c-format
msgid "Session ID is %s."
-msgstr ""
+msgstr "ã»ãã·ã§ã³ ID 㯠%s"
#: ../src/daemon/main.c:779
#, c-format
msgid "Using runtime directory %s."
-msgstr ""
+msgstr "ã©ã³ã¿ã¤ã ãã£ã¬ã¯ã㪠%s ãä½¿ç¨ "
#: ../src/daemon/main.c:784
#, c-format
msgid "Using state directory %s."
-msgstr ""
+msgstr "ç¶æ
ãã£ã¬ã¯ã㪠%s ã使ç¨"
#: ../src/daemon/main.c:787
#, c-format
msgid "Using modules directory %s."
-msgstr ""
+msgstr "ã¢ã¸ã¥ã¼ã«ãã£ã¬ã¯ã㪠%s ã使ç¨"
#: ../src/daemon/main.c:789
#, c-format
msgid "Running in system mode: %s"
-msgstr ""
+msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸: %s"
#: ../src/daemon/main.c:792
msgid ""
@@ -367,44 +367,52 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
+"ããããã¨ãã¦ã¼ã¶ã¼ã¯ã·ã¹ãã ã¢ã¼ã㧠PA ãå®è¡ãã¦ãã訳ã§ãããã®å ´åã "
+"å®éã«ã¯ãããã¹ãã§ãªããã¨ã«æ³¨æãã¦ä¸ããã\n"
+"ããã§ãå®è¡ããã®ã§ããããæå¾
ã©ããã«æ©è½ããªãã¦ã責任ã¯ã¦ã¼ã¶ã¼èªèº«ã« "
+"ããã¾ãã\n"
+"ã·ã¹ãã ã¢ã¼ãã®ä½¿ç¨ãé常ã¯è¯ããªãæ¹éã§ãããã¨ã®èª¬æã«ã¤ãã¦ã¯ã "
+"http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode ããèªã¿ä¸ããã"
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
-msgstr ""
+msgstr "pa_pid_file_create() ã¯å¤±æ"
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr ""
+msgstr "ææ°ã®é«è§£å度ã¿ã¤ãã¼ã使ç¨ã§ãã¾ã! 楽ããã§ä¸ãã!"
#: ../src/daemon/main.c:821
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
+"ãããããã¦ã¼ã¶ã¼ã®ã«ã¼ãã«ã¯ãã¡ã§ãã! ä»æ¥ã®ã·ã§ãã®ãè¦ãã¯é«è§£å度ã¿ã¤ãã¼ã "
+"æå¹ã«ãªã£ã¦ãã Linux ã§ã!"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
-msgstr ""
+msgstr "pa_core_new() ã¯å¤±æ"
#: ../src/daemon/main.c:904
msgid "Failed to initialize daemon."
-msgstr ""
+msgstr "ãã¼ã¢ã³ã®åæåã«å¤±æãã¾ããã"
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr ""
+msgstr "ãã¼ã¢ã³ã¯ã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ãªãã§éå§ãã¦ãããåä½ãæå¦ãã¦ãã¾ãã"
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
-msgstr ""
+msgstr "ãã¼ã¢ã³ã®éå§ãå®äºã§ãã"
#: ../src/daemon/main.c:932
msgid "Daemon shutdown initiated."
-msgstr ""
+msgstr "ãã¼ã¢ã³ã®ã·ã£ãããã¦ã³ãå§ã¾ãã¾ããã"
#: ../src/daemon/main.c:954
msgid "Daemon terminated."
-msgstr ""
+msgstr "ãã¼ã¢ã³ã¯åãæ¶ããã¾ããã"
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -479,760 +487,825 @@ msgid ""
"\n"
" -n Don't load default script file\n"
msgstr ""
+"%s [ãªãã·ã§ã³]\n"
+"\n"
+"ã³ãã³ã:\n"
+" -h, --help ãã®ãã«ãã表示\n"
+" --version ãã¼ã¸ã§ã³ã表示\n"
+" --dump-conf ããã©ã«ãè¨å®ããã³ã\n"
+" --dump-modules 使ç¨å¯è½ãªã¢ã¸ã¥ã¼ã«ä¸è¦§ããã³ã\n"
+" --dump-resample-methods 使ç¨å¯è½ãªåãµã³ãã«æ¹æ³ããã³ã\n"
+" --cleanup-shm å¤ãå
±æã¡ã¢ãªã¼ã»ã°ã¡ã³ããã¯ãªã¼ã³ã¢ãã \n"
+" --start å®è¡ãã¦ããªãå ´åããã¼ã¢ã³ãéå§ \n"
+" -k --kill å®è¡ä¸ã®ãã¼ã¢ã³ããã«\n"
+" --check å®è¡ä¸ã®ãã¼ã¢ã³ããã§ã㯠(éåºã³ã¼ããè¿ãã®ã¿)\n"
+"\n"
+"ãªãã·ã§ã³:\n"
+" --system[=BOOL] ã·ã¹ãã å
¨åã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦å®è¡\n"
+" -D, --daemonize[=BOOL] éå§å¾ãã¼ã¢ã³å\n"
+" --fail[=BOOL] éå§å¤±æãªãçµäº\n"
+" --high-priority[=BOOL] é«åº¦ãªãã¤ã¹ã¬ãã«ã®è¨å®ã試è¡\n"
+" (root ã¨ãã¦ã®ã¿å¯è½, SUID ã®æã"
+"åã¯\n"
+" ææ ¼ãã RLIMIT_NICE ã§)\n"
+" --realtime[=BOOL] ãªã¢ã«ã¿ã¤ã ã¹ã±ã¸ã¥ã¼ã«ãæå¹ã«ãã試è¡\n"
+" (root ã¨ãã¦ã®ã¿å¯è½, SUID ã®æã"
+"åã¯\n"
+" ææ ¼ãã RLIMIT_RTPRIO ã§)\n"
+" --disallow-module-loading[=BOOL] èµ·åå¾ã®ã¦ã¼ã¶ã¼è¦æ±ã®ã¢ã¸ã¥ã¼ã«ã® "
+"ãã¼ã/ã¢ã³ãã¼ãã 許å¯ããªã\n"
+"\n"
+" --disallow-exit[=BOOL] ã¦ã¼ã¶ã¼è¦æ±ã®éåºã許å¯ããªã\n"
+" --exit-idle-time=SECS éä¼æã¨æå®æéå¾ã«ãã¼ã¢ã³ãçµäº \n"
+"\n"
+" --module-idle-time=SECS éä¼æã¨æå®æéå¾ã«èªåãã¼ãã¢ã¸ã¥ã¼ã«ãã¢ã³ãã¼ã \n"
+"\n"
+" --scache-idle-time=SECS éä¼æã¨æå®æéå¾ã«èªåãã¼ããµã³ãã«ãã¢ã³ãã¼ã \n"
+"\n"
+" --log-level[=LEVEL] 詳細ã¬ãã«ãä¸ããããåã¯ã»ãã\n"
+" -v 詳細ã¬ãã«ãä¸ãã \n"
+"--log-target={auto,syslog,stderr} ãã°ã¿ã¼ã²ãããæå® \n"
+"--log-meta[=BOOL] ãã°ã¡ãã»ã¼ã¸å
ã«ã³ã¼ãã®å ´æãå«ã "
+"\n"
+" --log-time[=BOOL] ãã°ã¡ãã»ã¼ã¸å
ã«ã¿ã¤ã ã¹ã¿ã³ããå«ã\n "
+" --log-backtrace=FRAMES ãã°ã¡ãã»ã¼ã¸å
ã«ããã¯ãã¬ã¼ã¹ãå«ã\n"
+" -p, --dl-search-path=PATH åçå
±æãªãã¸ã§ã¯ã(plugins)ç¨ã«æ¤ç´¢ãã¹ãã»ãã\n"
+"\n"
+" --resample-method=METHOD æå®ããåãµã³ããªã³ã°æ¹æ³ã使ç¨\n"
+" (使ç¨å¯è½ãªå¤ã¯ --dump-resample-methods ã§\n"
+" åç
§)\n"
+" --use-pid-file[=BOOL] PID ãã¡ã¤ã«ãä½æ\n"
+" --no-cpu-limit[=BOOL] ãµãã¼ãå
ã®ãã©ãããã©ã¼ã ã« CPU\n"
+" ãã¼ããªããã¿ã¼ãã¤ã³ã¹ãã¼ã«ããªã\n"
+" --disable-shm[=BOOL] å
±æã¡ã¢ãªã¼ãµãã¼ããç¡å¹ã«ãã\n"
+"\n"
+"ã¹ã¿ã¼ãã¢ããã¹ã¯ãªãã:\n"
+" -L, --load=\"MODULE ARGUMENTS\" æå®ããå¼æ°ã§æå®ãããã©ã°ã¤ã³ã¢ã¸ã¥ã¼ã«ã "
+"ãã¼ã\n"
+"\n"
+" -F, --file=FILENAME æå®ããã¹ã¯ãªãããå®è¡\n"
+" -C ã¹ã¿ã¼ãã¢ããå¾ã«å®è¡ä¸ã® TTY ä¸ã§ã³ãã³ãã©ã¤ã³ã "
+"éã\n"
+"\n"
+" -n ããã©ã«ãã®ã¹ã¯ãªãããã¡ã¤ã«ããã¼ãããªã\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
-msgstr ""
+msgstr "--daemonize ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã"
#: ../src/daemon/cmdline.c:254
msgid "--fail expects boolean argument"
-msgstr ""
+msgstr "--fail ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ãã"
#: ../src/daemon/cmdline.c:264
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of debug, info, notice, warn, error)."
msgstr ""
+"--log-level ã¯ãã°ã¬ãã«å¼æ°ãäºæãã¾ãï¼æ°å¤å¹
ï¼ãï¼ãåã¯ããã°ãæ
å ±ã注è¨ãè¦åãã¨ã©ã¼ã® "
+"ä¸ã®ï¼ã¤ï¼"
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
-msgstr ""
+msgstr "--high-priority 㯠ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã"
#: ../src/daemon/cmdline.c:283
msgid "--realtime expects boolean argument"
-msgstr ""
+msgstr "--realtime ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:290
msgid "--disallow-module-loading expects boolean argument"
-msgstr ""
+msgstr "--disallow-module-loading ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:297
msgid "--disallow-exit expects boolean argument"
-msgstr ""
+msgstr "--disallow-exit ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:304
msgid "--use-pid-file expects boolean argument"
-msgstr ""
+msgstr "--use-pid-file ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr ""
+msgstr "ç¡å¹ãªãã°ã¿ã¼ã²ãã: 'syslog' ãã 'stderr' ãã'auto' ã使ç¨ãã¦ä¸ããã"
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
-msgstr ""
+msgstr "--log-time ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:335
msgid "--log-meta expects boolean argument"
-msgstr ""
+msgstr "--log-meta ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:354
#, c-format
msgid "Invalid resample method '%s'."
-msgstr ""
+msgstr "ç¡å¹ãªåãµã³ãã«æ¹æ³ '%s'"
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
-msgstr ""
+msgstr "--system ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã"
#: ../src/daemon/cmdline.c:368
msgid "--no-cpu-limit expects boolean argument"
-msgstr ""
+msgstr "--no-cpu-limit ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã"
#: ../src/daemon/cmdline.c:375
msgid "--disable-shm expects boolean argument"
-msgstr ""
+msgstr "--disable-shm ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã"
#: ../src/daemon/dumpmodules.c:60
#, c-format
msgid "Name: %s\n"
-msgstr ""
+msgstr "åå: %s\n"
#: ../src/daemon/dumpmodules.c:63
#, c-format
msgid "No module information available\n"
-msgstr ""
+msgstr "ã¢ã¸ã¥ã¼ã«æ
å ±ã使ç¨ã§ãã¾ãã\n"
#: ../src/daemon/dumpmodules.c:66
#, c-format
msgid "Version: %s\n"
-msgstr ""
+msgstr "ãã¼ã¸ã§ã³: %s\n"
#: ../src/daemon/dumpmodules.c:68
#, c-format
msgid "Description: %s\n"
-msgstr ""
+msgstr "説æ: %s\n"
#: ../src/daemon/dumpmodules.c:70
#, c-format
msgid "Author: %s\n"
-msgstr ""
+msgstr "èè
: %s\n"
#: ../src/daemon/dumpmodules.c:72
#, c-format
msgid "Usage: %s\n"
-msgstr ""
+msgstr "使ç¨æ³: %s\n"
#: ../src/daemon/dumpmodules.c:73
#, c-format
msgid "Load Once: %s\n"
-msgstr ""
+msgstr "ï¼åº¦ã ããã¼ã: %s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr ""
+msgstr "ç ´æ£ã®è¦å: %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
msgid "Path: %s\n"
-msgstr ""
+msgstr "ãã¹: %s\n"
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãã°ã¿ã¼ã²ãã '%s'"
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãã°ã¬ãã« '%s'"
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªåãµã³ãã«æ¹æ³ '%s'"
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãª rlimit '%s'"
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
-msgstr ""
+msgstr "[%s:%u] rlimit ã¯ãã®ãã©ãããã©ã¼ã ã§ã¯ãµãã¼ããããã¾ããã"
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«å½¢å¼ '%s'"
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«ã¬ã¼ã '%s'"
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«ãã£ã³ãã« '%s'"
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãã£ã³ãã«ããã '%s'"
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãã©ã°ã¡ã³ãã®æ° '%s'"
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãã©ã°ã¡ã³ããµã¤ãº '%s'"
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡å¹ãªãã¤ã¹ã¬ãã« '%s'"
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
-msgstr ""
+msgstr "è¨å®ãã¡ã¤ã«ãéãã®ã«å¤±æ: %s"
#: ../src/daemon/daemon-conf.c:562
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr ""
+"æå®ãããããã©ã«ãã®ãã£ã³ãã«ãããã¯ãæå®ãããããã©ã«ãã® "
+"ãã£ã³ãã«æ°ã¨ã¯ç°ãªã ãã£ã³ãã«æ°ãæã£ã¦ãã¾ãã"
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
-msgstr ""
+msgstr "### è¨å®ãã¡ã¤ã«ããèªã¿è¾¼ã¿: %s ###\n"
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
-msgstr ""
+msgstr "権éãã¯ãªã¼ã³ã¢ãã"
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
-msgstr ""
+msgstr "PulseAudio ãµã¦ã³ãã·ã¹ãã "
#: ../src/daemon/pulseaudio.desktop.in.h:2
msgid "Start the PulseAudio Sound System"
-msgstr ""
+msgstr "PulseAudio ãµã¦ã³ãã·ã¹ãã ãéå§"
#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
-msgstr ""
+msgstr "ã¢ã"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
-msgstr ""
+msgstr "ä¸å¤®å"
#: ../src/pulse/channelmap.c:108
msgid "Front Left"
-msgstr ""
+msgstr "å·¦å"
#: ../src/pulse/channelmap.c:109
msgid "Front Right"
-msgstr ""
+msgstr "å³å"
#: ../src/pulse/channelmap.c:111
msgid "Rear Center"
-msgstr ""
+msgstr "ä¸å¤®å¾ã"
#: ../src/pulse/channelmap.c:112
msgid "Rear Left"
-msgstr ""
+msgstr "å·¦å¾ã"
#: ../src/pulse/channelmap.c:113
msgid "Rear Right"
-msgstr ""
+msgstr "å³å¾ã"
#: ../src/pulse/channelmap.c:115
msgid "Low Frequency Emmiter"
-msgstr ""
+msgstr "ä½å¨æ³¢ã¨ããã¿"
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
-msgstr ""
+msgstr "ä¸å¤®ã®å·¦å"
#: ../src/pulse/channelmap.c:118
msgid "Front Right-of-center"
-msgstr ""
+msgstr "ä¸å¤®ã®å³å"
#: ../src/pulse/channelmap.c:120
msgid "Side Left"
-msgstr ""
+msgstr "å·¦å´"
#: ../src/pulse/channelmap.c:121
msgid "Side Right"
-msgstr ""
+msgstr "å³å´"
#: ../src/pulse/channelmap.c:123
msgid "Auxiliary 0"
-msgstr ""
+msgstr "è£å© 0"
#: ../src/pulse/channelmap.c:124
msgid "Auxiliary 1"
-msgstr ""
+msgstr "è£å© 1"
#: ../src/pulse/channelmap.c:125
msgid "Auxiliary 2"
-msgstr ""
+msgstr "è£å© 2"
#: ../src/pulse/channelmap.c:126
msgid "Auxiliary 3"
-msgstr ""
+msgstr "è£å© 3"
#: ../src/pulse/channelmap.c:127
msgid "Auxiliary 4"
-msgstr ""
+msgstr "è£å© 4"
#: ../src/pulse/channelmap.c:128
msgid "Auxiliary 5"
-msgstr ""
+msgstr "è£å© 5"
#: ../src/pulse/channelmap.c:129
msgid "Auxiliary 6"
-msgstr ""
+msgstr "è£å© 6"
#: ../src/pulse/channelmap.c:130
msgid "Auxiliary 7"
-msgstr ""
+msgstr "è£å© 7"
#: ../src/pulse/channelmap.c:131
msgid "Auxiliary 8"
-msgstr ""
+msgstr "è£å© 8"
#: ../src/pulse/channelmap.c:132
msgid "Auxiliary 9"
-msgstr ""
+msgstr "è£å© 9"
#: ../src/pulse/channelmap.c:133
msgid "Auxiliary 10"
-msgstr ""
+msgstr "è£å© 10"
#: ../src/pulse/channelmap.c:134
msgid "Auxiliary 11"
-msgstr ""
+msgstr "è£å© 11"
#: ../src/pulse/channelmap.c:135
msgid "Auxiliary 12"
-msgstr ""
+msgstr "è£å© 12"
#: ../src/pulse/channelmap.c:136
msgid "Auxiliary 13"
-msgstr ""
+msgstr "è£å© 13"
#: ../src/pulse/channelmap.c:137
msgid "Auxiliary 14"
-msgstr ""
+msgstr "è£å© 14"
#: ../src/pulse/channelmap.c:138
msgid "Auxiliary 15"
-msgstr ""
+msgstr "è£å© 15"
#: ../src/pulse/channelmap.c:139
msgid "Auxiliary 16"
-msgstr ""
+msgstr "è£å© 16"
#: ../src/pulse/channelmap.c:140
msgid "Auxiliary 17"
-msgstr ""
+msgstr "è£å© 17"
#: ../src/pulse/channelmap.c:141
msgid "Auxiliary 18"
-msgstr ""
+msgstr "è£å© 18"
#: ../src/pulse/channelmap.c:142
msgid "Auxiliary 19"
-msgstr ""
+msgstr "è£å© 19"
#: ../src/pulse/channelmap.c:143
msgid "Auxiliary 20"
-msgstr ""
+msgstr "è£å© 20"
#: ../src/pulse/channelmap.c:144
msgid "Auxiliary 21"
-msgstr ""
+msgstr "è£å© 21"
#: ../src/pulse/channelmap.c:145
msgid "Auxiliary 22"
-msgstr ""
+msgstr "è£å© 22"
#: ../src/pulse/channelmap.c:146
msgid "Auxiliary 23"
-msgstr ""
+msgstr "è£å© 23"
#: ../src/pulse/channelmap.c:147
msgid "Auxiliary 24"
-msgstr ""
+msgstr "è£å© 24"
#: ../src/pulse/channelmap.c:148
msgid "Auxiliary 25"
-msgstr ""
+msgstr "è£å© 25"
#: ../src/pulse/channelmap.c:149
msgid "Auxiliary 26"
-msgstr ""
+msgstr "è£å© 26"
#: ../src/pulse/channelmap.c:150
msgid "Auxiliary 27"
-msgstr ""
+msgstr "è£å© 27"
#: ../src/pulse/channelmap.c:151
msgid "Auxiliary 28"
-msgstr ""
+msgstr "è£å© 28"
#: ../src/pulse/channelmap.c:152
msgid "Auxiliary 29"
-msgstr ""
+msgstr "è£å© 29"
#: ../src/pulse/channelmap.c:153
msgid "Auxiliary 30"
-msgstr ""
+msgstr "è£å© 30"
#: ../src/pulse/channelmap.c:154
msgid "Auxiliary 31"
-msgstr ""
+msgstr "è£å© 31"
#: ../src/pulse/channelmap.c:156
msgid "Top Center"
-msgstr ""
+msgstr "ä¸é¨ä¸å¤®"
#: ../src/pulse/channelmap.c:158
msgid "Top Front Center"
-msgstr ""
+msgstr "ä¸é¨ä¸å¤®å"
#: ../src/pulse/channelmap.c:159
msgid "Top Front Left"
-msgstr ""
+msgstr "ä¸é¨å·¦å"
#: ../src/pulse/channelmap.c:160
msgid "Top Front Right"
-msgstr ""
+msgstr "ä¸é¨å³å"
#: ../src/pulse/channelmap.c:162
msgid "Top Rear Center"
-msgstr ""
+msgstr "ä¸é¨ä¸å¤®å¾ã"
#: ../src/pulse/channelmap.c:163
msgid "Top Rear Left"
-msgstr ""
+msgstr "ä¸é¨å·¦å¾ã"
#: ../src/pulse/channelmap.c:164
msgid "Top Rear Right"
-msgstr ""
+msgstr "ä¸é¨å³å¾ã"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
-msgstr ""
+msgstr "ç¡å¹)"
#: ../src/pulse/channelmap.c:761
msgid "Stereo"
-msgstr ""
+msgstr "ã¹ãã¬ãª"
#: ../src/pulse/channelmap.c:766
msgid "Surround 4.0"
-msgstr ""
+msgstr "ãµã©ã¦ã³ã 4.0"
#: ../src/pulse/channelmap.c:772
msgid "Surround 4.1"
-msgstr ""
+msgstr "ãµã©ã¦ã³ã 4.1"
#: ../src/pulse/channelmap.c:778
msgid "Surround 5.0"
-msgstr ""
+msgstr "ãµã©ã¦ã³ã 5.0"
#: ../src/pulse/channelmap.c:784
msgid "Surround 5.1"
-msgstr ""
+msgstr "ãµã©ã¦ã³ã 5.1"
#: ../src/pulse/channelmap.c:791
msgid "Surround 7.1"
-msgstr ""
+msgstr "ãµã©ã¦ã³ã 7.1"
#: ../src/pulse/error.c:43
msgid "OK"
-msgstr ""
+msgstr "OK"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr ""
+msgstr "ã¢ã¯ã»ã¹æå¦"
#: ../src/pulse/error.c:45
msgid "Unknown command"
-msgstr ""
+msgstr "ä¸æãªã³ãã³ã"
#: ../src/pulse/error.c:46
msgid "Invalid argument"
-msgstr ""
+msgstr "ç¡å¹ãªå¼æ°"
#: ../src/pulse/error.c:47
msgid "Entity exists"
-msgstr ""
+msgstr "ã¨ã³ãã£ãã£ã¯åå¨ãã¾ã"
#: ../src/pulse/error.c:48
msgid "No such entity"
-msgstr ""
+msgstr "ãã®ãããªã¨ã³ãã£ãã£ã¯ããã¾ãã"
#: ../src/pulse/error.c:49
msgid "Connection refused"
-msgstr ""
+msgstr "æ¥ç¶æå¦"
#: ../src/pulse/error.c:50
msgid "Protocol error"
-msgstr ""
+msgstr "ãããã³ã«ã¨ã©ã¼"
#: ../src/pulse/error.c:51
msgid "Timeout"
-msgstr ""
+msgstr "ã¿ã¤ã ã¢ã¦ã"
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr ""
+msgstr "èªè¨¼ãã¼ãããã¾ãã"
#: ../src/pulse/error.c:53
msgid "Internal error"
-msgstr ""
+msgstr "å
é¨ã¨ã©ã¼"
#: ../src/pulse/error.c:54
msgid "Connection terminated"
-msgstr ""
+msgstr "æ¥ç¶åæ"
#: ../src/pulse/error.c:55
msgid "Entity killed"
-msgstr ""
+msgstr "ã¨ã³ãã£ãã£ã¯ãã«ããã¾ãã"
#: ../src/pulse/error.c:56
msgid "Invalid server"
-msgstr ""
+msgstr "ç¡å¹ãªãµã¼ãã¼"
#: ../src/pulse/error.c:57
msgid "Module initalization failed"
-msgstr ""
+msgstr "ã¢ã¸ã¥ã¼ã«åæå失æ"
#: ../src/pulse/error.c:58
msgid "Bad state"
-msgstr ""
+msgstr "æªãç¶æ
"
#: ../src/pulse/error.c:59
msgid "No data"
-msgstr ""
+msgstr "ãã¼ã¿ç¡ã"
#: ../src/pulse/error.c:60
msgid "Incompatible protocol version"
-msgstr ""
+msgstr "äºææ§ã®ãªããããã³ã«ãã¼ã¸ã§ã³"
#: ../src/pulse/error.c:61
msgid "Too large"
-msgstr ""
+msgstr "大ãéãã¾ã"
#: ../src/pulse/error.c:62
msgid "Not supported"
-msgstr ""
+msgstr "ãµãã¼ããããã¾ãã"
#: ../src/pulse/error.c:63
msgid "Unknown error code"
-msgstr ""
+msgstr "ä¸æãªã¨ã©ã¼ã³ã¼ã"
#: ../src/pulse/error.c:64
msgid "No such extension"
-msgstr ""
+msgstr "ãã®ãããªæ¡å¼µåã¯ããã¾ãã"
#: ../src/pulse/error.c:65
msgid "Obsolete functionality"
-msgstr ""
+msgstr "æ§æ¥ã®æ©è½"
#: ../src/pulse/error.c:66
msgid "Missing implementation"
-msgstr ""
+msgstr "å®è£
ã®æ¬ å¦"
#: ../src/pulse/error.c:67
msgid "Client forked"
-msgstr ""
+msgstr "ã¯ã©ã¤ã¢ã³ãã¯ãã©ã¼ã¯ããã¦ãã¾ã"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "å
¥å/åºå ã¨ã©ã¼"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "ããã¤ã¹ãããªã½ã¼ã¹ããã¸ã¼"
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
-msgstr ""
+msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
-msgstr ""
+msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
-msgstr ""
+msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
-msgstr ""
+msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
-msgstr ""
+msgstr "%u B"
#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
-msgstr ""
+msgstr "XOpenDisplay() ã¯å¤±æ"
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
-msgstr ""
+msgstr "ã¯ããã¼ãã¼ã¿ã®æ§æ解æã«å¤±æ"
#: ../src/pulse/client-conf.c:111
#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr ""
+msgstr "è¨å®ãã¡ã¤ã«'%s' ãéãã®ã«å¤±æ: %s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
-msgstr ""
+msgstr "ã¯ããã¼ããã¼ãããã¦ãã¾ãããç¡ãç¶æ
ã§æ¥ç¶ã試è¡"
#: ../src/pulse/context.c:693
#, c-format
msgid "fork(): %s"
-msgstr ""
+msgstr "fork(): %s"
#: ../src/pulse/context.c:748
#, c-format
msgid "waitpid(): %s"
-msgstr ""
+msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
msgid "Received message for unknown extension '%s'"
-msgstr ""
+msgstr "ä¸æãªæ¡å¼µå '%s' ã®ã¡ãã»ã¼ã¸ãåä¿¡"
#: ../src/utils/pacat.c:108
#, c-format
msgid "Failed to drain stream: %s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ã®æåºã«å¤±æ: %s"
#: ../src/utils/pacat.c:113
msgid "Playback stream drained."
-msgstr ""
+msgstr "æåºããã¹ããªã¼ã ãåç"
#: ../src/utils/pacat.c:123
msgid "Draining connection to server."
-msgstr ""
+msgstr "ãµã¼ãã¼ã¸ã®æåºæ¥ç¶"
#: ../src/utils/pacat.c:136
#, c-format
msgid "pa_stream_drain(): %s"
-msgstr ""
+msgstr "pa_stream_drain(): %s"
#: ../src/utils/pacat.c:159
#, c-format
msgid "pa_stream_write() failed: %s"
-msgstr ""
+msgstr "pa_stream_write() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:197
#, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr ""
+msgstr "pa_stream_begin_write() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr ""
+msgstr "pa_stream_peek() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:307
msgid "Stream successfully created."
-msgstr ""
+msgstr "ã¹ããªã¼ã ã¯æ£å¸¸ã«ä½æå®äº"
#: ../src/utils/pacat.c:310
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr ""
+msgstr "pa_stream_get_buffer_attr() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:314
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr ""
+msgstr "ãããã¡ã¡ããªãã¯ã¹: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
#: ../src/utils/pacat.c:317
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr ""
+msgstr "ãããã¡ã¡ããªãã¯ã¹: maxlength=%u, fragsize=%u"
#: ../src/utils/pacat.c:321
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr ""
+msgstr "ãµã³ãã«ä»æ§ '%s' ããã£ã³ãã«ããã '%s' ã使ç¨ã"
#: ../src/utils/pacat.c:325
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr ""
+msgstr "ããã¤ã¹ %s ã«æ¥ç¶ (%u, %ssuspended)"
#: ../src/utils/pacat.c:335
#, c-format
msgid "Stream error: %s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ã¨ã©ã¼: %s"
#: ../src/utils/pacat.c:345
#, c-format
msgid "Stream device suspended.%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ããã¤ã¹ä¼æ¢ %s"
#: ../src/utils/pacat.c:347
#, c-format
msgid "Stream device resumed.%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ããã¤ã¹å¾©å¸° %s"
#: ../src/utils/pacat.c:355
#, c-format
msgid "Stream underrun.%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ã¢ã³ãã¼ã©ã³ %s"
#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream overrun.%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ãªã¼ãã¼ã©ã³ %s"
#: ../src/utils/pacat.c:369
#, c-format
msgid "Stream started.%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã éå§ %s"
#: ../src/utils/pacat.c:376
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ã¯ããã¤ã¹ %s ã¸ç§»å (%u, %ssuspended).%s"
#: ../src/utils/pacat.c:376
msgid "not "
-msgstr ""
+msgstr "not "
#: ../src/utils/pacat.c:383
#, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr ""
+msgstr "ã¹ããªã¼ã ãããã¡ã®å±æ§å¤æ´ %s"
#: ../src/utils/pacat.c:415
#, c-format
msgid "Connection established.%s"
-msgstr ""
+msgstr "æ¥ç¶ãç¢ºç« %s"
#: ../src/utils/pacat.c:418
#, c-format
msgid "pa_stream_new() failed: %s"
-msgstr ""
+msgstr "pa_stream_new() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:450
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr ""
+msgstr "pa_stream_connect_playback() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:456
#, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr ""
+msgstr "pa_stream_connect_record() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
#, c-format
msgid "Connection failure: %s"
-msgstr ""
+msgstr "æ¥ç¶å¤±æ: %s"
#: ../src/utils/pacat.c:503
msgid "Got EOF."
-msgstr ""
+msgstr "EOF åå¾"
#: ../src/utils/pacat.c:540
#, c-format
msgid "write() failed: %s"
-msgstr ""
+msgstr "write() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:561
msgid "Got signal, exiting."
-msgstr ""
+msgstr "ä¿¡å·åå¾ãéåºä¸"
#: ../src/utils/pacat.c:575
#, c-format
msgid "Failed to get latency: %s"
-msgstr ""
+msgstr "ã¬ã¤ãã³ã·ã¼åå¾ã«å¤±æ: %s"
#: ../src/utils/pacat.c:580
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr ""
+msgstr "æé: %0.3f sec ; ã¬ã¤ãã³ã·ã¼: %0.0f usec"
#: ../src/utils/pacat.c:599
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr ""
+msgstr "pa_stream_update_timing_info() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:609
#, c-format
@@ -1301,167 +1374,170 @@ msgid ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
msgstr ""
+"pacat %s\n"
+"libpulse %s ã§ã³ã³ãã¤ã« \n"
+"libpulse %s ã§æ¥ç¶\n"
#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
-msgstr ""
+msgstr "ç¡å¹ãªã¯ã©ã¤ã¢ã³ãå '%s'"
#: ../src/utils/pacat.c:779
#, c-format
msgid "Invalid stream name '%s'"
-msgstr ""
+msgstr "ç¡å¹ãªã¹ããªã¼ã å '%s'"
#: ../src/utils/pacat.c:816
#, c-format
msgid "Invalid channel map '%s'"
-msgstr ""
+msgstr "ç¡å¹ãªãã£ã³ãã«ããã '%s'"
#: ../src/utils/pacat.c:845
#, c-format
msgid "Invalid latency specification '%s'"
-msgstr ""
+msgstr "ç¡å¹ãªã¬ã¤ãã³ã·ã¼ä»æ§ '%s'"
#: ../src/utils/pacat.c:852
#, c-format
msgid "Invalid process time specification '%s'"
-msgstr ""
+msgstr "ç¡å¹ãªããã»ã¹ã¿ã¤ã ä»æ§ '%s'"
#: ../src/utils/pacat.c:864
#, c-format
msgid "Invalid property '%s'"
-msgstr ""
+msgstr "ç¡å¹ãªãããã㣠'%s'"
#: ../src/utils/pacat.c:881
#, c-format
msgid "Unknown file format %s."
-msgstr ""
+msgstr "ä¸æãªãã¡ã¤ã«å½¢å¼ '%s'"
#: ../src/utils/pacat.c:900
msgid "Invalid sample specification"
-msgstr ""
+msgstr "ç¡å¹ãªãµã³ãã«ä»æ§"
#: ../src/utils/pacat.c:910
#, c-format
msgid "open(): %s"
-msgstr ""
+msgstr "open(): %s"
#: ../src/utils/pacat.c:915
#, c-format
msgid "dup2(): %s"
-msgstr ""
+msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
msgid "Too many arguments."
-msgstr ""
+msgstr "å¼æ°ãå¤éãã¾ãã"
#: ../src/utils/pacat.c:933
msgid "Failed to generate sample specification for file."
-msgstr ""
+msgstr "ãã¡ã¤ã«ç¨ã®ãµã³ãã«ä»æ§ã®çæã«å¤±æãã¾ããã"
#: ../src/utils/pacat.c:953
msgid "Failed to open audio file."
-msgstr ""
+msgstr "ãªã¼ãã£ãªãã¡ã¤ã«ãéãã®ã«å¤±æãã¾ããã"
#: ../src/utils/pacat.c:959
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr ""
+msgstr "è¦å: æå®ããããµã³ãã«ã®ä»æ§ã¯ãã¡ã¤ã«ããã®ä»æ§ã§ä¸æ¸ãããã¾ãã"
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
-msgstr ""
+msgstr "ãã¡ã¤ã«ããã®ãµã³ãã«ä»æ§ã®æ±ºå®ã«å¤±æãã¾ããã"
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr ""
+msgstr "è¦å: ãã¡ã¤ã«ããã®ãã£ã³ãã«ãããã®æ±ºå®ã«å¤±æãã¾ããã"
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
-msgstr ""
+msgstr "ãã£ã³ãã«ãããã¯ãµã³ãã«ä»æ§ã«ä¸è´ãã¾ããã"
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
-msgstr ""
+msgstr "è¦å: ãã¡ã¤ã«ã¸ã®ãã£ã³ãã«ãããæ¸ãè¾¼ã¿ã«å¤±æãã¾ããã"
#: ../src/utils/pacat.c:1008
#, c-format
msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
+msgstr "ãµã³ãã«ä»æ§ '%s' 㨠ãã£ã³ãã«ããã '%s' 㧠%s ã¹ããªã¼ã ãéãã¦ãã¾ãã"
#: ../src/utils/pacat.c:1009
msgid "recording"
-msgstr ""
+msgstr "é²é³"
#: ../src/utils/pacat.c:1009
msgid "playback"
-msgstr ""
+msgstr "åç"
#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
-msgstr ""
+msgstr "pa_mainloop_new() ã¯å¤±æ"
#: ../src/utils/pacat.c:1054
msgid "io_new() failed."
-msgstr ""
+msgstr "io_new() ã¯å¤±æ"
#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
-msgstr ""
+msgstr "pa_context_new() ã¯å¤±æ"
#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
-msgstr ""
+msgstr "pa_context_connect() ã¯å¤±æ: %s"
#: ../src/utils/pacat.c:1075
msgid "pa_context_rttime_new() failed."
-msgstr ""
+msgstr "pa_context_rttime_new() ã¯å¤±æ"
#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
-msgstr ""
+msgstr "pa_mainloop_run() ã¯å¤±æ"
#: ../src/utils/pasuspender.c:81
#, c-format
msgid "fork(): %s\n"
-msgstr ""
+msgstr "fork(): %s\n"
#: ../src/utils/pasuspender.c:92
#, c-format
msgid "execvp(): %s\n"
-msgstr ""
+msgstr "execvp(): %s\n"
#: ../src/utils/pasuspender.c:109
#, c-format
msgid "Failure to suspend: %s\n"
-msgstr ""
+msgstr "ä¼æ¢ã®å¤±æ: %s\n"
#: ../src/utils/pasuspender.c:124
#, c-format
msgid "Failure to resume: %s\n"
-msgstr ""
+msgstr "復帰ã®å¤±æ: %s\n"
#: ../src/utils/pasuspender.c:147
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr ""
+msgstr "è¦å: ãµã¦ã³ããµã¼ãã¼ã¯ãã¼ã«ã«ã§ã¯ããã¾ãããä¼æ¢ãã¾ããã\n"
#: ../src/utils/pasuspender.c:159
#, c-format
msgid "Connection failure: %s\n"
-msgstr ""
+msgstr "æ¥ç¶å¤±æ : %s\n"
#: ../src/utils/pasuspender.c:176
#, c-format
msgid "Got SIGINT, exiting.\n"
-msgstr ""
+msgstr "SIGINT åå¾ãéåºä¸ \n"
#: ../src/utils/pasuspender.c:194
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr ""
+msgstr "è¦å: åããã»ã¹ã¯ä¿¡å· %u ã§çµäºãã¾ãã\n"
#: ../src/utils/pasuspender.c:212
#, c-format
@@ -1474,6 +1550,13 @@ msgid ""
"to\n"
"\n"
msgstr ""
+"%s [ãªãã·ã§ã³] ... \n"
+"\n"
+" -h, --help ãã®ãã«ãã表示\n"
+" --version ãã¼ã¸ã§ã³ã表示\n"
+" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå "
+"\n"
+"\n"
#: ../src/utils/pasuspender.c:248
#, c-format
@@ -1482,46 +1565,49 @@ msgid ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
msgstr ""
+"pasuspender %s\n"
+"libpulse %s ã§ã³ã³ãã¤ã«\n"
+"libpulse %s ã§ãªã³ã¯\n"
#: ../src/utils/pasuspender.c:277
#, c-format
msgid "pa_mainloop_new() failed.\n"
-msgstr ""
+msgstr "pa_mainloop_new() ã¯å¤±æ\n"
#: ../src/utils/pasuspender.c:290
#, c-format
msgid "pa_context_new() failed.\n"
-msgstr ""
+msgstr "pa_context_new() ã¯å¤±æ\n"
#: ../src/utils/pasuspender.c:298
#, c-format
msgid "pa_mainloop_run() failed.\n"
-msgstr ""
+msgstr "pa_mainloop_run() ã¯å¤±æ\n"
#: ../src/utils/pactl.c:135
#, c-format
msgid "Failed to get statistics: %s"
-msgstr ""
+msgstr "çµ±è¨ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:141
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
-msgstr ""
+msgstr "ç¾å¨ä½¿ç¨ä¸: %u ãããã¯ã¯åè¨ %s ãã¤ããå«ã \n"
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
+msgstr "ç·å¯¿å½ã®æéä¸ã«å²ãå½ã¦: %u ãããã¯ã¯åè¨ %s ãã¤ããå«ã\n"
#: ../src/utils/pactl.c:147
#, c-format
msgid "Sample cache size: %s\n"
-msgstr ""
+msgstr "ãµã³ãã«ã®ãã£ãã·ã¥ãµã¤ãº: %s\n"
#: ../src/utils/pactl.c:156
#, c-format
msgid "Failed to get server information: %s"
-msgstr ""
+msgstr "ãµã¼ãã¼æ
å ±ã®åå¾ã«å¤±æ : %s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1536,11 +1622,20 @@ msgid ""
"Default Source: %s\n"
"Cookie: %08x\n"
msgstr ""
+"ã¦ã¼ã¶ã¼å: %s\n"
+"ãã¹ãå: %s\n"
+"ãµã¼ãã¼å: %s\n"
+"ãµã¼ãã¼ãã¼ã¸ã§ã³: %s\n"
+"ããã©ã«ããµã³ãã«ä»æ§: %s\n"
+"ããã©ã«ããã£ã³ãã«ããã: %s\n"
+"ããã©ã«ãã·ã³ã¯: %s\n"
+"ããã©ã«ãã½ã¼ã¹: %s\n"
+"ã¯ããã¼: %08x\n"
#: ../src/utils/pactl.c:205
#, c-format
msgid "Failed to get sink information: %s"
-msgstr ""
+msgstr "ã·ã³ã¯æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1563,21 +1658,38 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã·ã³ã¯ #%u\n"
+"\tç¶æ
: %s\n"
+"\tåå: %s\n"
+"\t説æ: %s\n"
+"\tãã©ã¤ãã¼: %s\n"
+"\tãµã³ãã«ä»æ§: %s\n"
+"\tãã£ã³ãã«ããã: %s\n"
+"\tãªã¼ãã¼ã¢ã¸ã¥ã¼ã«: %u\n"
+"\tãã¥ã¼ã: %s\n"
+"\tããªã¥ã¼ã : %s%s%s\n"
+"\t ãã©ã³ã¹ %0.2f\n"
+"\tãã¼ã¹ããªã¥ã¼ã : %s%s%s\n"
+"\tã¢ãã¿ã¼ã½ã¼ã¹: %s\n"
+"\tã¬ã¤ãã³ã·ã¼: %0.0f usec, è¨å® %0.0f usec\n"
+"\tãã©ã°: %s%s%s%s%s%s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
-msgstr ""
+msgstr "\tãã¼ã:\n"
#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
#, c-format
msgid "\tActive Port: %s\n"
-msgstr ""
+msgstr "\tæ´»åä¸ãã¼ã: %s\n"
#: ../src/utils/pactl.c:297
#, c-format
msgid "Failed to get source information: %s"
-msgstr ""
+msgstr "ã½ã¼ã¹æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1600,6 +1712,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã½ã¼ã¹ #%u\n"
+"\tç¶æ
: %s\n"
+"\tåå: %s\n"
+"\t説æ: %s\n"
+"\tãã©ã¤ãã¼: %s\n"
+"\tãµã³ãã«ä»æ§: %s\n"
+"\tãã£ã³ãã«ããã: %s\n"
+"\tãªã¼ãã¼ã¢ã¸ã¥ã¼ã«: %u\n"
+"\tãã¥ã¼ã: %s\n"
+"\tããªã¥ã¼ã : %s%s%s\n"
+"\t ãã©ã³ã¹ %0.2f\n"
+"\tãã¼ã¹ããªã¥ã¼ã : %s%s%s\n"
+"\tã·ã³ã¯ã®ã¢ãã¿ã¼: %s\n"
+"\tã¬ã¤ãã³ã·ã¼: %0.0f usec, è¨å® %0.0f usec\n"
+"\tãã©ã°: %s%s%s%s%s%s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
@@ -1607,12 +1736,12 @@ msgstr ""
#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
-msgstr ""
+msgstr "n/a"
#: ../src/utils/pactl.c:375
#, c-format
msgid "Failed to get module information: %s"
-msgstr ""
+msgstr "ã¢ã¸ã¥ã¼ã«æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1624,11 +1753,17 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã¢ã¸ã¥ã¼ã« #%u\n"
+"\tåå: %s\n"
+"\tå¼æ°: %s\n"
+"\t使ç¨åº¦ã«ã¦ã³ã¿ã¼: %s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:412
#, c-format
msgid "Failed to get client information: %s"
-msgstr ""
+msgstr "ã¯ã©ã¤ã¢ã³ãæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1639,11 +1774,16 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã¯ã©ã¤ã¢ã³ã #%u\n"
+"\tãã©ã¤ãã¼: %s\n"
+"\tãªã¼ãã¼ã¢ã¸ã¥ã¼ã«: %s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:447
#, c-format
msgid "Failed to get card information: %s"
-msgstr ""
+msgstr "ã«ã¼ãæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1655,21 +1795,27 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã«ã¼ã #%u\n"
+"\tåå: %s\n"
+"\tãã©ã¤ãã¼: %s\n"
+"\tã¢ã¸ã¥ã¼ã«: %s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:479
#, c-format
msgid "\tProfiles:\n"
-msgstr ""
+msgstr "\tãããã£ã¼ã«:\n"
#: ../src/utils/pactl.c:485
#, c-format
msgid "\tActive Profile: %s\n"
-msgstr ""
+msgstr "\tæå¹ãªãããã£ã¼ã«: %s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr ""
+msgstr "ã·ã³ã¯å
¥åæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1691,11 +1837,27 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã·ã³ã¯å
¥å #%u\n"
+"\tãã©ã¤ãã¼: %s\n"
+"\tãªã¼ãã¼ã¢ã¸ã¥ã¼ã«: %s\n"
+"\tã¯ã©ã¤ã¢ã³ã: %s\n"
+"\tã·ã³ã¯: %u\n"
+"\tãµã³ãã«ä»æ§: %s\n"
+"\tãã£ã³ãã«ããã: %s\n"
+"\tãã¥ã¼ã: %s\n"
+"\tããªã¥ã¼ã : %s\n"
+"\t %s\n"
+"\t ãã©ã³ã¹ %0.2f\n"
+"\tãããã¡ã¬ã¤ãã³ã·ã¼: %0.0f usec\n"
+"\tã·ã³ã¯ã¬ã¤ãã³ã·ã¼: %0.0f usec\n"
+"\tåãµã³ãã«æ¹æ³: %s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:554
#, c-format
msgid "Failed to get source output information: %s"
-msgstr ""
+msgstr "ã½ã¼ã¹åºåæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1713,11 +1875,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ã½ã¼ã¹åºå #%u\n"
+"\tãã©ã¤ãã¼: %s\n"
+"\tãªã¼ãã¼ã¢ã¸ã¥ã¼ã«: %s\n"
+"\tã¯ã©ã¤ã¢ã³ã: %s\n"
+"\tã½ã¼ã¹: %u\n"
+"\tãµã³ãã«ä»æ§: %s\n"
+"\tãã£ã³ãã«ããã: %s\n"
+"\tãããã¡ã¬ã¤ãã³ã·ã¼: %0.0f usec\n"
+"\tã½ã¼ã¹ã¬ã¤ãã³ã·ã¼: %0.0f usec\n"
+"\tåãµã³ãã«æ¹æ³: %s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:605
#, c-format
msgid "Failed to get sample information: %s"
-msgstr ""
+msgstr "ãµã³ãã«æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1736,24 +1910,37 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ãµã³ãã« #%u\n"
+"\tåå: %s\n"
+"\tãµã³ãã«ä»æ§: %s\n"
+"\tãã£ã³ãã«ããã: %s\n"
+"\tããªã¥ã¼ã : %s\n"
+"\t %s\n"
+"\t ãã©ã³ã¹ %0.2f\n"
+"\tç¶ç¶æé: %0.1fs\n"
+"\tãµã¤ãº: %s\n"
+"\tã¬ã¤ã¸ã¼: %s\n"
+"\tãã¡ã¤ã«åe: %s\n"
+"\tããããã£:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
#, c-format
msgid "Failure: %s"
-msgstr ""
+msgstr "失æ: %s"
#: ../src/utils/pactl.c:687
#, c-format
msgid "Failed to upload sample: %s"
-msgstr ""
+msgstr "ãµã³ãã«ã®ã¢ãããã¼ãã«å¤±æãã¾ãã: %s"
#: ../src/utils/pactl.c:704
msgid "Premature end of file"
-msgstr ""
+msgstr "ãã¡ã¤ã«ã®æ©æçµäº"
#: ../src/utils/pactl.c:863
msgid "Got SIGINT, exiting."
-msgstr ""
+msgstr "SIGINT ãåå¾ãéåºä¸"
#: ../src/utils/pactl.c:869
#, c-format
commit c118a3d8b91088a5e1785a5c4ce013b680560401
Author: sandeeps <sandeeps at fedoraproject.org>
Date: Wed Dec 9 13:32:05 2009 +0000
Sending translation for Marathi
diff --git a/po/mr.po b/po/mr.po
index 9f417fd..5c05cc5 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-21 18:16+0530\n"
+"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"PO-Revision-Date: 2009-12-09 18:30+0530\n"
"Last-Translator: Sandeep Shedmake <sshedmak at redhat.com>\n"
"Language-Team: Marathi <fedora-trans-mr at redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -218,8 +218,7 @@ msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
-"पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, परà¤à¤¤à¥ --disallow-module-loading निशà¥à¤à¤¿à¤¤ à¤à¥à¤²à¥ नाहà¥!"
+msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, परà¤à¤¤à¥ --disallow-module-loading निशà¥à¤à¤¿à¤¤ à¤à¥à¤²à¥ नाहà¥!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
@@ -1521,8 +1520,7 @@ msgstr "सावधानता: वाहिनॠनà¤à¤¾à¤¶à¤¾ फाà¤
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "%s सà¥à¤à¥à¤°à¥à¤® à¤à¤¾à¤à¤£à¥ सà¤à¤¯à¥à¤à¤¨à¤¾ '%s' व वाहिनॠनà¤à¤¾à¤¶à¤¾ '%s' सह à¤à¤à¤¡à¤¤ à¤à¤¹à¥."
#: ../src/utils/pacat.c:1009
@@ -2112,17 +2110,14 @@ msgid "You have to specify a module index"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ विà¤à¤¾à¤ à¤à¤à¤¡à¥à¤à¥à¤¸à¥ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
-"तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤°à¥à¤¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
+msgstr "तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤°à¥à¤¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2353,217 +2348,204 @@ msgstr "PulseAudio à¤à¤µà¤¾à¤ सरà¥à¤µà¤°"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à¤à¤à¤ साधणà¥"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à¤à¤à¤ªà¥à¤ साधणà¥"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ वरà¥à¤² à¤à¤¡à¤¿à¤"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "डà¥à¤à¤¿à¤à¤ सà¥à¤à¥à¤¶à¤¨ à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "डà¥à¤à¤¿à¤à¤ सà¥à¤à¥à¤¶à¤¨ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "लाà¤à¤¨-à¤à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "बाहà¥à¤°à¥à¤² माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à¤à¤à¤¤à¤°à¥à¤ à¤à¤¡à¤¿à¤"
+msgstr "à¤à¤à¤¤à¤°à¥à¤ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "रà¥à¤¡à¤¿à¤"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "विडिà¤"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "सà¥à¤µà¤¯à¤ à¤à¥à¤¨ à¤à¤à¤à¥à¤°à¥à¤²"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "सà¥à¤µà¤¯à¤ à¤à¥à¤¨ à¤à¤à¤à¥à¤°à¥à¤² à¤
शà¤à¥à¤¯"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "बà¥à¤¸à¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "बà¥à¤¸à¥à¤ à¤
शà¤à¥à¤¯"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à¤à¤®à¤ªà¥à¤²à¤¿à¤«à¤¾à¤¯à¤°"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "à¤à¤®à¤ªà¥à¤²à¤¿à¤«à¤¾à¤¯à¤° à¤
शà¤à¥à¤¯"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ लाà¤à¤¨-à¤à¤¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ रà¥à¤¡à¤¿à¤"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ विडà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Null à¤à¤à¤à¤ªà¥à¤"
+msgstr "à¤à¤¨à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ हà¥à¤¡à¤«à¥à¤¨à¥à¤¸à¥"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ मà¥à¤¨à¥ à¤à¤à¤à¤ªà¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ मà¥à¤¨à¥"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "सà¥à¤à¤¿à¤°à¥à¤"
+msgstr "à¤à¤¨à¤²à¥à¤ सà¥à¤à¤¿à¤°à¥à¤"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.1"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.0"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.1"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.0"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.1"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "सराà¤à¤¨à¥à¤¡ 5.0"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "सराà¤à¤¨à¥à¤¡ 5.1"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.0"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.1"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "सराà¤à¤¨à¥à¤¡ 4.0"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "सराà¤à¤¨à¥à¤¡ 7.1"
+msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "डिà¤à¥à¤à¤² सà¥à¤à¤¿à¤°à¥à¤ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "डिà¤à¥à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "डिà¤à¥à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "डिà¤à¥à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "डिà¤à¥à¤à¤² सà¥à¤à¤¿à¤°à¥à¤ (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ मà¥à¤¨à¥ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à¤à¤¨à¤²à¥à¤ सà¥à¤à¤¿à¤°à¥à¤ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "डिà¤à¥à¤à¤² सà¥à¤à¤¿à¤°à¥à¤ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥ (IEC958)"
+
commit 249956682c900bbe75c4196fa978c3dc33481cdc
Author: khasida <khasida at fedoraproject.org>
Date: Thu Dec 10 02:52:26 2009 +0000
Sending translation for Japanese
diff --git a/po/ja.po b/po/ja.po
index 179aeac..8e85a48 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-12-08 02:51+0000\n"
-"PO-Revision-Date: 2009-12-09 18:20+0900\n"
+"PO-Revision-Date: 2009-12-10 11:49+0900\n"
"Last-Translator: Kiyoto Hashida <khashida at redhat.com>\n"
"Language-Team: Japanese <jp at li.org>\n"
"MIME-Version: 1.0\n"
@@ -1366,6 +1366,60 @@ msgid ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
+"%s [options]\n"
+"\n"
+" -h, --help ãã®ãã«ãã表示\n"
+" --version ãã¼ã¸ã§ã³ã表示\n"
+"\n"
+" -r, --record é²é³ç¨ã®æ¥ç¶ãä½æ\n"
+" -p, --playback åçç¨ã®æ¥ç¶ãä½æ\n"
+"\n"
+" -v, --verbose 詳細æä½ãæå¹ã«ãã\n"
+"\n"
+" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå "
+"\n"
+" -d, --device=DEVICE æ¥ç¶å
ã·ã³ã¯/ã½ã¼ã¹ã®åå "
+"\n"
+" -n, --client-name=NAME ãµã¼ãã¼ã§ãã®ã¯ã©ã¤ã¢ã³ãã¸ã®ã³ã¼ã«æ¹æ³ "
+"\n"
+" --stream-name=NAME ãµã¼ãã¼ä¸ã§ãã®ã¹ããªã¼ã ã¸ã®ã³ã¼ã«æ¹æ³"
+"\n"
+" --volume=VOLUME åæ (ãªãã¢) ããªã¥ã¼ã å¹
ãæå® "
+" 0...65536\n"
+" --rate=SAMPLERATE ãµã³ãã«ã¬ã¼ãã Hz ã§è¡¨ç¤º (ããã©ã«ã㯠"
+"44100)\n"
+" --format=SAMPLEFORMAT ãµã³ãã«ã¿ã¤ã, 次ã®ï¼ã¤ s16le, "
+"s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (ããã©ã«ã㯠"
+"s16ne)\n"
+" --channels=CHANNELS ãã£ã³ãã«ã®æ°, ã¢ãç¨ã«ï¼, "
+"ã¹ãã¬ãªç¨ã«ï¼\n"
+" (ããã©ã«ã㯠2)\n"
+" --channel-map=CHANNELMAP ããã©ã«ãã®ä»£ããã«ä½¿ç¨ãããã£ã³ãã«ããã "
+"\n"
+" --fix-format ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããµã³ãã«å½¢å¼ãåã "
+"\n"
+"\n"
+" --fix-rate ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããµã³ãã«ã¬ã¼ããåã "
+"\n"
+"\n"
+" --fix-channels ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããã£ã³ãã«æ°ã¨ "
+"ãã£ã³ãã«ããããåã\n"
+"\n"
+" --no-remix ãã£ã³ãã«ã®ã¢ããããã¯ã¹ããã¦ã³ããã¯ã¹ãããªã\n"
+" --no-remap ååã®ä»£ããã«ã¤ã³ããã¯ã¹ã§ãã£ã³ãã«ãããããã"
+"\n"
+" --latency=BYTES æå®ã¬ã¤ãã³ã·ã¼ããã¤ãã§è¦æ± "
+"\n"
+" --process-time=BYTES è¦æ±æ¯ã®æå®ããã»ã¹ã¿ã¤ã ããã¤ãã§è¦æ± "
+"\n"
+" --property=PROPERTY=VALUE æå®ããããã£ãæå®å¤ã«ã»ãã"
+"\n"
+" --raw é²é³/åçã®çã® PCM ãã¼ã¿\n"
+" --file-format=FFORMAT é²é³/åçã®ãã©ã¼ããããã PCM ãã¼ã¿\n"
+" --list-file-formats å©ç¨å¯è½ãªãã¡ã¤ã«å½¢å¼ãä¸è¦§è¡¨ç¤º\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1975,6 +2029,35 @@ msgid ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
msgstr ""
+"%s [ãªãã·ã§ã³] stat\n"
+"%s [ãªãã·ã§ã³] list\n"
+"%s [ãªãã·ã§ã³] exit\n"
+"%s [ãªãã·ã§ã³] upload-sample FILENAME [NAME]\n"
+"%s [ãªãã·ã§ã³] play-sample NAME [SINK]\n"
+"%s [ãªãã·ã§ã³] remove-sample NAME\n"
+"%s [ãªãã·ã§ã³] move-sink-input SINKINPUT SINK\n"
+"%s [ãªãã·ã§ã³] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [ãªãã·ã§ã³] load-module NAME [ARGS ...]\n"
+"%s [ãªãã·ã§ã³] unload-module MODULE\n"
+"%s [ãªãã·ã§ã³] suspend-sink SINK 1|0\n"
+"%s [ãªãã·ã§ã³] suspend-source SOURCE 1|0\n"
+"%s [ãªãã·ã§ã³] set-card-profile CARD PROFILE\n"
+"%s [ãªãã·ã§ã³] set-sink-port SINK PORT\n"
+"%s [ãªãã·ã§ã³] set-source-port SOURCE PORT\n"
+"%s [ãªãã·ã§ã³] set-sink-volume SINK VOLUME\n"
+"%s [ãªãã·ã§ã³] set-source-volume SOURCE VOLUME\n"
+"%s [ãªãã·ã§ã³] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [ãªãã·ã§ã³] set-sink-mute SINK 1|0\n"
+"%s [ãªãã·ã§ã³] set-source-mute SOURCE 1|0\n"
+"%s [ãªãã·ã§ã³] set-sink-input-mute SINKINPUT 1|0\n"
+"\n"
+" -h, --help ãã®ãã«ãã表示\n"
+" --version ãã¼ã¸ã§ã³ã表示\n"
+"\n"
+" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå "
+"\n"
+" -n, --client-name=NAME ãµã¼ãã¼ã§ãã®ã¯ã©ã¤ã¢ã³ãã¸ã®ã³ã¼ã«æ¹æ³ "
+"\n"
#: ../src/utils/pactl.c:933
#, c-format
@@ -1983,106 +2066,109 @@ msgid ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
msgstr ""
+"pactl %s\n"
+"libpulse %s ã§ã³ã³ãã¤ã«\n"
+"libpulse %s ã§ãªã³ã¯\n"
#: ../src/utils/pactl.c:979
msgid "Please specify a sample file to load"
-msgstr ""
+msgstr "ãã¼ããããµã³ãã«ãã¡ã¤ã«ãæå®ãã¦ä¸ãã"
#: ../src/utils/pactl.c:992
msgid "Failed to open sound file."
-msgstr ""
+msgstr "ãµã¦ã³ããã¡ã¤ã«ãéãã®ã«å¤±æãã¾ããã"
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
-msgstr ""
+msgstr "è¦å: ãã¡ã¤ã«ãããµã³ãã«ä»æ§ã決å®ããã®ã«å¤±æãã¾ããã"
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
-msgstr ""
+msgstr "åçãããµã³ãã«åãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1026
msgid "You have to specify a sample name to remove"
-msgstr ""
+msgstr "åé¤ãããµã³ãã«åãæå®ããå¿
è¦ãããã¾ãã"
#: ../src/utils/pactl.c:1035
msgid "You have to specify a sink input index and a sink"
-msgstr ""
+msgstr "ã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ã¨ã·ã³ã¯ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1045
msgid "You have to specify a source output index and a source"
-msgstr ""
+msgstr "ã½ã¼ã¹åºåã¤ã³ããã¯ã¹ã¨ã½ã¼ã¹ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1060
msgid "You have to specify a module name and arguments."
-msgstr ""
+msgstr "ã¢ã¸ã¥ã¼ã«åã¨å¼æ°ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1080
msgid "You have to specify a module index"
-msgstr ""
+msgstr "ã¢ã¸ã¥ã¼ã«ã¤ã³ããã¯ã¹ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1090
msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
+msgstr "ã·ã³ã¯ã¯ï¼ã¤ä»¥ä¸ã¯æå®ã§ãã¾ããããã¼ãªã¢ã³å¤ãï¼ã¤æå®ããå¿
è¦ãããã¾ãã"
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr ""
+msgstr "ã½ã¼ã¹ã¯ï¼ã¤ä»¥ä¸ã¯æå®ã§ãã¾ããããã¼ãªã¢ã³å¤ãï¼ã¤æå®ããå¿
è¦ãããã¾ãã"
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
-msgstr ""
+msgstr "ã«ã¼ãã®åå/ã¤ã³ããã¯ã¹ã¨ãããã£ã¼ã«åãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
-msgstr ""
+msgstr "ã·ã³ã¯ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¼ãåãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
-msgstr ""
+msgstr "ã½ã¼ã¹ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¼ãåãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
-msgstr ""
+msgstr "ã·ã³ã¯ã®åå/ã¤ã³ããã¯ã¹ã¨ããªã¥ã¼ã ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
msgid "Invalid volume specification"
-msgstr ""
+msgstr "ç¡å¹ãªããªã¥ã¼ã ä»æ§"
#: ../src/utils/pactl.c:1166
msgid "You have to specify a source name/index and a volume"
-msgstr ""
+msgstr "ã½ã¼ã¹ã®åå/ã¤ã³ããã¯ã¹ã¨ããªã¥ã¼ã ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr ""
+msgstr "ã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ã¨ããªã¥ã¼ã ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr ""
+msgstr "ç¡å¹ãªã·ã³ã¯å
¥åã¤ã³ããã¯ã¹"
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr ""
+msgstr "ã·ã³ã¯ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¥ã¼ããã¼ãªã¢ã³ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr ""
+msgstr "ã½ã¼ã¹ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¥ã¼ããã¼ãªã¢ã³ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr ""
+msgstr "ã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ã¨ãã¥ã¼ããã¼ãªã¢ã³ãæå®ããå¿
è¦ãããã¾ã"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
-msgstr ""
+msgstr "ç¡å¹ãªã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ä»æ§"
#: ../src/utils/pactl.c:1262
msgid "No valid command specified."
-msgstr ""
+msgstr "æå¹ãªã³ãã³ããæå®ããã¦ãã¾ãã"
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2095,75 +2181,82 @@ msgid ""
"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 X11 ãã£ã¹ãã¬ã¤ã«æ¥ç¶ããç¾å¨ã® PulseAudio ã®ãã¼ã¿ã表示 (ããã©ã«ã)\n"
+" -e X11 ãã£ã¹ãã¬ã¤ã«ãã¼ã«ã« PulseAudio ãã¼ã¿ãã¨ãã¹ãã¼ã\n"
+" -i X11 ãã£ã¹ãã¬ã¤ãããã¼ã«ã«ç°å¢å¤æ°ã¨ã¯ããã¼ã« PulseAudio ãã¼ã¿ãã¤ã³ãã¼ã "
+"\n"
+" -r X11 ãã£ã¹ãã¬ã¤ãã PulseAudio ãã¼ã¿ãåé¤\n"
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr ""
+msgstr "ã³ãã³ãã©ã¤ã³ã®æ§æ解æã«å¤±æ\n"
#: ../src/utils/pax11publish.c:108
#, c-format
msgid "Server: %s\n"
-msgstr ""
+msgstr "ãµã¼ãã¼: %s\n"
#: ../src/utils/pax11publish.c:110
#, c-format
msgid "Source: %s\n"
-msgstr ""
+msgstr "ã½ã¼ã¹: %s\n"
#: ../src/utils/pax11publish.c:112
#, c-format
msgid "Sink: %s\n"
-msgstr ""
+msgstr "ã·ã³ã¯: %s\n"
#: ../src/utils/pax11publish.c:114
#, c-format
msgid "Cookie: %s\n"
-msgstr ""
+msgstr "ã¯ããã¼: %s\n"
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr ""
+msgstr "ã¯ããã¼ãã¼ã¿ã®æ§æ解æã«å¤±æ\n"
#: ../src/utils/pax11publish.c:137
#, c-format
msgid "Failed to save cookie data\n"
-msgstr ""
+msgstr "ã¯ããã¼ãã¼ã¿ã®ä¿åã«å¤±æ\n"
#: ../src/utils/pax11publish.c:152
#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr ""
+msgstr "ã¯ã©ã¤ã¢ã³ãè¨å®ãã¡ã¤ã«ã®ãã¼ãã«å¤±æ\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr ""
+msgstr "ç°å¢è¨å®ãã¼ã¿ã®èªã¿è¾¼ã¿ã«å¤±æ \n"
#: ../src/utils/pax11publish.c:174
#, c-format
msgid "Failed to get FQDN.\n"
-msgstr ""
+msgstr "FQDN ã®åå¾ã«å¤±æ \n"
#: ../src/utils/pax11publish.c:194
#, c-format
msgid "Failed to load cookie data\n"
-msgstr ""
+msgstr "ã¯ããã¼ãã¼ã¿ã®ãã¼ãã«å¤±æ\n"
#: ../src/utils/pax11publish.c:211
#, c-format
msgid "Not yet implemented.\n"
-msgstr ""
+msgstr "ã¾ã å®è£
ããã¦ãã¾ãã\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
+msgstr "PulseAudio ãã¼ã¢ã³èªèº«ã稼åãã¦ããªãããåã¯ã»ãã·ã§ã³ãã¼ã¢ã³ã¨ãã¦ç¨¼åãã¦ãã¾ããã"
#: ../src/utils/pacmd.c:74
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-msgstr ""
+msgstr "ã½ã±ãã (PF_UNIX, SOCK_STREAM, 0): %s"
#: ../src/utils/pacmd.c:91
#, c-format
@@ -2172,11 +2265,11 @@ msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr ""
+msgstr "PulseAudio ã®ãã«ã«å¤±æ"
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
-msgstr ""
+msgstr "ãã¼ã¢ã³ãå¿çãã¾ãã"
#: ../src/utils/pacmd.c:161
#, c-format
@@ -2195,7 +2288,7 @@ msgstr "write(): %s"
#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
-msgstr ""
+msgstr "autospawn ããã¯ã«ã¢ã¯ã»ã¹ã§ãã¾ãã"
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
@@ -2207,6 +2300,12 @@ msgid ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
msgstr ""
+"ALSA ãæ°è¦ã®ãã¼ã¿ãããã¤ã¹ã«æ¸ãè¾¼ãããã«å¬ä¿ãã¾ããããæ¸ãè¾¼ããã¨ã "
+"ããã¾ãã!\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã ALSA éçºè
ã« "
+"å ±åãã¦ä¸ããã\n"
+"POLLOUT ã»ããã§å¼ã³èµ·ãããã¾ãããããã®çµæã¨ãã¦ã® snd_pcm_avail() 㯠"
+"0 å㯠ä»ã®å¤ < min_avail ãè¿ãã¾ããã"
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
@@ -2218,6 +2317,12 @@ msgid ""
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
msgstr ""
+"ALSA ã¯ããã¤ã¹ããæ°è¦ãã¼ã¿ãèªã¿è¾¼ãããã«å¬ä¿ãã¾ããããèªã¿è¾¼ããã®ã "
+"ããã¾ãã!\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼'%s' å
ã®ãã°ã§ãããã®åé¡ã ALSA éçºè
ã« "
+"å ±åãã¦ä¸ããã\n"
+"POLLIN ã»ããã§å¼ã³èµ·ãããã¾ãããããã®çµæã¨ãã¦ã® snd_pcm_avail() 㯠"
+"0 å㯠ä»ã®å¤ < min_avail ãè¿ãã¾ããã"
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
@@ -2227,129 +2332,129 @@ msgstr "ãªã"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
msgid "High Fidelity Playback (A2DP)"
-msgstr ""
+msgstr "ãã¤ãã¡ã¤åç (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
msgid "High Fidelity Capture (A2DP)"
-msgstr ""
+msgstr "ãã¤ãã¡ã¤ãã£ãã㣠(A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr ""
+msgstr "ãã¬ãã©ãã¼ãã¥ãã¬ãã¯ã¹ (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
-msgstr ""
+msgstr "PulseAudio ãµã¦ã³ããµã¼ãã¼"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "åºåããã¤ã¹"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "å
¥åããã¤ã¹"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ ä¸ã®ãªã¼ãã£ãª"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "å
¥å"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ãããã³ã°ã¹ãã¼ã·ã§ã³å
¥å"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ãããã³ã°ã¹ãã¼ã·ã§ã³ãã¤ã¯ããã©ã³"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ã©ã¤ã³ã¤ã³"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ãã¤ã¯ããã©ã³"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "å¤é¨ãã¤ã¯ããã©ã³"
#: ../src/modules/alsa/alsa-mixer.c:1707
msgid "Internal Microphone"
-msgstr ""
+msgstr "å
é¨ãã¤ã¯ããã©ã³"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "ã©ã¸ãª"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "ãããª"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "èªåã²ã¤ã³å¶å¾¡"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "èªåã²ã¤ã³å¶å¾¡ãªã"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ãã¼ã¹ã"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "ãã¼ã¹ããªã"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "ã¢ã³ã"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "ã¢ã³ããªã"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "ã¢ããã°å
¥å"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "ã¢ããã°ãã¤ã¯ããã©ã³"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "ã¢ããã°ã©ã¤ã³ã¤ã³"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "ã¢ããã°ã©ã¸ãª"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "ã¢ããã°ãããª"
#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Output"
-msgstr ""
+msgstr "ã¢ããã°åºå"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "ã¢ããã°ããããã©ã³"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "ã¢ããã°åºå (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "ã¢ããã°ã¢ãåºå"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
@@ -2363,85 +2468,85 @@ msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "ã¢ããã°ã¢ã"
#: ../src/modules/alsa/alsa-mixer.c:2791
msgid "Analog Stereo"
-msgstr ""
+msgstr "ã¢ããã°ã¹ãã¬ãª"
#: ../src/modules/alsa/alsa-mixer.c:2792
msgid "Analog Surround 2.1"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
msgid "Analog Surround 3.0"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
msgid "Analog Surround 3.1"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Surround 4.1"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 5.0"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 5.1"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 6.0"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 6.1"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 7.0"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
-msgstr ""
+msgstr "ã¢ããã°ãµã©ã¦ã³ã 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ãã¸ã¿ã«ã¹ãã¬ãª (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ãã¸ã¿ã«ãµã©ã¦ã³ã 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ãã¸ã¿ã«ãµã©ã¦ã³ã 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ãã¸ã¿ã«ãµã©ã¦ã³ã 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ãã¸ã¿ã«ã¹ãã¬ãª (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "ã¢ããã°ã¢ããã¥ãã¬ãã¯ã¹"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "ã¢ããã°ã¹ãã¬ãªãã¥ãã¬ãã¯ã¹"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ãã¸ã¿ã«ã¹ãã¬ãªãã¥ãã¬ãã¯ã¹ (IEC958)"
commit b33c5718accaf3bfe37a74ccf66b93043c11d460
Author: snowlet <snowlet at fedoraproject.org>
Date: Thu Dec 10 04:19:07 2009 +0000
Sending translation for po/zh_TW.po
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..4f730f8
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,2243 @@
+# translation of pulseaudio.master-tx.pulseaudio.po to Traditional Chinese
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Chester Cheng <ccheng@ç´
帽å>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-10 02:33+0000\n"
+"PO-Revision-Date: 2009-12-10 14:18+1000\n"
+"Last-Translator: Chester Cheng <ccheng@ç´
帽å>\n"
+"Language-Team: Traditional Chinese <zh_TW at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../src/modules/alsa/alsa-util.c:1106
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1147
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1194
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:39
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:83
+msgid "Dummy Output"
+msgstr ""
+
+#: ../src/modules/module-ladspa-sink.c:49
+msgid "Virtual LADSPA sink"
+msgstr ""
+
+#: ../src/modules/module-ladspa-sink.c:53
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+
+#: ../src/modules/module-null-sink.c:55
+msgid "Clocked NULL sink"
+msgstr ""
+
+#: ../src/modules/module-null-sink.c:291
+msgid "Null Output"
+msgstr ""
+
+#: ../src/pulsecore/sink.c:2613
+msgid "Internal Audio"
+msgstr ""
+
+#: ../src/pulsecore/sink.c:2618
+msgid "Modem"
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:124
+msgid "Failed to find original lt_dlopen loader."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:129
+msgid "Failed to allocate new dl loader."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:142
+msgid "Failed to add bind-now-loader."
+msgstr ""
+
+#: ../src/daemon/main.c:141
+#, c-format
+msgid "Got signal %s."
+msgstr ""
+
+#: ../src/daemon/main.c:168
+msgid "Exiting."
+msgstr ""
+
+#: ../src/daemon/main.c:186
+#, c-format
+msgid "Failed to find user '%s'."
+msgstr ""
+
+#: ../src/daemon/main.c:191
+#, c-format
+msgid "Failed to find group '%s'."
+msgstr ""
+
+#: ../src/daemon/main.c:195
+#, c-format
+msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
+msgstr ""
+
+#: ../src/daemon/main.c:200
+#, c-format
+msgid "GID of user '%s' and of group '%s' don't match."
+msgstr ""
+
+#: ../src/daemon/main.c:205
+#, c-format
+msgid "Home directory of user '%s' is not '%s', ignoring."
+msgstr ""
+
+#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../src/daemon/main.c:220
+#, c-format
+msgid "Failed to change group list: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:236
+#, c-format
+msgid "Failed to change GID: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:252
+#, c-format
+msgid "Failed to change UID: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:271
+msgid "Successfully dropped root privileges."
+msgstr ""
+
+#: ../src/daemon/main.c:279
+msgid "System wide mode unsupported on this platform."
+msgstr ""
+
+#: ../src/daemon/main.c:297
+#, c-format
+msgid "setrlimit(%s, (%u, %u)) failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:474
+msgid "Failed to parse command line."
+msgstr ""
+
+#: ../src/daemon/main.c:541
+msgid "Daemon not running"
+msgstr ""
+
+#: ../src/daemon/main.c:543
+#, c-format
+msgid "Daemon running as PID %u"
+msgstr ""
+
+#: ../src/daemon/main.c:553
+#, c-format
+msgid "Failed to kill daemon: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:571
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+
+#: ../src/daemon/main.c:573
+msgid "Root privileges required."
+msgstr ""
+
+#: ../src/daemon/main.c:578
+msgid "--start not supported for system instances."
+msgstr ""
+
+#: ../src/daemon/main.c:583
+msgid "Running in system mode, but --disallow-exit not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:586
+msgid "Running in system mode, but --disallow-module-loading not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:589
+msgid "Running in system mode, forcibly disabling SHM mode!"
+msgstr ""
+
+#: ../src/daemon/main.c:594
+msgid "Running in system mode, forcibly disabling exit idle time!"
+msgstr ""
+
+#: ../src/daemon/main.c:621
+msgid "Failed to acquire stdio."
+msgstr ""
+
+#: ../src/daemon/main.c:627
+#, c-format
+msgid "pipe failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:632
+#, c-format
+msgid "fork() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#, c-format
+msgid "read() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:652
+msgid "Daemon startup failed."
+msgstr ""
+
+#: ../src/daemon/main.c:654
+msgid "Daemon startup successful."
+msgstr ""
+
+#: ../src/daemon/main.c:731
+#, c-format
+msgid "This is PulseAudio %s"
+msgstr ""
+
+#: ../src/daemon/main.c:732
+#, c-format
+msgid "Compilation host: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:733
+#, c-format
+msgid "Compilation CFLAGS: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:736
+#, c-format
+msgid "Running on host: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:739
+#, c-format
+msgid "Found %u CPUs."
+msgstr ""
+
+#: ../src/daemon/main.c:741
+#, c-format
+msgid "Page size is %lu bytes"
+msgstr ""
+
+#: ../src/daemon/main.c:744
+msgid "Compiled with Valgrind support: yes"
+msgstr ""
+
+#: ../src/daemon/main.c:746
+msgid "Compiled with Valgrind support: no"
+msgstr ""
+
+#: ../src/daemon/main.c:749
+#, c-format
+msgid "Running in valgrind mode: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:752
+msgid "Optimized build: yes"
+msgstr ""
+
+#: ../src/daemon/main.c:754
+msgid "Optimized build: no"
+msgstr ""
+
+#: ../src/daemon/main.c:758
+msgid "NDEBUG defined, all asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:760
+msgid "FASTPATH defined, only fast path asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:762
+msgid "All asserts enabled."
+msgstr ""
+
+#: ../src/daemon/main.c:766
+msgid "Failed to get machine ID"
+msgstr ""
+
+#: ../src/daemon/main.c:769
+#, c-format
+msgid "Machine ID is %s."
+msgstr ""
+
+#: ../src/daemon/main.c:773
+#, c-format
+msgid "Session ID is %s."
+msgstr ""
+
+#: ../src/daemon/main.c:779
+#, c-format
+msgid "Using runtime directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:784
+#, c-format
+msgid "Using state directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:787
+#, c-format
+msgid "Using modules directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:789
+#, c-format
+msgid "Running in system mode: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:792
+msgid ""
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
+msgstr ""
+
+#: ../src/daemon/main.c:809
+msgid "pa_pid_file_create() failed."
+msgstr ""
+
+#: ../src/daemon/main.c:819
+msgid "Fresh high-resolution timers available! Bon appetit!"
+msgstr ""
+
+#: ../src/daemon/main.c:821
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+
+#: ../src/daemon/main.c:844
+msgid "pa_core_new() failed."
+msgstr ""
+
+#: ../src/daemon/main.c:904
+msgid "Failed to initialize daemon."
+msgstr ""
+
+#: ../src/daemon/main.c:909
+msgid "Daemon startup without any loaded modules, refusing to work."
+msgstr ""
+
+#: ../src/daemon/main.c:926
+msgid "Daemon startup complete."
+msgstr ""
+
+#: ../src/daemon/main.c:932
+msgid "Daemon shutdown initiated."
+msgstr ""
+
+#: ../src/daemon/main.c:954
+msgid "Daemon terminated."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:115
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" --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"
+" -k --kill Kill 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"
+" with elevated RLIMIT_NICE)\n"
+" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" (only available as root, when SUID "
+"or\n"
+" with elevated RLIMIT_RTPRIO)\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"
+" time passed\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"
+" 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-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"
+" possible values)\n"
+" --use-pid-file[=BOOL] Create a PID file\n"
+" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" platforms that support it.\n"
+" --disable-shm[=BOOL] Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\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"
+" after startup\n"
+"\n"
+" -n Don't load default script file\n"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:247
+msgid "--daemonize expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:254
+msgid "--fail expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:264
+msgid ""
+"--log-level expects log level argument (either numeric in range 0..4 or one "
+"of debug, info, notice, warn, error)."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:276
+msgid "--high-priority expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:283
+msgid "--realtime expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:290
+msgid "--disallow-module-loading expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:297
+msgid "--disallow-exit expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:304
+msgid "--use-pid-file expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:321
+msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:328
+msgid "--log-time expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:335
+msgid "--log-meta expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:354
+#, c-format
+msgid "Invalid resample method '%s'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:361
+msgid "--system expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:368
+msgid "--no-cpu-limit expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:375
+msgid "--disable-shm expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:60
+#, c-format
+msgid "Name: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:63
+#, c-format
+msgid "No module information available\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:66
+#, c-format
+msgid "Version: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:68
+#, c-format
+msgid "Description: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:70
+#, c-format
+msgid "Author: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:72
+#, c-format
+msgid "Usage: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:73
+#, c-format
+msgid "Load Once: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:75
+#, c-format
+msgid "DEPRECATION WARNING: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:79
+#, c-format
+msgid "Path: %s\n"
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:232
+#, c-format
+msgid "[%s:%u] Invalid log target '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:248
+#, c-format
+msgid "[%s:%u] Invalid log level '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:264
+#, c-format
+msgid "[%s:%u] Invalid resample method '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:287
+#, c-format
+msgid "[%s:%u] Invalid rlimit '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:294
+#, c-format
+msgid "[%s:%u] rlimit not supported on this platform."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:310
+#, c-format
+msgid "[%s:%u] Invalid sample format '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:328
+#, c-format
+msgid "[%s:%u] Invalid sample rate '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:352
+#, c-format
+msgid "[%s:%u] Invalid sample channels '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:370
+#, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:388
+#, c-format
+msgid "[%s:%u] Invalid number of fragments '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:406
+#, c-format
+msgid "[%s:%u] Invalid fragment size '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:424
+#, c-format
+msgid "[%s:%u] Invalid nice level '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:546
+#, c-format
+msgid "Failed to open configuration file: %s"
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:562
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:638
+#, c-format
+msgid "### Read from configuration file: %s ###\n"
+msgstr ""
+
+#: ../src/daemon/caps.c:62
+msgid "Cleaning up privileges."
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
+msgid "Mono"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:107
+msgid "Front Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:108
+msgid "Front Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:109
+msgid "Front Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:111
+msgid "Rear Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:112
+msgid "Rear Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:113
+msgid "Rear Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:115
+msgid "Low Frequency Emmiter"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:117
+msgid "Front Left-of-center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:118
+msgid "Front Right-of-center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:120
+msgid "Side Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:121
+msgid "Side Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:123
+msgid "Auxiliary 0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:124
+msgid "Auxiliary 1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:125
+msgid "Auxiliary 2"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:126
+msgid "Auxiliary 3"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:127
+msgid "Auxiliary 4"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:128
+msgid "Auxiliary 5"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:129
+msgid "Auxiliary 6"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:130
+msgid "Auxiliary 7"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:131
+msgid "Auxiliary 8"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:132
+msgid "Auxiliary 9"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:133
+msgid "Auxiliary 10"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:134
+msgid "Auxiliary 11"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:135
+msgid "Auxiliary 12"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:136
+msgid "Auxiliary 13"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:137
+msgid "Auxiliary 14"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:138
+msgid "Auxiliary 15"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:139
+msgid "Auxiliary 16"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:140
+msgid "Auxiliary 17"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:141
+msgid "Auxiliary 18"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:142
+msgid "Auxiliary 19"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:143
+msgid "Auxiliary 20"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:144
+msgid "Auxiliary 21"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:145
+msgid "Auxiliary 22"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:146
+msgid "Auxiliary 23"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:147
+msgid "Auxiliary 24"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:148
+msgid "Auxiliary 25"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:149
+msgid "Auxiliary 26"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:150
+msgid "Auxiliary 27"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:151
+msgid "Auxiliary 28"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:152
+msgid "Auxiliary 29"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:153
+msgid "Auxiliary 30"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:154
+msgid "Auxiliary 31"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:156
+msgid "Top Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:158
+msgid "Top Front Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:159
+msgid "Top Front Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:160
+msgid "Top Front Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:162
+msgid "Top Rear Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:163
+msgid "Top Rear Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:164
+msgid "Top Rear Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
+msgid "(invalid)"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:761
+msgid "Stereo"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:766
+msgid "Surround 4.0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:772
+msgid "Surround 4.1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:778
+msgid "Surround 5.0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:784
+msgid "Surround 5.1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:791
+msgid "Surround 7.1"
+msgstr ""
+
+#: ../src/pulse/error.c:43
+msgid "OK"
+msgstr ""
+
+#: ../src/pulse/error.c:44
+msgid "Access denied"
+msgstr ""
+
+#: ../src/pulse/error.c:45
+msgid "Unknown command"
+msgstr ""
+
+#: ../src/pulse/error.c:46
+msgid "Invalid argument"
+msgstr ""
+
+#: ../src/pulse/error.c:47
+msgid "Entity exists"
+msgstr ""
+
+#: ../src/pulse/error.c:48
+msgid "No such entity"
+msgstr ""
+
+#: ../src/pulse/error.c:49
+msgid "Connection refused"
+msgstr ""
+
+#: ../src/pulse/error.c:50
+msgid "Protocol error"
+msgstr ""
+
+#: ../src/pulse/error.c:51
+msgid "Timeout"
+msgstr ""
+
+#: ../src/pulse/error.c:52
+msgid "No authorization key"
+msgstr ""
+
+#: ../src/pulse/error.c:53
+msgid "Internal error"
+msgstr ""
+
+#: ../src/pulse/error.c:54
+msgid "Connection terminated"
+msgstr ""
+
+#: ../src/pulse/error.c:55
+msgid "Entity killed"
+msgstr ""
+
+#: ../src/pulse/error.c:56
+msgid "Invalid server"
+msgstr ""
+
+#: ../src/pulse/error.c:57
+msgid "Module initalization failed"
+msgstr ""
+
+#: ../src/pulse/error.c:58
+msgid "Bad state"
+msgstr ""
+
+#: ../src/pulse/error.c:59
+msgid "No data"
+msgstr ""
+
+#: ../src/pulse/error.c:60
+msgid "Incompatible protocol version"
+msgstr ""
+
+#: ../src/pulse/error.c:61
+msgid "Too large"
+msgstr ""
+
+#: ../src/pulse/error.c:62
+msgid "Not supported"
+msgstr ""
+
+#: ../src/pulse/error.c:63
+msgid "Unknown error code"
+msgstr ""
+
+#: ../src/pulse/error.c:64
+msgid "No such extension"
+msgstr ""
+
+#: ../src/pulse/error.c:65
+msgid "Obsolete functionality"
+msgstr ""
+
+#: ../src/pulse/error.c:66
+msgid "Missing implementation"
+msgstr ""
+
+#: ../src/pulse/error.c:67
+msgid "Client forked"
+msgstr ""
+
+#: ../src/pulse/error.c:68
+msgid "Input/Output error"
+msgstr ""
+
+#: ../src/pulse/error.c:69
+msgid "Device or resource busy"
+msgstr ""
+
+#: ../src/pulse/sample.c:172
+#, c-format
+msgid "%s %uch %uHz"
+msgstr ""
+
+#: ../src/pulse/sample.c:184
+#, c-format
+msgid "%0.1f GiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:186
+#, c-format
+msgid "%0.1f MiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:188
+#, c-format
+msgid "%0.1f KiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:190
+#, c-format
+msgid "%u B"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
+msgid "XOpenDisplay() failed"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:93
+msgid "Failed to parse cookie data"
+msgstr ""
+
+#: ../src/pulse/client-conf.c:111
+#, c-format
+msgid "Failed to open configuration file '%s': %s"
+msgstr ""
+
+#: ../src/pulse/context.c:550
+msgid "No cookie loaded. Attempting to connect without."
+msgstr ""
+
+#: ../src/pulse/context.c:693
+#, c-format
+msgid "fork(): %s"
+msgstr ""
+
+#: ../src/pulse/context.c:748
+#, c-format
+msgid "waitpid(): %s"
+msgstr ""
+
+#: ../src/pulse/context.c:1438
+#, c-format
+msgid "Received message for unknown extension '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:108
+#, c-format
+msgid "Failed to drain stream: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:113
+msgid "Playback stream drained."
+msgstr ""
+
+#: ../src/utils/pacat.c:123
+msgid "Draining connection to server."
+msgstr ""
+
+#: ../src/utils/pacat.c:136
+#, c-format
+msgid "pa_stream_drain(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:159
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:197
+#, c-format
+msgid "pa_stream_begin_write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#, c-format
+msgid "pa_stream_peek() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:307
+msgid "Stream successfully created."
+msgstr ""
+
+#: ../src/utils/pacat.c:310
+#, c-format
+msgid "pa_stream_get_buffer_attr() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:314
+#, c-format
+msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:317
+#, c-format
+msgid "Buffer metrics: maxlength=%u, fragsize=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:321
+#, c-format
+msgid "Using sample spec '%s', channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:325
+#, c-format
+msgid "Connected to device %s (%u, %ssuspended)."
+msgstr ""
+
+#: ../src/utils/pacat.c:335
+#, c-format
+msgid "Stream error: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:345
+#, c-format
+msgid "Stream device suspended.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:347
+#, c-format
+msgid "Stream device resumed.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:355
+#, c-format
+msgid "Stream underrun.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:362
+#, c-format
+msgid "Stream overrun.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:369
+#, c-format
+msgid "Stream started.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:376
+#, c-format
+msgid "Stream moved to device %s (%u, %ssuspended).%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:376
+msgid "not "
+msgstr ""
+
+#: ../src/utils/pacat.c:383
+#, c-format
+msgid "Stream buffer attributes changed.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:415
+#, c-format
+msgid "Connection established.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:418
+#, c-format
+msgid "pa_stream_new() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:450
+#, c-format
+msgid "pa_stream_connect_playback() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:456
+#, c-format
+msgid "pa_stream_connect_record() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#, c-format
+msgid "Connection failure: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:503
+msgid "Got EOF."
+msgstr ""
+
+#: ../src/utils/pacat.c:540
+#, c-format
+msgid "write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:561
+msgid "Got signal, exiting."
+msgstr ""
+
+#: ../src/utils/pacat.c:575
+#, c-format
+msgid "Failed to get latency: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:580
+#, c-format
+msgid "Time: %0.3f sec; Latency: %0.0f usec."
+msgstr ""
+
+#: ../src/utils/pacat.c:599
+#, c-format
+msgid "pa_stream_update_timing_info() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:609
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+"\n"
+" -r, --record Create a connection for recording\n"
+" -p, --playback Create a connection for playback\n"
+"\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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
+" being connected to.\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"
+" --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"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
+" --raw Record/play raw PCM data.\n"
+" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --list-file-formats List available file formats.\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:731
+#, c-format
+msgid ""
+"pacat %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#, c-format
+msgid "Invalid client name '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:779
+#, c-format
+msgid "Invalid stream name '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:816
+#, c-format
+msgid "Invalid channel map '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:845
+#, c-format
+msgid "Invalid latency specification '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:852
+#, c-format
+msgid "Invalid process time specification '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:864
+#, c-format
+msgid "Invalid property '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:881
+#, c-format
+msgid "Unknown file format %s."
+msgstr ""
+
+#: ../src/utils/pacat.c:900
+msgid "Invalid sample specification"
+msgstr ""
+
+#: ../src/utils/pacat.c:910
+#, c-format
+msgid "open(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:915
+#, c-format
+msgid "dup2(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:922
+msgid "Too many arguments."
+msgstr ""
+
+#: ../src/utils/pacat.c:933
+msgid "Failed to generate sample specification for file."
+msgstr ""
+
+#: ../src/utils/pacat.c:953
+msgid "Failed to open audio file."
+msgstr ""
+
+#: ../src/utils/pacat.c:959
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+msgid "Failed to determine sample specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:971
+msgid "Warning: Failed to determine channel map from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:982
+msgid "Channel map doesn't match sample specification"
+msgstr ""
+
+#: ../src/utils/pacat.c:993
+msgid "Warning: failed to write channel map to file."
+msgstr ""
+
+#: ../src/utils/pacat.c:1008
+#, c-format
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:1009
+msgid "recording"
+msgstr ""
+
+#: ../src/utils/pacat.c:1009
+msgid "playback"
+msgstr ""
+
+#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+msgid "pa_mainloop_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1054
+msgid "io_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+msgid "pa_context_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#, c-format
+msgid "pa_context_connect() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:1075
+msgid "pa_context_rttime_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+msgid "pa_mainloop_run() failed."
+msgstr ""
+
+#: ../src/utils/pasuspender.c:81
+#, c-format
+msgid "fork(): %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:92
+#, c-format
+msgid "execvp(): %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:109
+#, c-format
+msgid "Failure to suspend: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:124
+#, c-format
+msgid "Failure to resume: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:147
+#, c-format
+msgid "WARNING: Sound server is not local, not suspending.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:159
+#, c-format
+msgid "Connection failure: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:176
+#, c-format
+msgid "Got SIGINT, exiting.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:194
+#, c-format
+msgid "WARNING: Child process terminated by signal %u\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:212
+#, c-format
+msgid ""
+"%s [options] ... \n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" -s, --server=SERVER The name of the server to connect "
+"to\n"
+"\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:248
+#, c-format
+msgid ""
+"pasuspender %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:277
+#, c-format
+msgid "pa_mainloop_new() failed.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:290
+#, c-format
+msgid "pa_context_new() failed.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:298
+#, c-format
+msgid "pa_mainloop_run() failed.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:135
+#, c-format
+msgid "Failed to get statistics: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:141
+#, c-format
+msgid "Currently in use: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:144
+#, c-format
+msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:147
+#, c-format
+msgid "Sample cache size: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:156
+#, c-format
+msgid "Failed to get server information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:164
+#, c-format
+msgid ""
+"User name: %s\n"
+"Host Name: %s\n"
+"Server Name: %s\n"
+"Server Version: %s\n"
+"Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
+"Default Sink: %s\n"
+"Default Source: %s\n"
+"Cookie: %08x\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:205
+#, c-format
+msgid "Failed to get sink information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:221
+#, c-format
+msgid ""
+"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:268 ../src/utils/pactl.c:360
+#, c-format
+msgid "\tPorts:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#, c-format
+msgid "\tActive Port: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:297
+#, c-format
+msgid "Failed to get source information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:313
+#, c-format
+msgid ""
+"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:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:645
+msgid "n/a"
+msgstr ""
+
+#: ../src/utils/pactl.c:375
+#, c-format
+msgid "Failed to get module information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:393
+#, c-format
+msgid ""
+"Module #%u\n"
+"\tName: %s\n"
+"\tArgument: %s\n"
+"\tUsage counter: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:412
+#, c-format
+msgid "Failed to get client information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:430
+#, c-format
+msgid ""
+"Client #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:447
+#, c-format
+msgid "Failed to get card information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:465
+#, c-format
+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:479
+#, c-format
+msgid "\tProfiles:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:485
+#, c-format
+msgid "\tActive Profile: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:496
+#, c-format
+msgid "Failed to get sink input information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:515
+#, c-format
+msgid ""
+"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:554
+#, c-format
+msgid "Failed to get source output information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:574
+#, c-format
+msgid ""
+"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:605
+#, c-format
+msgid "Failed to get sample information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:623
+#, c-format
+msgid ""
+"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:653 ../src/utils/pactl.c:663
+#, c-format
+msgid "Failure: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:687
+#, c-format
+msgid "Failed to upload sample: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:704
+msgid "Premature end of file"
+msgstr ""
+
+#: ../src/utils/pactl.c:863
+msgid "Got SIGINT, exiting."
+msgstr ""
+
+#: ../src/utils/pactl.c:869
+#, c-format
+msgid ""
+"%s [options] stat\n"
+"%s [options] list\n"
+"%s [options] exit\n"
+"%s [options] upload-sample FILENAME [NAME]\n"
+"%s [options] play-sample NAME [SINK]\n"
+"%s [options] remove-sample NAME\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [options] load-module NAME [ARGS ...]\n"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
+msgstr ""
+
+#: ../src/utils/pactl.c:933
+#, c-format
+msgid ""
+"pactl %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:979
+msgid "Please specify a sample file to load"
+msgstr ""
+
+#: ../src/utils/pactl.c:992
+msgid "Failed to open sound file."
+msgstr ""
+
+#: ../src/utils/pactl.c:1004
+msgid "Warning: Failed to determine sample specification from file."
+msgstr ""
+
+#: ../src/utils/pactl.c:1014
+msgid "You have to specify a sample name to play"
+msgstr ""
+
+#: ../src/utils/pactl.c:1026
+msgid "You have to specify a sample name to remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:1035
+msgid "You have to specify a sink input index and a sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:1045
+msgid "You have to specify a source output index and a source"
+msgstr ""
+
+#: ../src/utils/pactl.c:1060
+msgid "You have to specify a module name and arguments."
+msgstr ""
+
+#: ../src/utils/pactl.c:1080
+msgid "You have to specify a module index"
+msgstr ""
+
+#: ../src/utils/pactl.c:1090
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1103
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1115
+msgid "You have to specify a card name/index and a profile name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1126
+msgid "You have to specify a sink name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1137
+msgid "You have to specify a source name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1149
+msgid "You have to specify a sink name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+msgid "Invalid volume specification"
+msgstr ""
+
+#: ../src/utils/pactl.c:1166
+msgid "You have to specify a source name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1183
+msgid "You have to specify a sink input index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1188
+msgid "Invalid sink input index"
+msgstr ""
+
+#: ../src/utils/pactl.c:1204
+msgid "You have to specify a sink name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1221
+msgid "You have to specify a source name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1238
+msgid "You have to specify a sink input index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1243
+msgid "Invalid sink input index specification"
+msgstr ""
+
+#: ../src/utils/pactl.c:1262
+msgid "No valid command specified."
+msgstr ""
+
+#: ../src/utils/pax11publish.c:61
+#, c-format
+msgid ""
+"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
+"\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"
+" -r Remove PulseAudio data from X11 display\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:94
+#, c-format
+msgid "Failed to parse command line.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:108
+#, c-format
+msgid "Server: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:110
+#, c-format
+msgid "Source: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:112
+#, c-format
+msgid "Sink: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:114
+#, c-format
+msgid "Cookie: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:132
+#, c-format
+msgid "Failed to parse cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:137
+#, c-format
+msgid "Failed to save cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:152
+#, c-format
+msgid "Failed to load client configuration file.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:157
+#, c-format
+msgid "Failed to read environment configuration data.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:174
+#, c-format
+msgid "Failed to get FQDN.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:194
+#, c-format
+msgid "Failed to load cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:211
+#, c-format
+msgid "Not yet implemented.\n"
+msgstr ""
+
+#: ../src/utils/pacmd.c:69
+msgid "No PulseAudio daemon running, or not running as session daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:74
+#, c-format
+msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:91
+#, c-format
+msgid "connect(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:99
+msgid "Failed to kill PulseAudio daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:107
+msgid "Daemon not responding."
+msgstr ""
+
+#: ../src/utils/pacmd.c:161
+#, c-format
+msgid "poll(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#, c-format
+msgid "read(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#, c-format
+msgid "write(): %s"
+msgstr ""
+
+#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+msgid "Cannot access autospawn lock."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/module-alsa-card.c:152
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
+#: ../src/modules/alsa/alsa-mixer.c:2931
+msgid "Off"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+msgid "High Fidelity Playback (A2DP)"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+msgid "High Fidelity Capture (A2DP)"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+msgid "Telephony Duplex (HSP/HFP)"
+msgstr ""
+
+#: ../src/modules/reserve-wrap.c:151
+msgid "PulseAudio Sound Server"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:569
+#: ../src/modules/module-rygel-media-server.c:583
+msgid "Output Devices"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:570
+#: ../src/modules/module-rygel-media-server.c:584
+msgid "Input Devices"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:774
+msgid "Audio on @HOSTNAME@"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1701
+msgid "Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1702
+msgid "Docking Station Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1703
+msgid "Docking Station Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1704
+msgid "Line-In"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1705
+msgid "Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1706
+msgid "External Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1707
+msgid "Internal Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1708
+msgid "Radio"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1709
+msgid "Video"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1710
+msgid "Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1711
+msgid "No Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1712
+msgid "Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1713
+msgid "No Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1714
+msgid "Amplifier"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1715
+msgid "No Amplifier"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1773
+msgid "Analog Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1774
+msgid "Analog Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1775
+msgid "Analog Line-In"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1776
+msgid "Analog Radio"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
+msgid "Analog Video"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1778
+msgid "Analog Output"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1779
+msgid "Analog Headphones"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1780
+msgid "Analog Output (LFE)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1781
+msgid "Analog Mono Output"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1981
+#, c-format
+msgid "%s+%s"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#, c-format
+msgid "%s / %s"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2790
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2791
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2792
+msgid "Analog Surround 2.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2793
+msgid "Analog Surround 3.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2794
+msgid "Analog Surround 3.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2795
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2796
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2797
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2798
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2799
+msgid "Analog Surround 6.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2800
+msgid "Analog Surround 6.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2801
+msgid "Analog Surround 7.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2802
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2803
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2804
+msgid "Digital Surround 4.0 (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2805
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2806
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2807
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2928
+msgid "Analog Mono Duplex"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2929
+msgid "Analog Stereo Duplex"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2930
+msgid "Digital Stereo Duplex (IEC958)"
+msgstr ""
+
commit 9fe8850951022159808df9c4a7bbe4117dae41e5
Author: shanky <shanky at fedoraproject.org>
Date: Thu Dec 10 12:10:17 2009 +0000
Sending translation for Kannada
diff --git a/po/kn.po b/po/kn.po
index 4b2750a..f11ef80 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.kn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-22 15:32+0530\n"
+"POT-Creation-Date: 2009-12-07 02:45+0000\n"
+"PO-Revision-Date: 2009-12-08 11:50+0530\n"
"Last-Translator: Shankar Prasad <svenkate at redhat.com>\n"
-"Language-Team: Kannada <en at li.org>\n"
+"Language-Team: Kannada <kde-l10n-kn at kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
@@ -320,8 +320,7 @@ msgstr "NDEBUG à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³, à²à²²à³à²²
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
-"FASTPATH à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³, à²à³à²µà²² ವà³à² ಮಾರà³à²à²¦ ಪà³à²°à²¤à²¿à²ªà²¾à²¦à²¨à³à²à²³à²¨à³à²¨à³ à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
+msgstr "FASTPATH à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³, à²à³à²µà²² ವà³à² ಮಾರà³à²à²¦ ಪà³à²°à²¤à²¿à²ªà²¾à²¦à²¨à³à²à²³à²¨à³à²¨à³ à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
@@ -1512,8 +1511,7 @@ msgstr "ಧà³à²µà²¨à²¿ à²à²¡à²¤à²µà²¨à³à²¨à³ ತà³à²°à³à²¯à³à²µà²²à³à²²
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr ""
-"à²à²à³à²à²°à²¿à²à³: ಸà³à²à²¿à²¸à²²à²¾à²¦ ನಮà³à²¨à³ ವಿವರಣà³à²¯à²¨à³à²¨à³ à²à²¡à²¤à²¦à²²à³à²²à²¿à²¨ ವಿವರಣà³à²¯à²¿à²à²¦ ತಿದà³à²¦à²¿à²¬à²°à³à²¯à²²à²¾à²à³à²¤à³à²¤à²¦à³."
+msgstr "à²à²à³à²à²°à²¿à²à³: ಸà³à²à²¿à²¸à²²à²¾à²¦ ನಮà³à²¨à³ ವಿವರಣà³à²¯à²¨à³à²¨à³ à²à²¡à²¤à²¦à²²à³à²²à²¿à²¨ ವಿವರಣà³à²¯à²¿à²à²¦ ತಿದà³à²¦à²¿à²¬à²°à³à²¯à²²à²¾à²à³à²¤à³à²¤à²¦à³."
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
@@ -1533,8 +1531,7 @@ msgstr "à²à²à³à²à²°à²¿à²à³: à²à²¡à²¤à²à³à²à³ à²à²¾à²¨à²²à³ ನà²
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"à²à²à²¦à³ %s ಸà³à²à³à²°à³à²®à³â à²
ನà³à²¨à³ ನಮà³à²¨à³ ವಿವರಣೠ'%s' ಯà³à²à²¦à²¿à²à³ ಹಾà²à³ à²à²¾à²¨à²²à³ ನà²à³à²·à³ '%s' ಯà³à²à²¦à²¿à²à³ "
"ತà³à²°à³à²¯à²²à²¾à²à³à²¤à³à²¤à²¿à²¦à³."
@@ -2126,8 +2123,7 @@ msgid "You have to specify a module index"
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à² ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"ನà³à²µà³ à²à²à²¦à²à³à²à²¿à²à²¤ ಹà³à²à³à²à²¿à²¨ ಸಿà²à²à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à³à²µà³à²¦à²¿à²²à³à²². ನà³à²µà³ à²à²à²¦à³ ಬà³à²²à²¿à²¯à²¨à³â ಮà³à²²à³à²¯à²µà²¨à³à²¨à³ "
"ಸà³à²à²¿à²¸à²¬à³à²à²¾à²à³à²¤à³à²¤à²¦à³."
@@ -2371,217 +2367,202 @@ msgstr "PulseAudio ಧà³à²µà²¨à²¿ ಪರಿà²à²¾à²°à²"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "à²à²à³âಪà³à²à³ ಸಾಧನà²à²³à³"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "à²à²¨à³âಪà³à²à³â ಸಾಧನà²à²³à³"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ ನಲà³à²²à²¿à²¨ à²à²¡à²¿à²¯à³"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "à²à²¨à³âಪà³à²à³"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ಡಾà²à²¿à²à²à³ ಸà³à²à³à²¶à²¨à³ à²à²¨à³âಪà³à²à³"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ಡಾà²à²¿à²à²à³ ಸà³à²à³à²¶à²¨à³ ಮà³à²à³à²°à³à²«à³à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ಲà³à²¨à³-à²à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ಮà³à²à³à²°à³à²«à³à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "ಬಾಹà³à²¯ ಮà³à²à³à²°à³à²«à³à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à²à²à²¤à²°à²¿à² à²à²¡à²¿à²¯à³"
+msgstr "à²à²à²¤à²°à²¿à² ಮà³à²à³à²°à³à²«à³à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "ರà³à²¡à²¿à²¯à³"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "ವà³à²¡à²¿à²¯à³"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "à²à²à³à²®à³à²¯à²¾à²à²¿à²à³ à²à³à²¨à³ à²à²à²à³à²°à³à²²à³"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "ಯಾವà³à²¦à³ à²à²à³à²®à³à²¯à²¾à²à²¿à²à³ à²à³à²¨à³ à²à²à²à³à²°à³à²²à³ à²à²²à³à²²"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "ಬà³à²¸à³à²à³"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "ಯಾವà³à²¦à³ ಬà³à²¸à³à²à³ à²à²²à³à²²"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "à²à²à²ªà³à²²à²¿à²«à²¯à²°à³"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "ಯಾವà³à²¦à³ à²à²à²ªà³à²²à²¿à²«à²¯à²°à³ à²à²²à³à²²"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ à²à²¨à³âಪà³à²à³"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಮà³à²à³à²°à³à²«à³à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಲà³à²¨à³-à²à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ರà³à²¡à²¿à²¯à³"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ವà³à²¡à²¿à²¯à³"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "ಶà³à²¨à³à²¯ à²à²à³âಪà³à²à³"
+msgstr "à²
ನಲಾà²à³ à²à²à³âಪà³à²à³"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಹà³à²¡à³âಫà³à²¨à³âà²à²³à³"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ à²à²à³âಪà³à²à³ (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಮà³à²¨à³ à²à²à³âಪà³à²à³"
-#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
msgid "%s+%s"
-msgstr "%s %s"
+msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
msgid "%s / %s"
-msgstr "%s %s"
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಮà³à²¨à³"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "ಸà³à²à³à²°à²¿à²¯à³"
+msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "ಸರà³à²à²¡à³â 4.1"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "ಸರà³à²à²¡à³â 4.0"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "ಸರà³à²à²¡à³â 4.1"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "ಸರà³à²à²¡à³â 4.0"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "ಸರà³à²à²¡à³â 4.1"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "ಸರà³à²à²¡à³â 5.0"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "ಸರà³à²à²¡à³â 5.1"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "ಸರà³à²à²¡à³â 4.0"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "ಸರà³à²à²¡à³â 4.1"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "ಸರà³à²à²¡à³â 4.0"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "ಸರà³à²à²¡à³â 7.1"
+msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ಡಿà²à²¿à²à²²à³ ಸà³à²à³à²°à²¿à²¯à³ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ಡಿà²à²¿à²à²²à³ ಸರà³à²à²¡à³ 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ಡಿà²à²¿à²à²²à³ ಸರà³à²à²¡à³ 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ಡಿà²à²¿à²à²²à³ ಸರà³à²à²¡à³ 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ಡಿà²à²¿à²à²²à³ ಸà³à²à³à²°à²¿à²¯à³ (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಮà³à²¨à³ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³ (IEC958)"
+
commit aae0edeac60917c60147b10d3ad713b82f8c5ad8
Author: ypoyarko <ypoyarko at fedoraproject.org>
Date: Fri Dec 11 00:44:53 2009 +0000
Sending translation for Russian
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..ef1918e
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,2239 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-10 20:05+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#, c-format
+msgid "%s %s"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1106
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1147
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1194
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:39
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:83
+msgid "Dummy Output"
+msgstr ""
+
+#: ../src/modules/module-ladspa-sink.c:49
+msgid "Virtual LADSPA sink"
+msgstr ""
+
+#: ../src/modules/module-ladspa-sink.c:53
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+
+#: ../src/modules/module-null-sink.c:55
+msgid "Clocked NULL sink"
+msgstr ""
+
+#: ../src/modules/module-null-sink.c:291
+msgid "Null Output"
+msgstr ""
+
+#: ../src/pulsecore/sink.c:2613
+msgid "Internal Audio"
+msgstr ""
+
+#: ../src/pulsecore/sink.c:2618
+msgid "Modem"
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:124
+msgid "Failed to find original lt_dlopen loader."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:129
+msgid "Failed to allocate new dl loader."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:142
+msgid "Failed to add bind-now-loader."
+msgstr ""
+
+#: ../src/daemon/main.c:141
+#, c-format
+msgid "Got signal %s."
+msgstr ""
+
+#: ../src/daemon/main.c:168
+msgid "Exiting."
+msgstr ""
+
+#: ../src/daemon/main.c:186
+#, c-format
+msgid "Failed to find user '%s'."
+msgstr ""
+
+#: ../src/daemon/main.c:191
+#, c-format
+msgid "Failed to find group '%s'."
+msgstr ""
+
+#: ../src/daemon/main.c:195
+#, c-format
+msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
+msgstr ""
+
+#: ../src/daemon/main.c:200
+#, c-format
+msgid "GID of user '%s' and of group '%s' don't match."
+msgstr ""
+
+#: ../src/daemon/main.c:205
+#, c-format
+msgid "Home directory of user '%s' is not '%s', ignoring."
+msgstr ""
+
+#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../src/daemon/main.c:220
+#, c-format
+msgid "Failed to change group list: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:236
+#, c-format
+msgid "Failed to change GID: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:252
+#, c-format
+msgid "Failed to change UID: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:271
+msgid "Successfully dropped root privileges."
+msgstr ""
+
+#: ../src/daemon/main.c:279
+msgid "System wide mode unsupported on this platform."
+msgstr ""
+
+#: ../src/daemon/main.c:297
+#, c-format
+msgid "setrlimit(%s, (%u, %u)) failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:474
+msgid "Failed to parse command line."
+msgstr ""
+
+#: ../src/daemon/main.c:541
+msgid "Daemon not running"
+msgstr ""
+
+#: ../src/daemon/main.c:543
+#, c-format
+msgid "Daemon running as PID %u"
+msgstr ""
+
+#: ../src/daemon/main.c:553
+#, c-format
+msgid "Failed to kill daemon: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:571
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+
+#: ../src/daemon/main.c:573
+msgid "Root privileges required."
+msgstr ""
+
+#: ../src/daemon/main.c:578
+msgid "--start not supported for system instances."
+msgstr ""
+
+#: ../src/daemon/main.c:583
+msgid "Running in system mode, but --disallow-exit not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:586
+msgid "Running in system mode, but --disallow-module-loading not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:589
+msgid "Running in system mode, forcibly disabling SHM mode!"
+msgstr ""
+
+#: ../src/daemon/main.c:594
+msgid "Running in system mode, forcibly disabling exit idle time!"
+msgstr ""
+
+#: ../src/daemon/main.c:621
+msgid "Failed to acquire stdio."
+msgstr ""
+
+#: ../src/daemon/main.c:627
+#, c-format
+msgid "pipe failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:632
+#, c-format
+msgid "fork() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#, c-format
+msgid "read() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:652
+msgid "Daemon startup failed."
+msgstr ""
+
+#: ../src/daemon/main.c:654
+msgid "Daemon startup successful."
+msgstr ""
+
+#: ../src/daemon/main.c:731
+#, c-format
+msgid "This is PulseAudio %s"
+msgstr ""
+
+#: ../src/daemon/main.c:732
+#, c-format
+msgid "Compilation host: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:733
+#, c-format
+msgid "Compilation CFLAGS: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:736
+#, c-format
+msgid "Running on host: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:739
+#, c-format
+msgid "Found %u CPUs."
+msgstr ""
+
+#: ../src/daemon/main.c:741
+#, c-format
+msgid "Page size is %lu bytes"
+msgstr ""
+
+#: ../src/daemon/main.c:744
+msgid "Compiled with Valgrind support: yes"
+msgstr ""
+
+#: ../src/daemon/main.c:746
+msgid "Compiled with Valgrind support: no"
+msgstr ""
+
+#: ../src/daemon/main.c:749
+#, c-format
+msgid "Running in valgrind mode: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:752
+msgid "Optimized build: yes"
+msgstr ""
+
+#: ../src/daemon/main.c:754
+msgid "Optimized build: no"
+msgstr ""
+
+#: ../src/daemon/main.c:758
+msgid "NDEBUG defined, all asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:760
+msgid "FASTPATH defined, only fast path asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:762
+msgid "All asserts enabled."
+msgstr ""
+
+#: ../src/daemon/main.c:766
+msgid "Failed to get machine ID"
+msgstr ""
+
+#: ../src/daemon/main.c:769
+#, c-format
+msgid "Machine ID is %s."
+msgstr ""
+
+#: ../src/daemon/main.c:773
+#, c-format
+msgid "Session ID is %s."
+msgstr ""
+
+#: ../src/daemon/main.c:779
+#, c-format
+msgid "Using runtime directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:784
+#, c-format
+msgid "Using state directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:787
+#, c-format
+msgid "Using modules directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:789
+#, c-format
+msgid "Running in system mode: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:792
+msgid ""
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
+msgstr ""
+
+#: ../src/daemon/main.c:809
+msgid "pa_pid_file_create() failed."
+msgstr ""
+
+#: ../src/daemon/main.c:819
+msgid "Fresh high-resolution timers available! Bon appetit!"
+msgstr ""
+
+#: ../src/daemon/main.c:821
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+
+#: ../src/daemon/main.c:844
+msgid "pa_core_new() failed."
+msgstr ""
+
+#: ../src/daemon/main.c:904
+msgid "Failed to initialize daemon."
+msgstr ""
+
+#: ../src/daemon/main.c:909
+msgid "Daemon startup without any loaded modules, refusing to work."
+msgstr ""
+
+#: ../src/daemon/main.c:926
+msgid "Daemon startup complete."
+msgstr ""
+
+#: ../src/daemon/main.c:932
+msgid "Daemon shutdown initiated."
+msgstr ""
+
+#: ../src/daemon/main.c:954
+msgid "Daemon terminated."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:115
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" --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"
+" -k --kill Kill 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"
+" with elevated RLIMIT_NICE)\n"
+" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" (only available as root, when SUID "
+"or\n"
+" with elevated RLIMIT_RTPRIO)\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"
+" time passed\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"
+" 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-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"
+" possible values)\n"
+" --use-pid-file[=BOOL] Create a PID file\n"
+" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" platforms that support it.\n"
+" --disable-shm[=BOOL] Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\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"
+" after startup\n"
+"\n"
+" -n Don't load default script file\n"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:247
+msgid "--daemonize expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:254
+msgid "--fail expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:264
+msgid ""
+"--log-level expects log level argument (either numeric in range 0..4 or one "
+"of debug, info, notice, warn, error)."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:276
+msgid "--high-priority expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:283
+msgid "--realtime expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:290
+msgid "--disallow-module-loading expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:297
+msgid "--disallow-exit expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:304
+msgid "--use-pid-file expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:321
+msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:328
+msgid "--log-time expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:335
+msgid "--log-meta expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:354
+#, c-format
+msgid "Invalid resample method '%s'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:361
+msgid "--system expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:368
+msgid "--no-cpu-limit expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:375
+msgid "--disable-shm expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:60
+#, c-format
+msgid "Name: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:63
+#, c-format
+msgid "No module information available\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:66
+#, c-format
+msgid "Version: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:68
+#, c-format
+msgid "Description: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:70
+#, c-format
+msgid "Author: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:72
+#, c-format
+msgid "Usage: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:73
+#, c-format
+msgid "Load Once: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:75
+#, c-format
+msgid "DEPRECATION WARNING: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:79
+#, c-format
+msgid "Path: %s\n"
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:232
+#, c-format
+msgid "[%s:%u] Invalid log target '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:248
+#, c-format
+msgid "[%s:%u] Invalid log level '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:264
+#, c-format
+msgid "[%s:%u] Invalid resample method '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:287
+#, c-format
+msgid "[%s:%u] Invalid rlimit '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:294
+#, c-format
+msgid "[%s:%u] rlimit not supported on this platform."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:310
+#, c-format
+msgid "[%s:%u] Invalid sample format '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:328
+#, c-format
+msgid "[%s:%u] Invalid sample rate '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:352
+#, c-format
+msgid "[%s:%u] Invalid sample channels '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:370
+#, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:388
+#, c-format
+msgid "[%s:%u] Invalid number of fragments '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:406
+#, c-format
+msgid "[%s:%u] Invalid fragment size '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:424
+#, c-format
+msgid "[%s:%u] Invalid nice level '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:546
+#, c-format
+msgid "Failed to open configuration file: %s"
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:562
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:638
+#, c-format
+msgid "### Read from configuration file: %s ###\n"
+msgstr ""
+
+#: ../src/daemon/caps.c:62
+msgid "Cleaning up privileges."
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
+msgid "Mono"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:107
+msgid "Front Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:108
+msgid "Front Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:109
+msgid "Front Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:111
+msgid "Rear Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:112
+msgid "Rear Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:113
+msgid "Rear Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:115
+msgid "Low Frequency Emmiter"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:117
+msgid "Front Left-of-center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:118
+msgid "Front Right-of-center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:120
+msgid "Side Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:121
+msgid "Side Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:123
+msgid "Auxiliary 0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:124
+msgid "Auxiliary 1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:125
+msgid "Auxiliary 2"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:126
+msgid "Auxiliary 3"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:127
+msgid "Auxiliary 4"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:128
+msgid "Auxiliary 5"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:129
+msgid "Auxiliary 6"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:130
+msgid "Auxiliary 7"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:131
+msgid "Auxiliary 8"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:132
+msgid "Auxiliary 9"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:133
+msgid "Auxiliary 10"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:134
+msgid "Auxiliary 11"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:135
+msgid "Auxiliary 12"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:136
+msgid "Auxiliary 13"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:137
+msgid "Auxiliary 14"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:138
+msgid "Auxiliary 15"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:139
+msgid "Auxiliary 16"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:140
+msgid "Auxiliary 17"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:141
+msgid "Auxiliary 18"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:142
+msgid "Auxiliary 19"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:143
+msgid "Auxiliary 20"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:144
+msgid "Auxiliary 21"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:145
+msgid "Auxiliary 22"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:146
+msgid "Auxiliary 23"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:147
+msgid "Auxiliary 24"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:148
+msgid "Auxiliary 25"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:149
+msgid "Auxiliary 26"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:150
+msgid "Auxiliary 27"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:151
+msgid "Auxiliary 28"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:152
+msgid "Auxiliary 29"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:153
+msgid "Auxiliary 30"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:154
+msgid "Auxiliary 31"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:156
+msgid "Top Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:158
+msgid "Top Front Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:159
+msgid "Top Front Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:160
+msgid "Top Front Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:162
+msgid "Top Rear Center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:163
+msgid "Top Rear Left"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:164
+msgid "Top Rear Right"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
+msgid "(invalid)"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:761
+msgid "Stereo"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:766
+msgid "Surround 4.0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:772
+msgid "Surround 4.1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:778
+msgid "Surround 5.0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:784
+msgid "Surround 5.1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:791
+msgid "Surround 7.1"
+msgstr ""
+
+#: ../src/pulse/error.c:43
+msgid "OK"
+msgstr ""
+
+#: ../src/pulse/error.c:44
+msgid "Access denied"
+msgstr ""
+
+#: ../src/pulse/error.c:45
+msgid "Unknown command"
+msgstr ""
+
+#: ../src/pulse/error.c:46
+msgid "Invalid argument"
+msgstr ""
+
+#: ../src/pulse/error.c:47
+msgid "Entity exists"
+msgstr ""
+
+#: ../src/pulse/error.c:48
+msgid "No such entity"
+msgstr ""
+
+#: ../src/pulse/error.c:49
+msgid "Connection refused"
+msgstr ""
+
+#: ../src/pulse/error.c:50
+msgid "Protocol error"
+msgstr ""
+
+#: ../src/pulse/error.c:51
+msgid "Timeout"
+msgstr ""
+
+#: ../src/pulse/error.c:52
+msgid "No authorization key"
+msgstr ""
+
+#: ../src/pulse/error.c:53
+msgid "Internal error"
+msgstr ""
+
+#: ../src/pulse/error.c:54
+msgid "Connection terminated"
+msgstr ""
+
+#: ../src/pulse/error.c:55
+msgid "Entity killed"
+msgstr ""
+
+#: ../src/pulse/error.c:56
+msgid "Invalid server"
+msgstr ""
+
+#: ../src/pulse/error.c:57
+msgid "Module initalization failed"
+msgstr ""
+
+#: ../src/pulse/error.c:58
+msgid "Bad state"
+msgstr ""
+
+#: ../src/pulse/error.c:59
+msgid "No data"
+msgstr ""
+
+#: ../src/pulse/error.c:60
+msgid "Incompatible protocol version"
+msgstr ""
+
+#: ../src/pulse/error.c:61
+msgid "Too large"
+msgstr ""
+
+#: ../src/pulse/error.c:62
+msgid "Not supported"
+msgstr ""
+
+#: ../src/pulse/error.c:63
+msgid "Unknown error code"
+msgstr ""
+
+#: ../src/pulse/error.c:64
+msgid "No such extension"
+msgstr ""
+
+#: ../src/pulse/error.c:65
+msgid "Obsolete functionality"
+msgstr ""
+
+#: ../src/pulse/error.c:66
+msgid "Missing implementation"
+msgstr ""
+
+#: ../src/pulse/error.c:67
+msgid "Client forked"
+msgstr ""
+
+#: ../src/pulse/error.c:68
+msgid "Input/Output error"
+msgstr ""
+
+#: ../src/pulse/error.c:69
+msgid "Device or resource busy"
+msgstr ""
+
+#: ../src/pulse/sample.c:172
+#, c-format
+msgid "%s %uch %uHz"
+msgstr ""
+
+#: ../src/pulse/sample.c:184
+#, c-format
+msgid "%0.1f GiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:186
+#, c-format
+msgid "%0.1f MiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:188
+#, c-format
+msgid "%0.1f KiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:190
+#, c-format
+msgid "%u B"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
+msgid "XOpenDisplay() failed"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:93
+msgid "Failed to parse cookie data"
+msgstr ""
+
+#: ../src/pulse/client-conf.c:111
+#, c-format
+msgid "Failed to open configuration file '%s': %s"
+msgstr ""
+
+#: ../src/pulse/context.c:550
+msgid "No cookie loaded. Attempting to connect without."
+msgstr ""
+
+#: ../src/pulse/context.c:693
+#, c-format
+msgid "fork(): %s"
+msgstr ""
+
+#: ../src/pulse/context.c:748
+#, c-format
+msgid "waitpid(): %s"
+msgstr ""
+
+#: ../src/pulse/context.c:1438
+#, c-format
+msgid "Received message for unknown extension '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:108
+#, c-format
+msgid "Failed to drain stream: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:113
+msgid "Playback stream drained."
+msgstr ""
+
+#: ../src/utils/pacat.c:123
+msgid "Draining connection to server."
+msgstr ""
+
+#: ../src/utils/pacat.c:136
+#, c-format
+msgid "pa_stream_drain(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:159
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:197
+#, c-format
+msgid "pa_stream_begin_write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#, c-format
+msgid "pa_stream_peek() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:307
+msgid "Stream successfully created."
+msgstr ""
+
+#: ../src/utils/pacat.c:310
+#, c-format
+msgid "pa_stream_get_buffer_attr() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:314
+#, c-format
+msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:317
+#, c-format
+msgid "Buffer metrics: maxlength=%u, fragsize=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:321
+#, c-format
+msgid "Using sample spec '%s', channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:325
+#, c-format
+msgid "Connected to device %s (%u, %ssuspended)."
+msgstr ""
+
+#: ../src/utils/pacat.c:335
+#, c-format
+msgid "Stream error: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:345
+#, c-format
+msgid "Stream device suspended.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:347
+#, c-format
+msgid "Stream device resumed.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:355
+#, c-format
+msgid "Stream underrun.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:362
+#, c-format
+msgid "Stream overrun.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:369
+#, c-format
+msgid "Stream started.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:376
+#, c-format
+msgid "Stream moved to device %s (%u, %ssuspended).%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:376
+msgid "not "
+msgstr ""
+
+#: ../src/utils/pacat.c:383
+#, c-format
+msgid "Stream buffer attributes changed.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:415
+#, c-format
+msgid "Connection established.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:418
+#, c-format
+msgid "pa_stream_new() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:450
+#, c-format
+msgid "pa_stream_connect_playback() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:456
+#, c-format
+msgid "pa_stream_connect_record() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#, c-format
+msgid "Connection failure: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:503
+msgid "Got EOF."
+msgstr ""
+
+#: ../src/utils/pacat.c:540
+#, c-format
+msgid "write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:561
+msgid "Got signal, exiting."
+msgstr ""
+
+#: ../src/utils/pacat.c:575
+#, c-format
+msgid "Failed to get latency: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:580
+#, c-format
+msgid "Time: %0.3f sec; Latency: %0.0f usec."
+msgstr ""
+
+#: ../src/utils/pacat.c:599
+#, c-format
+msgid "pa_stream_update_timing_info() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:609
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+"\n"
+" -r, --record Create a connection for recording\n"
+" -p, --playback Create a connection for playback\n"
+"\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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
+" being connected to.\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"
+" --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"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
+" --raw Record/play raw PCM data.\n"
+" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --list-file-formats List available file formats.\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:731
+#, c-format
+msgid ""
+"pacat %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#, c-format
+msgid "Invalid client name '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:779
+#, c-format
+msgid "Invalid stream name '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:816
+#, c-format
+msgid "Invalid channel map '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:845
+#, c-format
+msgid "Invalid latency specification '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:852
+#, c-format
+msgid "Invalid process time specification '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:864
+#, c-format
+msgid "Invalid property '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:881
+#, c-format
+msgid "Unknown file format %s."
+msgstr ""
+
+#: ../src/utils/pacat.c:900
+msgid "Invalid sample specification"
+msgstr ""
+
+#: ../src/utils/pacat.c:910
+#, c-format
+msgid "open(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:915
+#, c-format
+msgid "dup2(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:922
+msgid "Too many arguments."
+msgstr ""
+
+#: ../src/utils/pacat.c:933
+msgid "Failed to generate sample specification for file."
+msgstr ""
+
+#: ../src/utils/pacat.c:953
+msgid "Failed to open audio file."
+msgstr ""
+
+#: ../src/utils/pacat.c:959
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+msgid "Failed to determine sample specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:971
+msgid "Warning: Failed to determine channel map from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:982
+msgid "Channel map doesn't match sample specification"
+msgstr ""
+
+#: ../src/utils/pacat.c:993
+msgid "Warning: failed to write channel map to file."
+msgstr ""
+
+#: ../src/utils/pacat.c:1008
+#, c-format
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:1009
+msgid "recording"
+msgstr ""
+
+#: ../src/utils/pacat.c:1009
+msgid "playback"
+msgstr ""
+
+#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+msgid "pa_mainloop_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1054
+msgid "io_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+msgid "pa_context_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#, c-format
+msgid "pa_context_connect() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:1075
+msgid "pa_context_rttime_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+msgid "pa_mainloop_run() failed."
+msgstr ""
+
+#: ../src/utils/pasuspender.c:81
+#, c-format
+msgid "fork(): %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:92
+#, c-format
+msgid "execvp(): %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:109
+#, c-format
+msgid "Failure to suspend: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:124
+#, c-format
+msgid "Failure to resume: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:147
+#, c-format
+msgid "WARNING: Sound server is not local, not suspending.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:159
+#, c-format
+msgid "Connection failure: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:176
+#, c-format
+msgid "Got SIGINT, exiting.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:194
+#, c-format
+msgid "WARNING: Child process terminated by signal %u\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:212
+#, c-format
+msgid ""
+"%s [options] ... \n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" -s, --server=SERVER The name of the server to connect "
+"to\n"
+"\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:248
+#, c-format
+msgid ""
+"pasuspender %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:277
+#, c-format
+msgid "pa_mainloop_new() failed.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:290
+#, c-format
+msgid "pa_context_new() failed.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:298
+#, c-format
+msgid "pa_mainloop_run() failed.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:135
+#, c-format
+msgid "Failed to get statistics: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:141
+#, c-format
+msgid "Currently in use: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:144
+#, c-format
+msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:147
+#, c-format
+msgid "Sample cache size: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:156
+#, c-format
+msgid "Failed to get server information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:164
+#, c-format
+msgid ""
+"User name: %s\n"
+"Host Name: %s\n"
+"Server Name: %s\n"
+"Server Version: %s\n"
+"Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
+"Default Sink: %s\n"
+"Default Source: %s\n"
+"Cookie: %08x\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:205
+#, c-format
+msgid "Failed to get sink information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:221
+#, c-format
+msgid ""
+"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:268 ../src/utils/pactl.c:360
+#, c-format
+msgid "\tPorts:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#, c-format
+msgid "\tActive Port: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:297
+#, c-format
+msgid "Failed to get source information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:313
+#, c-format
+msgid ""
+"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:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:645
+msgid "n/a"
+msgstr ""
+
+#: ../src/utils/pactl.c:375
+#, c-format
+msgid "Failed to get module information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:393
+#, c-format
+msgid ""
+"Module #%u\n"
+"\tName: %s\n"
+"\tArgument: %s\n"
+"\tUsage counter: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:412
+#, c-format
+msgid "Failed to get client information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:430
+#, c-format
+msgid ""
+"Client #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:447
+#, c-format
+msgid "Failed to get card information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:465
+#, c-format
+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:479
+#, c-format
+msgid "\tProfiles:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:485
+#, c-format
+msgid "\tActive Profile: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:496
+#, c-format
+msgid "Failed to get sink input information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:515
+#, c-format
+msgid ""
+"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:554
+#, c-format
+msgid "Failed to get source output information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:574
+#, c-format
+msgid ""
+"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:605
+#, c-format
+msgid "Failed to get sample information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:623
+#, c-format
+msgid ""
+"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:653 ../src/utils/pactl.c:663
+#, c-format
+msgid "Failure: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:687
+#, c-format
+msgid "Failed to upload sample: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:704
+msgid "Premature end of file"
+msgstr ""
+
+#: ../src/utils/pactl.c:863
+msgid "Got SIGINT, exiting."
+msgstr ""
+
+#: ../src/utils/pactl.c:869
+#, c-format
+msgid ""
+"%s [options] stat\n"
+"%s [options] list\n"
+"%s [options] exit\n"
+"%s [options] upload-sample FILENAME [NAME]\n"
+"%s [options] play-sample NAME [SINK]\n"
+"%s [options] remove-sample NAME\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [options] load-module NAME [ARGS ...]\n"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
+msgstr ""
+
+#: ../src/utils/pactl.c:933
+#, c-format
+msgid ""
+"pactl %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:979
+msgid "Please specify a sample file to load"
+msgstr ""
+
+#: ../src/utils/pactl.c:992
+msgid "Failed to open sound file."
+msgstr ""
+
+#: ../src/utils/pactl.c:1004
+msgid "Warning: Failed to determine sample specification from file."
+msgstr ""
+
+#: ../src/utils/pactl.c:1014
+msgid "You have to specify a sample name to play"
+msgstr ""
+
+#: ../src/utils/pactl.c:1026
+msgid "You have to specify a sample name to remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:1035
+msgid "You have to specify a sink input index and a sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:1045
+msgid "You have to specify a source output index and a source"
+msgstr ""
+
+#: ../src/utils/pactl.c:1060
+msgid "You have to specify a module name and arguments."
+msgstr ""
+
+#: ../src/utils/pactl.c:1080
+msgid "You have to specify a module index"
+msgstr ""
+
+#: ../src/utils/pactl.c:1090
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1103
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1115
+msgid "You have to specify a card name/index and a profile name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1126
+msgid "You have to specify a sink name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1137
+msgid "You have to specify a source name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1149
+msgid "You have to specify a sink name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+msgid "Invalid volume specification"
+msgstr ""
+
+#: ../src/utils/pactl.c:1166
+msgid "You have to specify a source name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1183
+msgid "You have to specify a sink input index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1188
+msgid "Invalid sink input index"
+msgstr ""
+
+#: ../src/utils/pactl.c:1204
+msgid "You have to specify a sink name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1221
+msgid "You have to specify a source name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1238
+msgid "You have to specify a sink input index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1243
+msgid "Invalid sink input index specification"
+msgstr ""
+
+#: ../src/utils/pactl.c:1262
+msgid "No valid command specified."
+msgstr ""
+
+#: ../src/utils/pax11publish.c:61
+#, c-format
+msgid ""
+"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
+"\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"
+" -r Remove PulseAudio data from X11 display\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:94
+#, c-format
+msgid "Failed to parse command line.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:108
+#, c-format
+msgid "Server: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:110
+#, c-format
+msgid "Source: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:112
+#, c-format
+msgid "Sink: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:114
+#, c-format
+msgid "Cookie: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:132
+#, c-format
+msgid "Failed to parse cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:137
+#, c-format
+msgid "Failed to save cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:152
+#, c-format
+msgid "Failed to load client configuration file.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:157
+#, c-format
+msgid "Failed to read environment configuration data.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:174
+#, c-format
+msgid "Failed to get FQDN.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:194
+#, c-format
+msgid "Failed to load cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:211
+#, c-format
+msgid "Not yet implemented.\n"
+msgstr ""
+
+#: ../src/utils/pacmd.c:69
+msgid "No PulseAudio daemon running, or not running as session daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:74
+#, c-format
+msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:91
+#, c-format
+msgid "connect(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:99
+msgid "Failed to kill PulseAudio daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:107
+msgid "Daemon not responding."
+msgstr ""
+
+#: ../src/utils/pacmd.c:161
+#, c-format
+msgid "poll(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#, c-format
+msgid "read(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#, c-format
+msgid "write(): %s"
+msgstr ""
+
+#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+msgid "Cannot access autospawn lock."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/module-alsa-card.c:152
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
+#: ../src/modules/alsa/alsa-mixer.c:2931
+msgid "Off"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+msgid "High Fidelity Playback (A2DP)"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+msgid "High Fidelity Capture (A2DP)"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+msgid "Telephony Duplex (HSP/HFP)"
+msgstr ""
+
+#: ../src/modules/reserve-wrap.c:151
+msgid "PulseAudio Sound Server"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:569
+#: ../src/modules/module-rygel-media-server.c:583
+msgid "Output Devices"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:570
+#: ../src/modules/module-rygel-media-server.c:584
+msgid "Input Devices"
+msgstr ""
+
+#: ../src/modules/module-rygel-media-server.c:774
+msgid "Audio on @HOSTNAME@"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1701
+msgid "Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1702
+msgid "Docking Station Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1703
+msgid "Docking Station Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1704
+msgid "Line-In"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1705
+msgid "Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1706
+msgid "External Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1707
+msgid "Internal Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1708
+msgid "Radio"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1709
+msgid "Video"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1710
+msgid "Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1711
+msgid "No Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1712
+msgid "Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1713
+msgid "No Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1714
+msgid "Amplifier"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1715
+msgid "No Amplifier"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1773
+msgid "Analog Input"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1774
+msgid "Analog Microphone"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1775
+msgid "Analog Line-In"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1776
+msgid "Analog Radio"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
+msgid "Analog Video"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1778
+msgid "Analog Output"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1779
+msgid "Analog Headphones"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1780
+msgid "Analog Output (LFE)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1781
+msgid "Analog Mono Output"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1981
+#, c-format
+msgid "%s+%s"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#, c-format
+msgid "%s / %s"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2790
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2791
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2792
+msgid "Analog Surround 2.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2793
+msgid "Analog Surround 3.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2794
+msgid "Analog Surround 3.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2795
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2796
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2797
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2798
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2799
+msgid "Analog Surround 6.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2800
+msgid "Analog Surround 6.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2801
+msgid "Analog Surround 7.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2802
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2803
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2804
+msgid "Digital Surround 4.0 (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2805
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2806
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2807
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2928
+msgid "Analog Mono Duplex"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2929
+msgid "Analog Stereo Duplex"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:2930
+msgid "Digital Stereo Duplex (IEC958)"
+msgstr ""
commit 2d5f61be7281e3ba4c4834508276605cc683c852
Author: amitakhya <amitakhya at fedoraproject.org>
Date: Fri Dec 11 11:56:19 2009 +0000
Sending translation for Assamese
diff --git a/po/as.po b/po/as.po
index f7b2dee..9586cba 100644
--- a/po/as.po
+++ b/po/as.po
@@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.as\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-09-08 21:04+0530\n"
+"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"PO-Revision-Date: 2009-12-11 17:11+0530\n"
"Last-Translator: Amitakhya Phukan <aphukan at fedoraproject.org>\n"
-"Language-Team: Assamese\n"
+"Language-Team: Assamese <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 0.2\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
@@ -60,15 +60,15 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "সদাà§à§ à¦
নà§à¦¤à¦¤ à¦à¦à¦¾ sink লà§à¦¡ à¦à§°à¦¿ ৰà¦à¦¾ হ'ব, পà§à§°à§à§à¦à¦¨à¦¤ null sink বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হ'ব"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "ডামি নিৰà§à¦à¦®"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr "à¦à¦¾à¦°à§à¦à§à§à¦¾à¦² LADSPA sink"
+msgstr "à¦à¦¾à§°à§à¦à§à§à¦¾à¦² LADSPA sink"
#: ../src/modules/module-ladspa-sink.c:53
msgid ""
@@ -86,11 +86,11 @@ msgstr ""
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "NULL sink ৰ সমৠনিৰà§à¦§à¦¾à§°à¦£"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
-msgstr ""
+msgstr "Null ফলাফল"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -110,7 +110,7 @@ msgstr "নতà§à¦¨ dl loader বিতৰণ à¦à§°à¦¿à¦¬à¦²à§ বিফল
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr "bind-now-loader যà§à¦ à¦à§°à¦¿à¦¬à¦²à§ বিফল ।"
+msgstr "bind now loader যà§à¦ à¦à§°à¦¿à¦¬à¦²à§ বিফল ।"
#: ../src/daemon/main.c:141
#, c-format
@@ -202,23 +202,23 @@ msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr ""
-"root পৰিà¦à§à§ à¦à¦ পà§à§°à§à¦à§à§°à¦¾à¦® সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà§à§±à¦¾ à¦à¦à¦¿à¦¤ নহৠ(ন'হ'লৠ--system à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§) ।"
+"root পৰিà¦à§à§ à¦à¦ পà§à§°à§à¦à§à§°à¦¾à¦® সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà§à§±à¦¾ à¦à¦à¦¿à¦¤ নহৠ(ন'হ'লৠsystem à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§) ।"
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr "Root-ৰ à¦
ধিà¦à¦¾à§° à¦à§±à¦¶à§à¦¯à¦ ।"
+msgstr "Root ৰ à¦
ধিà¦à¦¾à§° à¦à§±à¦¶à§à¦¯à¦ ।"
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
-msgstr "পà§à§°à¦£à¦¾à¦²à§ à¦à¦¾à¦¨à§à¦à¦¿à§° à¦à§à¦·à§à¦¤à§à§°à¦¤ --start সমৰà§à¦¥à¦¿à¦¤ নহৠ।"
+msgstr "পà§à§°à¦£à¦¾à¦²à§ à¦à¦¾à¦¨à§à¦à¦¿à§° à¦à§à¦·à§à¦¤à§à§°à¦¤ start সমৰà§à¦¥à¦¿à¦¤ নহৠ।"
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¿à¦¨à§à¦¤à§ --disallow-exit নিৰà§à¦§à¦¾à§°à¦¿à¦¤ নহà§!"
+msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¿à¦¨à§à¦¤à§ disallow exit নিৰà§à¦§à¦¾à§°à¦¿à¦¤ নহà§!"
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¿à¦¨à§à¦¤à§ --disallow-module-loading নিৰà§à¦§à¦¾à§°à¦¿à¦¤ নহà§!"
+msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¿à¦¨à§à¦¤à§ disallow module loading নিৰà§à¦§à¦¾à§°à¦¿à¦¤ নহà§!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
@@ -336,7 +336,7 @@ msgstr "সà§à¦¶à¦¾à¦¨ ID হল %s।"
#: ../src/daemon/main.c:779
#, c-format
msgid "Using runtime directory %s."
-msgstr "ৰান-à¦à¦¾à¦à¦® পà¦à§à¦à¦¿à¦à¦¾ %s বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà§à¦à§ ।"
+msgstr "ৰান à¦à¦¾à¦à¦® পà¦à§à¦à¦¿à¦à¦¾ %s বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà§à¦à§ ।"
#: ../src/daemon/main.c:784
#, c-format
@@ -346,7 +346,7 @@ msgstr "à¦
ৱসà§à¦¥à¦¾à¦¸à§à¦à¦ পà¦à§à¦à¦¿à¦à¦¾ %s বà§à¦¯à§±à¦¹
#: ../src/daemon/main.c:787
#, c-format
msgid "Using modules directory %s."
-msgstr "মডিà¦à¦² ডিরà§à¦à§à¦à¦°à¦¿ %s বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
+msgstr "মডিà¦à¦² ডিৰà§à¦à§à¦à§°à¦¿ %s বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
#: ../src/daemon/main.c:789
#, c-format
@@ -362,9 +362,9 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
-"à¦à¦ªà¦¨à¦¿ সিসà§à¦à§à¦® মà§à¦¡à§ PA সà¦à§à¦à¦¾à¦²à¦¿à¦¤ à¦à¦°à¦à§à¦¨ à¦à¦¬à¦ à¦à¦à¦¿ না à¦à¦°à¦¾à¦ বাà¦à§à¦à¦¨à§à§à¥¤\n"
-"à¦à¦° ফলৠপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à¦¾à¦®à¦¤ ফলাফল না পাà¦à§à¦¾à¦° সমà§à¦à¦¾à¦¬à¦¨à¦¾ রà§à§à¦à§à¥¤\n"
-"সিসà§à¦à§à¦® মà§à¦¡à§ বà§à¦¯à¦¬à¦¹à¦¾à¦°à§à¦° সমসà§à¦¯à¦¾ সমà§à¦ªà¦°à§à¦à§ à¦à¦¾à¦¨à¦¤à§ হলৠhttp://pulseaudio.org/wiki/"
+"à¦à¦ªà¦¨à¦¿ সিসà§à¦à§à¦® মà§à¦¡à§ PA সà¦à§à¦à¦¾à¦²à¦¿à¦¤ à¦à§°à¦à§à¦¨ à¦à¦¬à¦ à¦à¦à¦¿ না à¦à§°à¦¾à¦ বাà¦à§à¦à¦¨à§à§à¥¤\n"
+"à¦à§° ফলৠপà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¾à¦®à¦¤ ফলাফল না পাà¦à§à¦¾à§° সমà§à¦à¦¾à¦¬à¦¨à¦¾ ৰà§à§à¦à§à¥¤\n"
+"সিসà§à¦à§à¦® মà§à¦¡à§ বà§à¦¯à§±à¦¹à¦¾à§°à§à§° সমসà§à¦¯à¦¾ সমà§à¦ªà§°à§à¦à§ à¦à¦¾à¦¨à¦¤à§ হলৠhttp://pulseaudio.org/wiki/"
"WhatIsWrongWithSystemMode দà§à¦à§à¦¨à¥¤"
#: ../src/daemon/main.c:809
@@ -373,14 +373,14 @@ msgstr "pa_pid_file_create() বà§à¦¯à§°à§à¦¥ ।"
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr "নতà§à¦¨ high-resolution timers পà§à§±à¦¾ হà§! à¦
à¦à¦¿à¦¨à¦¨à§à¦¦à¦¨!"
+msgstr "নতà§à¦¨ high resolution timers পà§à§±à¦¾ হà§! à¦
à¦à¦¿à¦¨à¦¨à§à¦¦à¦¨!"
#: ../src/daemon/main.c:821
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
-"শà§à§°à§à¦®à¦¾à¦¨, à¦à¦ªà§à¦¨à¦¾à§° à¦à¦¾à§°à§à¦£à§à¦² পà§à§°à¦£à¦¿! high-resolution timer সà¦à§à§°à¦¿à§ থà¦à¦¾ Linux ঠà¦à¦à¦¿ "
+"শà§à§°à§à¦®à¦¾à¦¨, à¦à¦ªà§à¦¨à¦¾à§° à¦à¦¾à§°à§à¦£à§à¦² পà§à§°à¦£à¦¿! high resolution timer সà¦à§à§°à¦¿à§ থà¦à¦¾ Linux ঠà¦à¦à¦¿ "
"à¦à¦ªà¦¦à§à¦¶ দিà§à¦¾ হà§!"
#: ../src/daemon/main.c:844
@@ -484,108 +484,108 @@ msgstr ""
"%s [options]\n"
"\n"
"COMMANDS:\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
-" --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 "
+" h, help Show this help\n"
+" version Show version\n"
+" 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 "
+" start Start the daemon if it is not "
"running\n"
-" -k --kill Kill a running daemon\n"
-" --check Check for a running daemon (only "
+" k kill Kill 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"
+" 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"
" with elevated RLIMIT_NICE)\n"
-" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" realtime[=BOOL] Try to enable realtime scheduling\n"
" (only available as root, when SUID "
"or\n"
" with elevated RLIMIT_RTPRIO)\n"
-" --disallow-module-loading[=BOOL] Disallow module user requested "
+" 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 "
+" disallow exit[=BOOL] Disallow user requested exit\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 "
+" module idle time=SECS Unload autoloaded modules when idle "
"and\n"
" this time passed\n"
-" --scache-idle-time=SECS Unload autoloaded samples when idle "
+" 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 "
+" 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-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 "
+" 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"
+" resample method=METHOD Use the specified resampling method\n"
+" (See dump resample methods for\n"
" possible values)\n"
-" --use-pid-file[=BOOL] Create a PID file\n"
-" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" use pid file[=BOOL] Create a PID file\n"
+" no cpu limit[=BOOL] Do not install CPU load limiter on\n"
" platforms that support it.\n"
-" --disable-shm[=BOOL] Disable shared memory support.\n"
+" disable shm[=BOOL] Disable shared memory support.\n"
"\n"
"STARTUP SCRIPT:\n"
-" -L, --load=\"MODULE ARGUMENTS\" Load the specified plugin module "
+" 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 "
+" F, file=FILENAME Run the specified script\n"
+" C Open a command line on the running "
"TTY\n"
" after startup\n"
"\n"
-" -n Don't load default script file\n"
+" n Don't load default script file\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
-msgstr "--daemonize দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " daemonize দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:254
msgid "--fail expects boolean argument"
-msgstr "--fail দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " fail দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:264
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of debug, info, notice, warn, error)."
msgstr ""
-"--log-level ৰ à¦à¦¾à§°à¦£à§ লঠসà§à¦¤à§°à§° তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ (হৠসà¦à¦à§à¦¯à¦¾ ০..৪ ৰ সà§à¦®à¦¾à¦¤ বা debug, "
+" log level ৰ à¦à¦¾à§°à¦£à§ লঠসà§à¦¤à§°à§° তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤ (হৠসà¦à¦à§à¦¯à¦¾ ০..৪ ৰ সà§à¦®à¦¾à¦¤ বা debug, "
"info, notice, warn, error ৰ যিà¦à§à¦¨à§ à¦à¦à¦¾) ।"
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
-msgstr "--high-priority দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " high priority দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:283
msgid "--realtime expects boolean argument"
-msgstr "--realtime দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " realtime দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:290
msgid "--disallow-module-loading expects boolean argument"
-msgstr "--disallow-module-loading দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " disallow module loading দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:297
msgid "--disallow-exit expects boolean argument"
-msgstr "--disallow-exit দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " disallow exit দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:304
msgid "--use-pid-file expects boolean argument"
-msgstr "--use-pid-file দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " use pid file দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
@@ -593,11 +593,11 @@ msgstr "à¦
বà§à¦§ লঠলà¦à§à¦·à§à¦¯: 'syslog', 'stderr' বা 'auto'
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
-msgstr "--log-time দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " log time দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:335
msgid "--log-meta expects boolean argument"
-msgstr "--log-meta দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " log meta দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:354
#, c-format
@@ -606,15 +606,15 @@ msgstr "resample পদà§à¦§à¦¤à¦¿ '%s' বà§à¦§ নহৠ।"
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
-msgstr "--system দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " system দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:368
msgid "--no-cpu-limit expects boolean argument"
-msgstr "--no-cpu-limit দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " no cpu limit দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/cmdline.c:375
msgid "--disable-shm expects boolean argument"
-msgstr "--disable-shm দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
+msgstr " disable shm দà§à¦¬à¦¾à§°à¦¾ বà§à¦²à¦¿à§à§à¦¨ তৰà§à¦ পà§à§°à¦¤à§à¦¯à¦¾à¦¶à¦¿à¦¤"
#: ../src/daemon/dumpmodules.c:60
#, c-format
@@ -654,7 +654,7 @@ msgstr "à¦à¦¬à¦¾à§° তà§à¦²à¦¿ লà§à§±à¦¾ হ'ব: %s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr "à¦
বà¦à¦¿à¦¤ à¦à¦°à¦¾à¦° সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: %s\n"
+msgstr "à¦
বà¦à¦¿à¦¤ à¦à§°à¦¾à§° সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -741,7 +741,7 @@ msgstr "### à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ বিনà§à¦¯à¦¾à¦¸ নথিপতà§à§°à§°
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
-msgstr "à¦
ধিà¦à¦¾à¦° বরà§à¦à¦¨ à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
+msgstr "à¦
ধিà¦à¦¾à§° বৰà§à¦à¦¨ à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@@ -785,11 +785,11 @@ msgstr "Low Frequency Emmiter"
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
-msgstr "সনà§à¦®à§à¦à¦¤ à¦à§à¦¨à§à¦¦à§à§°à§°-বাà¦à¦à¦«à¦¾à¦²à§"
+msgstr "সনà§à¦®à§à¦à¦¤ à¦à§à¦¨à§à¦¦à§à§°à§° বাà¦à¦à¦«à¦¾à¦²à§"
#: ../src/pulse/channelmap.c:118
msgid "Front Right-of-center"
-msgstr "সনà§à¦®à§à¦à¦¤ à¦à§à¦¨à§à¦¦à§à§°à§°-সà§à¦à¦«à¦¾à¦²à§"
+msgstr "সনà§à¦®à§à¦à¦¤ à¦à§à¦¨à§à¦¦à§à§°à§° সà§à¦à¦«à¦¾à¦²à§"
#: ../src/pulse/channelmap.c:120
msgid "Side Left"
@@ -963,7 +963,7 @@ msgstr "(à¦
বà§à¦§)"
#: ../src/pulse/channelmap.c:761
msgid "Stereo"
-msgstr "সà§à¦à¦¿à§°à¦¿à¦"
+msgstr "সà§à¦à¦¿à§°à¦¿à¦
'"
#: ../src/pulse/channelmap.c:766
msgid "Surround 4.0"
@@ -1023,7 +1023,7 @@ msgstr "সমà§à¦¸à§à¦®à¦¾"
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr "à¦à§à¦¨à§ à¦
নà§à¦®à§à¦¦à¦¨à§°-à¦à¦¿ নাà¦"
+msgstr "à¦à§à¦¨à§ à¦
নà§à¦®à§à¦¦à¦¨à§° à¦à¦¿ নাà¦"
#: ../src/pulse/error.c:53
msgid "Internal error"
@@ -1087,11 +1087,11 @@ msgstr "à¦à§à§°à¦¾à¦¹à¦ ফৰà§à¦ à¦à§°à¦¾ হà§à¦à§"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "নিবà§à¦¶/নিৰà§à¦à¦® তà§à§°à§à¦à¦¿"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "যনà§à¦¤à§à§° বা সমà§à¦ªà¦¦ বà§à¦¯à¦¸à§à¦¤"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1148,20 +1148,20 @@ msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
msgid "Received message for unknown extension '%s'"
-msgstr "à¦
à¦à¦¾à¦¨à¦¾ à¦à¦à§à¦¸à¦à§à¦¨à¦¶à¦¨ '%s'-ৰ বাবৠবাৰà§à¦¤à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ হà§à¦à§"
+msgstr "à¦
à¦à¦¾à¦¨à¦¾ à¦à¦à§à¦¸à¦à§à¦¨à¦¶à¦¨ '%s' ৰ বাবৠবাৰà§à¦¤à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ হà§à¦à§"
#: ../src/utils/pacat.c:108
#, c-format
msgid "Failed to drain stream: %s"
-msgstr "সà§à¦à§à¦°à¦¿à¦® ডà§à¦°à§à¦à¦¨ (à¦
রà§à¦¥à¦¾à§ ফাà¦à¦à¦¾) à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "সà§à¦à§à§°à¦¿à¦® ডà§à§°à§à¦à¦¨ (à¦
ৰà§à¦¥à¦¾à§ ফাà¦à¦à¦¾) à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:113
msgid "Playback stream drained."
-msgstr "পà§à¦²à§-বà§à¦¯à¦¾à¦ সà§à¦à§à¦°à¦¿à¦® ফাà¦à¦à¦¾ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
+msgstr "পà§à¦²à§ বà§à¦¯à¦¾à¦ সà§à¦à§à§°à¦¿à¦® ফাà¦à¦à¦¾ à¦à§°à¦¾ হà§à§à¦à§à¥¤"
#: ../src/utils/pacat.c:123
msgid "Draining connection to server."
-msgstr "সারà§à¦à¦¾à¦°à§à¦° সাথৠসà§à¦¥à¦¾à¦ªà¦¿à¦¤ সà¦à¦¯à§à¦ ফাà¦à¦à¦¾ à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
+msgstr "সাৰà§à¦à¦¾à§°à§à§° সাথৠসà§à¦¥à¦¾à¦ªà¦¿à¦¤ সà¦à¦¯à§à¦ ফাà¦à¦à¦¾ à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
#: ../src/utils/pacat.c:136
#, c-format
@@ -1171,81 +1171,81 @@ msgstr "pa_stream_drain(): %s"
#: ../src/utils/pacat.c:159
#, c-format
msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_write() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:197
#, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr "pa_stream_write() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_write() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr "pa_stream_peek() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_peek() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:307
msgid "Stream successfully created."
-msgstr "সাফলà§à¦¯à§à¦° সাথৠসà§à¦à§à¦°à¦¿à¦® নিরà§à¦®à¦¿à¦¤ হà§à§à¦à§à¥¤"
+msgstr "সাফলà§à¦¯à§à§° সাথৠসà§à¦à§à§°à¦¿à¦® নিৰà§à¦®à¦¿à¦¤ হà§à§à¦à§à¥¤"
#: ../src/utils/pacat.c:310
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr "pa_stream_get_buffer_attr() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_get_buffer_attr() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:314
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "বাফারà§à¦° মাপ: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr "বাফাৰà§à§° মাপ: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
#: ../src/utils/pacat.c:317
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "বাফারà§à¦° মাপ: maxlength=%u, fragsize=%u"
+msgstr "বাফাৰà§à§° মাপ: maxlength=%u, fragsize=%u"
#: ../src/utils/pacat.c:321
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° spec '%s', ঠà¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
+msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° spec '%s', ঠà¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
#: ../src/utils/pacat.c:325
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "ডিà¦à¦¾à¦à¦¸ %s-র সাথৠসà¦à¦¯à§à¦ à¦à¦°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।"
+msgstr "যনà§à¦¤à§à§° %s ৰ সাথৠসà¦à¦¯à§à¦ à¦à§°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।"
#: ../src/utils/pacat.c:335
#, c-format
msgid "Stream error: %s"
-msgstr "ষà§à¦à§à¦°à¦¿à¦® সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তà§à¦°à§à¦à¦¿: %s"
+msgstr "ষà§à¦à§à§°à¦¿à¦® সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তà§à§°à§à¦à¦¿: %s"
#: ../src/utils/pacat.c:345
#, c-format
msgid "Stream device suspended.%s"
-msgstr "সà§à¦à§à¦°à¦¿à¦® ডিà¦à¦¾à¦à¦¸ সà§à¦¥à¦à¦¿à¦¤ à¦à¦°à¦¾ হà§à§à¦à§à¥¤ %s"
+msgstr "সà§à¦à§à§°à¦¿à¦® যনà§à¦¤à§à§° সà§à¦¥à¦à¦¿à¦¤ à¦à§°à¦¾ হà§à§à¦à§à¥¤ %s"
#: ../src/utils/pacat.c:347
#, c-format
msgid "Stream device resumed.%s"
-msgstr "সà§à¦à§à¦°à¦¿à¦® ডিà¦à¦¾à¦à¦¸ পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤ %s"
+msgstr "সà§à¦à§à§°à¦¿à¦® যনà§à¦¤à§à§° পà§à¦¨à§°à¦¾à§°à¦®à§à¦ à¦à§°à¦¾ হà§à§à¦à§à¥¤ %s"
#: ../src/utils/pacat.c:355
#, c-format
msgid "Stream underrun.%s"
-msgstr "ধà§à¦° à¦à¦¤à¦¿à¦° সà§à¦à§à¦°à¦¿à¦®.%s"
+msgstr "ধà§à§° à¦à¦¤à¦¿à§° সà§à¦à§à§°à¦¿à¦®.%s"
#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream overrun.%s"
-msgstr "সà§à¦à§à¦°à¦¿à¦® মাতà§à¦°à¦¾ à¦
তিà¦à§à¦°à¦® à¦à¦°à§à¦à§à¥¤%s"
+msgstr "সà§à¦à§à§°à¦¿à¦® মাতà§à§°à¦¾ à¦
তিà¦à§à§°à¦® à¦à§°à¦¿à¦à§à¥¤%s"
#: ../src/utils/pacat.c:369
#, c-format
msgid "Stream started.%s"
-msgstr "সà§à¦à§à¦°à¦¿à¦® à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤ %s"
+msgstr "সà§à¦à§à§°à¦¿à¦® à¦à§°à¦®à§à¦ à¦à§°à¦¾ হà§à§à¦à§à¥¤ %s"
#: ../src/utils/pacat.c:376
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "%s ডিà¦à¦¾à¦à¦¸à§ সà§à¦à§à¦°à¦¿à¦® সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° à¦à¦°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।%s"
+msgstr "%s যনà§à¦¤à§à§°à§ সà§à¦à§à§°à¦¿à¦® সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à§° à¦à§°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।%s"
#: ../src/utils/pacat.c:376
msgid "not "
@@ -1254,7 +1254,7 @@ msgstr "not "
#: ../src/utils/pacat.c:383
#, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr "সà§à¦à§à¦°à¦¿à¦® বাফারà§à¦° à¦
à§à¦¯à¦¾à¦à§à¦°à¦¿à¦¬à¦¿à¦à¦ পরিবরà§à¦¤à¦¿à¦¤ হà§à§à¦à§à¥¤ %s"
+msgstr "সà§à¦à§à§°à¦¿à¦® বাফাৰà§à§° à¦à¦à§à§°à¦¿à¦¬à¦¿à¦à¦ পৰিবৰà§à¦¤à¦¿à¦¤ হà§à§à¦à§à¥¤ %s"
#: ../src/utils/pacat.c:415
#, c-format
@@ -1264,17 +1264,17 @@ msgstr "সà¦à¦¯à§à¦ সà§à¦¥à¦¾à¦ªà¦¿à¦¤ হà§à§à¦à§à¥¤%s"
#: ../src/utils/pacat.c:418
#, c-format
msgid "pa_stream_new() failed: %s"
-msgstr "pa_stream_new() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_new() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:450
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr "pa_stream_connect_playback() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_connect_playback() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:456
#, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr "pa_stream_connect_record() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_connect_record() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
#, c-format
@@ -1283,31 +1283,31 @@ msgstr "সà¦à¦¯à§à¦ বিফল: %s"
#: ../src/utils/pacat.c:503
msgid "Got EOF."
-msgstr "ফাà¦à¦²à§à¦° সমাপà§à¦¤à¦¿ সনাà¦à§à¦¤ হà§à§à¦à§à¥¤"
+msgstr "ফাà¦à¦²à§à§° সমাপà§à¦¤à¦¿ সনাà¦à§à¦¤ হà§à§à¦à§à¥¤"
#: ../src/utils/pacat.c:540
#, c-format
msgid "write() failed: %s"
-msgstr "write() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "write() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:561
msgid "Got signal, exiting."
-msgstr "সিà¦à¦¨à§à¦¯à¦¾à¦² পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ à¦à¦°à¦¾ হবà§à¥¤"
+msgstr "সিà¦à¦¨à§à¦¯à¦¾à¦² পà§à§°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ হ'ব।"
#: ../src/utils/pacat.c:575
#, c-format
msgid "Failed to get latency: %s"
-msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à¦° পরিমাণ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à§° পৰিমাণ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "সমà§: %0.3f sec; Latency: %0.0f usec. \r"
+msgstr "সমà§: %0.3f à¦à§à¦à§à¦£à§à¦¡; লà§à¦à§à¦¨à§à¦¸à¦¿: %0.0f usec ।"
#: ../src/utils/pacat.c:599
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "pa_stream_update_timing_info() বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "pa_stream_update_timing_info() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:609
#, c-format
@@ -1370,59 +1370,59 @@ msgid ""
msgstr ""
"%s [options]\n"
"\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
+" h, help Show this help\n"
+" version Show version\n"
"\n"
-" -r, --record Create a connection for recording\n"
-" -p, --playback Create a connection for playback\n"
+" r, record Create a connection for recording\n"
+" p, playback Create a connection for playback\n"
"\n"
-" -v, --verbose Enable verbose operations\n"
+" v, verbose Enable verbose operations\n"
"\n"
-" -s, --server=SERVER The name of the server to connect "
+" s, server=SERVER The name of the server to connect "
"to\n"
-" -d, --device=DEVICE The name of the sink/source to "
+" d, device=DEVICE The name of the sink/source to "
"connect to\n"
-" -n, --client-name=NAME How to call this client on the "
+" n, client name=NAME How to call this client on the "
"server\n"
-" --stream-name=NAME How to call this stream on the "
+" stream name=NAME How to call this stream on the "
"server\n"
-" --volume=VOLUME Specify the initial (linear) volume "
+" volume=VOLUME Specify the initial (linear) volume "
"in range 0...65536\n"
-" --rate=SAMPLERATE The sample rate in Hz (defaults to "
+" rate=SAMPLERATE The sample rate in Hz (defaults to "
"44100)\n"
-" --format=SAMPLEFORMAT The sample type, one of s16le, "
+" format=SAMPLEFORMAT The sample type, one of s16le, "
"s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
"s24le, s24be,\n"
-" s24-32le, s24-32be (defaults to "
+" s24 32le, s24 32be (defaults to "
"s16ne)\n"
-" --channels=CHANNELS The number of channels, 1 for mono, "
+" 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 "
+" channel map=CHANNELMAP Channel map to use instead of the "
"default\n"
-" --fix-format Take the sample format from the sink "
+" 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 "
+" 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 "
+" 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 "
+" 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 "
+" latency=BYTES Request the specified latency in "
"bytes.\n"
-" --process-time=BYTES Request the specified process time "
+" process time=BYTES Request the specified process time "
"per request in bytes.\n"
-" --property=PROPERTY=VALUE Set the specified property to the "
+" property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
-" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
-" --list-file-formats List available file formats.\n"
+" raw Record/play raw PCM data.\n"
+" file format=FFORMAT Record/play formatted PCM data.\n"
+" list file formats List available file formats.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1438,12 +1438,12 @@ msgstr ""
#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
-msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦à§à¦° নাম '%s' বà§à¦§ নà§"
+msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦à§à§° নাম '%s' বà§à¦§ নà§"
#: ../src/utils/pacat.c:779
#, c-format
msgid "Invalid stream name '%s'"
-msgstr "সà§à¦à§à¦°à¦¿à¦®à§à¦° নাম '%s' বà§à¦§ নà§à¥¤"
+msgstr "সà§à¦à§à§°à¦¿à¦®à§à§° নাম '%s' বà§à¦§ নà§à¥¤"
#: ../src/utils/pacat.c:816
#, c-format
@@ -1453,12 +1453,12 @@ msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦§ নà§"
#: ../src/utils/pacat.c:845
#, c-format
msgid "Invalid latency specification '%s'"
-msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à¦° à¦à¦¨à§à¦¯ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
+msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à§° à¦à¦¨à§à¦¯ নিৰà§à¦§à¦¾à§°à¦¿à¦¤ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
#: ../src/utils/pacat.c:852
#, c-format
msgid "Invalid process time specification '%s'"
-msgstr "পà§à¦°à¦¸à§à¦¸à§à¦° সমà§à§à¦° বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
+msgstr "পà§à§°à¦¸à§à¦¸à§à§° সমà§à§à§° বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
#: ../src/utils/pacat.c:864
#, c-format
@@ -1468,11 +1468,11 @@ msgstr "বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§à¥¤"
#: ../src/utils/pacat.c:881
#, c-format
msgid "Unknown file format %s."
-msgstr "ফাà¦à¦²à§à¦° à¦
à¦à¦¾à¦¨à¦¾ বিনà§à¦¯à¦¾à¦¸ %s।"
+msgstr "ফাà¦à¦²à§à§° à¦
à¦à¦¾à¦¨à¦¾ বিনà§à¦¯à¦¾à¦¸ %s।"
#: ../src/utils/pacat.c:900
msgid "Invalid sample specification"
-msgstr "à¦
বà§à¦§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিরà§à¦§à¦¾à¦°à¦¿à¦¤"
+msgstr "à¦
বà§à¦§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিৰà§à¦§à¦¾à§°à¦¿à¦¤"
#: ../src/utils/pacat.c:910
#, c-format
@@ -1486,47 +1486,46 @@ msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
msgid "Too many arguments."
-msgstr "à¦
তà§à¦¯à¦¾à¦§à¦¿à¦ à¦à¦°à§à¦à§à¦®à§à¦¨à§à¦à¥¤"
+msgstr "à¦
তà§à¦¯à¦¾à¦§à¦¿à¦ à¦à§°à§à¦à§à¦®à§à¦¨à§à¦à¥¤"
#: ../src/utils/pacat.c:933
msgid "Failed to generate sample specification for file."
-msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° মান নিরà§à¦§à¦¾à¦°à¦£à§à¦° ফাà¦à¦² নিরà§à¦®à¦¾à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥"
+msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° মান নিৰà§à¦§à¦¾à§°à¦£à§à§° ফাà¦à¦² নিৰà§à¦®à¦¾à¦£ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥"
#: ../src/utils/pacat.c:953
msgid "Failed to open audio file."
-msgstr "শবà§à¦¦à§à¦° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "শবà§à¦¦à§à§° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:959
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr ""
-"সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিরà§à¦§à¦¾à¦°à¦£à§à¦° ফাà¦à¦²à¦à¦¿à¦° তথà§à¦¯, à¦à¦ ফাà¦à¦²à§à¦° থà§à¦à§ à¦à¦ªà¦²à¦¬à§à¦§ তথà§à¦¯ "
-"দà§à¦¬à¦¾à¦°à¦¾ পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হবà§à¥¤"
+"সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিৰà§à¦§à¦¾à§°à¦£à§à§° ফাà¦à¦²à¦à¦¿à§° তথà§à¦¯, à¦à¦ ফাà¦à¦²à§à§°à§° পৰা à¦à¦ªà¦²à¦¬à§à¦§ তথà§à¦¯ "
+"দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হ'ব।"
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
-msgstr "ফাà¦à¦² থà§à¦à§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "ফাà¦à¦²à§° পৰা সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦² থà§à¦à§ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ফাà¦à¦²à§° পৰা à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
-msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª ঠসà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মানৠà¦à¦°à¦®à¦¿à¦²"
+msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª ঠসà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° নিৰà§à¦§à¦¾à§°à¦¿à¦¤ মানৠà¦à§°à¦®à¦¿à¦²"
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
-msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦²à§à¦° মধà§à¦¯à§ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª লিà¦à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ফাà¦à¦²à§à¦¤ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª লিà¦à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
-"à¦à¦à¦à¦¿ %s সà§à¦à§à¦°à¦¿à¦® à¦à§à¦²à¦¾ হà¦à§à¦à§à¥¤ à¦à¦à¦¿à¦° à¦à¦¨à§à¦¯ '%s'-র সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মান ঠ'%s' "
-"à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবà§à¥¤"
+"à¦à¦à¦¾ %s সà§à¦à§à§°à¦¿à¦® à¦à§à¦²à¦¾ হà¦à§à¦à§à¥¤ à¦à¦à¦¿à§° à¦à¦¨à§à¦¯ '%s' ৰ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° নিৰà§à¦§à¦¾à§°à¦¿à¦¤ মান ঠ'%s' "
+"à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª পà§à§°à§à§à¦ à¦à§°à¦¾ হ'ব।"
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1534,19 +1533,19 @@ msgstr "ৰà§à¦à§°à§à¦¡ à¦à§°à¦¾ হà§à¦à§"
#: ../src/utils/pacat.c:1009
msgid "playback"
-msgstr "পà§à¦²à§-বà§à¦"
+msgstr "পà§à¦²à§ বà§à¦"
#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
-msgstr "pa_mainloop_new() বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "pa_mainloop_new() বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:1054
msgid "io_new() failed."
-msgstr "io_new() বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "io_new() বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
-msgstr "pa_context_new() বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "pa_context_new() বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
#, c-format
@@ -1555,11 +1554,11 @@ msgstr "pa_context_connect() বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pacat.c:1075
msgid "pa_context_rttime_new() failed."
-msgstr "pa_context_rttime_new() বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "pa_context_rttime_new() বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
-msgstr "pa_mainloop_run() বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "pa_mainloop_run() বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pasuspender.c:81
#, c-format
@@ -1614,9 +1613,9 @@ msgid ""
msgstr ""
"%s [options] ... \n"
"\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
-" -s, --server=SERVER The name of the server to connect "
+" h, help Show this help\n"
+" version Show version\n"
+" s, server=SERVER The name of the server to connect "
"to\n"
"\n"
@@ -1649,7 +1648,7 @@ msgstr "pa_mainloop_run() বà§à¦¯à§°à§à¦¥ ।\n"
#: ../src/utils/pactl.c:135
#, c-format
msgid "Failed to get statistics: %s"
-msgstr "পরিসà¦à¦à§à¦¯à¦¾à¦¨ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "পৰিসà¦à¦à§à¦¯à¦¾à¦¨ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1669,7 +1668,7 @@ msgstr "à¦à¦¾à¦¨à§à¦à¦¿ à¦à§à¦¶à§à¦¬à§° মাপ: %s\n"
#: ../src/utils/pactl.c:156
#, c-format
msgid "Failed to get server information: %s"
-msgstr "সারà§à¦à¦¾à¦° সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "সাৰà§à¦à¦¾à§° সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1697,7 +1696,7 @@ msgstr ""
#: ../src/utils/pactl.c:205
#, c-format
msgid "Failed to get sink information: %s"
-msgstr "sink সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "sink সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1741,17 +1740,17 @@ msgstr ""
#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
-msgstr "\tপà§à¦°à§à¦:\n"
+msgstr "\tপà§à§°à§à¦:\n"
#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
#, c-format
msgid "\tActive Port: %s\n"
-msgstr "\tসà¦à§à¦°à¦¿à§ পà§à¦°à§à¦: %s\n"
+msgstr "\tসà¦à§à§°à¦¿à§ পà§à§°à§à¦: %s\n"
#: ../src/utils/pactl.c:297
#, c-format
msgid "Failed to get source information: %s"
-msgstr "à¦à§à¦¸ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "à¦à§à¦¸ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1803,7 +1802,7 @@ msgstr "n/a"
#: ../src/utils/pactl.c:375
#, c-format
msgid "Failed to get module information: %s"
-msgstr "মডিà¦à¦² সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "মডিà¦à¦² সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1825,7 +1824,7 @@ msgstr ""
#: ../src/utils/pactl.c:412
#, c-format
msgid "Failed to get client information: %s"
-msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1845,7 +1844,7 @@ msgstr ""
#: ../src/utils/pactl.c:447
#, c-format
msgid "Failed to get card information: %s"
-msgstr "à¦à¦¾à¦°à§à¦¡ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "à¦à¦¾à§°à§à¦¡ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1877,7 +1876,7 @@ msgstr "\tসà¦à§à§°à¦¿à§ পাৰà§à¦¶à§à¦¬à§°à§à¦ª: %s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "sink à¦à¦¨à¦ªà§à¦ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "sink নিবà§à¦¶ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1919,7 +1918,7 @@ msgstr ""
#: ../src/utils/pactl.c:554
#, c-format
msgid "Failed to get source output information: %s"
-msgstr "à¦à§à¦¸ à¦à¦à¦à¦ªà§à¦ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "à¦à§à¦¸ নিৰà§à¦à¦® সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1953,7 +1952,7 @@ msgstr ""
#: ../src/utils/pactl.c:605
#, c-format
msgid "Failed to get sample information: %s"
-msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1989,20 +1988,20 @@ msgstr ""
#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
#, c-format
msgid "Failure: %s"
-msgstr "বà§à¦¯à¦°à§à¦¥à¦¤à¦¾: %s"
+msgstr "বà§à¦¯à§°à§à¦¥à¦¤à¦¾: %s"
#: ../src/utils/pactl.c:687
#, c-format
msgid "Failed to upload sample: %s"
-msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² à¦à¦ªà¦²à§à¦¡ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
+msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² à¦à¦ªà¦²à§à¦¡ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
#: ../src/utils/pactl.c:704
msgid "Premature end of file"
-msgstr "সমà§à¦ªà§à¦°à§à¦£ হà¦à§à¦¾à¦° পà§à¦°à§à¦¬à§ ফাà¦à¦² সমাপà§à¦¤ হà§à§à¦à§"
+msgstr "সমà§à¦ªà§à§°à§à¦£ হà¦à§à¦¾à§° পà§à§°à§à¦¬à§ ফাà¦à¦² সমাপà§à¦¤ হà§à§à¦à§"
#: ../src/utils/pactl.c:863
msgid "Got SIGINT, exiting."
-msgstr "SIGINT পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
+msgstr "SIGINT পà§à§°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ হà§à§à¦à§à¥¤"
#: ../src/utils/pactl.c:869
#, c-format
@@ -2040,31 +2039,31 @@ msgstr ""
"%s [options] stat\n"
"%s [options] list\n"
"%s [options] exit\n"
-"%s [options] upload-sample FILENAME [NAME]\n"
-"%s [options] play-sample NAME [SINK]\n"
-"%s [options] remove-sample NAME\n"
-"%s [options] move-sink-input SINKINPUT SINK\n"
-"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
-"%s [options] load-module NAME [ARGS ...]\n"
-"%s [options] unload-module MODULE\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"
-"%s [options] set-sink-port SINK PORT\n"
-"%s [options] set-source-port SOURCE PORT\n"
-"%s [options] set-sink-volume SINK VOLUME\n"
-"%s [options] set-source-volume SOURCE VOLUME\n"
-"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
-"%s [options] set-sink-mute SINK 1|0\n"
-"%s [options] set-source-mute SOURCE 1|0\n"
-"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] upload sample FILENAME [NAME]\n"
+"%s [options] play sample NAME [SINK]\n"
+"%s [options] remove sample NAME\n"
+"%s [options] move sink input SINKINPUT SINK\n"
+"%s [options] move source output SOURCEOUTPUT SOURCE\n"
+"%s [options] load module NAME [ARGS ...]\n"
+"%s [options] unload module MODULE\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"
+"%s [options] set sink port SINK PORT\n"
+"%s [options] set source port SOURCE PORT\n"
+"%s [options] set sink volume SINK VOLUME\n"
+"%s [options] set source volume SOURCE VOLUME\n"
+"%s [options] set sink input volume SINKINPUT VOLUME\n"
+"%s [options] set sink mute SINK 1|0\n"
+"%s [options] set source mute SOURCE 1|0\n"
+"%s [options] set sink input mute SINKINPUT 1|0\n"
"\n"
-" -h, --help Show this help\n"
-" --version Show version\n"
+" h, help Show this help\n"
+" version Show version\n"
"\n"
-" -s, --server=SERVER The name of the server to connect "
+" s, server=SERVER The name of the server to connect "
"to\n"
-" -n, --client-name=NAME How to call this client on the "
+" n, client name=NAME How to call this client on the "
"server\n"
#: ../src/utils/pactl.c:933
@@ -2076,108 +2075,107 @@ msgid ""
msgstr ""
"pactl %s\n"
"libpulseৰ সà§à¦¤à§ সà¦à§à¦à¦²à¦¨ à¦à§°à¦¾ %s\n"
-"libpulse-ৰ সà§à¦¤à§ যà§à¦à§à¦¤ %s\n"
+"libpulse ৰ সà§à¦¤à§ যà§à¦à§à¦¤ %s\n"
#: ../src/utils/pactl.c:979
msgid "Please specify a sample file to load"
-msgstr "লà§à¦¡ à¦à¦°à¦¾à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦
নà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦à¦à¦¿ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à¦°à§à¦¨"
+msgstr "লà§à¦¡ à¦à§°à¦¾à§° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦
নà§à¦à§à§°à¦¹ à¦à§°à¦¿ à¦à¦à¦¾ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à§°à§à¦¨"
#: ../src/utils/pactl.c:992
msgid "Failed to open sound file."
-msgstr "শবà§à¦¦à§à¦° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "শবà§à¦¦à§à§° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
-msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦² থà§à¦à§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মাপ নিরà§à¦®à¦¾à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
+msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ফাà¦à¦²à§° পৰা সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° নিৰà§à¦§à¦¾à§°à¦¿à¦¤ মাপ নিৰà§à¦®à¦¾à¦£ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
-msgstr "বাà¦à¦¾à¦¨à§à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦à¦¿ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "বাà¦à¦¾à¦¨à§à§° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦¾ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1026
msgid "You have to specify a sample name to remove"
-msgstr "à¦
পসারণà§à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦à¦¿ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "à¦
পসাৰণà§à§° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦¾ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1035
msgid "You have to specify a sink input index and a sink"
-msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ সিà¦à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ সিà¦à¦ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1045
msgid "You have to specify a source output index and a source"
-msgstr "সà§à¦°à§à¦¸ à¦à¦à¦à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ সà§à¦°à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "সà§à§°à§à¦¸ নিৰà§à¦à¦® à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ সà§à§°à§à¦¸ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1060
msgid "You have to specify a module name and arguments."
-msgstr "মডিà¦à¦²à§à¦° নাম ঠà¦à¦°à§à¦à§à¦®à§à¦¨à§à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
+msgstr "মডিà¦à¦²à§à§° নাম ঠà¦à§°à§à¦à§à¦®à§à¦¨à§à¦ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
#: ../src/utils/pactl.c:1080
msgid "You have to specify a module index"
-msgstr "মডিà¦à¦² à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "মডিà¦à¦² à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সিà¦à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সিà¦à¦ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
#: ../src/utils/pactl.c:1103
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সà§à¦°à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
+msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সà§à§°à§à¦¸ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
-msgstr "à¦à¦¾à¦°à§à¦¡à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦«à¦¾à¦à¦²à§à¦° নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "à¦à¦¾à§°à§à¦¡à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦«à¦¾à¦à¦²à§à§° নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
-msgstr "sink-র নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦à§à¦° নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "sink ৰ নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦à§à§° নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
-msgstr "à¦à§à¦¸à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦à§ নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "à¦à§à¦¸à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦à§ নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
-msgstr "sink-র নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦à§à¦° নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "sink ৰ নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦à§à§° নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
msgid "Invalid volume specification"
-msgstr "à¦
বà§à¦§ শবà§à¦¦à§à¦° মাতà§à¦°à¦¾ নিরà§à¦§à¦¾à¦°à¦¿à¦¤"
+msgstr "à¦
বà§à¦§ শবà§à¦¦à§à§° মাতà§à§°à¦¾ নিৰà§à¦§à¦¾à§°à¦¿à¦¤"
#: ../src/utils/pactl.c:1166
msgid "You have to specify a source name/index and a volume"
-msgstr "à¦à§à¦¸à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ শবà§à¦¦à§à¦° মাতà§à¦°à¦¾ à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "à¦à§à¦¸à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ শবà§à¦¦à§à§° মাতà§à§°à¦¾ à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠশবà§à¦¦à§à¦° মাতà§à¦°à¦¾ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠশবà§à¦¦à§à§° মাতà§à§°à¦¾ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ বà§à¦§ নà§"
+msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ বà§à¦§ নà§"
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "sink-র নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ নিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à¦° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "sink ৰ নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ নিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à§° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "à¦à§à¦¸à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à¦° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "à¦à§à¦¸à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à§° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à¦° বà§à¦²à¦¿à§à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
+msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à§° বà§à¦²à¦¿à§à¦¾à¦¨ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
-msgstr "à¦
বà§à¦§ সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিরà§à¦§à¦¾à¦°à¦¿à¦¤"
+msgstr "à¦
বà§à¦§ সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিৰà§à¦§à¦¾à§°à¦¿à¦¤"
#: ../src/utils/pactl.c:1262
msgid "No valid command specified."
-msgstr "à¦à§à¦¨à§ বà§à¦§ à¦à¦®à¦¾à¦¨à§à¦¡ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ হà§à¦¨à¦¿à¥¤"
+msgstr "à¦à§à¦¨à§ বà§à¦§ à¦à¦®à¦¾à¦¨à§à¦¡ নিৰà§à¦§à¦¾à§°à¦¿à¦¤ হà§à¦¨à¦¿à¥¤"
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2190,18 +2188,18 @@ msgid ""
"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"
+"%s [ D display] [ S server] [ O sink] [ I source] [ c file] [ d| e| i| r]\n"
"\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 "
+" 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"
-" -r Remove PulseAudio data from X11 display\n"
+" r Remove PulseAudio data from X11 display\n"
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr "à¦à¦¦à§à¦¶-শাৰৠবিশà§à¦²à§à¦·à¦£ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥ ।\n"
+msgstr "à¦à¦¦à§à¦¶ শাৰৠবিশà§à¦²à§à¦·à¦£ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥ ।\n"
#: ../src/utils/pax11publish.c:108
#, c-format
@@ -2260,7 +2258,7 @@ msgstr "à¦à¦¤à¦¿à§à¦¾à¦ বাসà§à¦¤à¦¬à¦¾à§à¦¿à¦¤ নহৠ।\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr "PulseAudio ডà§à¦®à¦¨ à¦à¦²à¦à§ না à¦
থবা সà§à¦¶à¦¾à¦¨à§à¦° ডà§à¦®à¦¨ রà§à¦ªà§ à¦à¦²à¦à§ না।"
+msgstr "PulseAudio ডà§à¦®à¦¨ à¦à¦²à¦à§ না বা সà§à¦¶à¦¾à¦¨à§° ডà§à¦®à¦¨ ৰà§à¦ªà§ à¦à¦²à¦à§ না।"
#: ../src/utils/pacmd.c:74
#, c-format
@@ -2312,7 +2310,7 @@ msgstr ""
"ALSA ঠà¦à¦®à¦¾à¦ যনà§à¦¤à§à§°à§° পৰা নতà§à¦¨ তথà§à¦¯ লিà¦à¦¿à¦¬à¦²à§ à¦à¦¥à¦¾à¦²à§, à¦à¦¿à¦¨à§à¦¤à§ à¦à¦à§ লিà¦à¦¿à¦¬à¦²à§ নাà¦à¦¿à¦²!\n"
"à¦
তি সমà§à¦à§± à¦à¦à¦à§ ALSA à¦à¦¾à¦²à¦ '%s' ৰ à¦à¦à¦¾ বাঠ। à¦
নà§à¦à§à§°à¦¹ à¦à§°à¦¿ à¦à¦ সমসà§à¦¯à¦¾ ALSA বিà¦à¦¾à¦¶à¦à¦ "
"à¦à¦¨à¦¾à¦à¦ ।\n"
-"POLLOUT নিৰà§à¦§à¦¾à§°à¦¿à¦¤ হà§à§±à¦¾à§°à¦¿ পিà¦à¦¤à§ à¦à¦®à¦¿ à¦à¦¥à¦¿à¦²à§ -- à¦à¦¿à¦¨à§à¦¤à§ তাৰ পিà¦à§° snd_pcm_avail() ঠ০ "
+"POLLOUT নিৰà§à¦§à¦¾à§°à¦¿à¦¤ হà§à§±à¦¾à§°à¦¿ পিà¦à¦¤à§ à¦à¦®à¦¿ à¦à¦¥à¦¿à¦²à§ à¦à¦¿à¦¨à§à¦¤à§ তাৰ পিà¦à§° snd_pcm_avail() ঠ০ "
"দিলৠবা à¦
নà§à¦¯ à¦à¦à¦¾ মান < min_avail."
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
@@ -2328,7 +2326,7 @@ msgstr ""
"ALSA ঠà¦à¦®à¦¾à¦ যনà§à¦¤à§à§°à§° পৰা নতà§à¦¨ তথà§à¦¯ পà§à¦¿à¦¬à¦²à§ à¦à¦¥à¦¾à¦²à§, à¦à¦¿à¦¨à§à¦¤à§ à¦à¦à§ পà§à¦¿à¦¬à¦²à§ নাà¦à¦¿à¦²!\n"
"à¦
তি সমà§à¦à§± à¦à¦à¦à§ ALSA à¦à¦¾à¦²à¦ '%s' ৰ à¦à¦à¦¾ বাঠ। à¦
নà§à¦à§à§°à¦¹ à¦à§°à¦¿ à¦à¦ সমসà§à¦¯à¦¾ ALSA বিà¦à¦¾à¦¶à¦à¦ "
"à¦à¦¨à¦¾à¦à¦ ।\n"
-"POLLIN নিৰà§à¦§à¦¾à§°à¦¿à¦¤ হà§à§±à¦¾à§°à¦¿ পিà¦à¦¤à§ à¦à¦®à¦¿ à¦à¦¥à¦¿à¦²à§ -- à¦à¦¿à¦¨à§à¦¤à§ তাৰ পিà¦à§° snd_pcm_avail() ঠ০ "
+"POLLIN নিৰà§à¦§à¦¾à§°à¦¿à¦¤ হà§à§±à¦¾à§°à¦¿ পিà¦à¦¤à§ à¦à¦®à¦¿ à¦à¦¥à¦¿à¦²à§ à¦à¦¿à¦¨à§à¦¤à§ তাৰ পিà¦à§° snd_pcm_avail() ঠ০ "
"দিলৠবা à¦
নà§à¦¯ à¦à¦à¦¾ মান < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
@@ -2343,7 +2341,7 @@ msgstr "High Fidelity Playback (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
msgid "High Fidelity Capture (A2DP)"
-msgstr "হাà¦-ফিডà§à¦²à¦¿à¦à¦¿ à¦à§à¦¯à¦¾à¦ªà¦à¦¾à¦° (A2DP)"
+msgstr "হাঠফিডà§à¦²à¦¿à¦à¦¿ à¦à§à¦¯à¦¾à¦ªà¦à¦¾à§° (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
@@ -2356,216 +2354,204 @@ msgstr "PulseAudio ধà§à¦¬à¦¨à¦¿ সà§à§±à¦"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "নিৰà§à¦à¦® যনà§à¦¤à§à§°"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "নিবà§à¦¶ যনà§à¦¤à§à§°"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "@HOSTNAME@ ত à¦
'ডিà¦
'"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "নিবà§à¦¶"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "ডà¦à¦¿à¦ সà§à¦à§à¦à¦¨à§° পৰা নিবà§à¦¶"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "ডà¦à¦¿à¦ সà§à¦à§à¦à¦¨à§° মাà¦à¦à§à§°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "লাà¦à¦¨ à¦à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "মাà¦à¦à§à§°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "বহিসà§à¦¥à¦¿à¦¤ মাà¦à¦à§à§°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "à¦à¦à§à¦¯à¦¨à§à¦¤à§°à§à¦£ à¦
'ডিà¦
'"
+msgstr "à¦
à¦à§à¦¯à¦¨à§à¦¤à§°à§à¦£ মাà¦à¦à§à§°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "ৰà§à¦¡à¦¿à¦
'"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "à¦à¦¿à¦¡à¦¿à¦
'"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "সà§à¦¬à§à¦à¦à§à§°à¦¿à§ à¦à§à¦à¦¨ নিà§à¦¨à§à¦¤à§à§°à¦£"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "সà§à¦¬à§à¦à¦à§à§°à¦¿à§ à¦à§à¦à¦¨ নিà§à¦¨à§à¦¤à§à§°à¦£ পà§à§°à§à§à¦ à¦à§°à¦¾ ন'হ'ব"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "বà§à¦¸à§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "বà§à¦¸à§à¦ পà§à§°à§à§à¦ à¦à§°à¦¾ ন'হ'ব"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "বিবৰà§à¦§à¦"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "বিবৰà§à¦§à¦¨ পà§à§°à§à§à¦ à¦à§°à¦¾ ন'হ'ব"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ নিবà§à¦¶"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ মাà¦à¦à§à§°à§à¦«à§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ লাà¦à¦¨ à¦à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ ৰà§à¦¡à¦¿à¦"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¿à¦¡à¦¿à¦
'"
#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Output"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ নিৰà§à¦à¦®"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ হà§à¦¡ ফà§à¦¨"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ নিৰà§à¦à¦® (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ মà§à¦¨à§ নিৰà§à¦à¦®"
#: ../src/modules/alsa/alsa-mixer.c:1981
-#, fuzzy, c-format
+#, c-format
msgid "%s+%s"
msgstr "%s %s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
-#, fuzzy, c-format
+#, c-format
msgid "%s / %s"
msgstr "%s %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ মà§à¦¨à§"
#: ../src/modules/alsa/alsa-mixer.c:2791
-#, fuzzy
msgid "Analog Stereo"
-msgstr "সà§à¦à¦¿à§°à¦¿à¦"
+msgstr "à¦à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à§°à¦¿à¦
'"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.১"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ২.১"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.০"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৩.০"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.১"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৩.১"
#: ../src/modules/alsa/alsa-mixer.c:2795
-#, fuzzy
msgid "Analog Surround 4.0"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.০"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.০"
#: ../src/modules/alsa/alsa-mixer.c:2796
-#, fuzzy
msgid "Analog Surround 4.1"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.১"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.১"
#: ../src/modules/alsa/alsa-mixer.c:2797
-#, fuzzy
msgid "Analog Surround 5.0"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৫.০"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৫.০"
#: ../src/modules/alsa/alsa-mixer.c:2798
-#, fuzzy
msgid "Analog Surround 5.1"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৫.১"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৫.১"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.০"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৬.০"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.১"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৬.১"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ ৪.০"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ à§.০"
#: ../src/modules/alsa/alsa-mixer.c:2802
-#, fuzzy
msgid "Analog Surround 7.1"
-msgstr "à¦à¦¾à§°à¦¾à¦à¦£à§à¦¡ à§.১"
+msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ à§.১"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦² সà§à¦à¦¿à§°à¦¿à¦
' (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦² à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.০ (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦² à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.০ (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦² à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৫.১ (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦² সà§à¦à¦¿à§°à¦¿à¦
' (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ মà§à¦¨à§ ডà§à¦ªà§à¦²à§à¦à§à¦¸"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "à¦à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à§°à¦¿à¦
' ডà§à¦ªà§à¦²à§à¦à§à¦¸"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ডিà¦à¦¿à¦à§à¦² সà§à¦à¦¿à§°à¦¿à¦
' ডà§à¦ªà§à¦²à§à¦à§à¦¸ (IEC958)"
+
commit 2a322d425096316b2c1a451f818c5bb9720264db
Author: mrtom <mrtom at fedoraproject.org>
Date: Tue Dec 15 07:58:41 2009 +0000
Sending translation for French
diff --git a/po/fr.po b/po/fr.po
index 1cdea52..89d27d7 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,29 +1,31 @@
# French translation of pulseaudio.
# Copyright (C) 2006-2008 Lennart Poettering
# This file is distributed under the same license as the pulseaudio package.
+#
+#
# Robert-André Mauchin <zebob.m at pengzone.org>, 2008.
# Michaël Ughetto <telimektar esraonline com>, 2008.
# Pablo Martin-Gomez <pablo.martin-gomez at laposte.net>, 2008.
# Corentin Perard <corentin.perard at gmail.com>, 2009.
-#
-#
+# Thomas Canniot <mrtom at fedoraproject.org>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: pulseaudio trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-04-26 17:22+0200\n"
-"Last-Translator: Corentin Perard <corentin.perard at gmail.com>\n"
+"POT-Creation-Date: 2009-12-04 13:02+0000\n"
+"PO-Revision-Date: 2009-12-09 21:40+0100\n"
+"Last-Translator: Thomas Canniot <mrtom at fedoraproject.org>\n"
"Language-Team: French <fedora-trans-fr at redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
+"X-Generator: Lokalize 1.0\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
@@ -66,15 +68,15 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "Garde toujours au moins une destination même si elle est vide"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "Sortie obsolète"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr ""
+msgstr "Destination virtuelle LADSPA"
#: ../src/modules/module-ladspa-sink.c:53
msgid ""
@@ -84,15 +86,21 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
+"sink_name=<nom de la destination> sink_properties=<propriétés de la "
+"destination> "
+"master=<nom de la destination à filter> format=<format de l'échantillon> "
+"rate=<taux d'échantillonage> "
+"channels=<nombre de canaux> channel_map=<plan des canaux> plugin=<nom de "
+"l'extension ladspa> label=<étiquette de l'extension ladspa> control=<liste des "
+"valeurs de contrôle de l'entrée séparées par des virgules>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "Horloge de la destination vide"
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "Sortie %s"
+msgstr "Sortie vide"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -337,10 +345,9 @@ msgstr "Ãchec lors de l'obtention de l'ID de la machine"
msgid "Machine ID is %s."
msgstr "L'ID de la machine est %s."
-#: ../src/daemon/main.c:773
-#, fuzzy, c-format
+#: ../src/daemon/main.c:773, c-format
msgid "Session ID is %s."
-msgstr "L'ID de la machine est %s."
+msgstr "L'ID de la session est %s."
#: ../src/daemon/main.c:779
#, c-format
@@ -352,10 +359,9 @@ msgstr "Utilisation du répertoire d'exécution %s."
msgid "Using state directory %s."
msgstr "Utilisation du répertoire d'état %s."
-#: ../src/daemon/main.c:787
-#, fuzzy, c-format
+#: ../src/daemon/main.c:787, c-format
msgid "Using modules directory %s."
-msgstr "Utilisation du répertoire d'exécution %s."
+msgstr "Utilisation du répertoire des modules %s."
#: ../src/daemon/main.c:789
#, c-format
@@ -371,6 +377,12 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
+"Vous exécutez PA dans un mode système. Sachez que vous ne devriez pas faire "
+"cela.\n"
+"Si vous choisissez malgré tout de le faire, vous êtes responsable de tout "
+"dysfonctionnement inattendu.\n"
+"Veuillez lire http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode pour "
+"comprendre pourquoi le mode système est généralement une mauvaise idée."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -677,7 +689,7 @@ msgstr "Chargement unique : %s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr ""
+msgstr "AVERTISSEMENT D'OBSOLESCENCEÂ : %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -764,9 +776,8 @@ msgid "### Read from configuration file: %s ###\n"
msgstr "### Lecture à partir du fichier de configuration : %s ###\n"
#: ../src/daemon/caps.c:62
-#, fuzzy
msgid "Cleaning up privileges."
-msgstr "Abandon des privilèges root."
+msgstr "Nettoyage des privilèges."
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@@ -1112,11 +1123,11 @@ msgstr "Le client s'est divisé (Client forked)"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "Erreur d'entrée/sortie"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "Périphérique ou ressource occupé"
#: ../src/pulse/sample.c:172
#, c-format
@@ -1175,178 +1186,145 @@ msgstr "waitpid()Â : %s"
msgid "Received message for unknown extension '%s'"
msgstr "Message reçu pour une extension inconnue « %s »"
-#: ../src/utils/pacat.c:108
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:108, c-format
msgid "Failed to drain stream: %s"
-msgstr "Ãchec lors du vidage du flux : %s\n"
+msgstr "Ãchec lors du vidage du flux : %s"
#: ../src/utils/pacat.c:113
-#, fuzzy
msgid "Playback stream drained."
-msgstr "Flux de lecture vidé.\n"
+msgstr "Flux de lecture vidé."
#: ../src/utils/pacat.c:123
-#, fuzzy
msgid "Draining connection to server."
-msgstr "Vidage de la connexion au serveur.\n"
+msgstr "Vidage de la connexion au serveur."
-#: ../src/utils/pacat.c:136
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:136, c-format
msgid "pa_stream_drain(): %s"
-msgstr "pa_stream_drain()Â : %s\n"
+msgstr "pa_stream_drain()Â : %s"
-#: ../src/utils/pacat.c:159
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:159, c-format
msgid "pa_stream_write() failed: %s"
-msgstr "Ãchec de pa_stream_write()Â : %s\n"
+msgstr "Ãchec de pa_stream_write()Â : %s"
-#: ../src/utils/pacat.c:197
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:197, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr "Ãchec de pa_stream_write()Â : %s\n"
+msgstr "Ãchec de pa_stream_begin_write()Â : %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr "Ãchec de pa_stream_peek()Â : %s\n"
+msgstr "Ãchec de pa_stream_peek()Â : %s"
#: ../src/utils/pacat.c:307
-#, fuzzy
msgid "Stream successfully created."
-msgstr "Création du flux réussie.\n"
+msgstr "Création du flux réussie."
-#: ../src/utils/pacat.c:310
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:310, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr "Ãchec de pa_stream_get_buffer_attr()Â : %s\n"
+msgstr "Ãchec de pa_stream_get_buffer_attr()Â : %s"
-#: ../src/utils/pacat.c:314
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:314, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "Mesures du tampon : maxlength=%u, tlength=%u, prebuf=%u, minreq=%u\n"
+msgstr "Mesures du tampon : maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:317, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "Mesures du tampon : maxlength=%u, fragsize=%u\n"
+msgstr "Mesures du tampon : maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:321, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr ""
-"Utilisation de la spécification d'échantillon « %s », plan des canaux « %s ».\n"
+"Utilisation de la spécification d'échantillon « %s », plan des canaux « %s »."
# l'espace manquant entre %s et suspended est voulu
-#: ../src/utils/pacat.c:325
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:325, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "Connecté au périphérique %s (%u, %ssuspendu).\n"
+msgstr "Connecté au périphérique %s (%u, %ssuspendu)."
-#: ../src/utils/pacat.c:335
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:335, c-format
msgid "Stream error: %s"
-msgstr "Erreur du flux : %s\n"
+msgstr "Erreur du flux : %s"
-#: ../src/utils/pacat.c:345
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:345, c-format
msgid "Stream device suspended.%s"
-msgstr "Périphérique de flux suspendu %s \n"
+msgstr "Périphérique de flux suspendu.%s"
-#: ../src/utils/pacat.c:347
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:347, c-format
msgid "Stream device resumed.%s"
-msgstr "Périphérique de flux repris %s \n"
+msgstr "Périphérique de flux repris.%s"
-#: ../src/utils/pacat.c:355
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:355, c-format
msgid "Stream underrun.%s"
-msgstr "Flux vide %s \n"
+msgstr "Flux vide.%s"
-#: ../src/utils/pacat.c:362
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:362, c-format
msgid "Stream overrun.%s"
-msgstr "Flux saturé %s \n"
+msgstr "Flux saturé.%s"
-#: ../src/utils/pacat.c:369
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:369, c-format
msgid "Stream started.%s"
-msgstr "Flux démarré %s \n"
+msgstr "Flux démarré.%s"
-#: ../src/utils/pacat.c:376
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:376, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "Flux déplacé vers le périphérique %s (%u, %ssuspendu).%s \n"
+msgstr "Flux déplacé vers le périphérique %s (%u, %ssuspendu).%s"
# suspendu ou non suspendu
#: ../src/utils/pacat.c:376
msgid "not "
msgstr "non "
-#: ../src/utils/pacat.c:383
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:383, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr "Des attributs du tampon de flux ont changé. %s \n"
+msgstr "Des attributs du tampon de flux ont changé.%s"
-#: ../src/utils/pacat.c:415
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:415, c-format
msgid "Connection established.%s"
-msgstr "Connection établie.%s \n"
+msgstr "Connexion établie.%s"
-#: ../src/utils/pacat.c:418
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:418, c-format
msgid "pa_stream_new() failed: %s"
-msgstr "Ãchec de pa_stream_new()Â : %s\n"
+msgstr "Ãchec de pa_stream_new()Â : %s"
-#: ../src/utils/pacat.c:450
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:450, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr "Ãchec de pa_stream_connect_playback()Â : %s\n"
+msgstr "Ãchec de pa_stream_connect_playback()Â : %s"
-#: ../src/utils/pacat.c:456
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:456, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr "Ãchec de pa_stream_connect_record()Â : %s\n"
+msgstr "Ãchec de pa_stream_connect_record()Â : %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857, c-format
msgid "Connection failure: %s"
-msgstr "Ãchec lors de la connexion : %s\n"
+msgstr "Ãchec lors de la connexion : %s"
#: ../src/utils/pacat.c:503
-#, fuzzy
msgid "Got EOF."
-msgstr "EOF obtenu.\n"
+msgstr "EOF obtenu."
-#: ../src/utils/pacat.c:540
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:540, c-format
msgid "write() failed: %s"
-msgstr "Ãchec de write()Â : %s\n"
+msgstr "Ãchec de write()Â : %s"
#: ../src/utils/pacat.c:561
-#, fuzzy
msgid "Got signal, exiting."
-msgstr "Signal obtenu, fermeture.\n"
+msgstr "Signal obtenu, fermeture."
-#: ../src/utils/pacat.c:575
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:575, c-format
msgid "Failed to get latency: %s"
-msgstr "Ãchec lors de l'obtention de la latence : %s\n"
+msgstr "Ãchec lors de l'obtention de la latence : %s"
-#: ../src/utils/pacat.c:580
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:580, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "Durée : %0.3f s ; Latency : %0.0f µs. \r"
+msgstr "Durée : %0.3f sec. ; Latence : %0.0f µsec."
-#: ../src/utils/pacat.c:599
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:599, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "Ãchec de pa_stream_update_timing_info()Â : %s\n"
+msgstr "Ãchec de pa_stream_update_timing_info()Â : %s"
# 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:609
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:609, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1455,6 +1433,14 @@ msgstr ""
"octets.\n"
" --process-time=OCTETS Demande le temps de traitement "
"indiqué par requête en octets.\n"
+" --property=PROPRIÃTÃ=VALEUR Attribut la propriété définie à la "
+"valeur définie.\n"
+" --raw Enregistre/lit les données PCM brutes."
+"\n"
+" --file-format=FFORMAT Enregistre/lit les données PCM "
+"formatées.\n"
+" --list-file-formats Liste les formats de fichiers "
+"disponibles.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1467,104 +1453,92 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953, c-format
msgid "Invalid client name '%s'"
-msgstr "Plan des canaux invalide « %s »\n"
+msgstr "Nom du client invalide « %s »"
-#: ../src/utils/pacat.c:779
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:779, c-format
msgid "Invalid stream name '%s'"
-msgstr "Méthode de rééchantillonnage invalide « %s »."
+msgstr "Nom du flux invalide « %s »"
-#: ../src/utils/pacat.c:816
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:816, c-format
msgid "Invalid channel map '%s'"
-msgstr "Plan des canaux invalide « %s »\n"
+msgstr "Plan des canaux invalide « %s »"
-#: ../src/utils/pacat.c:845
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:845, c-format
msgid "Invalid latency specification '%s'"
-msgstr "Spécification de latence invalide « %s »\n"
+msgstr "Spécification de latence invalide « %s »"
-#: ../src/utils/pacat.c:852
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:852, c-format
msgid "Invalid process time specification '%s'"
-msgstr "Spécification de temps de traitement invalide « %s »\n"
+msgstr "Spécification de temps de traitement invalide « %s »"
-#: ../src/utils/pacat.c:864
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:864, c-format
msgid "Invalid property '%s'"
-msgstr "Méthode de rééchantillonnage invalide « %s »."
+msgstr "Propriété invalide « %s »"
#: ../src/utils/pacat.c:881
#, c-format
msgid "Unknown file format %s."
-msgstr ""
+msgstr "Format de fichier inconnu %s."
#: ../src/utils/pacat.c:900
-#, fuzzy
msgid "Invalid sample specification"
-msgstr "Spécification d'échantillon invalide\n"
+msgstr "Spécification d'échantillon invalide"
-#: ../src/utils/pacat.c:910
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:910, c-format
msgid "open(): %s"
-msgstr "open()Â : %s\n"
+msgstr "open()Â : %s"
-#: ../src/utils/pacat.c:915
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:915, c-format
msgid "dup2(): %s"
-msgstr "dup2()Â : %s\n"
+msgstr "dup2()Â : %s"
#: ../src/utils/pacat.c:922
-#, fuzzy
msgid "Too many arguments."
-msgstr "Trop de paramètres.\n"
+msgstr "Trop de paramètres."
#: ../src/utils/pacat.c:933
-#, fuzzy
msgid "Failed to generate sample specification for file."
-msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s\n"
+msgstr ""
+"Ãchec lors de la génération des informations de l'échantillon du fichier."
#: ../src/utils/pacat.c:953
-#, fuzzy
msgid "Failed to open audio file."
-msgstr "Ãchec lors de l'ouverture du fichier audio.\n"
+msgstr "Ãchec lors de l'ouverture du fichier audio."
#: ../src/utils/pacat.c:959
-#, fuzzy
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s ».\n"
+msgstr ""
+"Avertissement : les spécifications de l'échantillon spécifié seront écrasées "
+"par celles du fichier."
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
-#, fuzzy
msgid "Failed to determine sample specification from file."
-msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s\n"
+msgstr "Ãchec lors de l'obtention des informations de l'échantillon du fichier."
#: ../src/utils/pacat.c:971
-#, fuzzy
msgid "Warning: Failed to determine channel map from file."
-msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s ».\n"
+msgstr ""
+"Avertissement : échec lors de l'obtention des informations du plan des canaux "
+"du fichier."
#: ../src/utils/pacat.c:982
-#, fuzzy
msgid "Channel map doesn't match sample specification"
-msgstr ""
-"Le plan des canaux ne correspond pas à la spécification d'échantillon\n"
+msgstr "Le plan des canaux ne correspond pas à la spécification d'échantillon"
#: ../src/utils/pacat.c:993
-#, fuzzy
msgid "Warning: failed to write channel map to file."
-msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s ».\n"
+msgstr ""
+"Avertissement : Ãchec lors de l'écriture du plan des canaux dans le fichier."
-#: ../src/utils/pacat.c:1008
-#, fuzzy, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s ».\n"
+#: ../src/utils/pacat.c:1008, c-format
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"Ouverture d'un flux %s avec une spécification d'échantillon « %s » et un plan "
+"des canaux « %s »."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1575,19 +1549,16 @@ msgid "playback"
msgstr "lecture"
#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
-#, fuzzy
msgid "pa_mainloop_new() failed."
-msgstr "Ãchec de pa_mainloop_new().\n"
+msgstr "Ãchec de pa_mainloop_new()."
#: ../src/utils/pacat.c:1054
-#, fuzzy
msgid "io_new() failed."
-msgstr "Ãchec de io_new().\n"
+msgstr "Ãchec de io_new()."
#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
-#, fuzzy
msgid "pa_context_new() failed."
-msgstr "Ãchec de pa_context_new().\n"
+msgstr "Ãchec de pa_context_new()."
#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
#, c-format
@@ -1595,14 +1566,12 @@ msgid "pa_context_connect() failed: %s"
msgstr "Ãchec de pa_context_connect() : %s"
#: ../src/utils/pacat.c:1075
-#, fuzzy
msgid "pa_context_rttime_new() failed."
-msgstr "Ãchec de pa_context_new().\n"
+msgstr "Ãchec de pa_context_rttime_new()."
#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
-#, fuzzy
msgid "pa_mainloop_run() failed."
-msgstr "Ãchec de pa_mainloop_run().\n"
+msgstr "Ãchec de pa_mainloop_run()."
#: ../src/utils/pasuspender.c:81
#, c-format
@@ -1627,8 +1596,7 @@ msgstr "Ãchec lors de la reprise : %s\n"
#: ../src/utils/pasuspender.c:147
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr ""
-"AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
+msgstr "AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
#: ../src/utils/pasuspender.c:159
#, c-format
@@ -1690,10 +1658,9 @@ msgstr "Ãchec de pa_context_new().\n"
msgid "pa_mainloop_run() failed.\n"
msgstr "Ãchec de pa_mainloop_run().\n"
-#: ../src/utils/pactl.c:135
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:135, c-format
msgid "Failed to get statistics: %s"
-msgstr "Ãchec lors de l'obtention des statistiques : %s\n"
+msgstr "Ãchec lors de l'obtention des statistiques : %s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1712,10 +1679,9 @@ msgstr ""
msgid "Sample cache size: %s\n"
msgstr "Taille du cache de l'échantillon : %s\n"
-#: ../src/utils/pactl.c:156
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:156, c-format
msgid "Failed to get server information: %s"
-msgstr "Ãchec lors de l'obtention des informations du serveur : %s\n"
+msgstr "Ãchec lors de l'obtention des informations du serveur : %s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1740,10 +1706,9 @@ msgstr ""
"Source par défaut : %s\n"
"Cookie : %08x\n"
-#: ../src/utils/pactl.c:205
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:205, c-format
msgid "Failed to get sink information: %s"
-msgstr "Ãchec lors de l'obtention des informations sur la destination : %s\n"
+msgstr "Ãchec lors de l'obtention des informations sur la destination : %s"
# demander à Lennart s'il s'agit de monitor of source
#: ../src/utils/pactl.c:221
@@ -1785,20 +1750,17 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360, c-format
msgid "\tPorts:\n"
-msgstr "\tProfils :\n"
+msgstr "\tPorts :\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366, c-format
msgid "\tActive Port: %s\n"
-msgstr "\tProfil actif : %s\n"
+msgstr "\tPort actif : %s\n"
-#: ../src/utils/pactl.c:297
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:297, c-format
msgid "Failed to get source information: %s"
-msgstr "Ãchec lors de l'obtention des informations sur la source : %s\n"
+msgstr "Ãchec lors de l'obtention des informations sur la source : %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1847,10 +1809,9 @@ msgstr ""
msgid "n/a"
msgstr "n/d"
-#: ../src/utils/pactl.c:375
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:375, c-format
msgid "Failed to get module information: %s"
-msgstr "Ãchec lors de l'obtention des informations du module : %s\n"
+msgstr "Ãchec lors de l'obtention des informations du module : %s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1869,10 +1830,9 @@ msgstr ""
"\tPropriétés : \n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:412, c-format
msgid "Failed to get client information: %s"
-msgstr "Ãchec lors de l'obtention des informations du client : %s\n"
+msgstr "Ãchec lors de l'obtention des informations du client : %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1889,10 +1849,9 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:447, c-format
msgid "Failed to get card information: %s"
-msgstr "Impossible d'obtenir des informations sur la carte : %s\n"
+msgstr "Impossible d'obtenir des informations sur la carte : %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1921,12 +1880,10 @@ msgstr "\tProfils :\n"
msgid "\tActive Profile: %s\n"
msgstr "\tProfil actif : %s\n"
-#: ../src/utils/pactl.c:496
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:496, c-format
msgid "Failed to get sink input information: %s"
msgstr ""
-"Ãchec lors de l'obtention des informations de l'entrée de la destination : %"
-"s\n"
+"Ãchec lors de l'obtention des informations de l'entrée de la destination : %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1965,11 +1922,10 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:554, c-format
msgid "Failed to get source output information: %s"
msgstr ""
-"Ãchec lors de l'obtention des informations de la sortie de la source : %s\n"
+"Ãchec lors de l'obtention des informations de la sortie de la source : %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -2000,10 +1956,9 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:605, c-format
msgid "Failed to get sample information: %s"
-msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s\n"
+msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s"
# Lazy ?
# load-sample-lazy = Create a new entry in the sample cache, but don't load
@@ -2039,28 +1994,23 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663, c-format
msgid "Failure: %s"
-msgstr "Ãchec : %s\n"
+msgstr "Ãchec : %s"
-#: ../src/utils/pactl.c:687
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:687, c-format
msgid "Failed to upload sample: %s"
-msgstr "Ãchec lors de l'envoi de l'échantillon : %s\n"
+msgstr "Ãchec lors de l'envoi de l'échantillon : %s"
#: ../src/utils/pactl.c:704
-#, fuzzy
msgid "Premature end of file"
-msgstr "Fin prématurée du fichier\n"
+msgstr "Fin prématurée du fichier"
#: ../src/utils/pactl.c:863
-#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr "SIGINT reçu, fermeture.\n"
+msgstr "SIGINT reçu, fermeture."
-#: ../src/utils/pactl.c:869
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:869, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2105,6 +2055,14 @@ msgstr ""
"%s [options] suspend-sink [DEST] 1|0\n"
"%s [options] suspend-source [SOURCE] 1|0\n"
"%s·[options]·set-card-profile·[CARTE]·[PROFIL]·\n"
+"%s [options] set-sink-port DEST PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume DEST VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume ENTREEDEST VOLUME\n"
+"%s [options] set-sink-mute DEST 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute ENTREEDEST 1|0\n"
"\n"
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
@@ -2126,135 +2084,111 @@ msgstr ""
"Lié avec libpulse %s\n"
#: ../src/utils/pactl.c:979
-#, fuzzy
msgid "Please specify a sample file to load"
-msgstr "Veuillez indiquer un fichier d'échantillon à charger\n"
+msgstr "Veuillez indiquer un fichier d'échantillon à charger"
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "Ãchec lors de l'ouverture du fichier audio.\n"
+msgstr "Ãchec lors de l'ouverture du fichier audio."
#: ../src/utils/pactl.c:1004
-#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
-msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s ».\n"
+msgstr ""
+"Avertissement : Ãchec lors de l'obtention des spécifications de l'échantillon "
+"du fichier."
#: ../src/utils/pactl.c:1014
-#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr "Vous devez indiquer un nom d'échantillon à lire\n"
+msgstr "Vous devez indiquer un nom d'échantillon à lire"
#: ../src/utils/pactl.c:1026
-#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr "Vous devez indiquer un nom d'échantillon à supprimer\n"
+msgstr "Vous devez indiquer un nom d'échantillon à supprimer"
#: ../src/utils/pactl.c:1035
-#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr ""
-"Vous devez indiquer un index de sortie de destination et une destination\n"
+msgstr "Vous devez indiquer un index d'entrée de destination et une destination"
#: ../src/utils/pactl.c:1045
-#, fuzzy
msgid "You have to specify a source output index and a source"
-msgstr "Vous devez indiquer un index de sortie de source et une source\n"
+msgstr "Vous devez indiquer un index de sortie de source et une source"
#: ../src/utils/pactl.c:1060
-#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr "Vous devez indiquer un nom de module et des paramètres.\n"
+msgstr "Vous devez indiquer un nom de module et des paramètres."
#: ../src/utils/pactl.c:1080
-#, fuzzy
msgid "You have to specify a module index"
-msgstr "Vous devez indiquer un index de module\n"
+msgstr "Vous devez indiquer un index de module"
#: ../src/utils/pactl.c:1090
-#, fuzzy
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer une "
-"valeur booléenne.\n"
+"valeur booléenne."
#: ../src/utils/pactl.c:1103
-#, fuzzy
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
"Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer une "
-"valeur booléenne.\n"
+"valeur booléenne."
#: ../src/utils/pactl.c:1115
-#, fuzzy
msgid "You have to specify a card name/index and a profile name"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil"
#: ../src/utils/pactl.c:1126
-#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de destination et un nom de port"
#: ../src/utils/pactl.c:1137
-#, fuzzy
msgid "You have to specify a source name/index and a port name"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de source et un nom de port"
#: ../src/utils/pactl.c:1149
-#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de destination et un volume"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
-#, fuzzy
msgid "Invalid volume specification"
-msgstr "Spécification d'échantillon invalide\n"
+msgstr "Spécification de volume invalide"
#: ../src/utils/pactl.c:1166
-#, fuzzy
msgid "You have to specify a source name/index and a volume"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de source et un volume"
#: ../src/utils/pactl.c:1183
-#, fuzzy
msgid "You have to specify a sink input index and a volume"
-msgstr ""
-"Vous devez indiquer un index de sortie de destination et une destination\n"
+msgstr "Vous devez indiquer un index d'entrée de destination et un volume"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr ""
+msgstr "Index invalide d'entrée de la destination"
#: ../src/utils/pactl.c:1204
-#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de destination et un booléen muet"
#: ../src/utils/pactl.c:1221
-#, fuzzy
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil\n"
+msgstr "Vous devez indiquer un nom/un index de source et un booléen muet"
#: ../src/utils/pactl.c:1238
-#, fuzzy
msgid "You have to specify a sink input index and a mute boolean"
-msgstr ""
-"Vous devez indiquer un index de sortie de destination et une destination\n"
+msgstr "Vous devez indiquer un index d'entrée de destination et un booléen muet"
#: ../src/utils/pactl.c:1243
-#, fuzzy
msgid "Invalid sink input index specification"
-msgstr "Spécification d'échantillon invalide\n"
+msgstr "Spécification d'index d'entrée de la destination invalide"
#: ../src/utils/pactl.c:1262
-#, fuzzy
msgid "No valid command specified."
-msgstr "Aucune commande valide indiquée.\n"
+msgstr "Aucune commande valide indiquée."
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -2342,6 +2276,8 @@ msgstr "Pas encore implémenté.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
+"Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas "
+"dans une session de type démon."
#: ../src/utils/pacmd.c:74
#, c-format
@@ -2361,10 +2297,9 @@ msgstr "Impossible de tuer le démon PulseAudio."
msgid "Daemon not responding."
msgstr "Le démon ne répond pas."
-#: ../src/utils/pacmd.c:161
-#, fuzzy, c-format
+#: ../src/utils/pacmd.c:161, c-format
msgid "poll(): %s"
-msgstr "fork()Â : %s"
+msgstr "poll()Â : %s"
#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
#, c-format
@@ -2425,9 +2360,8 @@ msgid "High Fidelity Playback (A2DP)"
msgstr "Lecture haute fidélité (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
-#, fuzzy
msgid "High Fidelity Capture (A2DP)"
-msgstr "Lecture haute fidélité (A2DP)"
+msgstr "Capture haute fidélité (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
@@ -2440,133 +2374,122 @@ msgstr "Serveur de son PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "Périphériques de sortie"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "Entrée %s"
+msgstr "Périphériques d'entrée"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "Audio sur @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "Entrée %s"
+msgstr "Entrée"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Entrée de la station d'accueil"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Microphone de la station d'accueil"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "Entrée-ligne"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "Microphone"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "Microphone externe"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "Audio interne"
+msgstr "Microphone interne"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Radio"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Vidéo"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "Contrôle automatique du gain"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "Pas de contrôle automatique du gain"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "Boost"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "Pas de boost"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "Amplificateur"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "Pas d'amplificateur"
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "Mono analogique"
+msgstr "Entrée analogique"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "Mono analogique"
+msgstr "Microphone analogique"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "Mono analogique"
+msgstr "Entrée-ligne analogique"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "Mono analogique"
+msgstr "Radio analogique"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "Stéréo analogique"
+msgstr "Vidéo analogique"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "Sortie %s"
+msgstr "Sortie analogique"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "Mono analogique"
+msgstr "Casques analogiques"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "Sortie analogique (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "Mono analogique"
+msgstr "Sortie mono analogique"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
-msgstr ""
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
-msgstr ""
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
@@ -2577,19 +2500,16 @@ msgid "Analog Stereo"
msgstr "Stéréo analogique"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "Surround analogique 4.1"
+msgstr "Surround analogique 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "Surround analogique 4.0"
+msgstr "Surround analogique 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "Surround analogique 4.1"
+msgstr "Surround analogique 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2608,19 +2528,16 @@ msgid "Analog Surround 5.1"
msgstr "Surround analogique 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "Surround analogique 4.0"
+msgstr "Surround analogique 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "Surround analogique 4.1"
+msgstr "Surround analogique 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "Surround analogique 4.0"
+msgstr "Surround analogique 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2631,9 +2548,8 @@ msgid "Digital Stereo (IEC958)"
msgstr "Stéréo numérique (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "Surround numérique 4.0 (IEC958/AC3)"
+msgstr "Surround numérique 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
@@ -2648,19 +2564,16 @@ msgid "Digital Stereo (HDMI)"
msgstr "Stéréo numérique (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Mono analogique"
+msgstr "Duplex Mono analogique"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Stéréo analogique"
+msgstr "Duplex stéréo analogique"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Stéréo numérique (IEC958)"
+msgstr "Duplex stéréo numérique (IEC958)"
#, fuzzy
#~ msgid "Invalid client name '%s'\n"
commit c3a14cbfc2090d02ed42c34e7686a159583cc9ec
Author: vpv <vpv at fedoraproject.org>
Date: Wed Dec 23 21:47:14 2009 +0000
Sending translation for Finnish
diff --git a/po/fi.po b/po/fi.po
index cfb1437..00bfda9 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
-"PO-Revision-Date: 2009-11-09 15:16+0200\n"
+"POT-Creation-Date: 2009-12-23 17:25+0000\n"
+"PO-Revision-Date: 2009-12-23 23:45+0200\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
"MIME-Version: 1.0\n"
@@ -2369,7 +2369,7 @@ msgstr "Korkean äänenlaadun tallennus (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr ""
+msgstr "Puhelut, molemmat suunnat (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
@@ -2568,19 +2568,16 @@ msgid "Digital Stereo (HDMI)"
msgstr "Digitaalinen stereo (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "Analoginen mono"
+msgstr "Analoginen mono, molemmat suunnat"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "Analoginen stereo"
+msgstr "Analoginen stereo, molemmat suunnat"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Digitaalinen stereo (IEC958)"
+msgstr "Digitaalinen stereo, molemmat suunnat (IEC958)"
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Virheellinen asiakasohjelman nimi â%sâ\n"
commit 8ace563246ce98802fe4607cc1cb0043d09b9e68
Author: elad <elad at fedoraproject.org>
Date: Wed Dec 30 16:21:51 2009 +0000
Sending translation for po/he.po
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..e1e3c08
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,2203 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: pulseaudio\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-29 12:48+0000\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Elad <el.il at doom.co.il>\n"
+"Language-Team: Hebrew <fedora-he-list at redhat.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: Hebrew\n"
+"X-Poedit-Country: Israel\n"
+
+#: ../src/modules/alsa/alsa-util.c:858
+#: ../src/pulsecore/sink.c:2629
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: ../src/modules/alsa/alsa-util.c:1106
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1147
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1194
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:39
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr ""
+
+#: ../src/modules/module-always-sink.c:83
+msgid "Dummy Output"
+msgstr ""
+
+#: ../src/modules/module-ladspa-sink.c:49
+msgid "Virtual LADSPA sink"
+msgstr ""
+
+#: ../src/modules/module-ladspa-sink.c:53
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgstr ""
+
+#: ../src/modules/module-null-sink.c:55
+msgid "Clocked NULL sink"
+msgstr ""
+
+#: ../src/modules/module-null-sink.c:291
+msgid "Null Output"
+msgstr ""
+
+#: ../src/pulsecore/sink.c:2613
+msgid "Internal Audio"
+msgstr "צ××× ×¤× ×××"
+
+#: ../src/pulsecore/sink.c:2618
+msgid "Modem"
+msgstr "××××"
+
+#: ../src/daemon/ltdl-bind-now.c:124
+msgid "Failed to find original lt_dlopen loader."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:129
+msgid "Failed to allocate new dl loader."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:142
+msgid "Failed to add bind-now-loader."
+msgstr ""
+
+#: ../src/daemon/main.c:141
+#, c-format
+msgid "Got signal %s."
+msgstr ""
+
+#: ../src/daemon/main.c:168
+msgid "Exiting."
+msgstr "××צ×."
+
+#: ../src/daemon/main.c:186
+#, c-format
+msgid "Failed to find user '%s'."
+msgstr ""
+
+#: ../src/daemon/main.c:191
+#, c-format
+msgid "Failed to find group '%s'."
+msgstr ""
+
+#: ../src/daemon/main.c:195
+#, c-format
+msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
+msgstr ""
+
+#: ../src/daemon/main.c:200
+#, c-format
+msgid "GID of user '%s' and of group '%s' don't match."
+msgstr ""
+
+#: ../src/daemon/main.c:205
+#, c-format
+msgid "Home directory of user '%s' is not '%s', ignoring."
+msgstr ""
+
+#: ../src/daemon/main.c:208
+#: ../src/daemon/main.c:213
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr ""
+
+#: ../src/daemon/main.c:220
+#, c-format
+msgid "Failed to change group list: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:236
+#, c-format
+msgid "Failed to change GID: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:252
+#, c-format
+msgid "Failed to change UID: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:271
+msgid "Successfully dropped root privileges."
+msgstr ""
+
+#: ../src/daemon/main.c:279
+msgid "System wide mode unsupported on this platform."
+msgstr ""
+
+#: ../src/daemon/main.c:297
+#, c-format
+msgid "setrlimit(%s, (%u, %u)) failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:474
+msgid "Failed to parse command line."
+msgstr ""
+
+#: ../src/daemon/main.c:541
+msgid "Daemon not running"
+msgstr ""
+
+#: ../src/daemon/main.c:543
+#, c-format
+msgid "Daemon running as PID %u"
+msgstr ""
+
+#: ../src/daemon/main.c:553
+#, c-format
+msgid "Failed to kill daemon: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:571
+msgid "This program is not intended to be run as root (unless --system is specified)."
+msgstr ""
+
+#: ../src/daemon/main.c:573
+msgid "Root privileges required."
+msgstr ""
+
+#: ../src/daemon/main.c:578
+msgid "--start not supported for system instances."
+msgstr ""
+
+#: ../src/daemon/main.c:583
+msgid "Running in system mode, but --disallow-exit not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:586
+msgid "Running in system mode, but --disallow-module-loading not set!"
+msgstr ""
+
+#: ../src/daemon/main.c:589
+msgid "Running in system mode, forcibly disabling SHM mode!"
+msgstr ""
+
+#: ../src/daemon/main.c:594
+msgid "Running in system mode, forcibly disabling exit idle time!"
+msgstr ""
+
+#: ../src/daemon/main.c:621
+msgid "Failed to acquire stdio."
+msgstr ""
+
+#: ../src/daemon/main.c:627
+#, c-format
+msgid "pipe failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:632
+#, c-format
+msgid "fork() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:646
+#: ../src/utils/pacat.c:508
+#, c-format
+msgid "read() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:652
+msgid "Daemon startup failed."
+msgstr ""
+
+#: ../src/daemon/main.c:654
+msgid "Daemon startup successful."
+msgstr ""
+
+#: ../src/daemon/main.c:731
+#, c-format
+msgid "This is PulseAudio %s"
+msgstr ""
+
+#: ../src/daemon/main.c:732
+#, c-format
+msgid "Compilation host: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:733
+#, c-format
+msgid "Compilation CFLAGS: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:736
+#, c-format
+msgid "Running on host: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:739
+#, c-format
+msgid "Found %u CPUs."
+msgstr ""
+
+#: ../src/daemon/main.c:741
+#, c-format
+msgid "Page size is %lu bytes"
+msgstr ""
+
+#: ../src/daemon/main.c:744
+msgid "Compiled with Valgrind support: yes"
+msgstr ""
+
+#: ../src/daemon/main.c:746
+msgid "Compiled with Valgrind support: no"
+msgstr ""
+
+#: ../src/daemon/main.c:749
+#, c-format
+msgid "Running in valgrind mode: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:752
+msgid "Optimized build: yes"
+msgstr ""
+
+#: ../src/daemon/main.c:754
+msgid "Optimized build: no"
+msgstr ""
+
+#: ../src/daemon/main.c:758
+msgid "NDEBUG defined, all asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:760
+msgid "FASTPATH defined, only fast path asserts disabled."
+msgstr ""
+
+#: ../src/daemon/main.c:762
+msgid "All asserts enabled."
+msgstr ""
+
+#: ../src/daemon/main.c:766
+msgid "Failed to get machine ID"
+msgstr ""
+
+#: ../src/daemon/main.c:769
+#, c-format
+msgid "Machine ID is %s."
+msgstr ""
+
+#: ../src/daemon/main.c:773
+#, c-format
+msgid "Session ID is %s."
+msgstr ""
+
+#: ../src/daemon/main.c:779
+#, c-format
+msgid "Using runtime directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:784
+#, c-format
+msgid "Using state directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:787
+#, c-format
+msgid "Using modules directory %s."
+msgstr ""
+
+#: ../src/daemon/main.c:789
+#, c-format
+msgid "Running in system mode: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:792
+msgid ""
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+msgstr ""
+
+#: ../src/daemon/main.c:809
+msgid "pa_pid_file_create() failed."
+msgstr ""
+
+#: ../src/daemon/main.c:819
+msgid "Fresh high-resolution timers available! Bon appetit!"
+msgstr ""
+
+#: ../src/daemon/main.c:821
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+msgstr ""
+
+#: ../src/daemon/main.c:844
+msgid "pa_core_new() failed."
+msgstr ""
+
+#: ../src/daemon/main.c:904
+msgid "Failed to initialize daemon."
+msgstr ""
+
+#: ../src/daemon/main.c:909
+msgid "Daemon startup without any loaded modules, refusing to work."
+msgstr ""
+
+#: ../src/daemon/main.c:926
+msgid "Daemon startup complete."
+msgstr ""
+
+#: ../src/daemon/main.c:932
+msgid "Daemon shutdown initiated."
+msgstr ""
+
+#: ../src/daemon/main.c:954
+msgid "Daemon terminated."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:115
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" --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"
+" -k --kill Kill 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"
+" with elevated RLIMIT_NICE)\n"
+" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" (only available as root, when SUID or\n"
+" with elevated RLIMIT_RTPRIO)\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"
+" time passed\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"
+" 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-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"
+" possible values)\n"
+" --use-pid-file[=BOOL] Create a PID file\n"
+" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" platforms that support it.\n"
+" --disable-shm[=BOOL] Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\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"
+" after startup\n"
+"\n"
+" -n Don't load default script file\n"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:247
+msgid "--daemonize expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:254
+msgid "--fail expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:264
+msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:276
+msgid "--high-priority expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:283
+msgid "--realtime expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:290
+msgid "--disallow-module-loading expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:297
+msgid "--disallow-exit expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:304
+msgid "--use-pid-file expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:321
+msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:328
+msgid "--log-time expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:335
+msgid "--log-meta expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:354
+#, c-format
+msgid "Invalid resample method '%s'."
+msgstr ""
+
+#: ../src/daemon/cmdline.c:361
+msgid "--system expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:368
+msgid "--no-cpu-limit expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/cmdline.c:375
+msgid "--disable-shm expects boolean argument"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:60
+#, c-format
+msgid "Name: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:63
+#, c-format
+msgid "No module information available\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:66
+#, c-format
+msgid "Version: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:68
+#, c-format
+msgid "Description: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:70
+#, c-format
+msgid "Author: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:72
+#, c-format
+msgid "Usage: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:73
+#, c-format
+msgid "Load Once: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:75
+#, c-format
+msgid "DEPRECATION WARNING: %s\n"
+msgstr ""
+
+#: ../src/daemon/dumpmodules.c:79
+#, c-format
+msgid "Path: %s\n"
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:232
+#, c-format
+msgid "[%s:%u] Invalid log target '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:248
+#, c-format
+msgid "[%s:%u] Invalid log level '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:264
+#, c-format
+msgid "[%s:%u] Invalid resample method '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:287
+#, c-format
+msgid "[%s:%u] Invalid rlimit '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:294
+#, c-format
+msgid "[%s:%u] rlimit not supported on this platform."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:310
+#, c-format
+msgid "[%s:%u] Invalid sample format '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:328
+#, c-format
+msgid "[%s:%u] Invalid sample rate '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:352
+#, c-format
+msgid "[%s:%u] Invalid sample channels '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:370
+#, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:388
+#, c-format
+msgid "[%s:%u] Invalid number of fragments '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:406
+#, c-format
+msgid "[%s:%u] Invalid fragment size '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:424
+#, c-format
+msgid "[%s:%u] Invalid nice level '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:546
+#, c-format
+msgid "Failed to open configuration file: %s"
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:562
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:638
+#, c-format
+msgid "### Read from configuration file: %s ###\n"
+msgstr ""
+
+#: ../src/daemon/caps.c:62
+msgid "Cleaning up privileges."
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr "×ער×ת ×ק×× PulseAudio"
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr "×ת×× ×ת ×ער×ת ×ק×× PulseAudio"
+
+#: ../src/pulse/channelmap.c:105
+#: ../src/pulse/channelmap.c:757
+msgid "Mono"
+msgstr "××× ×"
+
+#: ../src/pulse/channelmap.c:107
+msgid "Front Center"
+msgstr "×ר××× ×§×××"
+
+#: ../src/pulse/channelmap.c:108
+msgid "Front Left"
+msgstr "ש×××× ×§×××"
+
+#: ../src/pulse/channelmap.c:109
+msgid "Front Right"
+msgstr "××× × ×§×××"
+
+#: ../src/pulse/channelmap.c:111
+msgid "Rear Center"
+msgstr "×ר××× ×××ר×"
+
+#: ../src/pulse/channelmap.c:112
+msgid "Rear Left"
+msgstr "ש×××× ×××ר×"
+
+#: ../src/pulse/channelmap.c:113
+msgid "Rear Right"
+msgstr "××× × ×××ר×"
+
+#: ../src/pulse/channelmap.c:115
+msgid "Low Frequency Emmiter"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:117
+msgid "Front Left-of-center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:118
+msgid "Front Right-of-center"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:120
+msgid "Side Left"
+msgstr "×¦× ×©×××"
+
+#: ../src/pulse/channelmap.c:121
+msgid "Side Right"
+msgstr "×¦× ××××"
+
+#: ../src/pulse/channelmap.c:123
+msgid "Auxiliary 0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:124
+msgid "Auxiliary 1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:125
+msgid "Auxiliary 2"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:126
+msgid "Auxiliary 3"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:127
+msgid "Auxiliary 4"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:128
+msgid "Auxiliary 5"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:129
+msgid "Auxiliary 6"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:130
+msgid "Auxiliary 7"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:131
+msgid "Auxiliary 8"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:132
+msgid "Auxiliary 9"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:133
+msgid "Auxiliary 10"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:134
+msgid "Auxiliary 11"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:135
+msgid "Auxiliary 12"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:136
+msgid "Auxiliary 13"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:137
+msgid "Auxiliary 14"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:138
+msgid "Auxiliary 15"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:139
+msgid "Auxiliary 16"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:140
+msgid "Auxiliary 17"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:141
+msgid "Auxiliary 18"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:142
+msgid "Auxiliary 19"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:143
+msgid "Auxiliary 20"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:144
+msgid "Auxiliary 21"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:145
+msgid "Auxiliary 22"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:146
+msgid "Auxiliary 23"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:147
+msgid "Auxiliary 24"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:148
+msgid "Auxiliary 25"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:149
+msgid "Auxiliary 26"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:150
+msgid "Auxiliary 27"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:151
+msgid "Auxiliary 28"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:152
+msgid "Auxiliary 29"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:153
+msgid "Auxiliary 30"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:154
+msgid "Auxiliary 31"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:156
+msgid "Top Center"
+msgstr "×ר××× ×¢××××"
+
+#: ../src/pulse/channelmap.c:158
+msgid "Top Front Center"
+msgstr "×ר××× ×¢×××× ×§×××"
+
+#: ../src/pulse/channelmap.c:159
+msgid "Top Front Left"
+msgstr "×¢×××× ×©×××× ×§×××"
+
+#: ../src/pulse/channelmap.c:160
+msgid "Top Front Right"
+msgstr "×¢×××× ××× × ×§×××"
+
+#: ../src/pulse/channelmap.c:162
+msgid "Top Rear Center"
+msgstr "×¢×××× ×ר××× ×××ר×"
+
+#: ../src/pulse/channelmap.c:163
+msgid "Top Rear Left"
+msgstr "×¢×××× ×©×××× ×××ר×"
+
+#: ../src/pulse/channelmap.c:164
+msgid "Top Rear Right"
+msgstr "×¢×××× ××× × ×××ר×"
+
+#: ../src/pulse/channelmap.c:484
+#: ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295
+#: ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341
+#: ../src/pulse/volume.c:371
+msgid "(invalid)"
+msgstr "(×× ×ª×§×£)"
+
+#: ../src/pulse/channelmap.c:761
+msgid "Stereo"
+msgstr "ס×ר××"
+
+#: ../src/pulse/channelmap.c:766
+msgid "Surround 4.0"
+msgstr "סר××× × 4.0"
+
+#: ../src/pulse/channelmap.c:772
+msgid "Surround 4.1"
+msgstr "סר××× × 4.1"
+
+#: ../src/pulse/channelmap.c:778
+msgid "Surround 5.0"
+msgstr "סר××× × 5.0"
+
+#: ../src/pulse/channelmap.c:784
+msgid "Surround 5.1"
+msgstr "סר××× × 5.1"
+
+#: ../src/pulse/channelmap.c:791
+msgid "Surround 7.1"
+msgstr "סר××× × 7.1"
+
+#: ../src/pulse/error.c:43
+msgid "OK"
+msgstr "××ש×ר"
+
+#: ../src/pulse/error.c:44
+msgid "Access denied"
+msgstr "××××©× × ××ת×"
+
+#: ../src/pulse/error.c:45
+msgid "Unknown command"
+msgstr ""
+
+#: ../src/pulse/error.c:46
+msgid "Invalid argument"
+msgstr ""
+
+#: ../src/pulse/error.c:47
+msgid "Entity exists"
+msgstr ""
+
+#: ../src/pulse/error.c:48
+msgid "No such entity"
+msgstr ""
+
+#: ../src/pulse/error.c:49
+msgid "Connection refused"
+msgstr "×××××ר × ×××"
+
+#: ../src/pulse/error.c:50
+msgid "Protocol error"
+msgstr "ש×××ת פר×××ק××"
+
+#: ../src/pulse/error.c:51
+msgid "Timeout"
+msgstr ""
+
+#: ../src/pulse/error.c:52
+msgid "No authorization key"
+msgstr ""
+
+#: ../src/pulse/error.c:53
+msgid "Internal error"
+msgstr "ש×××× ×¤× ×××ת"
+
+#: ../src/pulse/error.c:54
+msgid "Connection terminated"
+msgstr ""
+
+#: ../src/pulse/error.c:55
+msgid "Entity killed"
+msgstr ""
+
+#: ../src/pulse/error.c:56
+msgid "Invalid server"
+msgstr ""
+
+#: ../src/pulse/error.c:57
+msgid "Module initalization failed"
+msgstr ""
+
+#: ../src/pulse/error.c:58
+msgid "Bad state"
+msgstr ""
+
+#: ../src/pulse/error.c:59
+msgid "No data"
+msgstr ""
+
+#: ../src/pulse/error.c:60
+msgid "Incompatible protocol version"
+msgstr ""
+
+#: ../src/pulse/error.c:61
+msgid "Too large"
+msgstr "×××× ×××"
+
+#: ../src/pulse/error.c:62
+msgid "Not supported"
+msgstr "×× × ×ª××"
+
+#: ../src/pulse/error.c:63
+msgid "Unknown error code"
+msgstr "ק×× ×©×××× ×× ×××ר"
+
+#: ../src/pulse/error.c:64
+msgid "No such extension"
+msgstr ""
+
+#: ../src/pulse/error.c:65
+msgid "Obsolete functionality"
+msgstr ""
+
+#: ../src/pulse/error.c:66
+msgid "Missing implementation"
+msgstr ""
+
+#: ../src/pulse/error.c:67
+msgid "Client forked"
+msgstr ""
+
+#: ../src/pulse/error.c:68
+msgid "Input/Output error"
+msgstr "ש×××ת ק××/פ××"
+
+#: ../src/pulse/error.c:69
+msgid "Device or resource busy"
+msgstr "××ª×§× ×× ×ש×× ×¢×¡×ק××"
+
+#: ../src/pulse/sample.c:172
+#, c-format
+msgid "%s %uch %uHz"
+msgstr ""
+
+#: ../src/pulse/sample.c:184
+#, c-format
+msgid "%0.1f GiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:186
+#, c-format
+msgid "%0.1f MiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:188
+#, c-format
+msgid "%0.1f KiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:190
+#, c-format
+msgid "%u B"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:55
+#: ../src/utils/pax11publish.c:100
+msgid "XOpenDisplay() failed"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:93
+msgid "Failed to parse cookie data"
+msgstr ""
+
+#: ../src/pulse/client-conf.c:111
+#, c-format
+msgid "Failed to open configuration file '%s': %s"
+msgstr ""
+
+#: ../src/pulse/context.c:550
+msgid "No cookie loaded. Attempting to connect without."
+msgstr ""
+
+#: ../src/pulse/context.c:693
+#, c-format
+msgid "fork(): %s"
+msgstr ""
+
+#: ../src/pulse/context.c:748
+#, c-format
+msgid "waitpid(): %s"
+msgstr ""
+
+#: ../src/pulse/context.c:1438
+#, c-format
+msgid "Received message for unknown extension '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:108
+#, c-format
+msgid "Failed to drain stream: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:113
+msgid "Playback stream drained."
+msgstr ""
+
+#: ../src/utils/pacat.c:123
+msgid "Draining connection to server."
+msgstr ""
+
+#: ../src/utils/pacat.c:136
+#, c-format
+msgid "pa_stream_drain(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:159
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:197
+#, c-format
+msgid "pa_stream_begin_write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:237
+#: ../src/utils/pacat.c:267
+#, c-format
+msgid "pa_stream_peek() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:307
+msgid "Stream successfully created."
+msgstr ""
+
+#: ../src/utils/pacat.c:310
+#, c-format
+msgid "pa_stream_get_buffer_attr() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:314
+#, c-format
+msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:317
+#, c-format
+msgid "Buffer metrics: maxlength=%u, fragsize=%u"
+msgstr ""
+
+#: ../src/utils/pacat.c:321
+#, c-format
+msgid "Using sample spec '%s', channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:325
+#, c-format
+msgid "Connected to device %s (%u, %ssuspended)."
+msgstr ""
+
+#: ../src/utils/pacat.c:335
+#, c-format
+msgid "Stream error: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:345
+#, c-format
+msgid "Stream device suspended.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:347
+#, c-format
+msgid "Stream device resumed.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:355
+#, c-format
+msgid "Stream underrun.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:362
+#, c-format
+msgid "Stream overrun.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:369
+#, c-format
+msgid "Stream started.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:376
+#, c-format
+msgid "Stream moved to device %s (%u, %ssuspended).%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:376
+msgid "not "
+msgstr "××"
+
+#: ../src/utils/pacat.c:383
+#, c-format
+msgid "Stream buffer attributes changed.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:415
+#, c-format
+msgid "Connection established.%s"
+msgstr ""
+
+#: ../src/utils/pacat.c:418
+#, c-format
+msgid "pa_stream_new() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:450
+#, c-format
+msgid "pa_stream_connect_playback() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:456
+#, c-format
+msgid "pa_stream_connect_record() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:470
+#: ../src/utils/pactl.c:857
+#, c-format
+msgid "Connection failure: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:503
+msgid "Got EOF."
+msgstr ""
+
+#: ../src/utils/pacat.c:540
+#, c-format
+msgid "write() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:561
+msgid "Got signal, exiting."
+msgstr ""
+
+#: ../src/utils/pacat.c:575
+#, c-format
+msgid "Failed to get latency: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:580
+#, c-format
+msgid "Time: %0.3f sec; Latency: %0.0f usec."
+msgstr ""
+
+#: ../src/utils/pacat.c:599
+#, c-format
+msgid "pa_stream_update_timing_info() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:609
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+"\n"
+" -r, --record Create a connection for recording\n"
+" -p, --playback Create a connection for playback\n"
+"\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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
+" being connected to.\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"
+" --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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
+" --raw Record/play raw PCM data.\n"
+" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --list-file-formats List available file formats.\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:731
+#, c-format
+msgid ""
+"pacat %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pacat.c:764
+#: ../src/utils/pactl.c:953
+#, c-format
+msgid "Invalid client name '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:779
+#, c-format
+msgid "Invalid stream name '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:816
+#, c-format
+msgid "Invalid channel map '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:845
+#, c-format
+msgid "Invalid latency specification '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:852
+#, c-format
+msgid "Invalid process time specification '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:864
+#, c-format
+msgid "Invalid property '%s'"
+msgstr ""
+
+#: ../src/utils/pacat.c:881
+#, c-format
+msgid "Unknown file format %s."
+msgstr ""
+
+#: ../src/utils/pacat.c:900
+msgid "Invalid sample specification"
+msgstr ""
+
+#: ../src/utils/pacat.c:910
+#, c-format
+msgid "open(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:915
+#, c-format
+msgid "dup2(): %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:922
+msgid "Too many arguments."
+msgstr ""
+
+#: ../src/utils/pacat.c:933
+msgid "Failed to generate sample specification for file."
+msgstr ""
+
+#: ../src/utils/pacat.c:953
+msgid "Failed to open audio file."
+msgstr ""
+
+#: ../src/utils/pacat.c:959
+msgid "Warning: specified sample specification will be overwritten with specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:962
+#: ../src/utils/pactl.c:997
+msgid "Failed to determine sample specification from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:971
+msgid "Warning: Failed to determine channel map from file."
+msgstr ""
+
+#: ../src/utils/pacat.c:982
+msgid "Channel map doesn't match sample specification"
+msgstr ""
+
+#: ../src/utils/pacat.c:993
+msgid "Warning: failed to write channel map to file."
+msgstr ""
+
+#: ../src/utils/pacat.c:1008
+#, c-format
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+
+#: ../src/utils/pacat.c:1009
+msgid "recording"
+msgstr "×ק×××"
+
+#: ../src/utils/pacat.c:1009
+msgid "playback"
+msgstr "× ××× ×"
+
+#: ../src/utils/pacat.c:1035
+#: ../src/utils/pactl.c:1267
+msgid "pa_mainloop_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1054
+msgid "io_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1061
+#: ../src/utils/pactl.c:1279
+msgid "pa_context_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1069
+#: ../src/utils/pactl.c:1285
+#, c-format
+msgid "pa_context_connect() failed: %s"
+msgstr ""
+
+#: ../src/utils/pacat.c:1075
+msgid "pa_context_rttime_new() failed."
+msgstr ""
+
+#: ../src/utils/pacat.c:1082
+#: ../src/utils/pactl.c:1290
+msgid "pa_mainloop_run() failed."
+msgstr ""
+
+#: ../src/utils/pasuspender.c:81
+#, c-format
+msgid "fork(): %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:92
+#, c-format
+msgid "execvp(): %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:109
+#, c-format
+msgid "Failure to suspend: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:124
+#, c-format
+msgid "Failure to resume: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:147
+#, c-format
+msgid "WARNING: Sound server is not local, not suspending.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:159
+#, c-format
+msgid "Connection failure: %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:176
+#, c-format
+msgid "Got SIGINT, exiting.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:194
+#, c-format
+msgid "WARNING: Child process terminated by signal %u\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:212
+#, c-format
+msgid ""
+"%s [options] ... \n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" -s, --server=SERVER The name of the server to connect to\n"
+"\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:248
+#, c-format
+msgid ""
+"pasuspender %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:277
+#, c-format
+msgid "pa_mainloop_new() failed.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:290
+#, c-format
+msgid "pa_context_new() failed.\n"
+msgstr ""
+
+#: ../src/utils/pasuspender.c:298
+#, c-format
+msgid "pa_mainloop_run() failed.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:135
+#, c-format
+msgid "Failed to get statistics: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:141
+#, c-format
+msgid "Currently in use: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:144
+#, c-format
+msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:147
+#, c-format
+msgid "Sample cache size: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:156
+#, c-format
+msgid "Failed to get server information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:164
+#, c-format
+msgid ""
+"User name: %s\n"
+"Host Name: %s\n"
+"Server Name: %s\n"
+"Server Version: %s\n"
+"Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
+"Default Sink: %s\n"
+"Default Source: %s\n"
+"Cookie: %08x\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:205
+#, c-format
+msgid "Failed to get sink information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:221
+#, c-format
+msgid ""
+"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:268
+#: ../src/utils/pactl.c:360
+#, c-format
+msgid "\tPorts:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:274
+#: ../src/utils/pactl.c:366
+#, c-format
+msgid "\tActive Port: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:297
+#, c-format
+msgid "Failed to get source information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:313
+#, c-format
+msgid ""
+"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:345
+#: ../src/utils/pactl.c:401
+#: ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473
+#: ../src/utils/pactl.c:532
+#: ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543
+#: ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:637
+#: ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:645
+msgid "n/a"
+msgstr "×× ××××"
+
+#: ../src/utils/pactl.c:375
+#, c-format
+msgid "Failed to get module information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:393
+#, c-format
+msgid ""
+"Module #%u\n"
+"\tName: %s\n"
+"\tArgument: %s\n"
+"\tUsage counter: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:412
+#, c-format
+msgid "Failed to get client information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:430
+#, c-format
+msgid ""
+"Client #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:447
+#, c-format
+msgid "Failed to get card information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:465
+#, c-format
+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:479
+#, c-format
+msgid "\tProfiles:\n"
+msgstr "\tפר×פ××××:\n"
+
+#: ../src/utils/pactl.c:485
+#, c-format
+msgid "\tActive Profile: %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:496
+#, c-format
+msgid "Failed to get sink input information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:515
+#, c-format
+msgid ""
+"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:554
+#, c-format
+msgid "Failed to get source output information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:574
+#, c-format
+msgid ""
+"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:605
+#, c-format
+msgid "Failed to get sample information: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:623
+#, c-format
+msgid ""
+"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:653
+#: ../src/utils/pactl.c:663
+#, c-format
+msgid "Failure: %s"
+msgstr "×ש×: %s"
+
+#: ../src/utils/pactl.c:687
+#, c-format
+msgid "Failed to upload sample: %s"
+msgstr ""
+
+#: ../src/utils/pactl.c:704
+msgid "Premature end of file"
+msgstr ""
+
+#: ../src/utils/pactl.c:863
+msgid "Got SIGINT, exiting."
+msgstr ""
+
+#: ../src/utils/pactl.c:869
+#, c-format
+msgid ""
+"%s [options] stat\n"
+"%s [options] list\n"
+"%s [options] exit\n"
+"%s [options] upload-sample FILENAME [NAME]\n"
+"%s [options] play-sample NAME [SINK]\n"
+"%s [options] remove-sample NAME\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [options] load-module NAME [ARGS ...]\n"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
+msgstr ""
+
+#: ../src/utils/pactl.c:933
+#, c-format
+msgid ""
+"pactl %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:979
+msgid "Please specify a sample file to load"
+msgstr ""
+
+#: ../src/utils/pactl.c:992
+msgid "Failed to open sound file."
+msgstr ""
+
+#: ../src/utils/pactl.c:1004
+msgid "Warning: Failed to determine sample specification from file."
+msgstr ""
+
+#: ../src/utils/pactl.c:1014
+msgid "You have to specify a sample name to play"
+msgstr ""
+
+#: ../src/utils/pactl.c:1026
+msgid "You have to specify a sample name to remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:1035
+msgid "You have to specify a sink input index and a sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:1045
+msgid "You have to specify a source output index and a source"
+msgstr ""
+
+#: ../src/utils/pactl.c:1060
+msgid "You have to specify a module name and arguments."
+msgstr ""
+
+#: ../src/utils/pactl.c:1080
+msgid "You have to specify a module index"
+msgstr ""
+
+#: ../src/utils/pactl.c:1090
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1103
+msgid "You may not specify more than one source. You have to specify a boolean value."
+msgstr ""
+
+#: ../src/utils/pactl.c:1115
+msgid "You have to specify a card name/index and a profile name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1126
+msgid "You have to specify a sink name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1137
+msgid "You have to specify a source name/index and a port name"
+msgstr ""
+
+#: ../src/utils/pactl.c:1149
+msgid "You have to specify a sink name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1154
+#: ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193
+#: ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226
+#: ../src/utils/pactl.c:1248
+msgid "Invalid volume specification"
+msgstr ""
+
+#: ../src/utils/pactl.c:1166
+msgid "You have to specify a source name/index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1183
+msgid "You have to specify a sink input index and a volume"
+msgstr ""
+
+#: ../src/utils/pactl.c:1188
+msgid "Invalid sink input index"
+msgstr ""
+
+#: ../src/utils/pactl.c:1204
+msgid "You have to specify a sink name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1221
+msgid "You have to specify a source name/index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1238
+msgid "You have to specify a sink input index and a mute boolean"
+msgstr ""
+
+#: ../src/utils/pactl.c:1243
+msgid "Invalid sink input index specification"
+msgstr ""
+
+#: ../src/utils/pactl.c:1262
+msgid "No valid command specified."
+msgstr ""
+
+#: ../src/utils/pax11publish.c:61
+#, c-format
+msgid ""
+"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
+"\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"
+" -r Remove PulseAudio data from X11 display\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:94
+#, c-format
+msgid "Failed to parse command line.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:108
+#, c-format
+msgid "Server: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:110
+#, c-format
+msgid "Source: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:112
+#, c-format
+msgid "Sink: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:114
+#, c-format
+msgid "Cookie: %s\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:132
+#, c-format
+msgid "Failed to parse cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:137
+#, c-format
+msgid "Failed to save cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:152
+#, c-format
+msgid "Failed to load client configuration file.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:157
+#, c-format
+msgid "Failed to read environment configuration data.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:174
+#, c-format
+msgid "Failed to get FQDN.\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:194
+#, c-format
+msgid "Failed to load cookie data\n"
+msgstr ""
+
+#: ../src/utils/pax11publish.c:211
+#, c-format
+msgid "Not yet implemented.\n"
+msgstr ""
+
+#: ../src/utils/pacmd.c:69
+msgid "No PulseAudio daemon running, or not running as session daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:74
+#, c-format
+msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:91
+#, c-format
+msgid "connect(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:99
+msgid "Failed to kill PulseAudio daemon."
+msgstr ""
+
+#: ../src/utils/pacmd.c:107
+msgid "Daemon not responding."
+msgstr ""
+
+#: ../src/utils/pacmd.c:161
+#, c-format
+msgid "poll(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:171
+#: ../src/utils/pacmd.c:188
+#, c-format
+msgid "read(): %s"
+msgstr ""
+
+#: ../src/utils/pacmd.c:207
+#: ../src/utils/pacmd.c:223
+#, c-format
+msgid "write(): %s"
+msgstr ""
+
+#: ../src/pulsecore/lock-autospawn.c:136
+#: ../src/pulsecore/lock-autospawn.c:219
+msgid "Cannot access autospawn lock."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-sink.c:530
+#: ../src/modules/alsa/alsa-sink.c:689
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-source.c:506
+#: ../src/modules/alsa/alsa-source.c:656
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+msgstr ""
+
+#: ../src/modules/alsa/module-alsa-card.c:152
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
+#: ../src/modules/alsa/alsa-mixer.c:2931
+msgid "Off"
+msgstr "×××××"
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+msgid "High Fidelity Playback (A2DP)"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+msgid "High Fidelity Capture (A2DP)"
+msgstr ""
+
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+msgid "Telephony Duplex (HSP/HFP)"
+msgstr ""
+
+#: ../src/modules/reserve-wrap.c:151
+msgid "PulseAudio Sound Server"
+msgstr "שרת ×ק×× PulseAudio"
+
+#: ../src/modules/module-rygel-media-server.c:569
+#: ../src/modules/module-rygel-media-server.c:583
+msgid "Output Devices"
+msgstr "××ª×§× × ×¤××"
+
+#: ../src/modules/module-rygel-media-server.c:570
+#: ../src/modules/module-rygel-media-server.c:584
+msgid "Input Devices"
+msgstr "××ª×§× × ×§××"
+
+#: ../src/modules/module-rygel-media-server.c:774
+msgid "Audio on @HOSTNAME@"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1701
+msgid "Input"
+msgstr "פ××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1702
+msgid "Docking Station Input"
+msgstr "ק×× ×©× ×ª×× ×ª ×¢××× ×"
+
+#: ../src/modules/alsa/alsa-mixer.c:1703
+msgid "Docking Station Microphone"
+msgstr "××קר×פ×× ×©× ×ª×× ×ª ×¢××× ×"
+
+#: ../src/modules/alsa/alsa-mixer.c:1704
+msgid "Line-In"
+msgstr "×§× × ×× ×¡"
+
+#: ../src/modules/alsa/alsa-mixer.c:1705
+msgid "Microphone"
+msgstr "××קר×פ××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1706
+msgid "External Microphone"
+msgstr "××קר×פ×× ××צ×× ×"
+
+#: ../src/modules/alsa/alsa-mixer.c:1707
+msgid "Internal Microphone"
+msgstr "××קר×פ×× ×¤× ×××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1708
+msgid "Radio"
+msgstr "ר×××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1709
+msgid "Video"
+msgstr "×××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1710
+msgid "Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1711
+msgid "No Automatic Gain Control"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1712
+msgid "Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1713
+msgid "No Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1714
+msgid "Amplifier"
+msgstr "×××ר"
+
+#: ../src/modules/alsa/alsa-mixer.c:1715
+msgid "No Amplifier"
+msgstr "××× ×××ר"
+
+#: ../src/modules/alsa/alsa-mixer.c:1773
+msgid "Analog Input"
+msgstr "ק×× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1774
+msgid "Analog Microphone"
+msgstr "××קר×פ×× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1775
+msgid "Analog Line-In"
+msgstr "×§× × ×× ×¡ ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1776
+msgid "Analog Radio"
+msgstr "ר××× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
+msgid "Analog Video"
+msgstr "××××× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1778
+msgid "Analog Output"
+msgstr "פ×× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1779
+msgid "Analog Headphones"
+msgstr "×××× ××ת ×× ×××××ת"
+
+#: ../src/modules/alsa/alsa-mixer.c:1780
+msgid "Analog Output (LFE)"
+msgstr "פ×× ×× ×××× (LFE)"
+
+#: ../src/modules/alsa/alsa-mixer.c:1781
+msgid "Analog Mono Output"
+msgstr "פ×× ××× × ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1981
+#, c-format
+msgid "%s+%s"
+msgstr "%s+%s"
+
+#: ../src/modules/alsa/alsa-mixer.c:1984
+#: ../src/modules/alsa/alsa-mixer.c:3404
+#, c-format
+msgid "%s / %s"
+msgstr "%s / %s"
+
+#: ../src/modules/alsa/alsa-mixer.c:2790
+msgid "Analog Mono"
+msgstr "××× × ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:2791
+msgid "Analog Stereo"
+msgstr "ס×ר×× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:2792
+msgid "Analog Surround 2.1"
+msgstr "סר××× × ×× ×××× 2.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2793
+msgid "Analog Surround 3.0"
+msgstr "סר××× × ×× ×××× 3.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2794
+msgid "Analog Surround 3.1"
+msgstr "סר××× × ×× ×××× 3.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2795
+msgid "Analog Surround 4.0"
+msgstr "סר××× × ×× ×××× 4.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2796
+msgid "Analog Surround 4.1"
+msgstr "סר××× × ×× ×××× 4.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2797
+msgid "Analog Surround 5.0"
+msgstr "סר××× × ×× ×××× 5.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2798
+msgid "Analog Surround 5.1"
+msgstr "סר××× × ×× ×××× 5.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2799
+msgid "Analog Surround 6.0"
+msgstr "סר××× × ×× ×××× 6.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2800
+msgid "Analog Surround 6.1"
+msgstr "סר××× × ×× ×××× 6.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2801
+msgid "Analog Surround 7.0"
+msgstr "סר××× × ×× ×××× 7.0"
+
+#: ../src/modules/alsa/alsa-mixer.c:2802
+msgid "Analog Surround 7.1"
+msgstr "סר××× × ×× ×××× 7.1"
+
+#: ../src/modules/alsa/alsa-mixer.c:2803
+msgid "Digital Stereo (IEC958)"
+msgstr "ס×ר×× ××××××× (IEC958)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2804
+msgid "Digital Surround 4.0 (IEC958)"
+msgstr "סר××× × ××××××× 4.0 (IEC958)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2805
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr "סר××× × ××××××× 4.0 (IEC958/AC3)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2806
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr "סר××× × ××××××× 5.1 (IEC958/AC3)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2807
+msgid "Digital Stereo (HDMI)"
+msgstr "ס×ר×× ××××××× (HDMI)"
+
+#: ../src/modules/alsa/alsa-mixer.c:2928
+msgid "Analog Mono Duplex"
+msgstr "××× × ×× ×××× ×ש×××"
+
+#: ../src/modules/alsa/alsa-mixer.c:2929
+msgid "Analog Stereo Duplex"
+msgstr "ס×ר×× ×× ×××× ×ש×××"
+
+#: ../src/modules/alsa/alsa-mixer.c:2930
+msgid "Digital Stereo Duplex (IEC958)"
+msgstr "ס×ר×× ××××××× ×ש××× (IEC958)"
+
commit a3a9c176bb24bf8671074116ea39810289d7217a
Author: Dimitris Glezos <glezos at indifex.com>
Date: Fri Jan 15 15:47:10 2010 +0000
l10n: Updates to Greek (el) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/el.po b/po/el.po
index d9b2a4d..01334a4 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1,24 +1,23 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Dimitris Glezos <dimitris at glezos.com>, 2008.
# Thalia Papoutsaki <saliyath at gmail.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: el\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-26 09:45+0000\n"
+"POT-Creation-Date: 2010-01-15 06:45+0000\n"
"PO-Revision-Date: 2009-10-26 17:15+0200\n"
"Last-Translator: Thalia Papoutsaki <saliyath at gmail.com>\n"
"Language-Team: Greek <fedora-trans-el at redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KAider 0.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KAider 0.1\n"
-#: ../src/modules/alsa/alsa-util.c:858
-#: ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
msgstr "%s %s"
@@ -70,7 +69,7 @@ msgstr ""
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
-msgstr ""
+msgstr "ÎÏÏÏεÏικÏÏ Î®ÏοÏ"
#: ../src/pulsecore/sink.c:2618
msgid "Modem"
@@ -91,7 +90,7 @@ msgstr ""
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr ""
+msgstr "Îγινε λήÏη ÏήμαÏÎ¿Ï %s."
#: ../src/daemon/main.c:168
msgid "Exiting."
@@ -122,8 +121,7 @@ msgstr ""
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr ""
-#: ../src/daemon/main.c:208
-#: ../src/daemon/main.c:213
+#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
msgstr ""
@@ -216,8 +214,7 @@ msgstr ""
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:646
-#: ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
#, c-format
msgid "read() failed: %s"
msgstr ""
@@ -623,8 +620,7 @@ msgstr ""
msgid "Start the PulseAudio Sound System"
msgstr ""
-#: ../src/pulse/channelmap.c:105
-#: ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
msgstr "Mono"
@@ -828,12 +824,9 @@ msgstr ""
msgid "Top Rear Right"
msgstr ""
-#: ../src/pulse/channelmap.c:484
-#: ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295
-#: ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341
-#: ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
msgstr "(μη ÎγκÏ
Ïο)"
@@ -994,8 +987,7 @@ msgstr "%0.1f KiB"
msgid "%u B"
msgstr "%u B"
-#: ../src/pulse/client-conf-x11.c:55
-#: ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
msgstr ""
@@ -1055,8 +1047,7 @@ msgstr ""
msgid "pa_stream_begin_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:237
-#: ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr ""
@@ -1154,8 +1145,7 @@ msgstr ""
msgid "pa_stream_connect_record() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:470
-#: ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
#, c-format
msgid "Connection failure: %s"
msgstr "ÎÏοÏÏ
Ïία ÏÏνδεÏηÏ: %s"
@@ -1237,8 +1227,7 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764
-#: ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
msgstr ""
@@ -1303,8 +1292,7 @@ msgstr ""
msgid "Warning: specified sample specification will be overwritten with specification from file."
msgstr ""
-#: ../src/utils/pacat.c:962
-#: ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
msgstr ""
@@ -1333,8 +1321,7 @@ msgstr ""
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:1035
-#: ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
msgstr ""
@@ -1342,13 +1329,11 @@ msgstr ""
msgid "io_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1061
-#: ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1069
-#: ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
@@ -1357,8 +1342,7 @@ msgstr ""
msgid "pa_context_rttime_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1082
-#: ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
msgstr ""
@@ -1502,14 +1486,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268
-#: ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274
-#: ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
#, c-format
msgid "\tActive Port: %s\n"
msgstr ""
@@ -1541,18 +1523,10 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345
-#: ../src/utils/pactl.c:401
-#: ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473
-#: ../src/utils/pactl.c:532
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543
-#: ../src/utils/pactl.c:587
-#: ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594
-#: ../src/utils/pactl.c:637
-#: ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
msgstr ""
@@ -1685,8 +1659,7 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653
-#: ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
#, c-format
msgid "Failure: %s"
msgstr "ÎÏοÏÏ
Ïία: %s"
@@ -1804,12 +1777,9 @@ msgstr ""
msgid "You have to specify a sink name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1154
-#: ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193
-#: ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226
-#: ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
msgid "Invalid volume specification"
msgstr ""
@@ -1943,25 +1913,21 @@ msgstr ""
msgid "poll(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:171
-#: ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
#, c-format
msgid "read(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:207
-#: ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
#, c-format
msgid "write(): %s"
msgstr ""
-#: ../src/pulsecore/lock-autospawn.c:136
-#: ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
msgstr ""
-#: ../src/modules/alsa/alsa-sink.c:530
-#: ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
@@ -1969,8 +1935,7 @@ msgid ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-#: ../src/modules/alsa/alsa-source.c:506
-#: ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
@@ -2115,8 +2080,7 @@ msgstr "Analog Mono Output"
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984
-#: ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
@@ -2204,4 +2168,3 @@ msgstr "Analog Stereo Duplex"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digital Stereo Duplex (IEC958)"
-
commit c47773a1f3754ce640e49d19a06c7912fe0a7c1c
Author: Pascal Terjan <pterjan at gmail.com>
Date: Sun Jan 17 09:43:36 2010 +0000
l10n: Updates to French (fr) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/fr.po b/po/fr.po
index 89d27d7..771bd96 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,8 +1,8 @@
# French translation of pulseaudio.
# Copyright (C) 2006-2008 Lennart Poettering
# This file is distributed under the same license as the pulseaudio package.
-#
-#
+#
+#
# Robert-André Mauchin <zebob.m at pengzone.org>, 2008.
# Michaël Ughetto <telimektar esraonline com>, 2008.
# Pablo Martin-Gomez <pablo.martin-gomez at laposte.net>, 2008.
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-04 13:02+0000\n"
+"POT-Creation-Date: 2010-01-17 06:48+0000\n"
"PO-Revision-Date: 2009-12-09 21:40+0100\n"
"Last-Translator: Thomas Canniot <mrtom at fedoraproject.org>\n"
"Language-Team: French <fedora-trans-fr at redhat.com>\n"
@@ -30,41 +30,29 @@ msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
-"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu "
-"octets (%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu octets (%lu ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
-"lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
-"snd_pcm_delay() a retourné une valeur qui est exceptionnellement large : %li "
-"octets (%s%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+"snd_pcm_delay() a retourné une valeur qui est exceptionnellement large : %li octets (%s%lu ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
-"snd_pcm_mmap_begin() a retourné une valeur qui est exceptionnellement "
-"large : %lu octets (%lu·ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+"snd_pcm_mmap_begin() a retourné une valeur qui est exceptionnellement large : %lu octets (%lu·ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
@@ -79,20 +67,8 @@ msgid "Virtual LADSPA sink"
msgstr "Destination virtuelle LADSPA"
#: ../src/modules/module-ladspa-sink.c:53
-msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
-msgstr ""
-"sink_name=<nom de la destination> sink_properties=<propriétés de la "
-"destination> "
-"master=<nom de la destination à filter> format=<format de l'échantillon> "
-"rate=<taux d'échantillonage> "
-"channels=<nombre de canaux> channel_map=<plan des canaux> plugin=<nom de "
-"l'extension ladspa> label=<étiquette de l'extension ladspa> control=<liste des "
-"valeurs de contrôle de l'entrée séparées par des virgules>"
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgstr "sink_name=<nom de la destination> sink_properties=<propriétés de la destination> master=<nom de la destination à filter> format=<format de l'échantillon> rate=<taux d'échantillonage> channels=<nombre de canaux> channel_map=<plan des canaux> plugin=<nom de l'extension ladspa> label=<étiquette de l'extension ladspa> control=<liste des valeurs de contrôle de l'entrée séparées par des virgules>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -149,8 +125,7 @@ msgstr "Utilisateur « %s â (UID %lu) et groupe « %s » (GID %lu) trouvé
#: ../src/daemon/main.c:200
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr ""
-"Le GID de l'utilisateur « %s » et du groupe « %s » ne sont pas identiques."
+msgstr "Le GID de l'utilisateur « %s » et du groupe « %s » ne sont pas identiques."
#: ../src/daemon/main.c:205
#, c-format
@@ -209,12 +184,8 @@ msgid "Failed to kill daemon: %s"
msgstr "Impossible de tuer le démon : %s"
#: ../src/daemon/main.c:571
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
-msgstr ""
-"Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
-"system est renseigné)."
+msgid "This program is not intended to be run as root (unless --system is specified)."
+msgstr "Le programme n'est pas conçu pour être lancé en tant que root (sauf si --system est renseigné)."
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -226,14 +197,11 @@ msgstr "--start n'est pas pris en charge pour les instances système."
#: ../src/daemon/main.c:583
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."
+msgstr "Le démon s'exécute en mode système, mais --disallow-exit n'est pas défini."
#: ../src/daemon/main.c:586
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."
+msgstr "Le démon s'exécute en mode système, mais --disallow-module-loading n'est pas défini."
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
@@ -241,9 +209,7 @@ msgstr "Le démon s'exécute en mode système, désactivation forcée du mode SH
#: ../src/daemon/main.c:594
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é."
+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:621
msgid "Failed to acquire stdio."
@@ -329,8 +295,7 @@ msgstr "NDEBUG défini, tous les messages d'erreur sont désactivés."
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
-"FASTPATH défini, seuls les messages d'erreur fastpath ont été désactivés."
+msgstr "FASTPATH défini, seuls les messages d'erreur fastpath ont été désactivés."
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
@@ -345,7 +310,8 @@ msgstr "Ãchec lors de l'obtention de l'ID de la machine"
msgid "Machine ID is %s."
msgstr "L'ID de la machine est %s."
-#: ../src/daemon/main.c:773, c-format
+#: ../src/daemon/main.c:773
+#, c-format
msgid "Session ID is %s."
msgstr "L'ID de la session est %s."
@@ -359,7 +325,8 @@ msgstr "Utilisation du répertoire d'exécution %s."
msgid "Using state directory %s."
msgstr "Utilisation du répertoire d'état %s."
-#: ../src/daemon/main.c:787, c-format
+#: ../src/daemon/main.c:787
+#, c-format
msgid "Using modules directory %s."
msgstr "Utilisation du répertoire des modules %s."
@@ -370,19 +337,13 @@ msgstr "Exécution en mode système : %s"
#: ../src/daemon/main.c:792
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
-"Vous exécutez PA dans un mode système. Sachez que vous ne devriez pas faire "
-"cela.\n"
-"Si vous choisissez malgré tout de le faire, vous êtes responsable de tout "
-"dysfonctionnement inattendu.\n"
-"Veuillez lire http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode pour "
-"comprendre pourquoi le mode système est généralement une mauvaise idée."
+"Vous exécutez PA dans un mode système. Sachez que vous ne devriez pas faire cela.\n"
+"Si vous choisissez malgré tout de le faire, vous êtes responsable de tout dysfonctionnement inattendu.\n"
+"Veuillez lire http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode pour comprendre pourquoi le mode système est généralement une mauvaise idée."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -390,16 +351,11 @@ msgstr "Ãchec de pa_pid_file_create()."
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr ""
-"De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
+msgstr "De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
#: ../src/daemon/main.c:821
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
-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."
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+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:844
msgid "pa_core_new() failed."
@@ -436,48 +392,37 @@ 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"
@@ -488,12 +433,10 @@ 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"
@@ -504,87 +447,56 @@ msgstr ""
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
" --dump-conf Affiche la configuration par défaut\n"
-" --dump-modules Affiche la liste des modules "
-"disponibles\n"
-" --dump-resample-methods Affiche la liste des méthodes "
-"d'échantillonnage disponibles\n"
-" --cleanup-shm Nettoie les segments de mémoire "
-"partagée périmés\n"
-" --start Démarre le démon s'il n'est pas "
-"lancé\n"
+" --dump-modules Affiche la liste des modules disponibles\n"
+" --dump-resample-methods Affiche la liste des méthodes d'échantillonnage disponibles\n"
+" --cleanup-shm Nettoie les segments de mémoire partagée périmés\n"
+" --start Démarre le démon s'il n'est pas lancé\n"
" -k --kill Tue un démon en cours d'exécution\n"
-" --check Vérifie s'il existe un démon en "
-"cours d'exécution (ne retourne que le code de sortie)\n"
+" --check Vérifie s'il existe un démon en cours d'exécution (ne retourne que le code de sortie)\n"
"\n"
"OPTIONSÂ :\n"
-" --system[=BOOL] Exécuter en tant qu'instance "
-"système\n"
-" -D, --daemonize[=BOOL] Définir en tant que démon après le "
-"démarrage\n"
+" --system[=BOOL] Exécuter en tant qu'instance système\n"
+" -D, --daemonize[=BOOL] Définir en tant que démon après le démarrage\n"
" --fail[=BOOL] Quitte quand le démarrage échoue\n"
-" --high-priority[=BOOL] Tente de définir un niveau nice plus "
-"élevé\n"
-" (seulement disponible en tant que "
-"root, avec le SUID ou\n"
+" --high-priority[=BOOL] Tente de définir un niveau nice plus élevé\n"
+" (seulement disponible en tant que root, avec le SUID ou\n"
" avec un RLIMIT_NICE élevé)\n"
-" --realtime[=BOOL] Tente d'activer une planification en "
-"temps réel\n"
-" (seulement disponible en tant que "
-"root, avec le SUID ou\n"
+" --realtime[=BOOL] Tente d'activer une planification en temps réel\n"
+" (seulement disponible en tant que root, avec le SUID ou\n"
" ave un RLIMIT_RTPRIO élevé)\n"
-" --disallow-module-loading[=BOOL] Empêche les chargements/"
-"déchargements de module\n"
-" demandés par l'utilisateur après le "
-"démarrage\n"
-" --disallow-exit[=BOOL] Empêche les fermetures demandées par "
-"l'utilisateur\n"
-" --exit-idle-time=SECS Termine le démon quand la durée "
-"d'inactivité \n"
+" --disallow-module-loading[=BOOL] Empêche les chargements/déchargements de module\n"
+" demandés par l'utilisateur après le démarrage\n"
+" --disallow-exit[=BOOL] Empêche les fermetures demandées par l'utilisateur\n"
+" --exit-idle-time=SECS Termine le démon quand la durée d'inactivité \n"
" et ce temps se sont écoulés\n"
-" --module-idle-time=SECS Décharge les modules chargés "
-"automatiquement \n"
-" quand la durée d'inactivité et ce "
-"temps se sont écoulés\n"
-" --scache-idle-time=SECS Décharge les échantillons chargés "
-"automatiquement \n"
-" quand la durée d'inactivité et ce "
-"temps se sont écoulés\n"
-" --log-level[=NIVEAU] Augmente ou définit le niveau de "
-"verbosité\n"
+" --module-idle-time=SECS Décharge les modules chargés automatiquement \n"
+" quand la durée d'inactivité et ce temps se sont écoulés\n"
+" --scache-idle-time=SECS Décharge les échantillons chargés automatiquement \n"
+" quand la durée d'inactivité et ce temps se sont écoulés\n"
+" --log-level[=NIVEAU] Augmente ou définit le niveau de verbosité\n"
" -v Augmente le niveau de verbosité\n"
" --log-target={auto,syslog,stderr} Indique la cible du journal\n"
-" --log-meta[=BOOL] Inclure la position du code dans les "
-"messages ·du journal\n"
-" --log-time[=BOOL] Inclure la date dans les messages du "
-"journal\n"
-" --log-backtrace=TRAMES Inclure un traçage de la pile dans "
-"les messages du journal\n"
-" -p, --dl-search-path=CHEMIN Définit le chemin de recherche pour "
-"les objets dynamiques\n"
+" --log-meta[=BOOL] Inclure la position du code dans les messages ·du journal\n"
+" --log-time[=BOOL] Inclure la date dans les messages du journal\n"
+" --log-backtrace=TRAMES Inclure un traçage de la pile dans les messages du journal\n"
+" -p, --dl-search-path=CHEMIN Définit le chemin de recherche pour les objets dynamiques\n"
" partagés (extensions)\n"
-" --resample-method=MÃTHODE Utilise la méthode de "
-"rééchantillonnage indiquée\n"
+" --resample-method=MÃTHODE Utilise la méthode de rééchantillonnage indiquée\n"
" (Voir --dump-resample-methods pour\n"
" les valeurs possibles)\n"
" --use-pid-file[=BOOL] Crée un fichier PID\n"
-" --no-cpu-limit[=BOOL] Ne pas installer de limiteur de "
-"charge CPU\n"
-" sur les plateformes qui le "
-"supportent.\n"
-" --disable-shm[=BOOL] Désactive la prise en charge de la "
-"mémoire partagée.\n"
+" --no-cpu-limit[=BOOL] Ne pas installer de limiteur de charge CPU\n"
+" sur les plateformes qui le supportent.\n"
+" --disable-shm[=BOOL] Désactive la prise en charge de la mémoire partagée.\n"
"\n"
"SCRIPT DE DÃMARRAGEÂ :\n"
-" -L, --load=\"PARAMÃTRES DU MODULE\" Charge le module d'extension indiqué "
-"avec\n"
+" -L, --load=\"PARAMÃTRES DU MODULE\" Charge le module d'extension indiqué avec\n"
" le paramètre indiqué\n"
" -F, --file=NOMDEFICHIER Exécute le script indiqué\n"
-" -C Ouvre une ligne de commande sur le "
-"TTY en cours \n"
+" -C Ouvre une ligne de commande sur le TTY en cours \n"
" après le démarrage\n"
"\n"
-" -n Ne pas charger les fichiers de "
-"scripts par défaut\n"
+" -n Ne pas charger les fichiers de scripts par défaut\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
@@ -595,12 +507,8 @@ msgid "--fail expects boolean argument"
msgstr "--fail requiert un paramètre booléen"
#: ../src/daemon/cmdline.c:264
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of debug, info, notice, warn, error)."
-msgstr ""
-"--log-level requiert un paramètre de niveau de journal (soit numérique entre "
-"0 et 4, soit de débogage : 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 requiert un paramètre de niveau de journal (soit numérique entre 0 et 4, soit de débogage : info, notice, warn , error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -763,12 +671,8 @@ msgid "Failed to open configuration file: %s"
msgstr "Ãchec lors de l'ouverture du fichier de configuration : %s"
#: ../src/daemon/daemon-conf.c:562
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
-msgstr ""
-"Le plan de canaux spécifié par défaut a un nombre de canaux différent du "
-"nombre spécifié par défaut."
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+msgstr "Le plan de canaux spécifié par défaut a un nombre de canaux différent du nombre spécifié par défaut."
#: ../src/daemon/daemon-conf.c:638
#, c-format
@@ -1186,7 +1090,8 @@ msgstr "waitpid()Â : %s"
msgid "Received message for unknown extension '%s'"
msgstr "Message reçu pour une extension inconnue « %s »"
-#: ../src/utils/pacat.c:108, c-format
+#: ../src/utils/pacat.c:108
+#, c-format
msgid "Failed to drain stream: %s"
msgstr "Ãchec lors du vidage du flux : %s"
@@ -1198,19 +1103,23 @@ msgstr "Flux de lecture vidé."
msgid "Draining connection to server."
msgstr "Vidage de la connexion au serveur."
-#: ../src/utils/pacat.c:136, c-format
+#: ../src/utils/pacat.c:136
+#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain()Â : %s"
-#: ../src/utils/pacat.c:159, c-format
+#: ../src/utils/pacat.c:159
+#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "Ãchec de pa_stream_write()Â : %s"
-#: ../src/utils/pacat.c:197, c-format
+#: ../src/utils/pacat.c:197
+#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "Ãchec de pa_stream_begin_write()Â : %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267, c-format
+#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "Ãchec de pa_stream_peek()Â : %s"
@@ -1218,53 +1127,64 @@ msgstr "Ãchec de pa_stream_peek()Â : %s"
msgid "Stream successfully created."
msgstr "Création du flux réussie."
-#: ../src/utils/pacat.c:310, c-format
+#: ../src/utils/pacat.c:310
+#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "Ãchec de pa_stream_get_buffer_attr()Â : %s"
-#: ../src/utils/pacat.c:314, c-format
+#: ../src/utils/pacat.c:314
+#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Mesures du tampon : maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317, c-format
+#: ../src/utils/pacat.c:317
+#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Mesures du tampon : maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321, c-format
+#: ../src/utils/pacat.c:321
+#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr ""
-"Utilisation de la spécification d'échantillon « %s », plan des canaux « %s »."
+msgstr "Utilisation de la spécification d'échantillon « %s », plan des canaux « %s »."
# l'espace manquant entre %s et suspended est voulu
-#: ../src/utils/pacat.c:325, c-format
+#: ../src/utils/pacat.c:325
+#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Connecté au périphérique %s (%u, %ssuspendu)."
-#: ../src/utils/pacat.c:335, c-format
+#: ../src/utils/pacat.c:335
+#, c-format
msgid "Stream error: %s"
msgstr "Erreur du flux : %s"
-#: ../src/utils/pacat.c:345, c-format
+#: ../src/utils/pacat.c:345
+#, c-format
msgid "Stream device suspended.%s"
msgstr "Périphérique de flux suspendu.%s"
-#: ../src/utils/pacat.c:347, c-format
+#: ../src/utils/pacat.c:347
+#, c-format
msgid "Stream device resumed.%s"
msgstr "Périphérique de flux repris.%s"
-#: ../src/utils/pacat.c:355, c-format
+#: ../src/utils/pacat.c:355
+#, c-format
msgid "Stream underrun.%s"
msgstr "Flux vide.%s"
-#: ../src/utils/pacat.c:362, c-format
+#: ../src/utils/pacat.c:362
+#, c-format
msgid "Stream overrun.%s"
msgstr "Flux saturé.%s"
-#: ../src/utils/pacat.c:369, c-format
+#: ../src/utils/pacat.c:369
+#, c-format
msgid "Stream started.%s"
msgstr "Flux démarré.%s"
-#: ../src/utils/pacat.c:376, c-format
+#: ../src/utils/pacat.c:376
+#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Flux déplacé vers le périphérique %s (%u, %ssuspendu).%s"
@@ -1273,27 +1193,33 @@ msgstr "Flux déplacé vers le périphérique %s (%u, %ssuspendu).%s"
msgid "not "
msgstr "non "
-#: ../src/utils/pacat.c:383, c-format
+#: ../src/utils/pacat.c:383
+#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Des attributs du tampon de flux ont changé.%s"
-#: ../src/utils/pacat.c:415, c-format
+#: ../src/utils/pacat.c:415
+#, c-format
msgid "Connection established.%s"
msgstr "Connexion établie.%s"
-#: ../src/utils/pacat.c:418, c-format
+#: ../src/utils/pacat.c:418
+#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "Ãchec de pa_stream_new()Â : %s"
-#: ../src/utils/pacat.c:450, c-format
+#: ../src/utils/pacat.c:450
+#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "Ãchec de pa_stream_connect_playback()Â : %s"
-#: ../src/utils/pacat.c:456, c-format
+#: ../src/utils/pacat.c:456
+#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "Ãchec de pa_stream_connect_record()Â : %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857, c-format
+#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#, c-format
msgid "Connection failure: %s"
msgstr "Ãchec lors de la connexion : %s"
@@ -1301,7 +1227,8 @@ msgstr "Ãchec lors de la connexion : %s"
msgid "Got EOF."
msgstr "EOF obtenu."
-#: ../src/utils/pacat.c:540, c-format
+#: ../src/utils/pacat.c:540
+#, c-format
msgid "write() failed: %s"
msgstr "Ãchec de write()Â : %s"
@@ -1309,22 +1236,26 @@ msgstr "Ãchec de write()Â : %s"
msgid "Got signal, exiting."
msgstr "Signal obtenu, fermeture."
-#: ../src/utils/pacat.c:575, c-format
+#: ../src/utils/pacat.c:575
+#, c-format
msgid "Failed to get latency: %s"
msgstr "Ãchec lors de l'obtention de la latence : %s"
-#: ../src/utils/pacat.c:580, c-format
+#: ../src/utils/pacat.c:580
+#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Durée : %0.3f sec. ; Latence : %0.0f µsec."
-#: ../src/utils/pacat.c:599, c-format
+#: ../src/utils/pacat.c:599
+#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "Ãchec de pa_stream_update_timing_info()Â : %s"
# 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:609, c-format
+#: ../src/utils/pacat.c:609
+#, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1336,48 +1267,29 @@ 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, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the "
-"specified value.\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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
" --raw Record/play raw PCM data.\n"
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
@@ -1387,60 +1299,36 @@ msgstr ""
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
"\n"
-" -r, --record Crée une connexion pour "
-"l'enregistrement\n"
-" -p, --playback Crée une connexion pour la "
-"relecture\n"
+" -r, --record Crée une connexion pour l'enregistrement\n"
+" -p, --playback Crée une connexion pour la relecture\n"
"\n"
" -v, --verbose Active le mode verbeux\n"
"\n"
-" -s, --server=SERVEUR Le nom du serveur auquel se "
-"connecter\n"
-" -d, --device=PÃRIPHÃRIQUE Le nom de la destination/source à "
-"laquelle se connecter\n"
-" -n, --client-name=NOM Définit le nom de ce client sur le "
-"serveur\n"
-" --stream-name=NOM Définit le nom de ce flux sur le "
-"serveur\n"
-" --volume=VOLUME Indique le volume initial (linéaire) "
-"entre 0 et 65536\n"
-" --rate=TAUXDÃCHANTILLONNAGE Le taux d'échantillonnage en Hz (par "
-"défaut 44100)\n"
-" --format=FORMATDELÃCHANTILLON Le type de l'échantillon, parmi : "
-"s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw (par défaut "
-"s16ne)\n"
-" --channels=CANAUX Le nombre de canaux, 1 pour mono, 2 "
-"pour stéréo\n"
+" -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
+" -d, --device=PÃRIPHÃRIQUE Le nom de la destination/source à laquelle se connecter\n"
+" -n, --client-name=NOM Définit le nom de ce client sur le serveur\n"
+" --stream-name=NOM Définit le nom de ce flux sur le serveur\n"
+" --volume=VOLUME Indique le volume initial (linéaire) entre 0 et 65536\n"
+" --rate=TAUXDÃCHANTILLONNAGE Le taux d'échantillonnage en Hz (par défaut 44100)\n"
+" --format=FORMATDELÃCHANTILLON Le type de l'échantillon, parmi : s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw (par défaut s16ne)\n"
+" --channels=CANAUX Le nombre de canaux, 1 pour mono, 2 pour stéréo\n"
" (par défaut 2)\n"
-" --channel-map=PLANDESCANAUX Plan des canaux à utiliser au lieu "
-"de celui par défaut\n"
-" --fix-format Prend le format de l'échantillon de "
-"la destination où le flux\n"
+" --channel-map=PLANDESCANAUX Plan des canaux à utiliser au lieu de celui par défaut\n"
+" --fix-format Prend le format de l'échantillon de la destination où le flux\n"
" est en train de se connecter.\n"
-" --fix-rate Prend le taux d'échantillonnage de "
-"la destination où le flux\n"
+" --fix-rate Prend le taux d'échantillonnage de la destination où le flux\n"
" est en train de se connecter.\n"
-" --fix-channels Prend le nombre et le plan des "
-"canaux de la destination \n"
-" où le flux est en train de se "
-"connecter.\n"
-" --no-remix Ne pas augmenter ou diminuer le "
-"nombre de canaux par mixage.\n"
-" --no-remap Créer le plan des canaux par index "
-"et non par nom.\n"
-" --latency=OCTETS Demande la latence indiquée en "
-"octets.\n"
-" --process-time=OCTETS Demande le temps de traitement "
-"indiqué par requête en octets.\n"
-" --property=PROPRIÃTÃ=VALEUR Attribut la propriété définie à la "
-"valeur définie.\n"
-" --raw Enregistre/lit les données PCM brutes."
-"\n"
-" --file-format=FFORMAT Enregistre/lit les données PCM "
-"formatées.\n"
-" --list-file-formats Liste les formats de fichiers "
-"disponibles.\n"
+" --fix-channels Prend le nombre et le plan des canaux de la destination \n"
+" où le flux est en train de se connecter.\n"
+" --no-remix Ne pas augmenter ou diminuer le nombre de canaux par mixage.\n"
+" --no-remap Créer le plan des canaux par index et non par nom.\n"
+" --latency=OCTETS Demande la latence indiquée en octets.\n"
+" --process-time=OCTETS Demande le temps de traitement indiqué par requête en octets.\n"
+" --property=PROPRIÃTÃ=VALEUR Attribut la propriété définie à la valeur définie.\n"
+" --raw Enregistre/lit les données PCM brutes.\n"
+" --file-format=FFORMAT Enregistre/lit les données PCM formatées.\n"
+" --list-file-formats Liste les formats de fichiers disponibles.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1453,27 +1341,33 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953, c-format
+#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#, c-format
msgid "Invalid client name '%s'"
msgstr "Nom du client invalide « %s »"
-#: ../src/utils/pacat.c:779, c-format
+#: ../src/utils/pacat.c:779
+#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nom du flux invalide « %s »"
-#: ../src/utils/pacat.c:816, c-format
+#: ../src/utils/pacat.c:816
+#, c-format
msgid "Invalid channel map '%s'"
msgstr "Plan des canaux invalide « %s »"
-#: ../src/utils/pacat.c:845, c-format
+#: ../src/utils/pacat.c:845
+#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Spécification de latence invalide « %s »"
-#: ../src/utils/pacat.c:852, c-format
+#: ../src/utils/pacat.c:852
+#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Spécification de temps de traitement invalide « %s »"
-#: ../src/utils/pacat.c:864, c-format
+#: ../src/utils/pacat.c:864
+#, c-format
msgid "Invalid property '%s'"
msgstr "Propriété invalide « %s »"
@@ -1486,11 +1380,13 @@ msgstr "Format de fichier inconnu %s."
msgid "Invalid sample specification"
msgstr "Spécification d'échantillon invalide"
-#: ../src/utils/pacat.c:910, c-format
+#: ../src/utils/pacat.c:910
+#, c-format
msgid "open(): %s"
msgstr "open()Â : %s"
-#: ../src/utils/pacat.c:915, c-format
+#: ../src/utils/pacat.c:915
+#, c-format
msgid "dup2(): %s"
msgstr "dup2()Â : %s"
@@ -1500,20 +1396,15 @@ msgstr "Trop de paramètres."
#: ../src/utils/pacat.c:933
msgid "Failed to generate sample specification for file."
-msgstr ""
-"Ãchec lors de la génération des informations de l'échantillon du fichier."
+msgstr "Ãchec lors de la génération des informations de l'échantillon du fichier."
#: ../src/utils/pacat.c:953
msgid "Failed to open audio file."
msgstr "Ãchec lors de l'ouverture du fichier audio."
#: ../src/utils/pacat.c:959
-msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
-msgstr ""
-"Avertissement : les spécifications de l'échantillon spécifié seront écrasées "
-"par celles du fichier."
+msgid "Warning: specified sample specification will be overwritten with specification from file."
+msgstr "Avertissement : les spécifications de l'échantillon spécifié seront écrasées par celles du fichier."
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
@@ -1521,9 +1412,7 @@ msgstr "Ãchec lors de l'obtention des informations de l'échantillon du fichier
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr ""
-"Avertissement : échec lors de l'obtention des informations du plan des canaux "
-"du fichier."
+msgstr "Avertissement : échec lors de l'obtention des informations du plan des canaux du fichier."
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
@@ -1531,14 +1420,12 @@ msgstr "Le plan des canaux ne correspond pas à la spécification d'échantillon
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
-msgstr ""
-"Avertissement : Ãchec lors de l'écriture du plan des canaux dans le fichier."
+msgstr "Avertissement : Ãchec lors de l'écriture du plan des canaux dans le fichier."
-#: ../src/utils/pacat.c:1008, c-format
+#: ../src/utils/pacat.c:1008
+#, c-format
msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
-"Ouverture d'un flux %s avec une spécification d'échantillon « %s » et un plan "
-"des canaux « %s »."
+msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s » et un plan des canaux « %s »."
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1620,16 +1507,14 @@ 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"
"\n"
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
-" -s, --server=SERVEUR Le nom du serveur auquel se "
-"connecter\n"
+" -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
"\n"
#: ../src/utils/pasuspender.c:248
@@ -1658,7 +1543,8 @@ msgstr "Ãchec de pa_context_new().\n"
msgid "pa_mainloop_run() failed.\n"
msgstr "Ãchec de pa_mainloop_run().\n"
-#: ../src/utils/pactl.c:135, c-format
+#: ../src/utils/pactl.c:135
+#, c-format
msgid "Failed to get statistics: %s"
msgstr "Ãchec lors de l'obtention des statistiques : %s"
@@ -1670,16 +1556,15 @@ msgstr "En cours d'utilisation : %u blocs contenant au total %s octets.\n"
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
-"Alloué pendant l'ensemble de la durée d'exécution : %u blocs contenant au "
-"total %s octets.\n"
+msgstr "Alloué pendant l'ensemble de la durée d'exécution : %u blocs contenant au total %s octets.\n"
#: ../src/utils/pactl.c:147
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Taille du cache de l'échantillon : %s\n"
-#: ../src/utils/pactl.c:156, c-format
+#: ../src/utils/pactl.c:156
+#, c-format
msgid "Failed to get server information: %s"
msgstr "Ãchec lors de l'obtention des informations du serveur : %s"
@@ -1706,7 +1591,8 @@ msgstr ""
"Source par défaut : %s\n"
"Cookie : %08x\n"
-#: ../src/utils/pactl.c:205, c-format
+#: ../src/utils/pactl.c:205
+#, c-format
msgid "Failed to get sink information: %s"
msgstr "Ãchec lors de l'obtention des informations sur la destination : %s"
@@ -1750,15 +1636,18 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360, c-format
+#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#, c-format
msgid "\tPorts:\n"
msgstr "\tPorts :\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366, c-format
+#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPort actif : %s\n"
-#: ../src/utils/pactl.c:297, c-format
+#: ../src/utils/pactl.c:297
+#, c-format
msgid "Failed to get source information: %s"
msgstr "Ãchec lors de l'obtention des informations sur la source : %s"
@@ -1809,7 +1698,8 @@ msgstr ""
msgid "n/a"
msgstr "n/d"
-#: ../src/utils/pactl.c:375, c-format
+#: ../src/utils/pactl.c:375
+#, c-format
msgid "Failed to get module information: %s"
msgstr "Ãchec lors de l'obtention des informations du module : %s"
@@ -1830,7 +1720,8 @@ msgstr ""
"\tPropriétés : \n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412, c-format
+#: ../src/utils/pactl.c:412
+#, c-format
msgid "Failed to get client information: %s"
msgstr "Ãchec lors de l'obtention des informations du client : %s"
@@ -1849,7 +1740,8 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447, c-format
+#: ../src/utils/pactl.c:447
+#, c-format
msgid "Failed to get card information: %s"
msgstr "Impossible d'obtenir des informations sur la carte : %s"
@@ -1880,10 +1772,10 @@ msgstr "\tProfils :\n"
msgid "\tActive Profile: %s\n"
msgstr "\tProfil actif : %s\n"
-#: ../src/utils/pactl.c:496, c-format
+#: ../src/utils/pactl.c:496
+#, c-format
msgid "Failed to get sink input information: %s"
-msgstr ""
-"Ãchec lors de l'obtention des informations de l'entrée de la destination : %s"
+msgstr "Ãchec lors de l'obtention des informations de l'entrée de la destination : %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1922,10 +1814,10 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554, c-format
+#: ../src/utils/pactl.c:554
+#, c-format
msgid "Failed to get source output information: %s"
-msgstr ""
-"Ãchec lors de l'obtention des informations de la sortie de la source : %s"
+msgstr "Ãchec lors de l'obtention des informations de la sortie de la source : %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1956,7 +1848,8 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605, c-format
+#: ../src/utils/pactl.c:605
+#, c-format
msgid "Failed to get sample information: %s"
msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s"
@@ -1994,11 +1887,13 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663, c-format
+#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#, c-format
msgid "Failure: %s"
msgstr "Ãchec : %s"
-#: ../src/utils/pactl.c:687, c-format
+#: ../src/utils/pactl.c:687
+#, c-format
msgid "Failed to upload sample: %s"
msgstr "Ãchec lors de l'envoi de l'échantillon : %s"
@@ -2010,7 +1905,8 @@ msgstr "Fin prématurée du fichier"
msgid "Got SIGINT, exiting."
msgstr "SIGINT reçu, fermeture."
-#: ../src/utils/pactl.c:869, c-format
+#: ../src/utils/pactl.c:869
+#, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2037,10 +1933,8 @@ 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"
@@ -2067,10 +1961,8 @@ msgstr ""
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
"\n"
-" -s, --server=SERVEUR Le nom du serveur auquel se "
-"connecter\n"
-" -n, --client-name=NOM Définit le nom de ce client sur le "
-"serveur\n"
+" -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
+" -n, --client-name=NOM Définit le nom de ce client sur le serveur\n"
#: ../src/utils/pactl.c:933
#, c-format
@@ -2093,9 +1985,7 @@ msgstr "Ãchec lors de l'ouverture du fichier audio."
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
-msgstr ""
-"Avertissement : Ãchec lors de l'obtention des spécifications de l'échantillon "
-"du fichier."
+msgstr "Avertissement : Ãchec lors de l'obtention des spécifications de l'échantillon du fichier."
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
@@ -2122,19 +2012,12 @@ msgid "You have to specify a module index"
msgstr "Vous devez indiquer un index de module"
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
-"Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer une "
-"valeur booléenne."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgstr "Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer une valeur booléenne."
#: ../src/utils/pactl.c:1103
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
-msgstr ""
-"Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer une "
-"valeur booléenne."
+msgid "You may not specify more than one source. You have to specify a boolean value."
+msgstr "Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer une valeur booléenne."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
@@ -2197,18 +2080,14 @@ 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 visuel] [-S serveur] [-O destination] [-I source] [-c fichier] [-d|-"
-"e|-i|-r]\n"
+"%s [-D visuel] [-S serveur] [-O destination] [-I source] [-c fichier] [-d|-e|-i|-r]\n"
"\n"
-" -d Affiche les données PulseAudio actuelles attachées au visuel X11 (par "
-"défaut)\n"
+" -d Affiche les données PulseAudio actuelles attachées au visuel X11 (par défaut)\n"
" -e Exporte les données PulseAudio locales vers le visuel X11\n"
-" -i Importe les données PulseAudio depuis le visuel X11 vers les "
-"variables de l'environnement local et le fichier de cookie.\n"
+" -i Importe les données PulseAudio depuis le visuel X11 vers les variables de l'environnement local et le fichier de cookie.\n"
" -r Enlève les données PulseAudio du visuel X11\n"
#: ../src/utils/pax11publish.c:94
@@ -2254,8 +2133,7 @@ msgstr "Ãchec lors du chargement du fichier de configuration du client.\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr ""
-"Ãchec lors de la lecture des données de configuration de l'environnement.\n"
+msgstr "Ãchec lors de la lecture des données de configuration de l'environnement.\n"
# Fully Qualified Domain Name
#: ../src/utils/pax11publish.c:174
@@ -2275,9 +2153,7 @@ msgstr "Pas encore implémenté.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
-"Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas "
-"dans une session de type démon."
+msgstr "Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas dans une session de type démon."
#: ../src/utils/pacmd.c:74
#, c-format
@@ -2297,7 +2173,8 @@ msgstr "Impossible de tuer le démon PulseAudio."
msgid "Daemon not responding."
msgstr "Le démon ne répond pas."
-#: ../src/utils/pacmd.c:161, c-format
+#: ../src/utils/pacmd.c:161
+#, c-format
msgid "poll(): %s"
msgstr "poll()Â : %s"
@@ -2318,36 +2195,24 @@ msgstr "Impossible d'accèder au verrou autonome."
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-"ALSA nous a réveillé pour lire de nouvelles données à partir du "
-"périphérique, mais il n'y avait en fait rien à écrire !\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA.Nous avons été réveillés avec "
-"le jeu POLLOUT -- cependant un snd_pcm_avail() ultérieur a retourné 0 ou une "
-"autre valeur < min_avail."
+"ALSA nous a réveillé pour écrire de nouvelles données à partir du périphérique, mais il n'y avait en fait rien à écrire !\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA.\n"
+"Nous avons été réveillés avec POLLOUT actif, cependant un snd_pcm_avail() ultérieur a retourné 0 ou une autre valeur < min_avail."
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-"ALSA nous a réveillé pour lire de nouvelles données à partir du "
-"périphérique, mais il n'y avait en fait rien à lire !\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA.Nous avons été réveillés avec "
-"le jeu POLLIN -- cependant un snd_pcm_avail() ultérieur a retourné 0 ou une "
-"autre valeur < min_avail."
+"ALSA nous a réveillé pour lire de nouvelles données à partir du périphérique, mais il n'y avait en fait rien à lire !\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA.\n"
+"Nous avons été réveillés avec POLLIN actif, cependant un snd_pcm_avail() ultérieur a retourné 0 ou une autre valeur < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
@@ -2575,11 +2440,9 @@ msgstr "Duplex stéréo analogique"
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Duplex stéréo numérique (IEC958)"
-#, fuzzy
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Plan des canaux invalide « %s »\n"
-#, fuzzy
#~ msgid "Failed to determine sample specification from file.\n"
#~ msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s\n"
@@ -2622,48 +2485,32 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgid "PolicyKit responded with '%s'"
#~ msgstr "PolicyKit a renvoyé « %s »"
-#~ msgid ""
-#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
-#~ "daemon"
-#~ msgstr ""
-#~ "Ordonnancement haute priorité (niveau Unix « nice » négatif) pour le démon "
-#~ "PulseAudio"
+#~ msgid "High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+#~ msgstr "Ordonnancement haute priorité (niveau Unix « nice » négatif) pour le démon PulseAudio"
#~ msgid "Real-time scheduling for the PulseAudio daemon"
#~ msgstr "Ordonnancement en temps réel pour le démon PulseAudio"
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr ""
-#~ "La politique du système empêche PulseAudio d'acquérir un ordonnancement "
-#~ "haute priorité"
+#~ msgid "System policy prevents PulseAudio from acquiring high-priority scheduling."
+#~ msgstr "La politique du système empêche PulseAudio d'acquérir un ordonnancement haute priorité"
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr ""
-#~ "La politique du système empêche PulseAudio d'acquérir un ordonnancement "
-#~ "en temps réel"
+#~ msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+#~ msgstr "La politique du système empêche PulseAudio d'acquérir un ordonnancement en temps réel"
#~ msgid "read() failed: %s\n"
#~ msgstr "Ãchec de read()Â : %s\n"
-#, fuzzy
#~ msgid "pa_context_connect() failed: %s\n"
#~ msgstr "Ãchec de pa_context_connect() : %s"
#~ msgid "We're in the group '%s', allowing high-priority scheduling."
-#~ msgstr ""
-#~ "Nous sommes dans le groupe « %s », permettant une planification à haute "
-#~ "priorité."
+#~ msgstr "Nous sommes dans le groupe « %s », permettant une planification à haute priorité."
#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr ""
-#~ "Nous sommes dans le groupe « %s », permettant un ordonnancement en temps "
-#~ "réel."
+#~ msgstr "Nous sommes dans le groupe « %s », permettant un ordonnancement en temps réel."
#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr ""
-#~ "PolicyKit a accordé l'acquisition des permissions de haute priorité."
+#~ msgstr "PolicyKit a accordé l'acquisition des permissions de haute priorité."
#~ msgid "PolicyKit refuses acquire-high-priority privilege."
#~ msgstr "PolicyKit a refusé l'acquisition des permissions de haute priorité."
@@ -2675,33 +2522,16 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgstr "PolicyKit a refusé l'acquisition des permissions de temps réel."
#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
-#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
-#~ "limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
-#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
+#~ "Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
+#~ "We are not in group '%s', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
+#~ "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '%s', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
#~ msgstr ""
-#~ "Le SUID root et l'ordonnancement en temps réel et/ou haute priorité ont "
-#~ "été spécifiés dans la configuration. Cependant, il nous manque les "
-#~ "privilèges nécessaires :\n"
-#~ "Nous ne sommes pas dans le groupe « %s », PolicyKit refuse de nous "
-#~ "accorder les privilèges demandés et nous devons augmenter les limites de "
-#~ "ressources RLIMIT_NICE/RLIMIT_RTPRIO.\n"
-#~ "Pour activer l'ordonnancement en temps réel/haute priorité, veuillez "
-#~ "acquérir les privilèges PolicyKit apropriés, ou devenir membre de « %s », "
-#~ "ou augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO pour cet "
-#~ "utilisateur."
+#~ "Le SUID root et l'ordonnancement en temps réel et/ou haute priorité ont été spécifiés dans la configuration. Cependant, il nous manque les privilèges nécessaires :\n"
+#~ "Nous ne sommes pas dans le groupe « %s », PolicyKit refuse de nous accorder les privilèges demandés et nous devons augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO.\n"
+#~ "Pour activer l'ordonnancement en temps réel/haute priorité, veuillez acquérir les privilèges PolicyKit apropriés, ou devenir membre de « %s », ou augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO pour cet utilisateur."
-#~ 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."
+#~ 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."
#~ msgid "Successfully increased RLIMIT_RTPRIO"
#~ msgstr "Augmentation de RLIMIT_RTPRIO réussie"
@@ -2712,11 +2542,8 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgid "Giving up CAP_NICE"
#~ msgstr "Abandon de CAP_NICE"
-#~ 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."
+#~ 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."
#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
#~ msgstr "Limitation des capacités à CAP_SYS_NICE réussie."
@@ -2744,16 +2571,11 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ "\n"
#~ " -v, --verbose Enable verbose operation\n"
#~ "\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"
+#~ " -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"
#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
#~ msgstr ""
#~ "%s [options] [FICHIER]\n"
@@ -2763,18 +2585,12 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ "\n"
#~ " -v, --verbose Active le mode verbeux\n"
#~ "\n"
-#~ " -s, --server=SERVEUR Le nom du serveur auquel se "
-#~ "connecter\n"
-#~ " -d, --device=PÃRIPHÃRIQUE Le nom de la destination à "
-#~ "laquelle se connecter\n"
-#~ " -n, --client-name=NOM Définit le nom de ce client sur "
-#~ "le serveur\n"
-#~ " --stream-name=NOM Définit le nom de ce flux sur le "
-#~ "serveur\n"
-#~ " --volume=VOLUME Définit le volume initial "
-#~ "(linéaire) entre 0 et 65536\n"
-#~ " --channel-map=PLANDESCANAUX Définit le plan des canaux à "
-#~ "utiliser\n"
+#~ " -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
+#~ " -d, --device=PÃRIPHÃRIQUE Le nom de la destination à laquelle se connecter\n"
+#~ " -n, --client-name=NOM Définit le nom de ce client sur le serveur\n"
+#~ " --stream-name=NOM Définit le nom de ce flux sur le serveur\n"
+#~ " --volume=VOLUME Définit le volume initial (linéaire) entre 0 et 65536\n"
+#~ " --channel-map=PLANDESCANAUX Définit le plan des canaux à utiliser\n"
#~ msgid ""
#~ "paplay %s\n"
@@ -2797,26 +2613,18 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgid "Using sample spec '%s'\n"
#~ msgstr "Utilisation de la spécification de l'échantillon « %s »\n"
-#, fuzzy
#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
+#~ "Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
#~ "We are not in group '"
#~ msgstr ""
-#~ "Le SUID root a été appelé et la planification à haute priorité/en temps "
-#~ "réel demandée dans la configuration. Néanmoins nous n'avons pas les "
-#~ "permissions nécessaires :\n"
+#~ "Le SUID root a été appelé et la planification à haute priorité/en temps réel demandée dans la configuration. Néanmoins nous n'avons pas les permissions nécessaires :\n"
#~ "nous ne somme pas dans le groupe "
-#, fuzzy
#~ msgid "--log-time boolean argument"
#~ msgstr "--disallow-exit requiert un paramètre booléen"
#~ msgid "Default sink name (%s) does not exist in name register."
-#~ msgstr ""
-#~ "Le nom de la destination par défaut (%s) n'existe pas dans le registre "
-#~ "des noms."
+#~ msgstr "Le nom de la destination par défaut (%s) n'existe pas dans le registre des noms."
#~ msgid "Buffer overrun, dropping incoming data\n"
#~ msgstr "Saturation du tampon, abandon des données entrantes\n"
@@ -2848,20 +2656,13 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ 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 '"
+#~ "For enabling real-time scheduling please acquire the appropriate PolicyKit priviliges, or become a member of '"
#~ msgstr ""
-#~ " et PolicyKit refuse de nous accorder les permissions. Abandon du SUID Ã "
-#~ "nouveau.\n"
-#~ "Pour activer la planification en temps réel, veuillez aquérir les "
-#~ "permissions PolicyKit appropriées, ou devenez membre de "
+#~ " et PolicyKit refuse de nous accorder les permissions. Abandon du SUID Ã nouveau.\n"
+#~ "Pour activer la planification en temps réel, veuillez aquérir les permissions PolicyKit appropriées, ou devenez membre de "
-#~ msgid ""
-#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
-#~ "user."
-#~ msgstr ""
-#~ ", ou augmentez les limites de ressource RLIMIT_NICE/RLIMIT_RTPRIO pour "
-#~ "cet utilisateur."
+#~ msgid "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
+#~ msgstr ", ou augmentez les limites de ressource RLIMIT_NICE/RLIMIT_RTPRIO pour cet utilisateur."
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair()Â : %s"
commit 4e2e32b84825d4b2bfa3b4dbcb63e3453e3b7180
Author: Pascal Terjan <pterjan at gmail.com>
Date: Sun Jan 17 09:46:16 2010 +0000
l10n: Updates to French (fr) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/fr.po b/po/fr.po
index 771bd96..5c2cd78 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -60,7 +60,7 @@ msgstr "Garde toujours au moins une destination même si elle est vide"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr "Sortie obsolète"
+msgstr "Sortie factice"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
commit f8d1e2668d125377c9adca643f43e357f739bfda
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 12:46:55 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index ef1918e..cf25744 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,25 +1,25 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Russian translation of pulseaudio.
+# Copyright (C) 2010 pulseaudio
+# This file is distributed under the same license as the pulseaudio package.
+# Leonid Kurbatov <llenchikk at rambler.ru>, 2010.
+#
#
-#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-10 20:05+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"POT-Creation-Date: 2010-01-24 06:51+0000\n"
+"PO-Revision-Date: 2010-01-24 15:46+0300\n"
+"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
+"Language-Team: Russian <->\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: -\n"
#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
commit e62685708c28cbcb717f239ed4153b8f5040ae25
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 12:52:13 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index cf25744..195a4e8 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -2,8 +2,8 @@
# Copyright (C) 2010 pulseaudio
# This file is distributed under the same license as the pulseaudio package.
# Leonid Kurbatov <llenchikk at rambler.ru>, 2010.
-#
-#
+#
+#
msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
@@ -24,28 +24,24 @@ msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
+"snd_pcm_avail() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: %lu Ð±Ð°Ð¹Ñ (%lu мÑ).\n"
+"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой пÑоблеме ÑазÑабоÑÑикам ALSA."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
-"lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/module-always-sink.c:39
@@ -61,12 +57,7 @@ msgid "Virtual LADSPA sink"
msgstr ""
#: ../src/modules/module-ladspa-sink.c:53
-msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
msgstr ""
#: ../src/modules/module-null-sink.c:55
@@ -183,9 +174,7 @@ msgid "Failed to kill daemon: %s"
msgstr ""
#: ../src/daemon/main.c:571
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
+msgid "This program is not intended to be run as root (unless --system is specified)."
msgstr ""
#: ../src/daemon/main.c:573
@@ -338,12 +327,9 @@ msgstr ""
#: ../src/daemon/main.c:792
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:809
@@ -355,9 +341,7 @@ msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
#: ../src/daemon/main.c:821
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
msgstr ""
#: ../src/daemon/main.c:844
@@ -395,48 +379,37 @@ msgid ""
" --dump-conf Dump default configuration\n"
" --dump-modules Dump list of available modules\n"
" --dump-resample-methods Dump available resample methods\n"
-" --cleanup-shm Cleanup stale shared memory "
-"segments\n"
-" --start Start the daemon if it is not "
-"running\n"
+" --cleanup-shm Cleanup stale shared memory segments\n"
+" --start Start the daemon if it is not running\n"
" -k --kill Kill a running daemon\n"
-" --check Check for a running daemon (only "
-"returns exit code)\n"
+" --check Check for a running daemon (only returns exit code)\n"
"\n"
"OPTIONS:\n"
" --system[=BOOL] Run as system-wide instance\n"
" -D, --daemonize[=BOOL] Daemonize after startup\n"
" --fail[=BOOL] Quit when startup fails\n"
" --high-priority[=BOOL] Try to set high nice level\n"
-" (only available as root, when SUID "
-"or\n"
+" (only available as root, when SUID or\n"
" with elevated RLIMIT_NICE)\n"
" --realtime[=BOOL] Try to enable realtime scheduling\n"
-" (only available as root, when SUID "
-"or\n"
+" (only available as root, when SUID or\n"
" with elevated RLIMIT_RTPRIO)\n"
-" --disallow-module-loading[=BOOL] Disallow module user requested "
-"module\n"
+" --disallow-module-loading[=BOOL] Disallow module user requested module\n"
" loading/unloading after startup\n"
" --disallow-exit[=BOOL] Disallow user requested exit\n"
-" --exit-idle-time=SECS Terminate the daemon when idle and "
-"this\n"
+" --exit-idle-time=SECS Terminate the daemon when idle and this\n"
" time passed\n"
-" --module-idle-time=SECS Unload autoloaded modules when idle "
-"and\n"
+" --module-idle-time=SECS Unload autoloaded modules when idle and\n"
" this time passed\n"
-" --scache-idle-time=SECS Unload autoloaded samples when idle "
-"and\n"
+" --scache-idle-time=SECS Unload autoloaded samples when idle and\n"
" this time passed\n"
" --log-level[=LEVEL] Increase or set verbosity level\n"
" -v Increase the verbosity level\n"
" --log-target={auto,syslog,stderr} Specify the log target\n"
-" --log-meta[=BOOL] Include code location in log "
-"messages\n"
+" --log-meta[=BOOL] Include code location in log messages\n"
" --log-time[=BOOL] Include timestamps in log messages\n"
" --log-backtrace=FRAMES Include a backtrace in log messages\n"
-" -p, --dl-search-path=PATH Set the search path for dynamic "
-"shared\n"
+" -p, --dl-search-path=PATH Set the search path for dynamic shared\n"
" objects (plugins)\n"
" --resample-method=METHOD Use the specified resampling method\n"
" (See --dump-resample-methods for\n"
@@ -447,12 +420,10 @@ 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"
@@ -467,9 +438,7 @@ msgid "--fail expects boolean argument"
msgstr ""
#: ../src/daemon/cmdline.c:264
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of 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 ""
#: ../src/daemon/cmdline.c:276
@@ -632,9 +601,7 @@ msgid "Failed to open configuration file: %s"
msgstr ""
#: ../src/daemon/daemon-conf.c:562
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
msgstr ""
#: ../src/daemon/daemon-conf.c:638
@@ -1225,48 +1192,29 @@ 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, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the "
-"specified value.\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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
" --raw Record/play raw PCM data.\n"
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
@@ -1342,9 +1290,7 @@ msgid "Failed to open audio file."
msgstr ""
#: ../src/utils/pacat.c:959
-msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
+msgid "Warning: specified sample specification will be overwritten with specification from file."
msgstr ""
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
@@ -1365,8 +1311,7 @@ msgstr ""
#: ../src/utils/pacat.c:1008
#, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
#: ../src/utils/pacat.c:1009
@@ -1449,8 +1394,7 @@ 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 ""
@@ -1762,10 +1706,8 @@ 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 ""
#: ../src/utils/pactl.c:933
@@ -1813,14 +1755,11 @@ msgid "You have to specify a module index"
msgstr ""
#: ../src/utils/pactl.c:1090
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
#: ../src/utils/pactl.c:1103
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
+msgid "You may not specify more than one source. You have to specify a boolean value."
msgstr ""
#: ../src/utils/pactl.c:1115
@@ -1884,8 +1823,7 @@ 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 ""
@@ -1993,23 +1931,17 @@ msgstr ""
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
commit 85194fca012048f17f52c91da9d2931218afc8b0
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 12:55:22 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 195a4e8..0353300 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -36,6 +36,8 @@ msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
+"snd_pcm_delay() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: %li Ð±Ð°Ð¹Ñ (%s%lu мÑ).\n"
+"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой пÑоблеме ÑазÑабоÑÑикам ALSA."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
@@ -43,6 +45,8 @@ msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
+"snd_pcm_mmap_begin() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: %lu Ð±Ð°Ð¹Ñ (%lu мÑ).\n"
+"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой пÑоблеме ÑазÑабоÑÑикам ALSA."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
commit 43167fa0c4e4739639b4300cdebe201c5decdf55
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 12:56:40 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 0353300..915dfc4 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -50,19 +50,19 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr ""
+msgstr "ÐÑегда деÑжаÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑдиопÑиÑмник загÑÑженнÑм, даже еÑли он неопÑеделÑн."
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "ФикÑивнÑй вÑÑ
од"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr ""
+msgstr "ÐиÑÑÑалÑнÑй LADSPA аÑдиопÑиÑмник"
#: ../src/modules/module-ladspa-sink.c:53
msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
-msgstr ""
+msgstr "sink_name=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника> sink_properties=<ÑвойÑÑва аÑдиопÑиÑмника> master=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника Ð´Ð»Ñ ÑилÑÑÑаÑии> format=<ÑоÑмаÑ> rate=<ÑаÑÑоÑа> channels=<ÑиÑло каналов> channel_map=<ÑÑ
ема каналов> plugin=<Ð¸Ð¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° ladspa> label=<меÑка плагина ladspa> control=<ÑпиÑок вÑ
однÑÑ
знаÑений, ÑазделÑннÑй запÑÑÑми>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
commit d2ec7e8797c039e01e2816ece6a763d2818c91e7
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 12:58:29 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 915dfc4..4d4fd64 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -66,55 +66,55 @@ msgstr "sink_name=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника> sink_properties=<Ñво
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "СинÑ
ÑонизиÑованнÑй NULL аÑдиопÑиÑмник"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
-msgstr ""
+msgstr "ÐÑÑÑой вÑÑ
од"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
-msgstr ""
+msgstr "ÐÑÑÑоенное аÑдио"
#: ../src/pulsecore/sink.c:2618
msgid "Modem"
-msgstr ""
+msgstr "Ðодем"
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð¹Ñи оÑигиналÑнÑй lt_dlopen загÑÑзÑик."
#: ../src/daemon/ltdl-bind-now.c:129
msgid "Failed to allocate new dl loader."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð²ÑделиÑÑ Ð½Ð¾Ð²Ñй dl загÑÑзÑик."
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ bind-now-загÑÑзÑик."
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr ""
+msgstr "ÐолÑÑен Ñигнал %s."
#: ../src/daemon/main.c:168
msgid "Exiting."
-msgstr ""
+msgstr "ÐÑÑ
од."
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð¹Ñи полÑзоваÑÐµÐ»Ñ '%s'."
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð¹Ñи гÑÑÐ¿Ð¿Ñ '%s'."
#: ../src/daemon/main.c:195
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr ""
+msgstr "Ðайден полÑзоваÑÐµÐ»Ñ '%s' (UID %lu) и гÑÑппа '%s' (GID %lu)."
#: ../src/daemon/main.c:200
#, c-format
commit dc1872a5fbb4a81c51596aebe6d5f6c9252192c9
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 14:37:32 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 4d4fd64..b743f49 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -119,91 +119,91 @@ msgstr "Ðайден полÑзоваÑÐµÐ»Ñ '%s' (UID %lu) и гÑÑппа '%s
#: ../src/daemon/main.c:200
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr ""
+msgstr "ÐденÑиÑикаÑоÑÑ Ð³ÑÑпп полÑзоваÑÐµÐ»Ñ '%s' и гÑÑÐ¿Ð¿Ñ '%s' не ÑовпадаÑÑ."
#: ../src/daemon/main.c:205
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr ""
+msgstr "ÐомаÑнÑÑ Ð¿Ð°Ð¿ÐºÐ° полÑзоваÑÐµÐ»Ñ '%s' не ÑвлÑеÑÑÑ '%s', игноÑиÑование."
#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑоздаÑÑ '%s': %s"
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
-msgstr ""
+msgstr "ÐÑибка пÑи изменении ÑпиÑка гÑÑпп: %s"
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð³ÑÑÐ¿Ð¿Ñ GID: %s"
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ UID: %s"
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
-msgstr ""
+msgstr "УÑпеÑное Ñдаление пÑивилегий админиÑÑÑаÑоÑа."
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr ""
+msgstr "РаÑÑиÑеннÑй Ñежим не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑÑоÑме."
#: ../src/daemon/main.c:297
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr ""
+msgstr "setrlimit(%s, (%u, %u)) не ÑдалоÑÑ: %s"
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr ""
+msgstr "ÐÑибка ÑазбоÑа командной ÑÑÑоки."
#: ../src/daemon/main.c:541
msgid "Daemon not running"
-msgstr ""
+msgstr "Ðемон не запÑÑен"
#: ../src/daemon/main.c:543
#, c-format
msgid "Daemon running as PID %u"
-msgstr ""
+msgstr "Ðемон запÑÑен как PID %u"
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑбиÑÑ Ð´ÐµÐ¼Ð¾Ð½: %s"
#: ../src/daemon/main.c:571
msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr ""
+msgstr "ÐÑа пÑогÑамма не пÑедназнаÑена Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка Ñ Ð¿Ñавами админиÑÑÑаÑоÑа (еÑли не Ñказано в ÑиÑÑеме)."
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr ""
+msgstr "ÐеобÑ
Ð¾Ð´Ð¸Ð¼Ñ Ð¿Ñава админиÑÑÑаÑоÑа."
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
-msgstr ""
+msgstr "--start не поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑлеменÑов ÑиÑÑемÑ."
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr ""
+msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме, но --disallow-exit не задан!"
#: ../src/daemon/main.c:586
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr ""
+msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме, но --disallow-module-loading не задан!"
#: ../src/daemon/main.c:589
msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr ""
+msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑелÑнÑм оÑклÑÑением Ñежима SHM!"
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr ""
+msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑелÑнÑм оÑклÑÑением вÑемени вÑÑ
ода поÑле пÑоÑÑоÑ!"
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
commit dd8f33ddcc0442bbb606e180dc11d3cc57bfc4d5
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 15:35:08 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index b743f49..8b91498 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -207,127 +207,127 @@ msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑе
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð¿ÑоÑиÑÑ stdio."
#: ../src/daemon/main.c:627
#, c-format
msgid "pipe failed: %s"
-msgstr ""
+msgstr "Ðанал не ÑдалÑÑ: %s"
#: ../src/daemon/main.c:632
#, c-format
msgid "fork() failed: %s"
-msgstr ""
+msgstr "fork() веÑÐ²Ñ Ð½Ðµ ÑдалаÑÑ: %s"
#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
#, c-format
msgid "read() failed: %s"
-msgstr ""
+msgstr "read() ÑÑение не ÑдалоÑÑ: %s"
#: ../src/daemon/main.c:652
msgid "Daemon startup failed."
-msgstr ""
+msgstr "ÐапÑÑк демона не ÑдалÑÑ."
#: ../src/daemon/main.c:654
msgid "Daemon startup successful."
-msgstr ""
+msgstr "УÑпеÑнÑй запÑÑк демона."
#: ../src/daemon/main.c:731
#, c-format
msgid "This is PulseAudio %s"
-msgstr ""
+msgstr "PulseAudio %s"
#: ../src/daemon/main.c:732
#, c-format
msgid "Compilation host: %s"
-msgstr ""
+msgstr "ХоÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии: %s"
#: ../src/daemon/main.c:733
#, c-format
msgid "Compilation CFLAGS: %s"
-msgstr ""
+msgstr "ÐомпилÑÑÐ¸Ñ CFLAGS: %s"
#: ../src/daemon/main.c:736
#, c-format
msgid "Running on host: %s"
-msgstr ""
+msgstr "ÐапÑÑен на Ñ
оÑÑе: %s"
#: ../src/daemon/main.c:739
#, c-format
msgid "Found %u CPUs."
-msgstr ""
+msgstr "Ðайдено пÑоÑеÑÑоÑов: %u."
#: ../src/daemon/main.c:741
#, c-format
msgid "Page size is %lu bytes"
-msgstr ""
+msgstr "Ð Ð°Ð·Ð¼ÐµÑ ÑÑÑаниÑÑ: %lu байÑ"
#: ../src/daemon/main.c:744
msgid "Compiled with Valgrind support: yes"
-msgstr ""
+msgstr "СкомпилиÑовано Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой Valgrind: да"
#: ../src/daemon/main.c:746
msgid "Compiled with Valgrind support: no"
-msgstr ""
+msgstr "СкомпилиÑовано Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой Valgrind: неÑ"
#: ../src/daemon/main.c:749
#, c-format
msgid "Running in valgrind mode: %s"
-msgstr ""
+msgstr "ÐапÑÑк в Ñежиме Valgrind: %s"
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
-msgstr ""
+msgstr "ÐпÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑбоÑка: да"
#: ../src/daemon/main.c:754
msgid "Optimized build: no"
-msgstr ""
+msgstr "ÐпÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑбоÑка: неÑ"
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
-msgstr ""
+msgstr "NDEBUG задан, вÑе аÑÑеÑÑÑ Ð·Ð°Ð¿ÑеÑенÑ."
#: ../src/daemon/main.c:760
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
+msgstr "FASTPATH задан, запÑеÑÐµÐ½Ñ ÑолÑко fast path аÑÑеÑÑÑ."
#: ../src/daemon/main.c:762
msgid "All asserts enabled."
-msgstr ""
+msgstr "ÐÑе аÑÑеÑÑÑ ÑазÑеÑенÑ."
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ID маÑинÑ"
#: ../src/daemon/main.c:769
#, c-format
msgid "Machine ID is %s."
-msgstr ""
+msgstr "ID маÑÐ¸Ð½Ñ %s."
#: ../src/daemon/main.c:773
#, c-format
msgid "Session ID is %s."
-msgstr ""
+msgstr "ID ÑеÑÑии %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Using runtime directory %s."
-msgstr ""
+msgstr "ÐÑполÑзование каÑалога изолиÑованного окÑÑÐ¶ÐµÐ½Ð¸Ñ %s."
#: ../src/daemon/main.c:784
#, c-format
msgid "Using state directory %s."
-msgstr ""
+msgstr "ÐÑполÑзование заданного каÑалога %s."
#: ../src/daemon/main.c:787
#, c-format
msgid "Using modules directory %s."
-msgstr ""
+msgstr "ÐÑполÑзование каÑалога модÑлей %s."
#: ../src/daemon/main.c:789
#, c-format
msgid "Running in system mode: %s"
-msgstr ""
+msgstr "ÐапÑÑк в ÑиÑÑемном Ñежиме: %s"
#: ../src/daemon/main.c:792
msgid ""
@@ -335,42 +335,46 @@ msgid ""
"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
+"ÐÑак, Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе PA в ÑиÑÑемном Ñежиме. ÐомниÑе, ÑÑо вам, ÑкоÑее вÑего, не ÑледÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑого.\n"
+"ÐÑли Ð²Ñ ÑÑо вÑÑ Ñавно делаеÑе, Ñо ваÑа вина, ÑÑо веÑи не ÑабоÑаÑÑ ÐºÐ°Ðº ожидалоÑÑ.\n"
+"ÐожалÑйÑÑа пÑоÑиÑайÑе http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode Ð´Ð»Ñ Ð¾Ð±ÑÑÑнениÑ, поÑÐµÐ¼Ñ ÑиÑÑемнÑй Ñежим обÑÑно ÑвлÑеÑÑÑ Ð¿Ð»Ð¾Ñ
ой идеей."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
-msgstr ""
+msgstr "pa_pid_file_create() не ÑдалоÑÑ."
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr ""
+msgstr "ÐоÑÑÑпен Ñвежий ÑÐ°Ð¹Ð¼ÐµÑ Ð²ÑÑокого ÑазÑеÑениÑ! ÐÑиÑÑного аппеÑиÑа!"
#: ../src/daemon/main.c:821
msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr ""
+msgstr "ÐÑаÑан, ÑÐ²Ð¾Ñ ÑдÑо вонÑеÑ! СегоднÑÑнÑÑ ÑекомендаÑÐ¸Ñ ÑеÑа - ÑдÑо Ñ Ð²ÐºÐ»ÑÑеннÑм ÑаймеÑом вÑÑокого ÑазÑеÑениÑ!"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
-msgstr ""
+msgstr "pa_core_new() не ÑдалаÑÑ."
#: ../src/daemon/main.c:904
+#, fuzzy
msgid "Failed to initialize daemon."
-msgstr ""
+msgstr "ÐÑибка иниÑиализаÑии демона."
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr ""
+msgstr "ÐапÑÑк демона без какиÑ
-либо загÑÑжемÑÑ
модÑли, оÑказ Ð¾Ñ ÑабоÑÑ."
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
-msgstr ""
+msgstr "ÐапÑÑк демона завеÑÑÑн."
#: ../src/daemon/main.c:932
msgid "Daemon shutdown initiated."
-msgstr ""
+msgstr "ÐавеÑÑение демона иниÑиализиÑовано."
#: ../src/daemon/main.c:954
msgid "Daemon terminated."
-msgstr ""
+msgstr "Ðемон завеÑÑÑн."
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -435,11 +439,11 @@ msgstr ""
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
-msgstr ""
+msgstr "--daemonize Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:254
msgid "--fail expects boolean argument"
-msgstr ""
+msgstr "--fail Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:264
msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
commit 4abfa17f0c983ec10f489b19fa513d355526ee61
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 16:13:23 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 8b91498..95b994a 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -356,7 +356,6 @@ msgid "pa_core_new() failed."
msgstr "pa_core_new() не ÑдалаÑÑ."
#: ../src/daemon/main.c:904
-#, fuzzy
msgid "Failed to initialize daemon."
msgstr "ÐÑибка иниÑиализаÑии демона."
@@ -447,161 +446,161 @@ msgstr "--fail Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:264
msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr ""
+msgstr "--log-level Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (или ÑиÑловой в диапазоне 0..4 или Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
-msgstr ""
+msgstr "--high-priority Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:283
msgid "--realtime expects boolean argument"
-msgstr ""
+msgstr "--realtime Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:290
msgid "--disallow-module-loading expects boolean argument"
-msgstr ""
+msgstr "--disallow-module-loading Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:297
msgid "--disallow-exit expects boolean argument"
-msgstr ""
+msgstr "--disallow-exit Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:304
msgid "--use-pid-file expects boolean argument"
-msgstr ""
+msgstr "--use-pid-file Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr ""
+msgstr "ÐевеÑнÑй жÑÑнал: иÑполÑзÑйÑе либо 'syslog', 'stderr' или 'auto'."
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
-msgstr ""
+msgstr "--log-time Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:335
msgid "--log-meta expects boolean argument"
-msgstr ""
+msgstr "--log-meta Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:354
#, c-format
msgid "Invalid resample method '%s'."
-msgstr ""
+msgstr "ÐевеÑнÑй меÑод пеÑевÑбоÑки '%s'."
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
-msgstr ""
+msgstr "--system Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:368
msgid "--no-cpu-limit expects boolean argument"
-msgstr ""
+msgstr "--no-cpu-limit Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:375
msgid "--disable-shm expects boolean argument"
-msgstr ""
+msgstr "--disable-shm Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/dumpmodules.c:60
#, c-format
msgid "Name: %s\n"
-msgstr ""
+msgstr "ÐмÑ: %s\n"
#: ../src/daemon/dumpmodules.c:63
#, c-format
msgid "No module information available\n"
-msgstr ""
+msgstr "ÐÐµÑ Ð¸Ð½ÑоÑмаÑии о модÑлÑÑ
\n"
#: ../src/daemon/dumpmodules.c:66
#, c-format
msgid "Version: %s\n"
-msgstr ""
+msgstr "ÐеÑÑиÑ: %s\n"
#: ../src/daemon/dumpmodules.c:68
#, c-format
msgid "Description: %s\n"
-msgstr ""
+msgstr "ÐпиÑание: %s\n"
#: ../src/daemon/dumpmodules.c:70
#, c-format
msgid "Author: %s\n"
-msgstr ""
+msgstr "ÐвÑоÑ: %s\n"
#: ../src/daemon/dumpmodules.c:72
#, c-format
msgid "Usage: %s\n"
-msgstr ""
+msgstr "ÐÑполÑзование: %s\n"
#: ../src/daemon/dumpmodules.c:73
#, c-format
msgid "Load Once: %s\n"
-msgstr ""
+msgstr "ÐагÑÑжен Ñаз: %s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr ""
+msgstr "DEPRECATION WARNING: %s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
msgid "Path: %s\n"
-msgstr ""
+msgstr "ÐÑÑÑ: %s\n"
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй жÑÑнал '%s'."
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй меÑод пеÑевÑбоÑки '%s'."
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй rlimit '%s'."
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
-msgstr ""
+msgstr "[%s:%u] rlimit не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑÑоÑме."
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй ÑоÑÐ¼Ð°Ñ ÑÑмпла '%s'."
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑÐ½Ð°Ñ ÑаÑÑоÑа диÑкÑеÑизаÑии '%s'."
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑе ÑÑмпл-ÐºÐ°Ð½Ð°Ð»Ñ '%s'."
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑÐ½Ð°Ñ ÑÑ
ема каналов '%s'."
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑное ÑиÑло ÑÑагменÑов '%s'."
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑагменÑа '%s'."
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr ""
+msgstr "[%s:%u] ÐевеÑнÑй ÑоÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ '%s'."
#: ../src/daemon/daemon-conf.c:546
#, c-format
commit fd5b87e289f88702e3fcbceecec1d97b2a1c6250
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 20:33:56 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 95b994a..4c408f0 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -2,14 +2,14 @@
# Copyright (C) 2010 pulseaudio
# This file is distributed under the same license as the pulseaudio package.
# Leonid Kurbatov <llenchikk at rambler.ru>, 2010.
-#
-#
+#
+#
msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-24 06:51+0000\n"
-"PO-Revision-Date: 2010-01-24 15:46+0300\n"
+"PO-Revision-Date: 2010-01-24 23:33+0300\n"
"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
"Language-Team: Russian <->\n"
"MIME-Version: 1.0\n"
@@ -24,33 +24,47 @@ msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"snd_pcm_avail() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: %lu Ð±Ð°Ð¹Ñ (%lu мÑ).\n"
-"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой пÑоблеме ÑазÑабоÑÑикам ALSA."
+"snd_pcm_avail() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: "
+"%lu Ð±Ð°Ð¹Ñ (%lu мÑ).\n"
+"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой "
+"пÑоблеме ÑазÑабоÑÑикам ALSA."
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"snd_pcm_delay() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: %li Ð±Ð°Ð¹Ñ (%s%lu мÑ).\n"
-"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой пÑоблеме ÑазÑабоÑÑикам ALSA."
+"snd_pcm_delay() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: "
+"%li Ð±Ð°Ð¹Ñ (%s%lu мÑ).\n"
+"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой "
+"пÑоблеме ÑазÑабоÑÑикам ALSA."
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"snd_pcm_mmap_begin() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно болÑÑим: %lu Ð±Ð°Ð¹Ñ (%lu мÑ).\n"
-"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой пÑоблеме ÑазÑабоÑÑикам ALSA."
+"snd_pcm_mmap_begin() возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, коÑоÑое ÑвлÑеÑÑÑ Ð¸ÑклÑÑиÑелÑно "
+"болÑÑим: %lu Ð±Ð°Ð¹Ñ (%lu мÑ).\n"
+"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой "
+"пÑоблеме ÑазÑабоÑÑикам ALSA."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "ÐÑегда деÑжаÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑдиопÑиÑмник загÑÑженнÑм, даже еÑли он неопÑеделÑн."
+msgstr ""
+"ÐÑегда оÑÑавлÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑдиовÑÑ
од загÑÑженнÑм, даже еÑли он "
+"неопÑеделÑн."
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
@@ -58,15 +72,25 @@ msgstr "ФикÑивнÑй вÑÑ
од"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr "ÐиÑÑÑалÑнÑй LADSPA аÑдиопÑиÑмник"
+msgstr "ÐиÑÑÑалÑнÑй LADSPA аÑдиовÑÑ
од"
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
-msgstr "sink_name=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника> sink_properties=<ÑвойÑÑва аÑдиопÑиÑмника> master=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника Ð´Ð»Ñ ÑилÑÑÑаÑии> format=<ÑоÑмаÑ> rate=<ÑаÑÑоÑа> channels=<ÑиÑло каналов> channel_map=<ÑÑ
ема каналов> plugin=<Ð¸Ð¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° ladspa> label=<меÑка плагина ladspa> control=<ÑпиÑок вÑ
однÑÑ
знаÑений, ÑазделÑннÑй запÑÑÑми>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+"sink_name=<Ð¸Ð¼Ñ Ð°ÑдиовÑÑ
ода> sink_properties=<ÑвойÑÑва аÑдиовÑÑ
ода> "
+"master=<Ð¸Ð¼Ñ Ð°ÑдиовÑÑ
ода Ð´Ð»Ñ ÑилÑÑÑаÑии> format=<ÑоÑмаÑ> rate=<ÑаÑÑоÑа> "
+"channels=<ÑиÑло каналов> channel_map=<ÑÑ
ема каналов> plugin=<Ð¸Ð¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° "
+"ladspa> label=<меÑка плагина ladspa> control=<ÑпиÑок вÑ
однÑÑ
знаÑений, "
+"ÑазделÑннÑй запÑÑÑми>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr "СинÑ
ÑонизиÑованнÑй NULL аÑдиопÑиÑмник"
+msgstr "СинÑ
ÑонизиÑованнÑй NULL аÑдиовÑÑ
од"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
@@ -178,8 +202,12 @@ msgid "Failed to kill daemon: %s"
msgstr "Ðе ÑдалоÑÑ ÑбиÑÑ Ð´ÐµÐ¼Ð¾Ð½: %s"
#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "ÐÑа пÑогÑамма не пÑедназнаÑена Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка Ñ Ð¿Ñавами админиÑÑÑаÑоÑа (еÑли не Ñказано в ÑиÑÑеме)."
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"ÐÑа пÑогÑамма не пÑедназнаÑена Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка Ñ Ð¿Ñавами админиÑÑÑаÑоÑа (еÑли не "
+"Ñказано в ÑиÑÑеме)."
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -203,7 +231,9 @@ msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑе
#: ../src/daemon/main.c:594
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑелÑнÑм оÑклÑÑением вÑемени вÑÑ
ода поÑле пÑоÑÑоÑ!"
+msgstr ""
+"ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑелÑнÑм оÑклÑÑением вÑемени вÑÑ
ода поÑле "
+"пÑоÑÑоÑ!"
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
@@ -331,13 +361,19 @@ msgstr "ÐапÑÑк в ÑиÑÑемном Ñежиме: %s"
#: ../src/daemon/main.c:792
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
-msgstr ""
-"ÐÑак, Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе PA в ÑиÑÑемном Ñежиме. ÐомниÑе, ÑÑо вам, ÑкоÑее вÑего, не ÑледÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑого.\n"
-"ÐÑли Ð²Ñ ÑÑо вÑÑ Ñавно делаеÑе, Ñо ваÑа вина, ÑÑо веÑи не ÑабоÑаÑÑ ÐºÐ°Ðº ожидалоÑÑ.\n"
-"ÐожалÑйÑÑа пÑоÑиÑайÑе http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode Ð´Ð»Ñ Ð¾Ð±ÑÑÑнениÑ, поÑÐµÐ¼Ñ ÑиÑÑемнÑй Ñежим обÑÑно ÑвлÑеÑÑÑ Ð¿Ð»Ð¾Ñ
ой идеей."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
+msgstr ""
+"ÐÑак, Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе PA в ÑиÑÑемном Ñежиме. ÐомниÑе, ÑÑо вам, ÑкоÑее вÑего, "
+"не ÑледÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑого.\n"
+"ÐÑли Ð²Ñ ÑÑо вÑÑ Ñавно делаеÑе, Ñо ваÑа вина, ÑÑо веÑи не ÑабоÑаÑÑ ÐºÐ°Ðº "
+"ожидалоÑÑ.\n"
+"ÐожалÑйÑÑа пÑоÑиÑайÑе http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode "
+"Ð´Ð»Ñ Ð¾Ð±ÑÑÑнениÑ, поÑÐµÐ¼Ñ ÑиÑÑемнÑй Ñежим обÑÑно ÑвлÑеÑÑÑ Ð¿Ð»Ð¾Ñ
ой идеей."
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
@@ -348,8 +384,12 @@ msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ÐоÑÑÑпен Ñвежий ÑÐ°Ð¹Ð¼ÐµÑ Ð²ÑÑокого ÑазÑеÑениÑ! ÐÑиÑÑного аппеÑиÑа!"
#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr "ÐÑаÑан, ÑÐ²Ð¾Ñ ÑдÑо вонÑеÑ! СегоднÑÑнÑÑ ÑекомендаÑÐ¸Ñ ÑеÑа - ÑдÑо Ñ Ð²ÐºÐ»ÑÑеннÑм ÑаймеÑом вÑÑокого ÑазÑеÑениÑ!"
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"ÐÑаÑан, ÑÐ²Ð¾Ñ ÑдÑо вонÑеÑ! СегоднÑÑнÑÑ ÑекомендаÑÐ¸Ñ ÑеÑа - ÑдÑо Ñ Ð²ÐºÐ»ÑÑеннÑм "
+"ÑаймеÑом вÑÑокого ÑазÑеÑениÑ!"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
@@ -361,7 +401,7 @@ msgstr "ÐÑибка иниÑиализаÑии демона."
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "ÐапÑÑк демона без какиÑ
-либо загÑÑжемÑÑ
модÑли, оÑказ Ð¾Ñ ÑабоÑÑ."
+msgstr "ÐапÑÑк демона без какиÑ
-либо загÑÑжаемÑÑ
модÑлей, оÑказ Ð¾Ñ ÑабоÑÑ."
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
@@ -386,37 +426,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"
@@ -427,14 +478,85 @@ 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"
msgstr ""
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" --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"
+" -k --kill Kill 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"
+" with elevated RLIMIT_NICE)\n"
+" --realtime[=BOOL] Try to enable realtime scheduling\n"
+" (only available as root, when SUID "
+"or\n"
+" with elevated RLIMIT_RTPRIO)\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"
+" time passed\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"
+" 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-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"
+" possible values)\n"
+" --use-pid-file[=BOOL] Create a PID file\n"
+" --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n"
+" platforms that support it.\n"
+" --disable-shm[=BOOL] Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\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"
+" after startup\n"
+"\n"
+" -n Don't load default script file\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
@@ -445,8 +567,12 @@ msgid "--fail expects boolean argument"
msgstr "--fail Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr "--log-level Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (или ÑиÑловой в диапазоне 0..4 или Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· 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 Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (или ÑиÑловой в диапазоне 0..4 "
+"или Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -470,7 +596,7 @@ msgstr "--use-pid-file Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr "ÐевеÑнÑй жÑÑнал: иÑполÑзÑйÑе либо 'syslog', 'stderr' или 'auto'."
+msgstr "ÐедопÑÑÑимÑй жÑÑнал: иÑполÑзÑйÑе либо 'syslog', 'stderr' или 'auto'."
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
@@ -483,7 +609,7 @@ msgstr "--log-meta Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкий аÑгÑменÑ"
#: ../src/daemon/cmdline.c:354
#, c-format
msgid "Invalid resample method '%s'."
-msgstr "ÐевеÑнÑй меÑод пеÑевÑбоÑки '%s'."
+msgstr "ÐедопÑÑÑимÑй меÑод ÑеÑÑмплиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
@@ -545,22 +671,22 @@ msgstr "ÐÑÑÑ: %s\n"
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй жÑÑнал '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй жÑÑнал '%s'."
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй меÑод пеÑевÑбоÑки '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй меÑод ÑеÑÑмплиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй rlimit '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй rlimit '%s'."
#: ../src/daemon/daemon-conf.c:294
#, c-format
@@ -570,7 +696,7 @@ msgstr "[%s:%u] rlimit не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑ
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй ÑоÑÐ¼Ð°Ñ ÑÑмпла '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй ÑоÑÐ¼Ð°Ñ ÑÑмпла '%s'."
#: ../src/daemon/daemon-conf.c:328
#, c-format
@@ -595,596 +721,600 @@ msgstr "[%s:%u] ÐевеÑное ÑиÑло ÑÑагменÑов '%s'."
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑагменÑа '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑагменÑа '%s'."
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "[%s:%u] ÐевеÑнÑй ÑоÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ '%s'."
+msgstr "[%s:%u] ÐедопÑÑÑимÑй ÑоÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ '%s'."
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ñайл конÑигÑÑаÑии: %s"
#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
msgstr ""
+"Ð Ñказанной ÑÑ
еме каналов ÑиÑло каналов оÑлиÑаеÑÑÑ Ð¾Ñ ÑиÑла каналов по-"
+"ÑмолÑаниÑ."
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
-msgstr ""
+msgstr "### ÐÑоÑиÑаÑÑ Ð¸Ð· Ñайла конÑигÑÑаÑии: %s ###\n"
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
-msgstr ""
+msgstr "ÐÑиÑÑка пÑивилегий."
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
-msgstr ""
+msgstr "ÐвÑÐºÐ¾Ð²Ð°Ñ ÑиÑÑема PulseAudio"
#: ../src/daemon/pulseaudio.desktop.in.h:2
msgid "Start the PulseAudio Sound System"
-msgstr ""
+msgstr "ÐапÑÑк звÑковой ÑиÑÑÐµÐ¼Ñ PulseAudio"
#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
-msgstr ""
+msgstr "Ðоно"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
-msgstr ""
+msgstr "ФÑÐ¾Ð½Ñ ÑенÑÑ"
#: ../src/pulse/channelmap.c:108
msgid "Front Left"
-msgstr ""
+msgstr "ФÑÐ¾Ð½Ñ Ð»ÐµÐ²Ð¾"
#: ../src/pulse/channelmap.c:109
msgid "Front Right"
-msgstr ""
+msgstr "ФÑÐ¾Ð½Ñ Ð¿Ñаво"
#: ../src/pulse/channelmap.c:111
msgid "Rear Center"
-msgstr ""
+msgstr "Сзади ÑенÑÑ"
#: ../src/pulse/channelmap.c:112
msgid "Rear Left"
-msgstr ""
+msgstr "Сзади лево"
#: ../src/pulse/channelmap.c:113
msgid "Rear Right"
-msgstr ""
+msgstr "Сзади пÑаво"
#: ../src/pulse/channelmap.c:115
msgid "Low Frequency Emmiter"
-msgstr ""
+msgstr "СабвÑÑеÑ"
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
-msgstr ""
+msgstr "ФÑÐ¾Ð½Ñ Ð»ÐµÐ²ÐµÐµ ÑенÑÑа"
#: ../src/pulse/channelmap.c:118
msgid "Front Right-of-center"
-msgstr ""
+msgstr "ФÑÐ¾Ð½Ñ Ð¿Ñавее ÑенÑÑа"
#: ../src/pulse/channelmap.c:120
msgid "Side Left"
-msgstr ""
+msgstr "ÐÐµÐ²Ð°Ñ ÑÑоÑона"
#: ../src/pulse/channelmap.c:121
msgid "Side Right"
-msgstr ""
+msgstr "ÐÑÐ°Ð²Ð°Ñ ÑÑоÑона"
#: ../src/pulse/channelmap.c:123
msgid "Auxiliary 0"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 0"
#: ../src/pulse/channelmap.c:124
msgid "Auxiliary 1"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 1"
#: ../src/pulse/channelmap.c:125
msgid "Auxiliary 2"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 2"
#: ../src/pulse/channelmap.c:126
msgid "Auxiliary 3"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 3"
#: ../src/pulse/channelmap.c:127
msgid "Auxiliary 4"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 4"
#: ../src/pulse/channelmap.c:128
msgid "Auxiliary 5"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 5"
#: ../src/pulse/channelmap.c:129
msgid "Auxiliary 6"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 6"
#: ../src/pulse/channelmap.c:130
msgid "Auxiliary 7"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 7"
#: ../src/pulse/channelmap.c:131
msgid "Auxiliary 8"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 8"
#: ../src/pulse/channelmap.c:132
msgid "Auxiliary 9"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 9"
#: ../src/pulse/channelmap.c:133
msgid "Auxiliary 10"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 10"
#: ../src/pulse/channelmap.c:134
msgid "Auxiliary 11"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 11"
#: ../src/pulse/channelmap.c:135
msgid "Auxiliary 12"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 12"
#: ../src/pulse/channelmap.c:136
msgid "Auxiliary 13"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 13"
#: ../src/pulse/channelmap.c:137
msgid "Auxiliary 14"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 14"
#: ../src/pulse/channelmap.c:138
msgid "Auxiliary 15"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 15"
#: ../src/pulse/channelmap.c:139
msgid "Auxiliary 16"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 16"
#: ../src/pulse/channelmap.c:140
msgid "Auxiliary 17"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 17"
#: ../src/pulse/channelmap.c:141
msgid "Auxiliary 18"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 18"
#: ../src/pulse/channelmap.c:142
msgid "Auxiliary 19"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 19"
#: ../src/pulse/channelmap.c:143
msgid "Auxiliary 20"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 20"
#: ../src/pulse/channelmap.c:144
msgid "Auxiliary 21"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 21"
#: ../src/pulse/channelmap.c:145
msgid "Auxiliary 22"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 22"
#: ../src/pulse/channelmap.c:146
msgid "Auxiliary 23"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 23"
#: ../src/pulse/channelmap.c:147
msgid "Auxiliary 24"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 24"
#: ../src/pulse/channelmap.c:148
msgid "Auxiliary 25"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 25"
#: ../src/pulse/channelmap.c:149
msgid "Auxiliary 26"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 26"
#: ../src/pulse/channelmap.c:150
msgid "Auxiliary 27"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 27"
#: ../src/pulse/channelmap.c:151
msgid "Auxiliary 28"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 28"
#: ../src/pulse/channelmap.c:152
msgid "Auxiliary 29"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 29"
#: ../src/pulse/channelmap.c:153
msgid "Auxiliary 30"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 30"
#: ../src/pulse/channelmap.c:154
msgid "Auxiliary 31"
-msgstr ""
+msgstr "ÐополниÑелÑнÑй 31"
#: ../src/pulse/channelmap.c:156
msgid "Top Center"
-msgstr ""
+msgstr "ÐеÑÑ
ÑенÑÑ"
#: ../src/pulse/channelmap.c:158
msgid "Top Front Center"
-msgstr ""
+msgstr "ÐеÑÑ
ÑÑÐ¾Ð½Ñ ÑенÑÑ"
#: ../src/pulse/channelmap.c:159
msgid "Top Front Left"
-msgstr ""
+msgstr "ÐеÑÑ
ÑÑÐ¾Ð½Ñ Ð»ÐµÐ²Ð¾"
#: ../src/pulse/channelmap.c:160
msgid "Top Front Right"
-msgstr ""
+msgstr "ÐеÑÑ
ÑÑÐ¾Ð½Ñ Ð¿Ñаво"
#: ../src/pulse/channelmap.c:162
msgid "Top Rear Center"
-msgstr ""
+msgstr "ÐеÑÑ
Ñзади ÑенÑÑ"
#: ../src/pulse/channelmap.c:163
msgid "Top Rear Left"
-msgstr ""
+msgstr "ÐеÑÑ
Ñзади лево"
#: ../src/pulse/channelmap.c:164
msgid "Top Rear Right"
-msgstr ""
+msgstr "ÐеÑÑ
Ñзади пÑаво"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
-msgstr ""
+msgstr "(недейÑÑвиÑелÑно)"
#: ../src/pulse/channelmap.c:761
msgid "Stereo"
-msgstr ""
+msgstr "СÑеÑео"
#: ../src/pulse/channelmap.c:766
msgid "Surround 4.0"
-msgstr ""
+msgstr "ÐбÑÑмнÑй 4.0"
#: ../src/pulse/channelmap.c:772
msgid "Surround 4.1"
-msgstr ""
+msgstr "ÐбÑÑмнÑй 4.1"
#: ../src/pulse/channelmap.c:778
msgid "Surround 5.0"
-msgstr ""
+msgstr "ÐбÑÑмнÑй 5.0"
#: ../src/pulse/channelmap.c:784
msgid "Surround 5.1"
-msgstr ""
+msgstr "ÐбÑÑмнÑй 5.1"
#: ../src/pulse/channelmap.c:791
msgid "Surround 7.1"
-msgstr ""
+msgstr "ÐбÑÑмнÑй 7.1"
#: ../src/pulse/error.c:43
msgid "OK"
-msgstr ""
+msgstr "OK"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr ""
+msgstr "ÐÐµÑ Ð´Ð¾ÑÑÑпа"
#: ../src/pulse/error.c:45
msgid "Unknown command"
-msgstr ""
+msgstr "ÐеизвеÑÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°"
#: ../src/pulse/error.c:46
msgid "Invalid argument"
-msgstr ""
+msgstr "ÐедейÑÑвиÑелÑнÑй аÑгÑменÑ"
#: ../src/pulse/error.c:47
msgid "Entity exists"
-msgstr ""
+msgstr "ÐбÑÐµÐºÑ ÑÑÑеÑÑвÑеÑ"
#: ../src/pulse/error.c:48
msgid "No such entity"
-msgstr ""
+msgstr "ÐÐµÑ Ñакого обÑекÑа"
#: ../src/pulse/error.c:49
msgid "Connection refused"
-msgstr ""
+msgstr "ÐÑказ в подклÑÑении"
#: ../src/pulse/error.c:50
msgid "Protocol error"
-msgstr ""
+msgstr "ÐÑибка пÑоÑокола"
#: ../src/pulse/error.c:51
msgid "Timeout"
-msgstr ""
+msgstr "Тайм-аÑÑ"
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr ""
+msgstr "ÐÐµÑ ÐºÐ»ÑÑа авÑоÑизаÑии"
#: ../src/pulse/error.c:53
msgid "Internal error"
-msgstr ""
+msgstr "ÐнÑÑÑеннÑÑ Ð¾Ñибка"
#: ../src/pulse/error.c:54
msgid "Connection terminated"
-msgstr ""
+msgstr "Соединение завеÑÑено"
#: ../src/pulse/error.c:55
msgid "Entity killed"
-msgstr ""
+msgstr "ÐбÑÐµÐºÑ ÑниÑÑожен"
#: ../src/pulse/error.c:56
msgid "Invalid server"
-msgstr ""
+msgstr "ÐевеÑнÑй ÑеÑвеÑ"
#: ../src/pulse/error.c:57
msgid "Module initalization failed"
-msgstr ""
+msgstr "ÐниÑиализаÑÐ¸Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð½Ðµ ÑдалаÑÑ"
#: ../src/pulse/error.c:58
msgid "Bad state"
-msgstr ""
+msgstr "ÐеиÑпÑавное ÑоÑÑоÑние"
#: ../src/pulse/error.c:59
msgid "No data"
-msgstr ""
+msgstr "ÐÐµÑ Ð´Ð°Ð½Ð½ÑÑ
"
#: ../src/pulse/error.c:60
msgid "Incompatible protocol version"
-msgstr ""
+msgstr "ÐеÑовмеÑÑÐ¸Ð¼Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¿ÑоÑокола"
#: ../src/pulse/error.c:61
msgid "Too large"
-msgstr ""
+msgstr "СлиÑком болÑÑой"
#: ../src/pulse/error.c:62
msgid "Not supported"
-msgstr ""
+msgstr "Ðе поддеÑживаеÑÑÑ"
#: ../src/pulse/error.c:63
msgid "Unknown error code"
-msgstr ""
+msgstr "ÐеизвеÑÑнÑй код оÑибки"
#: ../src/pulse/error.c:64
msgid "No such extension"
-msgstr ""
+msgstr "ÐÐµÑ Ñакого ÑаÑÑиÑениÑ"
#: ../src/pulse/error.c:65
msgid "Obsolete functionality"
-msgstr ""
+msgstr "УÑÑаÑевÑÐ°Ñ ÑÑнкÑионалÑноÑÑÑ"
#: ../src/pulse/error.c:66
msgid "Missing implementation"
-msgstr ""
+msgstr "ÐÑÑÑÑÑÑвÑÑÑÐ°Ñ ÑеализаÑиÑ"
#: ../src/pulse/error.c:67
msgid "Client forked"
-msgstr ""
+msgstr "ÐÐ»Ð¸ÐµÐ½Ñ ÑазвеÑвлÑн"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "ÐÑибка ввода/вÑвода"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "УÑÑÑойÑÑво или ÑеÑÑÑÑ Ð·Ð°Ð½ÑÑо"
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
-msgstr ""
+msgstr "%s %uch %uÐÑ"
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
-msgstr ""
+msgstr "%0.1f Ðб"
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
-msgstr ""
+msgstr "%0.1f Ðб"
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
-msgstr ""
+msgstr "%0.1f Ðб"
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
-msgstr ""
+msgstr "%u Ð"
#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
-msgstr ""
+msgstr "XOpenDisplay() не ÑдалоÑÑ"
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑазобÑаÑÑ Ð´Ð°Ð½Ð½Ñе cookie"
#: ../src/pulse/client-conf.c:111
#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ñайл конÑигÑÑаÑии '%s': %s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
-msgstr ""
+msgstr "Cookie не загÑÑженÑ. ÐопÑÑка подклÑÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· ниÑ
."
#: ../src/pulse/context.c:693
#, c-format
msgid "fork(): %s"
-msgstr ""
+msgstr "fork(): %s"
#: ../src/pulse/context.c:748
#, c-format
msgid "waitpid(): %s"
-msgstr ""
+msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
msgid "Received message for unknown extension '%s'"
-msgstr ""
+msgstr "ÐолÑÑено ÑообÑение Ð´Ð»Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑного ÑаÑÑиÑÐµÐ½Ð¸Ñ '%s'"
#: ../src/utils/pacat.c:108
#, c-format
msgid "Failed to drain stream: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑоздаÑÑ ÑÑÐ½Ð½ÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ñока: %s"
#: ../src/utils/pacat.c:113
msgid "Playback stream drained."
-msgstr ""
+msgstr "ÐоÑок воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑÑннелиÑован."
#: ../src/utils/pacat.c:123
msgid "Draining connection to server."
-msgstr ""
+msgstr "ТÑннелиÑование ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑеÑвеÑом."
#: ../src/utils/pacat.c:136
#, c-format
msgid "pa_stream_drain(): %s"
-msgstr ""
+msgstr "pa_stream_drain(): %s"
#: ../src/utils/pacat.c:159
#, c-format
msgid "pa_stream_write() failed: %s"
-msgstr ""
+msgstr "pa_stream_write() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:197
#, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr ""
+msgstr "pa_stream_begin_write() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr ""
+msgstr "pa_stream_peek() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:307
msgid "Stream successfully created."
-msgstr ""
+msgstr "ÐоÑок ÑÑпеÑно Ñоздан."
#: ../src/utils/pacat.c:310
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr ""
+msgstr "pa_stream_get_buffer_attr() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:314
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr ""
+msgstr "ÐоказаÑели бÑÑеÑа: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
#: ../src/utils/pacat.c:317
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr ""
+msgstr "ÐоказаÑели бÑÑеÑа: maxlength=%u, fragsize=%u"
#: ../src/utils/pacat.c:321
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr ""
+msgstr "ÐÑполÑзование Ñемплов '%s', ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² '%s'."
#: ../src/utils/pacat.c:325
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr ""
+msgstr "СоединÑн Ñ ÑÑÑÑойÑÑвом %s (%u, %sожидание)."
#: ../src/utils/pacat.c:335
#, c-format
msgid "Stream error: %s"
-msgstr ""
+msgstr "ÐÑибка поÑока: %s"
#: ../src/utils/pacat.c:345
#, c-format
msgid "Stream device suspended.%s"
-msgstr ""
+msgstr "ÐоÑок пÑиоÑÑановлен.%s"
#: ../src/utils/pacat.c:347
#, c-format
msgid "Stream device resumed.%s"
-msgstr ""
+msgstr "ÐоÑок возобновлÑн.%s"
#: ../src/utils/pacat.c:355
#, c-format
msgid "Stream underrun.%s"
-msgstr ""
+msgstr "ÐоÑок недогÑÑжен.%s"
#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream overrun.%s"
-msgstr ""
+msgstr "ÐоÑок пеÑеполнен.%s"
#: ../src/utils/pacat.c:369
#, c-format
msgid "Stream started.%s"
-msgstr ""
+msgstr "ÐоÑок запÑÑен.%s"
#: ../src/utils/pacat.c:376
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr ""
+msgstr "ÐоÑок пеÑемеÑÑн на ÑÑÑÑойÑÑво %s (%u, %sожидание).%s"
#: ../src/utils/pacat.c:376
msgid "not "
-msgstr ""
+msgstr "not "
#: ../src/utils/pacat.c:383
#, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr ""
+msgstr "ÐÑÑибÑÑÑ Ð±ÑÑеÑа поÑока измененÑ.%s"
#: ../src/utils/pacat.c:415
#, c-format
msgid "Connection established.%s"
-msgstr ""
+msgstr "Соединение ÑÑÑановлено.%s"
#: ../src/utils/pacat.c:418
#, c-format
msgid "pa_stream_new() failed: %s"
-msgstr ""
+msgstr "pa_stream_new() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:450
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr ""
+msgstr "pa_stream_connect_playback() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:456
#, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr ""
+msgstr "pa_stream_connect_record() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
#, c-format
msgid "Connection failure: %s"
-msgstr ""
+msgstr "ÐÑибка подклÑÑениÑ: %s"
#: ../src/utils/pacat.c:503
msgid "Got EOF."
-msgstr ""
+msgstr "ÐоÑÑигнÑÑ ÐºÐ¾Ð½ÐµÑ Ñайла."
#: ../src/utils/pacat.c:540
#, c-format
msgid "write() failed: %s"
-msgstr ""
+msgstr "write() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:561
msgid "Got signal, exiting."
-msgstr ""
+msgstr "Сигнал полÑÑен, вÑÑ
од."
#: ../src/utils/pacat.c:575
#, c-format
msgid "Failed to get latency: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð·Ð°Ð´ÐµÑжкÑ: %s"
#: ../src/utils/pacat.c:580
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr ""
+msgstr "ÐÑемÑ: %0.3f Ñ; задеÑжка: %0.0f мкÑ."
#: ../src/utils/pacat.c:599
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr ""
+msgstr "pa_stream_update_timing_info() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:609
#, c-format
@@ -1199,33 +1329,107 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
+"%s [options]\n"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+"\n"
+" -r, --record Create a connection for recording\n"
+" -p, --playback Create a connection for playback\n"
+"\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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
+" being connected to.\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"
+" --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"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
+" --raw Record/play raw PCM data.\n"
+" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --list-file-formats List available file formats.\n"
#: ../src/utils/pacat.c:731
#, c-format
@@ -1234,165 +1438,175 @@ msgid ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
msgstr ""
+"pacat %s\n"
+"СкомпилиÑовано Ñ libpulse %s\n"
+"СвÑзано Ñ libpulse %s\n"
#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
-msgstr ""
+msgstr "ÐевеÑное Ð¸Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñа '%s'"
#: ../src/utils/pacat.c:779
#, c-format
msgid "Invalid stream name '%s'"
-msgstr ""
+msgstr "ÐевеÑное Ð¸Ð¼Ñ Ð¿Ð¾Ñока '%s'"
#: ../src/utils/pacat.c:816
#, c-format
msgid "Invalid channel map '%s'"
-msgstr ""
+msgstr "ÐевеÑÐ½Ð°Ñ ÑÑ
ема каналов '%s'"
#: ../src/utils/pacat.c:845
#, c-format
msgid "Invalid latency specification '%s'"
-msgstr ""
+msgstr "ÐевеÑное знаÑение задеÑжки '%s'"
#: ../src/utils/pacat.c:852
#, c-format
msgid "Invalid process time specification '%s'"
-msgstr ""
+msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð²Ñемени пÑоÑеÑÑа '%s'"
#: ../src/utils/pacat.c:864
#, c-format
msgid "Invalid property '%s'"
-msgstr ""
+msgstr "ÐевеÑное ÑвойÑÑво '%s'"
#: ../src/utils/pacat.c:881
#, c-format
msgid "Unknown file format %s."
-msgstr ""
+msgstr "ÐеизвеÑÑнÑй ÑоÑÐ¼Ð°Ñ Ñайла %s."
#: ../src/utils/pacat.c:900
msgid "Invalid sample specification"
-msgstr ""
+msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ ÑÑмпла"
#: ../src/utils/pacat.c:910
#, c-format
msgid "open(): %s"
-msgstr ""
+msgstr "open(): %s"
#: ../src/utils/pacat.c:915
#, c-format
msgid "dup2(): %s"
-msgstr ""
+msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
msgid "Too many arguments."
-msgstr ""
+msgstr "СлиÑком много аÑгÑменÑов."
#: ../src/utils/pacat.c:933
msgid "Failed to generate sample specification for file."
-msgstr ""
+msgstr "ÐÑибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑпеÑиÑикаÑии ÑÑмпла Ð´Ð»Ñ Ñайла."
#: ../src/utils/pacat.c:953
msgid "Failed to open audio file."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ð°Ñдио Ñайл."
#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
msgstr ""
+"ÐÑедÑпÑеждение: Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ ÑÑмпла бÑÐ´ÐµÑ Ð¿ÐµÑезапиÑана "
+"ÑпеÑиÑикаÑией из Ñайла."
#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¾Ð¿ÑеделиÑÑ ÑпеÑиÑикаÑÐ¸Ñ ÑÑмпла из Ñайла."
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr ""
+msgstr "ÐÑедÑпÑеждение: не ÑдалоÑÑ Ð¾Ð¿ÑеделиÑÑ ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² из Ñайла."
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
-msgstr ""
+msgstr "СÑ
ема каналов не ÑооÑвеÑÑÑвÑÐµÑ ÑпеÑиÑикаÑии ÑÑмпла"
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
-msgstr ""
+msgstr "ÐÑедÑпÑеждение: не ÑдалоÑÑ Ð·Ð°Ð¿Ð¸ÑаÑÑ ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² в Ñайл."
#: ../src/utils/pacat.c:1008
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
+"ÐÑкÑÑÑие поÑока %s Ñо ÑпеÑиÑикаÑией ÑÑмплов '%s' и ÑÑ
емой каналов '%s'."
#: ../src/utils/pacat.c:1009
msgid "recording"
-msgstr ""
+msgstr "запиÑÑ"
#: ../src/utils/pacat.c:1009
msgid "playback"
-msgstr ""
+msgstr "воÑпÑоизведение"
#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
-msgstr ""
+msgstr "pa_mainloop_new() не ÑдалоÑÑ."
#: ../src/utils/pacat.c:1054
msgid "io_new() failed."
-msgstr ""
+msgstr "io_new() не ÑдалоÑÑ."
#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
-msgstr ""
+msgstr "pa_context_new() не ÑдалоÑÑ."
#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
-msgstr ""
+msgstr "pa_context_connect() не ÑдалоÑÑ: %s"
#: ../src/utils/pacat.c:1075
msgid "pa_context_rttime_new() failed."
-msgstr ""
+msgstr "pa_context_rttime_new() не ÑдалоÑÑ."
#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
-msgstr ""
+msgstr "pa_mainloop_run() не ÑдалоÑÑ."
#: ../src/utils/pasuspender.c:81
#, c-format
msgid "fork(): %s\n"
-msgstr ""
+msgstr "fork(): %s\n"
#: ../src/utils/pasuspender.c:92
#, c-format
msgid "execvp(): %s\n"
-msgstr ""
+msgstr "execvp(): %s\n"
#: ../src/utils/pasuspender.c:109
#, c-format
msgid "Failure to suspend: %s\n"
-msgstr ""
+msgstr "Ðе ÑдаÑÑÑÑ Ð¿ÑиоÑÑановиÑÑ: %s\n"
#: ../src/utils/pasuspender.c:124
#, c-format
msgid "Failure to resume: %s\n"
-msgstr ""
+msgstr "Ðе ÑдаÑÑÑÑ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ: %s\n"
#: ../src/utils/pasuspender.c:147
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
+"ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ: ÐÑдио ÑеÑÐ²ÐµÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑм, не пÑиоÑÑанавливаеÑÑÑ.\n"
#: ../src/utils/pasuspender.c:159
#, c-format
msgid "Connection failure: %s\n"
-msgstr ""
+msgstr "ÐÑибка ÑоединениÑ: %s\n"
#: ../src/utils/pasuspender.c:176
#, c-format
msgid "Got SIGINT, exiting.\n"
-msgstr ""
+msgstr "ÐолÑÑен Ñигнал Ð´Ð»Ñ Ð¾ÑÑановки, вÑÑ
од.\n"
#: ../src/utils/pasuspender.c:194
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr ""
+msgstr "ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ: ÐоÑеÑний пÑоÑеÑÑ Ð¾ÑменÑн по ÑÐ¸Ð³Ð½Ð°Ð»Ñ %u\n"
#: ../src/utils/pasuspender.c:212
#, c-format
@@ -1401,9 +1615,17 @@ 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"
+"\n"
+" -h, --help Show this help\n"
+" --version Show version\n"
+" -s, --server=SERVER The name of the server to connect "
+"to\n"
+"\n"
#: ../src/utils/pasuspender.c:248
#, c-format
@@ -1412,46 +1634,49 @@ msgid ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
msgstr ""
+"pasuspender %s\n"
+"СкомпилиÑовано Ñ libpulse %s\n"
+"СвÑзано Ñ libpulse %s\n"
#: ../src/utils/pasuspender.c:277
#, c-format
msgid "pa_mainloop_new() failed.\n"
-msgstr ""
+msgstr "pa_mainloop_new() не ÑдалоÑÑ.\n"
#: ../src/utils/pasuspender.c:290
#, c-format
msgid "pa_context_new() failed.\n"
-msgstr ""
+msgstr "pa_context_new() не ÑдалоÑÑ.\n"
#: ../src/utils/pasuspender.c:298
#, c-format
msgid "pa_mainloop_run() failed.\n"
-msgstr ""
+msgstr "pa_mainloop_run() не ÑдалоÑÑ.\n"
#: ../src/utils/pactl.c:135
#, c-format
msgid "Failed to get statistics: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑаÑиÑÑикÑ: %s"
#: ../src/utils/pactl.c:141
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
-msgstr ""
+msgstr "СейÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ: %u блоков ÑодеÑжаÑиÑ
вÑего %s байÑ.\n"
#: ../src/utils/pactl.c:144
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr ""
+msgstr "ÐÑделено за вÑÑ Ð²ÑемÑ: %u блоков ÑодеÑжаÑиÑ
вÑего %s байÑ.\n"
#: ../src/utils/pactl.c:147
#, c-format
msgid "Sample cache size: %s\n"
-msgstr ""
+msgstr "Ð Ð°Ð·Ð¼ÐµÑ ÐºÑÑа ÑÑмплов: %s\n"
#: ../src/utils/pactl.c:156
#, c-format
msgid "Failed to get server information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑеÑвеÑе: %s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1466,11 +1691,20 @@ msgid ""
"Default Source: %s\n"
"Cookie: %08x\n"
msgstr ""
+"ÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ: %s\n"
+"ÐÐ¼Ñ Ñ
оÑÑа: %s\n"
+"ÐÐ¼Ñ ÑеÑвеÑа: %s\n"
+"ÐеÑÑÐ¸Ñ ÑеÑвеÑа: %s\n"
+"СпеÑиÑикаÑÐ¸Ñ ÑÑмплов по-ÑмолÑаниÑ: %s\n"
+"СÑ
ема каналов по-ÑмолÑаниÑ: %s\n"
+"ÐÑдиовÑÑ
од по-ÑмолÑаниÑ: %s\n"
+"ÐÑÑоÑник по-ÑмолÑаниÑ: %s\n"
+"Cookie: %08x\n"
#: ../src/utils/pactl.c:205
#, c-format
msgid "Failed to get sink information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± аÑдиовÑÑ
оде: %s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1493,21 +1727,38 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ÐÑдиовÑÑ
од #%u\n"
+"\tСоÑÑоÑние: %s\n"
+"\tÐмÑ: %s\n"
+"\tÐпиÑание: %s\n"
+"\tÐÑайвеÑ: %s\n"
+"\tСпеÑиÑикаÑÐ¸Ñ ÑÑмплов: %s\n"
+"\tСÑ
ема каналов: %s\n"
+"\tРодиÑелÑÑкий модÑлÑ: %u\n"
+"\tÐÑклÑÑиÑÑ: %s\n"
+"\tÐÑомкоÑÑÑ: %s%s%s\n"
+"\t Ð±Ð°Ð»Ð°Ð½Ñ %0.2f\n"
+"\tÐÐ°Ð·Ð¾Ð²Ð°Ñ Ð³ÑомкоÑÑÑ: %s%s%s\n"
+"\tÐониÑÐ¾Ñ Ð¸ÑÑоÑника: %s\n"
+"\tÐадеÑжка: %0.0f мкÑ, наÑÑÑоиÑÑ %0.0f мкÑ\n"
+"\tФлаги: %s%s%s%s%s%s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
-msgstr ""
+msgstr "\tÐоÑÑÑ:\n"
#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
#, c-format
msgid "\tActive Port: %s\n"
-msgstr ""
+msgstr "\tÐкÑивнÑй поÑÑ: %s\n"
#: ../src/utils/pactl.c:297
#, c-format
msgid "Failed to get source information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± иÑÑоÑнике: %s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1530,6 +1781,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ÐÑÑоÑник #%u\n"
+"\tСоÑÑоÑние: %s\n"
+"\tÐмÑ: %s\n"
+"\tÐпиÑание: %s\n"
+"\tÐÑайвеÑ: %s\n"
+"\tСпеÑиÑикаÑÐ¸Ñ ÑÑмплов: %s\n"
+"\tСÑ
ема каналов: %s\n"
+"\tРодиÑелÑÑкий модÑлÑ: %u\n"
+"\tÐÑклÑÑиÑÑ: %s\n"
+"\tÐÑомкоÑÑÑ: %s%s%s\n"
+"\t Ð±Ð°Ð»Ð°Ð½Ñ %0.2f\n"
+"\tÐÐ°Ð·Ð¾Ð²Ð°Ñ Ð³ÑомкоÑÑÑ: %s%s%s\n"
+"\tÐониÑÐ¾Ñ Ð°ÑдиовÑÑ
ода: %s\n"
+"\tÐадеÑжка: %0.0f мкÑ, наÑÑÑоиÑÑ %0.0f мкÑ\n"
+"\tФлаги: %s%s%s%s%s%s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
@@ -1537,12 +1805,12 @@ msgstr ""
#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
-msgstr ""
+msgstr "н/д"
#: ../src/utils/pactl.c:375
#, c-format
msgid "Failed to get module information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ модÑле: %s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1554,11 +1822,17 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ÐодÑÐ»Ñ #%u\n"
+"\tÐмÑ: %s\n"
+"\tÐÑгÑменÑ: %s\n"
+"\tСÑÑÑÑик иÑполÑзованиÑ: %s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:412
#, c-format
msgid "Failed to get client information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ клиенÑе: %s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1569,11 +1843,16 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ÐÐ»Ð¸ÐµÐ½Ñ #%u\n"
+"\tÐÑайвеÑ: %s\n"
+"\tРодиÑелÑÑкий модÑлÑ: %s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:447
#, c-format
msgid "Failed to get card information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ каÑÑе: %s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1585,21 +1864,27 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ÐаÑÑа #%u\n"
+"\tÐмÑ: %s\n"
+"\tÐÑайвеÑ: %s\n"
+"\tРодиÑелÑÑкий модÑлÑ: %s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:479
#, c-format
msgid "\tProfiles:\n"
-msgstr ""
+msgstr "\tÐÑоÑили:\n"
#: ../src/utils/pactl.c:485
#, c-format
msgid "\tActive Profile: %s\n"
-msgstr ""
+msgstr "\tÐкÑивнÑй пÑоÑилÑ: %s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вводе аÑдиовÑÑ
ода: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1621,11 +1906,27 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"Ðвод аÑдиовÑÑ
ода #%u\n"
+"\tÐÑайвеÑ: %s\n"
+"\tРодиÑелÑÑкий модÑлÑ: %s\n"
+"\tÐлиенÑ: %s\n"
+"\tÐÑдиовÑÑ
од: %u\n"
+"\tСпеÑиÑикаÑÐ¸Ñ ÑÑмплов: %s\n"
+"\tСÑ
ема каналов: %s\n"
+"\tÐÑклÑÑиÑÑ: %s\n"
+"\tÐÑомкоÑÑÑ: %s\n"
+"\t %s\n"
+"\t Ð±Ð°Ð»Ð°Ð½Ñ %0.2f\n"
+"\tÐадеÑжка бÑÑеÑа: %0.0f мкÑ\n"
+"\tÐадеÑжка аÑдиовÑÑ
ода: %0.0f usec\n"
+"\tÐеÑод ÑеÑÑмплиÑованиÑ: %s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:554
#, c-format
msgid "Failed to get source output information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вÑÑ
оде иÑÑоÑника: %s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1643,11 +1944,23 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"ÐÑÑ
од иÑÑоÑника #%u\n"
+"\tÐÑайвеÑ: %s\n"
+"\tРодиÑелÑÑкий модÑлÑ: %s\n"
+"\tÐлиенÑ: %s\n"
+"\tÐÑÑоÑник: %u\n"
+"\tСпеÑиÑикаÑÐ¸Ñ ÑÑмплов: %s\n"
+"\tСÑ
ема каналов: %s\n"
+"\tÐадеÑжка бÑÑеÑа: %0.0f мкÑ\n"
+"\tÐадеÑжка иÑÑоÑника: %0.0f мкÑ\n"
+"\tÐеÑод ÑеÑÑмплиÑованиÑ: %s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:605
#, c-format
msgid "Failed to get sample information: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑÑмпле: %s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1666,24 +1979,37 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
+"СÑмпл #%u\n"
+"\tÐмÑ: %s\n"
+"\tСпеÑиÑикаÑÐ¸Ñ ÑÑмпла: %s\n"
+"\tСÑ
ема каналов: %s\n"
+"\tÐÑомкоÑÑÑ: %s\n"
+"\t %s\n"
+"\t Ð±Ð°Ð»Ð°Ð½Ñ %0.2f\n"
+"\tÐлиÑелÑноÑÑÑ: %0.1fs\n"
+"\tРазмеÑ: %s\n"
+"\tÐÑложеннÑй (lazy): %s\n"
+"\tÐÐ¼Ñ Ñайла: %s\n"
+"\tСвойÑÑва:\n"
+"\t\t%s\n"
#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
#, c-format
msgid "Failure: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ: %s"
#: ../src/utils/pactl.c:687
#, c-format
msgid "Failed to upload sample: %s"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ ÑÑмпл: %s"
#: ../src/utils/pactl.c:704
msgid "Premature end of file"
-msgstr ""
+msgstr "ÐÑеждевÑеменнÑй ÐºÐ¾Ð½ÐµÑ Ñайла"
#: ../src/utils/pactl.c:863
msgid "Got SIGINT, exiting."
-msgstr ""
+msgstr "ÐолÑÑен Ñигнал Ð´Ð»Ñ Ð¾ÑÑановки, вÑÑ
од."
#: ../src/utils/pactl.c:869
#, c-format
@@ -1713,9 +2039,40 @@ 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"
+"%s [options] exit\n"
+"%s [options] upload-sample FILENAME [NAME]\n"
+"%s [options] play-sample NAME [SINK]\n"
+"%s [options] remove-sample NAME\n"
+"%s [options] move-sink-input SINKINPUT SINK\n"
+"%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
+"%s [options] load-module NAME [ARGS ...]\n"
+"%s [options] unload-module MODULE\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"
+"%s [options] set-sink-port SINK PORT\n"
+"%s [options] set-source-port SOURCE PORT\n"
+"%s [options] set-sink-volume SINK VOLUME\n"
+"%s [options] set-source-volume SOURCE VOLUME\n"
+"%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
+"%s [options] set-sink-mute SINK 1|0\n"
+"%s [options] set-source-mute SOURCE 1|0\n"
+"%s [options] set-sink-input-mute SINKINPUT 1|0\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"
#: ../src/utils/pactl.c:933
#, c-format
@@ -1724,104 +2081,114 @@ msgid ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
msgstr ""
+"pactl %s\n"
+"СкомпилиÑовано Ñ libpulse %s\n"
+"СвÑзано Ñ libpulse %s\n"
#: ../src/utils/pactl.c:979
msgid "Please specify a sample file to load"
-msgstr ""
+msgstr "ÐожалÑйÑÑа ÑкажиÑе Ñайл ÑÑмпла Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки"
#: ../src/utils/pactl.c:992
msgid "Failed to open sound file."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ð·Ð²Ñковой Ñайл."
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
-msgstr ""
+msgstr "ÐÑедÑпÑеждение: не ÑдалоÑÑ Ð¾Ð¿ÑеделиÑÑ ÑпеÑиÑикаÑии ÑÑмплов из Ñайла."
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ ÑÑмпла Ð´Ð»Ñ Ð²Ð¾ÑпÑоизведениÑ"
#: ../src/utils/pactl.c:1026
msgid "You have to specify a sample name to remove"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ ÑÑмпла Ð´Ð»Ñ ÑдалениÑ"
#: ../src/utils/pactl.c:1035
msgid "You have to specify a sink input index and a sink"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода и аÑдиовÑÑ
од"
#: ../src/utils/pactl.c:1045
msgid "You have to specify a source output index and a source"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñвода иÑÑоÑника и иÑÑоÑник"
#: ../src/utils/pactl.c:1060
msgid "You have to specify a module name and arguments."
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¸ аÑгÑменÑÑ"
#: ../src/utils/pactl.c:1080
msgid "You have to specify a module index"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑлÑ"
#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
+"ÐÑ Ð½Ðµ можеÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ одного аÑдиовÑÑ
ода. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое "
+"знаÑение."
#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
msgstr ""
+"ÐÑ Ð½Ðµ можеÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ одного иÑÑоÑника. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое "
+"знаÑение."
#: ../src/utils/pactl.c:1115
msgid "You have to specify a card name/index and a profile name"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ°ÑÑÑ Ð¸ Ð¸Ð¼Ñ Ð¿ÑоÑилÑ"
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиовÑÑ
ода и Ð¸Ð¼Ñ Ð¿Ð¾ÑÑа"
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника и Ð¸Ð¼Ñ Ð¿Ð¾ÑÑа"
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиовÑÑ
ода и гÑомкоÑÑÑ"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
msgid "Invalid volume specification"
-msgstr ""
+msgstr "ÐевеÑное знаÑение гÑомкоÑÑи"
#: ../src/utils/pactl.c:1166
msgid "You have to specify a source name/index and a volume"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника и гÑомкоÑÑÑ"
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода и гÑомкоÑÑÑ"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr ""
+msgstr "ÐевеÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода"
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиовÑÑ
ода и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr ""
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
-msgstr ""
+msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ввода аÑдиовÑÑ
ода"
#: ../src/utils/pactl.c:1262
msgid "No valid command specified."
-msgstr ""
+msgstr "Ðе ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¿ÑавилÑнÑе командÑ."
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -1830,349 +2197,377 @@ 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 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"
+" -r Remove PulseAudio data from X11 display\n"
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr ""
+msgstr "ÐÑибка ÑазбоÑа командной ÑÑÑоки.\n"
#: ../src/utils/pax11publish.c:108
#, c-format
msgid "Server: %s\n"
-msgstr ""
+msgstr "СеÑвеÑ: %s\n"
#: ../src/utils/pax11publish.c:110
#, c-format
msgid "Source: %s\n"
-msgstr ""
+msgstr "ÐÑÑоÑник: %s\n"
#: ../src/utils/pax11publish.c:112
#, c-format
msgid "Sink: %s\n"
-msgstr ""
+msgstr "ÐÑдиовÑÑ
од: %s\n"
#: ../src/utils/pax11publish.c:114
#, c-format
msgid "Cookie: %s\n"
-msgstr ""
+msgstr "Cookie: %s\n"
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑазобÑаÑÑ Ð´Ð°Ð½Ð½Ñе cookie\n"
#: ../src/utils/pax11publish.c:137
#, c-format
msgid "Failed to save cookie data\n"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑоÑ
ÑаниÑÑ Ð´Ð°Ð½Ð½Ñе cookie\n"
#: ../src/utils/pax11publish.c:152
#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ñайл конÑигÑÑаÑии клиенÑа.\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿ÑоÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе конÑигÑÑаÑии окÑÑжениÑ.\n"
#: ../src/utils/pax11publish.c:174
#, c-format
msgid "Failed to get FQDN.\n"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° (FQDN).\n"
#: ../src/utils/pax11publish.c:194
#, c-format
msgid "Failed to load cookie data\n"
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð´Ð°Ð½Ð½Ñе cookie\n"
#: ../src/utils/pax11publish.c:211
#, c-format
msgid "Not yet implemented.\n"
-msgstr ""
+msgstr "ÐÑÑ Ð½Ðµ вÑполнено.\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
+"ÐÐµÑ Ð·Ð°Ð¿ÑÑенного демона PulseAudio или не запÑÑен в каÑеÑÑве ÑеÑÑионного "
+"демона."
#: ../src/utils/pacmd.c:74
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-msgstr ""
+msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
#: ../src/utils/pacmd.c:91
#, c-format
msgid "connect(): %s"
-msgstr ""
+msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr ""
+msgstr "Ðе ÑдалоÑÑ ÑбиÑÑ Ð´ÐµÐ¼Ð¾Ð½ PulseAudio."
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
-msgstr ""
+msgstr "Ðемон не оÑвеÑаеÑ."
#: ../src/utils/pacmd.c:161
#, c-format
msgid "poll(): %s"
-msgstr ""
+msgstr "poll(): %s"
#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
#, c-format
msgid "read(): %s"
-msgstr ""
+msgstr "read(): %s"
#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
#, c-format
msgid "write(): %s"
-msgstr ""
+msgstr "write(): %s"
#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
-msgstr ""
+msgstr "Cannot access autospawn lock."
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
-msgstr ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA ÑазбÑдила Ð½Ð°Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи новÑÑ
даннÑÑ
в ÑÑÑÑойÑÑво, но на Ñамом деле "
+"пиÑаÑÑ Ð±Ñло неÑего!\n"
+"СкоÑее вÑего ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа ÑообÑиÑе об ÑÑой "
+"пÑоблеме ÑазÑабоÑÑикам ALSA.\n"
+"ÐÑ Ð¿ÑоÑнÑлиÑÑ Ñ POLLOUT set -- однако поÑледÑÑÑее snd_pcm_avail() веÑнÑло 0 "
+"или дÑÑгое знаÑение < min_avail."
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
-msgstr ""
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA ÑазбÑдила Ð½Ð°Ñ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð½Ð¾Ð²ÑÑ
даннÑÑ
из ÑÑÑÑойÑÑва, но на Ñамом деле "
+"ÑиÑаÑÑ Ð±Ñло неÑего!\n"
+"СкоÑее вÑего ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа ÑообÑиÑе об ÑÑой "
+"пÑоблеме ÑазÑабоÑÑикам ALSA.\n"
+"ÐÑ Ð¿ÑоÑнÑлиÑÑ Ñ POLLOUT set -- однако поÑледÑÑÑее snd_pcm_avail() веÑнÑло 0 "
+"или дÑÑгое знаÑение < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
#: ../src/modules/alsa/alsa-mixer.c:2931
msgid "Off"
-msgstr ""
+msgstr "ÐÑклÑÑено"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
msgid "High Fidelity Playback (A2DP)"
-msgstr ""
+msgstr "ÐоÑпÑоизведение вÑÑокой ÑоÑноÑÑи (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
msgid "High Fidelity Capture (A2DP)"
-msgstr ""
+msgstr "ÐапиÑÑ Ð²ÑÑокой ÑоÑноÑÑи (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr ""
+msgstr "ÐÑплекÑÐ½Ð°Ñ ÑелеÑÐ¾Ð½Ð¸Ñ (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
-msgstr ""
+msgstr "ÐвÑковой ÑеÑÐ²ÐµÑ PulseAudio"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
msgid "Output Devices"
-msgstr ""
+msgstr "УÑÑÑойÑÑва вÑвода"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
msgid "Input Devices"
-msgstr ""
+msgstr "УÑÑÑойÑÑва ввода"
#: ../src/modules/module-rygel-media-server.c:774
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "ÐÑдио на @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
msgid "Input"
-msgstr ""
+msgstr "Ðвод"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
-msgstr ""
+msgstr "Ðок-ÑÑанÑÐ¸Ñ Ð²Ð²Ð¾Ð´Ð°"
#: ../src/modules/alsa/alsa-mixer.c:1703
msgid "Docking Station Microphone"
-msgstr ""
+msgstr "Ðок-ÑÑанÑÐ¸Ñ Ð¼Ð¸ÐºÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1704
msgid "Line-In"
-msgstr ""
+msgstr "ÐинейнÑй вÑ
од"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "ÐикÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "ÐнеÑний микÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1707
msgid "Internal Microphone"
-msgstr ""
+msgstr "ÐÑÑÑоеннÑй микÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "Радио"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "Ðидео"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "ÐвÑомаÑиÑеÑÐºÐ°Ñ ÑегÑлиÑовка ÑÑилениÑ"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "ÐÐµÑ Ð°Ð²ÑомаÑиÑеÑкой ÑегÑлиÑовки ÑÑилениÑ"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "УÑиление"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "ÐÐµÑ ÑÑилениÑ"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "УÑилиÑелÑ"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "ÐÐµÑ ÑÑилиÑелÑ"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
-msgstr ""
+msgstr "ÐналоговÑй ввод"
#: ../src/modules/alsa/alsa-mixer.c:1774
msgid "Analog Microphone"
-msgstr ""
+msgstr "ÐналоговÑй микÑоÑон"
#: ../src/modules/alsa/alsa-mixer.c:1775
msgid "Analog Line-In"
-msgstr ""
+msgstr "ÐналоговÑй линейнÑй вÑ
од"
#: ../src/modules/alsa/alsa-mixer.c:1776
msgid "Analog Radio"
-msgstr ""
+msgstr "Ðналоговое Ñадио"
#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Video"
-msgstr ""
+msgstr "Ðналоговое видео"
#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Output"
-msgstr ""
+msgstr "ÐналоговÑй вÑвод"
#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Headphones"
-msgstr ""
+msgstr "ÐналоговÑе наÑÑники"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "ÐналоговÑй вÑвод (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Mono Output"
-msgstr ""
+msgstr "ÐналоговÑй вÑвод моно"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
-msgstr ""
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
-msgstr ""
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "Ðналоговое моно"
#: ../src/modules/alsa/alsa-mixer.c:2791
msgid "Analog Stereo"
-msgstr ""
+msgstr "Ðналоговое ÑÑеÑео"
#: ../src/modules/alsa/alsa-mixer.c:2792
msgid "Analog Surround 2.1"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
msgid "Analog Surround 3.0"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
msgid "Analog Surround 3.1"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Surround 4.1"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 5.0"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 5.1"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 6.0"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 6.1"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 7.0"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
-msgstr ""
+msgstr "ÐналоговÑй обÑÑмнÑй 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "ЦиÑÑовое ÑÑеÑео (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "ЦиÑÑовой обÑÑмнÑй 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "ЦиÑÑовой обÑÑмнÑй 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "ЦиÑÑовой обÑÑмнÑй 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "ЦиÑÑовое ÑÑеÑео (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "ÐналоговÑй моно дÑплекÑ"
#: ../src/modules/alsa/alsa-mixer.c:2929
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "ÐналоговÑй ÑÑеÑео дÑплекÑ"
#: ../src/modules/alsa/alsa-mixer.c:2930
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "ЦиÑÑовой ÑÑеÑео дÑÐ¿Ð»ÐµÐºÑ (IEC958)"
commit c72c90bc71091fbace6f967c63e7a9dc8af8f264
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 20:48:27 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 4c408f0..010eb12 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-24 06:51+0000\n"
-"PO-Revision-Date: 2010-01-24 23:33+0300\n"
+"PO-Revision-Date: 2010-01-24 23:47+0300\n"
"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
"Language-Team: Russian <->\n"
"MIME-Version: 1.0\n"
@@ -738,7 +738,7 @@ msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr ""
-"Ð Ñказанной ÑÑ
еме каналов ÑиÑло каналов оÑлиÑаеÑÑÑ Ð¾Ñ ÑиÑла каналов по-"
+"Ð Ñказанной ÑÑ
еме каналов ÑиÑло каналов оÑлиÑаеÑÑÑ Ð¾Ñ ÑиÑла каналов по "
"ÑмолÑаниÑ."
#: ../src/daemon/daemon-conf.c:638
@@ -1695,10 +1695,10 @@ msgstr ""
"ÐÐ¼Ñ Ñ
оÑÑа: %s\n"
"ÐÐ¼Ñ ÑеÑвеÑа: %s\n"
"ÐеÑÑÐ¸Ñ ÑеÑвеÑа: %s\n"
-"СпеÑиÑикаÑÐ¸Ñ ÑÑмплов по-ÑмолÑаниÑ: %s\n"
-"СÑ
ема каналов по-ÑмолÑаниÑ: %s\n"
-"ÐÑдиовÑÑ
од по-ÑмолÑаниÑ: %s\n"
-"ÐÑÑоÑник по-ÑмолÑаниÑ: %s\n"
+"СпеÑиÑикаÑÐ¸Ñ ÑÑмплов по ÑмолÑаниÑ: %s\n"
+"СÑ
ема каналов по ÑмолÑаниÑ: %s\n"
+"ÐÑдиовÑÑ
од по ÑмолÑаниÑ: %s\n"
+"ÐÑÑоÑник по ÑмолÑаниÑ: %s\n"
"Cookie: %08x\n"
#: ../src/utils/pactl.c:205
commit a8a5c39b93727685a5b4f8a686f9c7bac7cccdc9
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 21:09:52 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 010eb12..d800df4 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-24 06:51+0000\n"
-"PO-Revision-Date: 2010-01-24 23:47+0300\n"
+"PO-Revision-Date: 2010-01-25 00:09+0300\n"
"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
"Language-Team: Russian <->\n"
"MIME-Version: 1.0\n"
@@ -2354,11 +2354,11 @@ msgstr "ÐÑклÑÑено"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
msgid "High Fidelity Playback (A2DP)"
-msgstr "ÐоÑпÑоизведение вÑÑокой ÑоÑноÑÑи (A2DP)"
+msgstr "ÐоÑпÑоизведение вÑÑокого каÑеÑÑва (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
msgid "High Fidelity Capture (A2DP)"
-msgstr "ÐапиÑÑ Ð²ÑÑокой ÑоÑноÑÑи (A2DP)"
+msgstr "ÐапиÑÑ Ð²ÑÑокого каÑеÑÑва (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
commit acb1773dfcff8c6d378e2003b1c4006f206921ab
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 24 21:20:17 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index d800df4..1927254 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-24 06:51+0000\n"
-"PO-Revision-Date: 2010-01-25 00:09+0300\n"
+"PO-Revision-Date: 2010-01-25 00:19+0300\n"
"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
"Language-Team: Russian <->\n"
"MIME-Version: 1.0\n"
@@ -176,7 +176,7 @@ msgstr "УÑпеÑное Ñдаление пÑивилегий админиÑÑ
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr "РаÑÑиÑеннÑй Ñежим не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑÑоÑме."
+msgstr "РаÑÑиÑеннÑй ÑиÑÑемнÑй Ñежим не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑÑоÑме."
#: ../src/daemon/main.c:297
#, c-format
@@ -215,7 +215,7 @@ msgstr "ÐеобÑ
Ð¾Ð´Ð¸Ð¼Ñ Ð¿Ñава админиÑÑÑаÑоÑа."
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
-msgstr "--start не поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑлеменÑов ÑиÑÑемÑ."
+msgstr "--start не поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑиÑÑемнÑÑ
ÑлеменÑов."
#: ../src/daemon/main.c:583
msgid "Running in system mode, but --disallow-exit not set!"
commit 8b27e2c1fb620ecdf137490af1743ba25b72c857
Author: Leonid Kurbatov <llenchikk at rambler.ru>
Date: Sun Jan 31 12:49:55 2010 +0000
l10n: Updates to Russian (ru) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/ru.po b/po/ru.po
index 1927254..cb109ef 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-24 06:51+0000\n"
-"PO-Revision-Date: 2010-01-25 00:19+0300\n"
+"PO-Revision-Date: 2010-01-31 15:49+0300\n"
"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
"Language-Team: Russian <->\n"
"MIME-Version: 1.0\n"
@@ -63,7 +63,7 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
msgstr ""
-"ÐÑегда оÑÑавлÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑдиовÑÑ
од загÑÑженнÑм, даже еÑли он "
+"ÐÑегда оÑÑавлÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑдиопÑиÑмник загÑÑженнÑм, даже еÑли он "
"неопÑеделÑн."
#: ../src/modules/module-always-sink.c:83
@@ -72,7 +72,7 @@ msgstr "ФикÑивнÑй вÑÑ
од"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
-msgstr "ÐиÑÑÑалÑнÑй LADSPA аÑдиовÑÑ
од"
+msgstr "ÐиÑÑÑалÑнÑй LADSPA аÑдиопÑиÑмник"
#: ../src/modules/module-ladspa-sink.c:53
msgid ""
@@ -82,15 +82,15 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
-"sink_name=<Ð¸Ð¼Ñ Ð°ÑдиовÑÑ
ода> sink_properties=<ÑвойÑÑва аÑдиовÑÑ
ода> "
-"master=<Ð¸Ð¼Ñ Ð°ÑдиовÑÑ
ода Ð´Ð»Ñ ÑилÑÑÑаÑии> format=<ÑоÑмаÑ> rate=<ÑаÑÑоÑа> "
+"sink_name=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника> sink_properties=<ÑвойÑÑва аÑдиопÑиÑмника> "
+"master=<Ð¸Ð¼Ñ Ð°ÑдиопÑиÑмника Ð´Ð»Ñ ÑилÑÑÑаÑии> format=<ÑоÑмаÑ> rate=<ÑаÑÑоÑа> "
"channels=<ÑиÑло каналов> channel_map=<ÑÑ
ема каналов> plugin=<Ð¸Ð¼Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° "
"ladspa> label=<меÑка плагина ladspa> control=<ÑпиÑок вÑ
однÑÑ
знаÑений, "
"ÑазделÑннÑй запÑÑÑми>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr "СинÑ
ÑонизиÑованнÑй NULL аÑдиовÑÑ
од"
+msgstr "СинÑ
ÑонизиÑованнÑй NULL аÑдиопÑиÑмник"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
@@ -1697,14 +1697,14 @@ msgstr ""
"ÐеÑÑÐ¸Ñ ÑеÑвеÑа: %s\n"
"СпеÑиÑикаÑÐ¸Ñ ÑÑмплов по ÑмолÑаниÑ: %s\n"
"СÑ
ема каналов по ÑмолÑаниÑ: %s\n"
-"ÐÑдиовÑÑ
од по ÑмолÑаниÑ: %s\n"
+"ÐÑдиопÑиÑмник по ÑмолÑаниÑ: %s\n"
"ÐÑÑоÑник по ÑмолÑаниÑ: %s\n"
"Cookie: %08x\n"
#: ../src/utils/pactl.c:205
#, c-format
msgid "Failed to get sink information: %s"
-msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± аÑдиовÑÑ
оде: %s"
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± аÑдиопÑиÑмнике: %s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1727,7 +1727,7 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"ÐÑдиовÑÑ
од #%u\n"
+"ÐÑдиопÑиÑмник #%u\n"
"\tСоÑÑоÑние: %s\n"
"\tÐмÑ: %s\n"
"\tÐпиÑание: %s\n"
@@ -1793,7 +1793,7 @@ msgstr ""
"\tÐÑомкоÑÑÑ: %s%s%s\n"
"\t Ð±Ð°Ð»Ð°Ð½Ñ %0.2f\n"
"\tÐÐ°Ð·Ð¾Ð²Ð°Ñ Ð³ÑомкоÑÑÑ: %s%s%s\n"
-"\tÐониÑÐ¾Ñ Ð°ÑдиовÑÑ
ода: %s\n"
+"\tÐониÑÐ¾Ñ Ð°ÑдиопÑиÑмника: %s\n"
"\tÐадеÑжка: %0.0f мкÑ, наÑÑÑоиÑÑ %0.0f мкÑ\n"
"\tФлаги: %s%s%s%s%s%s\n"
"\tСвойÑÑва:\n"
@@ -1884,7 +1884,7 @@ msgstr "\tÐкÑивнÑй пÑоÑилÑ: %s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вводе аÑдиовÑÑ
ода: %s"
+msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вводе аÑдиопÑиÑмника: %s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1906,11 +1906,11 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
-"Ðвод аÑдиовÑÑ
ода #%u\n"
+"Ðвод аÑдиопÑиÑмника #%u\n"
"\tÐÑайвеÑ: %s\n"
"\tРодиÑелÑÑкий модÑлÑ: %s\n"
"\tÐлиенÑ: %s\n"
-"\tÐÑдиовÑÑ
од: %u\n"
+"\tÐÑдиопÑиÑмник: %u\n"
"\tСпеÑиÑикаÑÐ¸Ñ ÑÑмплов: %s\n"
"\tСÑ
ема каналов: %s\n"
"\tÐÑклÑÑиÑÑ: %s\n"
@@ -1918,7 +1918,7 @@ msgstr ""
"\t %s\n"
"\t Ð±Ð°Ð»Ð°Ð½Ñ %0.2f\n"
"\tÐадеÑжка бÑÑеÑа: %0.0f мкÑ\n"
-"\tÐадеÑжка аÑдиовÑÑ
ода: %0.0f usec\n"
+"\tÐадеÑжка аÑдиопÑиÑмника: %0.0f usec\n"
"\tÐеÑод ÑеÑÑмплиÑованиÑ: %s\n"
"\tСвойÑÑва:\n"
"\t\t%s\n"
@@ -2107,7 +2107,7 @@ msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ ÑÑмпла Ð´Ð»Ñ Ñдален
#: ../src/utils/pactl.c:1035
msgid "You have to specify a sink input index and a sink"
-msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода и аÑдиовÑÑ
од"
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника и аÑдиопÑиÑмник"
#: ../src/utils/pactl.c:1045
msgid "You have to specify a source output index and a source"
@@ -2125,8 +2125,8 @@ msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑлÑ"
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-"ÐÑ Ð½Ðµ можеÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ одного аÑдиовÑÑ
ода. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое "
-"знаÑение."
+"ÐÑ Ð½Ðµ можеÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ одного аÑдиопÑиÑмника. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ "
+"логиÑеÑкое знаÑение."
#: ../src/utils/pactl.c:1103
msgid ""
@@ -2142,7 +2142,7 @@ msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ°ÑÑÑ Ð¸ им
#: ../src/utils/pactl.c:1126
msgid "You have to specify a sink name/index and a port name"
-msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиовÑÑ
ода и Ð¸Ð¼Ñ Ð¿Ð¾ÑÑа"
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиопÑиÑмника и Ð¸Ð¼Ñ Ð¿Ð¾ÑÑа"
#: ../src/utils/pactl.c:1137
msgid "You have to specify a source name/index and a port name"
@@ -2150,7 +2150,7 @@ msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника
#: ../src/utils/pactl.c:1149
msgid "You have to specify a sink name/index and a volume"
-msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиовÑÑ
ода и гÑомкоÑÑÑ"
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиопÑиÑмника и гÑомкоÑÑÑ"
#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
@@ -2164,15 +2164,15 @@ msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника
#: ../src/utils/pactl.c:1183
msgid "You have to specify a sink input index and a volume"
-msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода и гÑомкоÑÑÑ"
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника и гÑомкоÑÑÑ"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
-msgstr "ÐевеÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода"
+msgstr "ÐевеÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника"
#: ../src/utils/pactl.c:1204
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиовÑÑ
ода и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиопÑиÑмника и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
#: ../src/utils/pactl.c:1221
msgid "You have to specify a source name/index and a mute boolean"
@@ -2180,11 +2180,11 @@ msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника
#: ../src/utils/pactl.c:1238
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиовÑÑ
ода и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
+msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
-msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ввода аÑдиовÑÑ
ода"
+msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ввода аÑдиопÑиÑмника"
#: ../src/utils/pactl.c:1262
msgid "No valid command specified."
@@ -2227,7 +2227,7 @@ msgstr "ÐÑÑоÑник: %s\n"
#: ../src/utils/pax11publish.c:112
#, c-format
msgid "Sink: %s\n"
-msgstr "ÐÑдиовÑÑ
од: %s\n"
+msgstr "ÐÑдиопÑиÑмник: %s\n"
#: ../src/utils/pax11publish.c:114
#, c-format
commit f9af65bba3f8222931671e0287456be4b12c6087
Author: zerng07 <pswo10680 at gmail.com>
Date: Fri Feb 5 13:34:24 2010 +0000
l10n: Updates to Chinese (Taiwan) (zh_TW) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 4f730f8..37aa062 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,51 +1,46 @@
-# translation of pulseaudio.master-tx.pulseaudio.po to Traditional Chinese
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# Chester Cheng <ccheng@ç´
帽å>, 2009.
+# Cheng-Chia Tseng <pswo10680 at gmail.com>, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
+"Project-Id-Version: upstream-translations.pulseaudio.zh_TW\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-10 02:33+0000\n"
-"PO-Revision-Date: 2009-12-10 14:18+1000\n"
-"Last-Translator: Chester Cheng <ccheng@ç´
帽å>\n"
-"Language-Team: Traditional Chinese <zh_TW at li.org>\n"
+"POT-Creation-Date: 2010-02-05 08:05+0000\n"
+"PO-Revision-Date: 2010-02-05 21:33+0800\n"
+"Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
+"Language-Team: Chinese Traditional <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:858
+#: ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
-msgstr "%s %s"
+msgstr ""
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/alsa/alsa-util.c:1147
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
-"lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/alsa/alsa-util.c:1194
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
msgstr ""
#: ../src/modules/module-always-sink.c:39
@@ -61,65 +56,56 @@ msgid "Virtual LADSPA sink"
msgstr ""
#: ../src/modules/module-ladspa-sink.c:53
-msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
-msgstr ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
-"input control values>"
+msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgstr ""
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
msgstr ""
#: ../src/modules/module-null-sink.c:291
+#, fuzzy
msgid "Null Output"
-msgstr ""
+msgstr "輸åºç«¯ %s"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
-msgstr ""
+msgstr "å
§é¨é³æ"
#: ../src/pulsecore/sink.c:2618
msgid "Modem"
-msgstr ""
+msgstr "æ¸ææ©"
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
-msgstr ""
+msgstr "ç¡æ³å°æ¾å°åå§ç lt_dlopen è¼å
¥å¨ã"
#: ../src/daemon/ltdl-bind-now.c:129
msgid "Failed to allocate new dl loader."
-msgstr ""
+msgstr "ç¡æ³åé
æ°ç dl è¼å
¥å¨ã"
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr ""
+msgstr "ç¡å å
¥ bind-now-loaderã"
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr ""
+msgstr "åå¾ä¿¡è %sã"
#: ../src/daemon/main.c:168
msgid "Exiting."
-msgstr ""
+msgstr "æ£å¨é¢éä¸ã"
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
-msgstr ""
+msgstr "æ¾ä¸å°ä½¿ç¨è
ã%sãã"
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr ""
+msgstr "æ¾ä¸å°ç¾¤çµã%sãã"
#: ../src/daemon/main.c:195
#, c-format
@@ -136,66 +122,65 @@ msgstr ""
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr ""
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:208
+#: ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
-msgstr ""
+msgstr "ç¡æ³å»ºç«ã%sãï¼%s"
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
-msgstr ""
+msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
-msgstr ""
+msgstr "ç¡æ³è®æ´ç¾¤çµ IDï¼%s"
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
-msgstr ""
+msgstr "ç¡æ³è®æ´ä½¿ç¨è
IDï¼%s"
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
-msgstr ""
+msgstr "æåå°å»é¤ root æ¬åã"
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr ""
+msgstr "å¨æ¤å¹³å°ä¸å°æªæ¯æ´ç³»çµ±å
¨å模å¼ã"
#: ../src/daemon/main.c:297
-#, c-format
+#, fuzzy, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr ""
+msgstr "ç£ç¢åå²å¤±æï¼%s"
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr ""
+msgstr "解æå½ä»¤å失æã"
#: ../src/daemon/main.c:541
msgid "Daemon not running"
-msgstr ""
+msgstr "å¹å¾ç¨å¼å°æªå·è¡ä¸"
#: ../src/daemon/main.c:543
#, c-format
msgid "Daemon running as PID %u"
-msgstr ""
+msgstr "å¹å¾ç¨å¼æ£å¨ä»¥ PID %u å·è¡ä¸"
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr ""
+msgstr "ç¡æ³çµæ¢å¹å¾ç¨å¼ï¼%s"
#: ../src/daemon/main.c:571
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
+msgid "This program is not intended to be run as root (unless --system is specified)."
msgstr ""
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr ""
+msgstr "éè¦ root æ¬åã"
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
@@ -218,41 +203,43 @@ msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
#: ../src/daemon/main.c:621
+#, fuzzy
msgid "Failed to acquire stdio."
-msgstr ""
+msgstr "è®åç®é %s 失æï¼%m"
#: ../src/daemon/main.c:627
-#, c-format
+#, fuzzy, c-format
msgid "pipe failed: %s"
-msgstr ""
+msgstr "ç£ç¢åå²å¤±æï¼%s"
#: ../src/daemon/main.c:632
-#, c-format
+#, fuzzy, c-format
msgid "fork() failed: %s"
-msgstr ""
+msgstr "ç£ç¢åå²å¤±æï¼%s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
-#, c-format
+#: ../src/daemon/main.c:646
+#: ../src/utils/pacat.c:508
+#, fuzzy, c-format
msgid "read() failed: %s"
-msgstr ""
+msgstr "è®åç®é %s 失æï¼%m"
#: ../src/daemon/main.c:652
msgid "Daemon startup failed."
-msgstr ""
+msgstr "å¹å¾ç¨å¼åå失æã"
#: ../src/daemon/main.c:654
msgid "Daemon startup successful."
-msgstr ""
+msgstr "å¹å¾ç¨å¼ååæåã"
#: ../src/daemon/main.c:731
#, c-format
msgid "This is PulseAudio %s"
-msgstr ""
+msgstr "éæ¯ PulseAudio %s"
#: ../src/daemon/main.c:732
-#, c-format
+#, fuzzy, c-format
msgid "Compilation host: %s"
-msgstr ""
+msgstr "主æ©ï¼host:portï¼"
#: ../src/daemon/main.c:733
#, c-format
@@ -260,14 +247,14 @@ msgid "Compilation CFLAGS: %s"
msgstr ""
#: ../src/daemon/main.c:736
-#, c-format
+#, fuzzy, c-format
msgid "Running on host: %s"
-msgstr ""
+msgstr "%s %s å®è£å¨ä¸»æ© %s"
#: ../src/daemon/main.c:739
#, c-format
msgid "Found %u CPUs."
-msgstr ""
+msgstr "æ¾å° %u å CPUã"
#: ../src/daemon/main.c:741
#, c-format
@@ -276,24 +263,24 @@ msgstr ""
#: ../src/daemon/main.c:744
msgid "Compiled with Valgrind support: yes"
-msgstr ""
+msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼æ¯"
#: ../src/daemon/main.c:746
msgid "Compiled with Valgrind support: no"
-msgstr ""
+msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼å¦"
#: ../src/daemon/main.c:749
#, c-format
msgid "Running in valgrind mode: %s"
-msgstr ""
+msgstr "æ£å¨ä»¥ valgrind 模å¼å·è¡ä¸ï¼%s"
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
-msgstr ""
+msgstr "æä½³åç建æ§çæ¬ï¼æ¯"
#: ../src/daemon/main.c:754
msgid "Optimized build: no"
-msgstr ""
+msgstr "æä½³åç建æ§çæ¬ï¼å¦"
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
@@ -304,51 +291,49 @@ msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
#: ../src/daemon/main.c:762
+#, fuzzy
msgid "All asserts enabled."
-msgstr ""
+msgstr "æªåç¨ä»»ä½è»é«å¥ä»¶åº«"
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
-msgstr ""
+msgstr "ç¡æ³åå¾æ©å¨ ID"
#: ../src/daemon/main.c:769
#, c-format
msgid "Machine ID is %s."
-msgstr ""
+msgstr "æ©å¨ ID çº %sã"
#: ../src/daemon/main.c:773
#, c-format
msgid "Session ID is %s."
-msgstr ""
+msgstr "ä½æ¥é段 ID çº %sã"
#: ../src/daemon/main.c:779
-#, c-format
+#, fuzzy, c-format
msgid "Using runtime directory %s."
-msgstr ""
+msgstr "åæ¾æ åæªçç®éï¼"
#: ../src/daemon/main.c:784
-#, c-format
+#, fuzzy, c-format
msgid "Using state directory %s."
-msgstr ""
+msgstr "åæ¾æ åæªçç®éï¼"
#: ../src/daemon/main.c:787
-#, c-format
+#, fuzzy, c-format
msgid "Using modules directory %s."
-msgstr ""
+msgstr "åæ¾æ åæªçç®éï¼"
#: ../src/daemon/main.c:789
-#, c-format
+#, fuzzy, c-format
msgid "Running in system mode: %s"
-msgstr ""
+msgstr "å¨å½ä»¤å模å¼ä¸å¯æä¸ååèï¼"
#: ../src/daemon/main.c:792
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:809
@@ -360,9 +345,7 @@ msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
#: ../src/daemon/main.c:821
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
msgstr ""
#: ../src/daemon/main.c:844
@@ -371,7 +354,7 @@ msgstr ""
#: ../src/daemon/main.c:904
msgid "Failed to initialize daemon."
-msgstr ""
+msgstr "åå§åå¹å¾ç¨å¼å¤±æã"
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
@@ -379,15 +362,15 @@ msgstr ""
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
-msgstr ""
+msgstr "å¹å¾ç¨å¼ååå®æã"
#: ../src/daemon/main.c:932
msgid "Daemon shutdown initiated."
-msgstr ""
+msgstr "å·²éå§ééå¹å¾ç¨å¼ã"
#: ../src/daemon/main.c:954
msgid "Daemon terminated."
-msgstr ""
+msgstr "å¹å¾ç¨å¼å·²çµæ¢ã"
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -400,48 +383,37 @@ 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"
@@ -452,12 +424,10 @@ 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"
@@ -472,9 +442,7 @@ msgid "--fail expects boolean argument"
msgstr ""
#: ../src/daemon/cmdline.c:264
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of 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 ""
#: ../src/daemon/cmdline.c:276
@@ -499,7 +467,7 @@ msgstr ""
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr ""
+msgstr "ç¡æçç´éç®æ¨ï¼è«ä½¿ç¨ãsyslogãããstderrãææ¯ãautoãã"
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
@@ -512,7 +480,7 @@ msgstr ""
#: ../src/daemon/cmdline.c:354
#, c-format
msgid "Invalid resample method '%s'."
-msgstr ""
+msgstr "ç¡æçéæ°å樣æ¹æ³ã%sãã"
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
@@ -529,67 +497,67 @@ msgstr ""
#: ../src/daemon/dumpmodules.c:60
#, c-format
msgid "Name: %s\n"
-msgstr ""
+msgstr "å稱ï¼%s\n"
#: ../src/daemon/dumpmodules.c:63
#, c-format
msgid "No module information available\n"
-msgstr ""
+msgstr "æ²æå¯ç¨ç模çµè³è¨\n"
#: ../src/daemon/dumpmodules.c:66
#, c-format
msgid "Version: %s\n"
-msgstr ""
+msgstr "çæ¬ï¼%s\n"
#: ../src/daemon/dumpmodules.c:68
#, c-format
msgid "Description: %s\n"
-msgstr ""
+msgstr "æè¿°ï¼%s\n"
#: ../src/daemon/dumpmodules.c:70
#, c-format
msgid "Author: %s\n"
-msgstr ""
+msgstr "ä½è
ï¼%s\n"
#: ../src/daemon/dumpmodules.c:72
#, c-format
msgid "Usage: %s\n"
-msgstr ""
+msgstr "使ç¨çï¼%s\n"
#: ../src/daemon/dumpmodules.c:73
-#, c-format
+#, fuzzy, c-format
msgid "Load Once: %s\n"
-msgstr ""
+msgstr "è¼å
¥å¦ä¸å¼µç¢ç"
#: ../src/daemon/dumpmodules.c:75
-#, c-format
+#, fuzzy, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr ""
+msgstr "ç£ç¢åå²è¦å"
#: ../src/daemon/dumpmodules.c:79
#, c-format
msgid "Path: %s\n"
-msgstr ""
+msgstr "è·¯å¾ï¼%s\n"
#: ../src/daemon/daemon-conf.c:232
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr ""
+msgstr "è¨æé è¨éæ©ç®æ¨ (_T)"
#: ../src/daemon/daemon-conf.c:248
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/daemon/daemon-conf.c:264
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr ""
+msgstr "æªç¥ç Url æ¹æ³ %s"
#: ../src/daemon/daemon-conf.c:287
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr ""
+msgstr "ç¡æçéé°"
#: ../src/daemon/daemon-conf.c:294
#, c-format
@@ -597,49 +565,47 @@ msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
#: ../src/daemon/daemon-conf.c:310
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr ""
+msgstr "è¦æ ¼å¼åçº Swap åå²ååï¼"
#: ../src/daemon/daemon-conf.c:328
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/daemon/daemon-conf.c:352
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/daemon/daemon-conf.c:370
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid channel map '%s'."
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/daemon/daemon-conf.c:388
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/daemon/daemon-conf.c:406
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr ""
+msgstr "輸å
¥çåå²å大å°ç¡æ"
#: ../src/daemon/daemon-conf.c:424
-#, c-format
+#, fuzzy, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/daemon/daemon-conf.c:546
-#, c-format
+#, fuzzy, c-format
msgid "Failed to open configuration file: %s"
-msgstr ""
+msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
#: ../src/daemon/daemon-conf.c:562
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
msgstr ""
#: ../src/daemon/daemon-conf.c:638
@@ -648,20 +614,22 @@ msgid "### Read from configuration file: %s ###\n"
msgstr ""
#: ../src/daemon/caps.c:62
+#, fuzzy
msgid "Cleaning up privileges."
-msgstr ""
+msgstr "è¨å®å¥ä»¶åº«æç¼çé¯èª¤"
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
-msgstr ""
+msgstr "PulseAudio é³æ系統"
#: ../src/daemon/pulseaudio.desktop.in.h:2
msgid "Start the PulseAudio Sound System"
-msgstr ""
+msgstr "åå PulseAudio é³æ系統"
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105
+#: ../src/pulse/channelmap.c:757
msgid "Mono"
-msgstr ""
+msgstr "å®è²é"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
@@ -709,7 +677,7 @@ msgstr ""
#: ../src/pulse/channelmap.c:123
msgid "Auxiliary 0"
-msgstr ""
+msgstr "è¼å©è¼¸å
¥ 0"
#: ../src/pulse/channelmap.c:124
msgid "Auxiliary 1"
@@ -863,83 +831,87 @@ msgstr ""
msgid "Top Rear Right"
msgstr ""
-#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484
+#: ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295
+#: ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341
+#: ../src/pulse/volume.c:371
msgid "(invalid)"
-msgstr ""
+msgstr "(ç¡æ)"
#: ../src/pulse/channelmap.c:761
msgid "Stereo"
-msgstr ""
+msgstr "ç«é«è²"
#: ../src/pulse/channelmap.c:766
msgid "Surround 4.0"
-msgstr ""
+msgstr "ç°ç¹é³æ 4.0"
#: ../src/pulse/channelmap.c:772
msgid "Surround 4.1"
-msgstr ""
+msgstr "ç°ç¹é³æ 4.1"
#: ../src/pulse/channelmap.c:778
msgid "Surround 5.0"
-msgstr ""
+msgstr "ç°ç¹é³æ 5.0"
#: ../src/pulse/channelmap.c:784
msgid "Surround 5.1"
-msgstr ""
+msgstr "ç°ç¹é³æ 5.1"
#: ../src/pulse/channelmap.c:791
msgid "Surround 7.1"
-msgstr ""
+msgstr "ç°ç¹é³æ 7.1"
#: ../src/pulse/error.c:43
msgid "OK"
-msgstr ""
+msgstr "確èª"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr ""
+msgstr "åååæ"
#: ../src/pulse/error.c:45
msgid "Unknown command"
-msgstr ""
+msgstr "æªç¥çæ令"
#: ../src/pulse/error.c:46
msgid "Invalid argument"
-msgstr ""
+msgstr "ç¡æçåæ¸"
#: ../src/pulse/error.c:47
msgid "Entity exists"
msgstr ""
#: ../src/pulse/error.c:48
+#, fuzzy
msgid "No such entity"
-msgstr ""
+msgstr "æ²æå¯ç¨ç網路"
#: ../src/pulse/error.c:49
msgid "Connection refused"
-msgstr ""
+msgstr "é£æ¥åæ"
#: ../src/pulse/error.c:50
msgid "Protocol error"
-msgstr ""
+msgstr "åå®é¯èª¤"
#: ../src/pulse/error.c:51
msgid "Timeout"
-msgstr ""
+msgstr "é¾æ"
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr ""
+msgstr "æ²æææ¬éé°"
#: ../src/pulse/error.c:53
msgid "Internal error"
-msgstr ""
+msgstr "å
§é¨é¯èª¤"
#: ../src/pulse/error.c:54
msgid "Connection terminated"
-msgstr ""
+msgstr "é£æ¥å·²çµæ¢"
#: ../src/pulse/error.c:55
msgid "Entity killed"
@@ -947,55 +919,61 @@ msgstr ""
#: ../src/pulse/error.c:56
msgid "Invalid server"
-msgstr ""
+msgstr "ç¡æç伺æå¨"
#: ../src/pulse/error.c:57
msgid "Module initalization failed"
-msgstr ""
+msgstr "模çµåå§å失æ"
#: ../src/pulse/error.c:58
msgid "Bad state"
-msgstr ""
+msgstr "ä¸è¯ççæ
"
#: ../src/pulse/error.c:59
msgid "No data"
-msgstr ""
+msgstr "ç¡è³æ"
#: ../src/pulse/error.c:60
msgid "Incompatible protocol version"
-msgstr ""
+msgstr "ä¸ç¸å®¹çåå®çæ¬"
#: ../src/pulse/error.c:61
msgid "Too large"
-msgstr ""
+msgstr "太大"
#: ../src/pulse/error.c:62
msgid "Not supported"
-msgstr ""
+msgstr "æªæ¯æ´"
#: ../src/pulse/error.c:63
msgid "Unknown error code"
-msgstr ""
+msgstr "æªç¥çé¯èª¤ç¢¼"
#: ../src/pulse/error.c:64
+#, fuzzy
msgid "No such extension"
-msgstr ""
+msgstr "æ²æå¯ç¨ç網路"
#: ../src/pulse/error.c:65
msgid "Obsolete functionality"
-msgstr ""
+msgstr "æ£ç¨çåè½"
#: ../src/pulse/error.c:66
+#, fuzzy
msgid "Missing implementation"
-msgstr ""
+msgstr "æ¾ä¸å°å¥ä»¶"
#: ../src/pulse/error.c:67
msgid "Client forked"
msgstr ""
#: ../src/pulse/error.c:68
+#, fuzzy
msgid "Input/Output error"
msgstr ""
+"éæ°è¨èª¿æ´åå²å %s ç大å°æç¼çé¯èª¤ã\n"
+"\n"
+"%s"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
@@ -1026,18 +1004,20 @@ msgstr ""
msgid "%u B"
msgstr ""
-#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55
+#: ../src/utils/pax11publish.c:100
+#, fuzzy
msgid "XOpenDisplay() failed"
-msgstr ""
+msgstr "ç£ç¢åå²å¤±æï¼%s"
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
msgstr ""
#: ../src/pulse/client-conf.c:111
-#, c-format
+#, fuzzy, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr ""
+msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
@@ -1059,17 +1039,18 @@ msgid "Received message for unknown extension '%s'"
msgstr ""
#: ../src/utils/pacat.c:108
-#, c-format
+#, fuzzy, c-format
msgid "Failed to drain stream: %s"
-msgstr ""
+msgstr "è®åç®é %s 失æï¼%m"
#: ../src/utils/pacat.c:113
msgid "Playback stream drained."
msgstr ""
#: ../src/utils/pacat.c:123
+#, fuzzy
msgid "Draining connection to server."
-msgstr ""
+msgstr "å³éè³é 端伺æå¨ï¼scpï¼"
#: ../src/utils/pacat.c:136
#, c-format
@@ -1086,14 +1067,16 @@ msgstr ""
msgid "pa_stream_begin_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:237
+#: ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr ""
#: ../src/utils/pacat.c:307
+#, fuzzy
msgid "Stream successfully created."
-msgstr ""
+msgstr "串æµå·²æå建ç«\n"
#: ../src/utils/pacat.c:310
#, c-format
@@ -1111,39 +1094,39 @@ msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr ""
#: ../src/utils/pacat.c:321
-#, c-format
+#, fuzzy, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr ""
+msgstr "æ£ä½¿ç¨å樣è¦æ ¼ã%sã\n"
#: ../src/utils/pacat.c:325
-#, c-format
+#, fuzzy, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr ""
+msgstr "é¸åè¦è¼å
¥çè£ç½®é©
åç¨å¼"
#: ../src/utils/pacat.c:335
-#, c-format
+#, fuzzy, c-format
msgid "Stream error: %s"
-msgstr ""
+msgstr "è¨å®åå²åé¯èª¤"
#: ../src/utils/pacat.c:345
-#, c-format
+#, fuzzy, c-format
msgid "Stream device suspended.%s"
-msgstr ""
+msgstr "編輯 RAID è£ç½®"
#: ../src/utils/pacat.c:347
-#, c-format
+#, fuzzy, c-format
msgid "Stream device resumed.%s"
-msgstr ""
+msgstr "編輯 RAID è£ç½®"
#: ../src/utils/pacat.c:355
-#, c-format
+#, fuzzy, c-format
msgid "Stream underrun.%s"
-msgstr ""
+msgstr "串æµé¯èª¤ï¼%s\n"
#: ../src/utils/pacat.c:362
-#, c-format
+#, fuzzy, c-format
msgid "Stream overrun.%s"
-msgstr ""
+msgstr "串æµé¯èª¤ï¼%s\n"
#: ../src/utils/pacat.c:369
#, c-format
@@ -1156,8 +1139,9 @@ msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr ""
#: ../src/utils/pacat.c:376
+#, fuzzy
msgid "not "
-msgstr ""
+msgstr "æ¾ä¸å° %s"
#: ../src/utils/pacat.c:383
#, c-format
@@ -1165,9 +1149,9 @@ msgid "Stream buffer attributes changed.%s"
msgstr ""
#: ../src/utils/pacat.c:415
-#, c-format
+#, fuzzy, c-format
msgid "Connection established.%s"
-msgstr ""
+msgstr "æ£å¨çå telnet é£ç·..."
#: ../src/utils/pacat.c:418
#, c-format
@@ -1184,28 +1168,31 @@ msgstr ""
msgid "pa_stream_connect_record() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
-#, c-format
+#: ../src/utils/pacat.c:470
+#: ../src/utils/pactl.c:857
+#, fuzzy, c-format
msgid "Connection failure: %s"
-msgstr ""
+msgstr "æ令稿å°ç¨å¼å¤±æ"
#: ../src/utils/pacat.c:503
+#, fuzzy
msgid "Got EOF."
-msgstr ""
+msgstr "åå¾æªæ¡çµå°¾ (EOF)ã\n"
#: ../src/utils/pacat.c:540
-#, c-format
+#, fuzzy, c-format
msgid "write() failed: %s"
-msgstr ""
+msgstr "ç£ç¢åå²å¤±æï¼%s"
#: ../src/utils/pacat.c:561
+#, fuzzy
msgid "Got signal, exiting."
-msgstr ""
+msgstr "åå¾è¨èï¼æ£å¨é¢éã\n"
#: ../src/utils/pacat.c:575
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get latency: %s"
-msgstr ""
+msgstr "è®åç®é %s 失æï¼%m"
#: ../src/utils/pacat.c:580
#, c-format
@@ -1230,48 +1217,29 @@ 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, "
-"s24le, s24be,\n"
-" s24-32le, s24-32be (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, s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the "
-"specified value.\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"
+" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
" --raw Record/play raw PCM data.\n"
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
@@ -1285,44 +1253,46 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
-#, c-format
+#: ../src/utils/pacat.c:764
+#: ../src/utils/pactl.c:953
+#, fuzzy, c-format
msgid "Invalid client name '%s'"
-msgstr ""
+msgstr "Initiator å稱ç¡æ"
#: ../src/utils/pacat.c:779
-#, c-format
+#, fuzzy, c-format
msgid "Invalid stream name '%s'"
-msgstr ""
+msgstr "Initiator å稱ç¡æ"
#: ../src/utils/pacat.c:816
-#, c-format
+#, fuzzy, c-format
msgid "Invalid channel map '%s'"
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/utils/pacat.c:845
-#, c-format
+#, fuzzy, c-format
msgid "Invalid latency specification '%s'"
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/utils/pacat.c:852
-#, c-format
+#, fuzzy, c-format
msgid "Invalid process time specification '%s'"
-msgstr ""
+msgstr "ç¡æçéæ°å樣æ¹æ³ã%sãã"
#: ../src/utils/pacat.c:864
-#, c-format
+#, fuzzy, c-format
msgid "Invalid property '%s'"
-msgstr ""
+msgstr "ç¡æçéé°"
#: ../src/utils/pacat.c:881
-#, c-format
+#, fuzzy, c-format
msgid "Unknown file format %s."
-msgstr ""
+msgstr "è¦æ ¼å¼åçº Swap åå²ååï¼"
#: ../src/utils/pacat.c:900
+#, fuzzy
msgid "Invalid sample specification"
-msgstr ""
+msgstr "ç¡æçé¯èª¤è³è¨"
#: ../src/utils/pacat.c:910
#, c-format
@@ -1335,34 +1305,38 @@ msgid "dup2(): %s"
msgstr ""
#: ../src/utils/pacat.c:922
+#, fuzzy
msgid "Too many arguments."
-msgstr ""
+msgstr "太å¤åæ´ç£ç¢æ©"
#: ../src/utils/pacat.c:933
+#, fuzzy
msgid "Failed to generate sample specification for file."
-msgstr ""
+msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
#: ../src/utils/pacat.c:953
+#, fuzzy
msgid "Failed to open audio file."
-msgstr ""
+msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
#: ../src/utils/pacat.c:959
-msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
+msgid "Warning: specified sample specification will be overwritten with specification from file."
msgstr ""
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:962
+#: ../src/utils/pactl.c:997
+#, fuzzy
msgid "Failed to determine sample specification from file."
-msgstr ""
+msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
msgstr ""
#: ../src/utils/pacat.c:982
+#, fuzzy
msgid "Channel map doesn't match sample specification"
-msgstr ""
+msgstr "é »éå°æ表ä¸ç¬¦åæªæ¡ã\n"
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
@@ -1375,25 +1349,29 @@ msgstr ""
#: ../src/utils/pacat.c:1009
msgid "recording"
-msgstr ""
+msgstr "æ£å¨é製"
#: ../src/utils/pacat.c:1009
msgid "playback"
-msgstr ""
+msgstr "ææ¾æ§å¶"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1035
+#: ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
msgstr ""
#: ../src/utils/pacat.c:1054
+#, fuzzy
msgid "io_new() failed."
-msgstr ""
+msgstr "LVM æä½å¤±æ"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1061
+#: ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1069
+#: ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
@@ -1402,7 +1380,8 @@ msgstr ""
msgid "pa_context_rttime_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1082
+#: ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
msgstr ""
@@ -1417,14 +1396,14 @@ msgid "execvp(): %s\n"
msgstr ""
#: ../src/utils/pasuspender.c:109
-#, c-format
+#, fuzzy, c-format
msgid "Failure to suspend: %s\n"
-msgstr ""
+msgstr "ç¡æ³ç»å
¥"
#: ../src/utils/pasuspender.c:124
-#, c-format
+#, fuzzy, c-format
msgid "Failure to resume: %s\n"
-msgstr ""
+msgstr "ç¡æ³ç»å
¥"
#: ../src/utils/pasuspender.c:147
#, c-format
@@ -1432,9 +1411,9 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
#: ../src/utils/pasuspender.c:159
-#, c-format
+#, fuzzy, c-format
msgid "Connection failure: %s\n"
-msgstr ""
+msgstr "æ令稿å°ç¨å¼å¤±æ"
#: ../src/utils/pasuspender.c:176
#, c-format
@@ -1453,8 +1432,7 @@ 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 ""
@@ -1482,9 +1460,9 @@ msgid "pa_mainloop_run() failed.\n"
msgstr ""
#: ../src/utils/pactl.c:135
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get statistics: %s"
-msgstr ""
+msgstr "è®åç®é %s 失æï¼%m"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1497,14 +1475,14 @@ msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
#: ../src/utils/pactl.c:147
-#, c-format
+#, fuzzy, c-format
msgid "Sample cache size: %s\n"
-msgstr ""
+msgstr "é¡å¤ç大å°é¸é
"
#: ../src/utils/pactl.c:156
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get server information: %s"
-msgstr ""
+msgstr "ç¡æ³åå¾æ©å¨ ID"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1521,9 +1499,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:205
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get sink information: %s"
-msgstr ""
+msgstr "ç¡æ³åå¾æ©å¨ ID"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1547,20 +1525,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:268
+#: ../src/utils/pactl.c:360
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
-#, c-format
+#: ../src/utils/pactl.c:274
+#: ../src/utils/pactl.c:366
+#, fuzzy, c-format
msgid "\tActive Port: %s\n"
-msgstr ""
+msgstr "主æ©ï¼host:portï¼"
#: ../src/utils/pactl.c:297
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get source information: %s"
-msgstr ""
+msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1584,18 +1564,26 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
+#: ../src/utils/pactl.c:345
+#: ../src/utils/pactl.c:401
+#: ../src/utils/pactl.c:436
+#: ../src/utils/pactl.c:473
+#: ../src/utils/pactl.c:532
+#: ../src/utils/pactl.c:533
+#: ../src/utils/pactl.c:543
+#: ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:637
+#: ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
-msgstr ""
+msgstr "ä¸åå¨"
#: ../src/utils/pactl.c:375
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get module information: %s"
-msgstr ""
+msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1609,9 +1597,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:412
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get client information: %s"
-msgstr ""
+msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1624,9 +1612,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:447
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get card information: %s"
-msgstr ""
+msgstr "ç¡æ³åå¾æ©å¨ ID"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1650,9 +1638,9 @@ msgid "\tActive Profile: %s\n"
msgstr ""
#: ../src/utils/pactl.c:496
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get sink input information: %s"
-msgstr ""
+msgstr "ç¡æ³çµæ¢å¹å¾ç¨å¼ï¼%s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1676,9 +1664,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:554
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get source output information: %s"
-msgstr ""
+msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1698,9 +1686,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:605
-#, c-format
+#, fuzzy, c-format
msgid "Failed to get sample information: %s"
-msgstr ""
+msgstr "ç¡æ³ä¸å³å樣ï¼%s\n"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1720,23 +1708,26 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
-#, c-format
+#: ../src/utils/pactl.c:653
+#: ../src/utils/pactl.c:663
+#, fuzzy, c-format
msgid "Failure: %s"
-msgstr ""
+msgstr "æ令稿å°ç¨å¼å¤±æ"
#: ../src/utils/pactl.c:687
-#, c-format
+#, fuzzy, c-format
msgid "Failed to upload sample: %s"
-msgstr ""
+msgstr "è®åç®é %s 失æï¼%m"
#: ../src/utils/pactl.c:704
+#, fuzzy
msgid "Premature end of file"
-msgstr ""
+msgstr "æªç¶æ£å¸¸ç¨åºéæ©ï¼Dirtyï¼çæªæ¡ç³»çµ±"
#: ../src/utils/pactl.c:863
+#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr ""
+msgstr "åå¾è¨èï¼æ£å¨é¢éã\n"
#: ../src/utils/pactl.c:869
#, c-format
@@ -1766,10 +1757,8 @@ 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 ""
#: ../src/utils/pactl.c:933
@@ -1781,104 +1770,126 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:979
+#, fuzzy
msgid "Please specify a sample file to load"
-msgstr ""
+msgstr "è«æå®ä¸ä»½æ¨£æ¬æªä»¥è¼å
¥\n"
#: ../src/utils/pactl.c:992
+#, fuzzy
msgid "Failed to open sound file."
-msgstr ""
+msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
#: ../src/utils/pactl.c:1014
+#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr ""
+msgstr "æ¨å¿
é æå®è¦ææ¾ç樣æ¬å稱\n"
#: ../src/utils/pactl.c:1026
+#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr ""
+msgstr "æ¨å¿
é æå®è¦ç§»é¤ç樣æ¬å稱\n"
#: ../src/utils/pactl.c:1035
+#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1045
+#, fuzzy
msgid "You have to specify a source output index and a source"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1060
+#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸å模çµå稱èåæ¸ã\n"
#: ../src/utils/pactl.c:1080
+#, fuzzy
msgid "You have to specify a module index"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸å模çµç´¢å¼\n"
#: ../src/utils/pactl.c:1090
+#, fuzzy
msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr ""
+msgstr "ä½ å¯è½ç¡æ³æå®ä¸å以ä¸çä¾æºãæ¨å¿
é æå®ä¸åå¸æå¼ã\n"
#: ../src/utils/pactl.c:1103
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
-msgstr ""
+#, fuzzy
+msgid "You may not specify more than one source. You have to specify a boolean value."
+msgstr "ä½ å¯è½ç¡æ³æå®ä¸å以ä¸çä¾æºãæ¨å¿
é æå®ä¸åå¸æå¼ã\n"
#: ../src/utils/pactl.c:1115
+#, fuzzy
msgid "You have to specify a card name/index and a profile name"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸å模çµå稱èåæ¸ã\n"
#: ../src/utils/pactl.c:1126
+#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1137
+#, fuzzy
msgid "You have to specify a source name/index and a port name"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1149
+#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr ""
-
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+
+#: ../src/utils/pactl.c:1154
+#: ../src/utils/pactl.c:1171
+#: ../src/utils/pactl.c:1193
+#: ../src/utils/pactl.c:1209
+#: ../src/utils/pactl.c:1226
+#: ../src/utils/pactl.c:1248
+#, fuzzy
msgid "Invalid volume specification"
-msgstr ""
+msgstr "é輯å·åå稱ï¼"
#: ../src/utils/pactl.c:1166
+#, fuzzy
msgid "You have to specify a source name/index and a volume"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1183
+#, fuzzy
msgid "You have to specify a sink input index and a volume"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
msgstr ""
#: ../src/utils/pactl.c:1204
+#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr ""
+msgstr "æ¨å¿
é æå®è¦ææ¾ç樣æ¬å稱\n"
#: ../src/utils/pactl.c:1221
+#, fuzzy
msgid "You have to specify a source name/index and a mute boolean"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1238
+#, fuzzy
msgid "You have to specify a sink input index and a mute boolean"
-msgstr ""
+msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
msgstr ""
#: ../src/utils/pactl.c:1262
+#, fuzzy
msgid "No valid command specified."
-msgstr ""
+msgstr "å¨ç¶²è·¯æ令ä¸æå®äºä¸è¯ç bootproto %s"
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -1887,25 +1898,24 @@ 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 ""
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr ""
+msgstr "ç¡æ³åæå½ä»¤åã\n"
#: ../src/utils/pax11publish.c:108
#, c-format
msgid "Server: %s\n"
-msgstr ""
+msgstr "伺æå¨ï¼%s\n"
#: ../src/utils/pax11publish.c:110
#, c-format
msgid "Source: %s\n"
-msgstr ""
+msgstr "ä¾æºï¼%s\n"
#: ../src/utils/pax11publish.c:112
#, c-format
@@ -1920,37 +1930,37 @@ msgstr ""
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr ""
+msgstr "ç¡æ³è§£æ cookie è³æ\n"
#: ../src/utils/pax11publish.c:137
#, c-format
msgid "Failed to save cookie data\n"
-msgstr ""
+msgstr "ç¡æ³å²å cookie è³æ\n"
#: ../src/utils/pax11publish.c:152
#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr ""
+msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr ""
+msgstr "ç¡æ³è®åç°å¢é
ç½®è³æã\n"
#: ../src/utils/pax11publish.c:174
#, c-format
msgid "Failed to get FQDN.\n"
-msgstr ""
+msgstr "ç¡æ³åå¾ FQDNã\n"
#: ../src/utils/pax11publish.c:194
#, c-format
msgid "Failed to load cookie data\n"
-msgstr ""
+msgstr "ç¡æ³è¼å
¥ cookie è³æ\n"
#: ../src/utils/pax11publish.c:211
#, c-format
msgid "Not yet implemented.\n"
-msgstr ""
+msgstr "å°æªå¯¦ç¾ã\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
@@ -1968,92 +1978,96 @@ msgstr ""
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr ""
+msgstr "ç¡æ³çµæ PulseAudio å¹å¾ç¨å¼ã"
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
-msgstr ""
+msgstr "å¹å¾ç¨å¼ç®åæ²æåæã"
#: ../src/utils/pacmd.c:161
#, c-format
msgid "poll(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
-#, c-format
+#: ../src/utils/pacmd.c:171
+#: ../src/utils/pacmd.c:188
+#, fuzzy, c-format
msgid "read(): %s"
-msgstr ""
+msgstr "å¯è®"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:207
+#: ../src/utils/pacmd.c:223
#, c-format
msgid "write(): %s"
msgstr ""
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:136
+#: ../src/pulsecore/lock-autospawn.c:219
msgid "Cannot access autospawn lock."
msgstr ""
-#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530
+#: ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
-#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506
+#: ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
#: ../src/modules/alsa/alsa-mixer.c:2931
msgid "Off"
-msgstr ""
+msgstr "éé"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
msgid "High Fidelity Playback (A2DP)"
-msgstr ""
+msgstr "é«å³çææ¾ (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#, fuzzy
msgid "High Fidelity Capture (A2DP)"
-msgstr ""
+msgstr "é«å³çææ¾ (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr ""
+msgstr "é»è©±éçµç· (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
-msgstr ""
+msgstr "PulseAudio é³æ伺æå¨"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
+#, fuzzy
msgid "Output Devices"
-msgstr ""
+msgstr "æ¾ä¸å°è£ç½®"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
+#, fuzzy
msgid "Input Devices"
-msgstr ""
+msgstr "æ¾ä¸å°è£ç½®"
#: ../src/modules/module-rygel-media-server.c:774
+#, fuzzy
msgid "Audio on @HOSTNAME@"
-msgstr ""
+msgstr "主æ©å稱é¯èª¤"
#: ../src/modules/alsa/alsa-mixer.c:1701
+#, fuzzy
msgid "Input"
-msgstr ""
+msgstr "輸å
¥ç«¯ %s"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
@@ -2064,8 +2078,9 @@ msgid "Docking Station Microphone"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1704
+#, fuzzy
msgid "Line-In"
-msgstr ""
+msgstr "æ£å¨é²è¡... "
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
@@ -2076,8 +2091,9 @@ msgid "External Microphone"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1707
+#, fuzzy
msgid "Internal Microphone"
-msgstr ""
+msgstr "å
§é¨é³æ"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
@@ -2088,8 +2104,9 @@ msgid "Video"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1710
+#, fuzzy
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "èªååå²ç£ç¢ç¼çé¯èª¤"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
@@ -2100,144 +2117,200 @@ msgid "Boost"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1713
+#, fuzzy
msgid "No Boost"
-msgstr ""
+msgstr "ç¡å¯ç¢¼"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1715
+#, fuzzy
msgid "No Amplifier"
-msgstr ""
+msgstr "ç¡å¯ç¢¼"
#: ../src/modules/alsa/alsa-mixer.c:1773
+#, fuzzy
msgid "Analog Input"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:1774
+#, fuzzy
msgid "Analog Microphone"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:1775
+#, fuzzy
msgid "Analog Line-In"
-msgstr ""
+msgstr "æ¤åå²åæ£è¢«å®è£ç¨å¼ä½¿ç¨ã"
#: ../src/modules/alsa/alsa-mixer.c:1776
+#, fuzzy
msgid "Analog Radio"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:1777
+#, fuzzy
msgid "Analog Video"
-msgstr ""
+msgstr "é¡æ¯ç«é«è²"
#: ../src/modules/alsa/alsa-mixer.c:1778
+#, fuzzy
msgid "Analog Output"
-msgstr ""
+msgstr "é¡æ¯ç«é«è²"
#: ../src/modules/alsa/alsa-mixer.c:1779
+#, fuzzy
msgid "Analog Headphones"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1781
+#, fuzzy
msgid "Analog Mono Output"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1984
+#: ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:2791
msgid "Analog Stereo"
-msgstr ""
+msgstr "é¡æ¯ç«é«è²"
#: ../src/modules/alsa/alsa-mixer.c:2792
+#, fuzzy
msgid "Analog Surround 2.1"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
+#, fuzzy
msgid "Analog Surround 3.0"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
+#, fuzzy
msgid "Analog Surround 3.1"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Surround 4.1"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 5.0"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 5.0"
#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 5.1"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
+#, fuzzy
msgid "Analog Surround 6.0"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
+#, fuzzy
msgid "Analog Surround 6.1"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
+#, fuzzy
msgid "Analog Surround 7.0"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 4.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
-msgstr ""
+msgstr "é¡æ¯ç°ç¹è² 7.1"
#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Digital Stereo (IEC958)"
-msgstr ""
+msgstr "æ¸ä½ç«é«è² (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
+#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr ""
+msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr ""
+msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr ""
+msgstr "æ¸ä½ç°ç¹è² 5.1 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Digital Stereo (HDMI)"
-msgstr ""
+msgstr "æ¸ä½ç«é«è² (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
+#, fuzzy
msgid "Analog Mono Duplex"
-msgstr ""
+msgstr "é¡æ¯å®è²é"
#: ../src/modules/alsa/alsa-mixer.c:2929
+#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr ""
+msgstr "é¡æ¯ç«é«è²"
#: ../src/modules/alsa/alsa-mixer.c:2930
+#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr ""
+msgstr "æ¸ä½ç«é«è² (IEC958)"
+
+#~ msgid "Cannot connect to system bus: %s"
+#~ msgstr "ç¡æ³é£æ¥å°ç³»çµ± busï¼ %s"
+#~ msgid "Cannot get caller from PID: %s"
+#~ msgstr "ç¡æ³åå¾ä¾èª PID çå¼å«ç¨å¼ï¼%s"
+#~ msgid "Cannot set UID on caller object."
+#~ msgstr "ç¡æ³å°å¼å«ç¨å¼å¨ç©ä»¶è¨å® UIDã"
+#~ msgid "Failed to get CK session."
+#~ msgstr "ç¡æ³åå¾ CK ä½æ¥é段ã"
+#~ msgid "Cannot set UID on session object."
+#~ msgstr "ç¡æ³å¨ä½æ¥é段ç©ä»¶ä¸è¨å® UIDã"
+#~ msgid "Cannot allocate PolKitAction."
+#~ msgstr "ç¡æ³åé
PolKitActionã"
+#~ msgid "Cannot set action_id"
+#~ msgstr "ç¡æ³è¨å® action_id"
+#~ msgid "Cannot allocate PolKitContext."
+#~ msgstr "ç¡æ³åé
PolKitContextã"
+#~ msgid "Cannot initialize PolKitContext: %s"
+#~ msgstr "ç¡æ³åå§å PolKitContextï¼%s"
+#~ msgid "Could not determine whether caller is authorized: %s"
+#~ msgstr "ç¡æ³æ±ºå®å¼å«ç¨å¼æ¯å¦åå¾ææ¬ï¼%s"
+#~ msgid "Cannot obtain auth: %s"
+#~ msgstr "ç¡æ³åå¾æ¬åï¼%s"
+#~ msgid "PolicyKit responded with '%s'"
+#~ msgstr "PolicyKit åæäºã%sã"
+#~ msgid "Successfully increased RLIMIT_RTPRIO"
+#~ msgstr "æåå°å¢å RLIMIT_RTPRIO"
+#~ msgid "RLIMIT_RTPRIO failed: %s"
+#~ msgstr "RLIMIT_RTPRIO 失æï¼%s"
+#~ msgid "Giving up CAP_NICE"
+#~ msgstr "æ£å¨æ¾æ£ CAP_NICE"
+#~ msgid "Failed to open file '%s'\n"
+#~ msgstr "ç¡æ³éåæªæ¡ã%sã\n"
+#~ msgid "Output %s + Input %s"
+#~ msgstr "輸åºç«¯ %s + 輸å
¥ç«¯ %s"
commit c7b284bb8a76ae06ccce2ad526643ca401c0331b
Author: Cheng-Chia Tseng <pswo10680 at gmail.com>
Date: Fri Feb 19 11:43:57 2010 +0000
l10n: Updates to Chinese (Taiwan) (zh_TW) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 37aa062..1a08823 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,20 +1,21 @@
+# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
#
-# Cheng-Chia Tseng <pswo10680 at gmail.com>, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: upstream-translations.pulseaudio.zh_TW\n"
+"Project-Id-Version: PulseAudio Volume Control\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-02-05 08:05+0000\n"
-"PO-Revision-Date: 2010-02-05 21:33+0800\n"
+"PO-Revision-Date: 2010-02-19 19:41+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
-"Language-Team: Chinese Traditional <>\n"
+"Language-Team: zh_TW\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 0.3\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: TAIWAN\n"
#: ../src/modules/alsa/alsa-util.c:858
#: ../src/pulsecore/sink.c:2629
@@ -64,9 +65,8 @@ msgid "Clocked NULL sink"
msgstr ""
#: ../src/modules/module-null-sink.c:291
-#, fuzzy
msgid "Null Output"
-msgstr "輸åºç«¯ %s"
+msgstr ""
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -78,34 +78,34 @@ msgstr "æ¸ææ©"
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
-msgstr "ç¡æ³å°æ¾å°åå§ç lt_dlopen è¼å
¥å¨ã"
+msgstr ""
#: ../src/daemon/ltdl-bind-now.c:129
msgid "Failed to allocate new dl loader."
-msgstr "ç¡æ³åé
æ°ç dl è¼å
¥å¨ã"
+msgstr ""
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr "ç¡å å
¥ bind-now-loaderã"
+msgstr ""
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr "åå¾ä¿¡è %sã"
+msgstr ""
#: ../src/daemon/main.c:168
msgid "Exiting."
-msgstr "æ£å¨é¢éä¸ã"
+msgstr ""
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
-msgstr "æ¾ä¸å°ä½¿ç¨è
ã%sãã"
+msgstr ""
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr "æ¾ä¸å°ç¾¤çµã%sãã"
+msgstr ""
#: ../src/daemon/main.c:195
#, c-format
@@ -126,53 +126,53 @@ msgstr ""
#: ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
-msgstr "ç¡æ³å»ºç«ã%sãï¼%s"
+msgstr ""
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
-msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
+msgstr ""
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
-msgstr "ç¡æ³è®æ´ç¾¤çµ IDï¼%s"
+msgstr ""
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
-msgstr "ç¡æ³è®æ´ä½¿ç¨è
IDï¼%s"
+msgstr ""
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
-msgstr "æåå°å»é¤ root æ¬åã"
+msgstr ""
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr "å¨æ¤å¹³å°ä¸å°æªæ¯æ´ç³»çµ±å
¨å模å¼ã"
+msgstr ""
#: ../src/daemon/main.c:297
-#, fuzzy, c-format
+#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr "ç£ç¢åå²å¤±æï¼%s"
+msgstr ""
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr "解æå½ä»¤å失æã"
+msgstr ""
#: ../src/daemon/main.c:541
msgid "Daemon not running"
-msgstr "å¹å¾ç¨å¼å°æªå·è¡ä¸"
+msgstr "å¹å¾ç¨å¼æ²æå¨å·è¡ä¸"
#: ../src/daemon/main.c:543
#, c-format
msgid "Daemon running as PID %u"
-msgstr "å¹å¾ç¨å¼æ£å¨ä»¥ PID %u å·è¡ä¸"
+msgstr ""
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr "ç¡æ³çµæ¢å¹å¾ç¨å¼ï¼%s"
+msgstr ""
#: ../src/daemon/main.c:571
msgid "This program is not intended to be run as root (unless --system is specified)."
@@ -180,7 +180,7 @@ msgstr ""
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr "éè¦ root æ¬åã"
+msgstr ""
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
@@ -203,43 +203,42 @@ msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
#: ../src/daemon/main.c:621
-#, fuzzy
msgid "Failed to acquire stdio."
-msgstr "è®åç®é %s 失æï¼%m"
+msgstr ""
#: ../src/daemon/main.c:627
-#, fuzzy, c-format
+#, c-format
msgid "pipe failed: %s"
-msgstr "ç£ç¢åå²å¤±æï¼%s"
+msgstr ""
#: ../src/daemon/main.c:632
-#, fuzzy, c-format
+#, c-format
msgid "fork() failed: %s"
-msgstr "ç£ç¢åå²å¤±æï¼%s"
+msgstr ""
#: ../src/daemon/main.c:646
#: ../src/utils/pacat.c:508
-#, fuzzy, c-format
+#, c-format
msgid "read() failed: %s"
-msgstr "è®åç®é %s 失æï¼%m"
+msgstr ""
#: ../src/daemon/main.c:652
msgid "Daemon startup failed."
-msgstr "å¹å¾ç¨å¼åå失æã"
+msgstr ""
#: ../src/daemon/main.c:654
msgid "Daemon startup successful."
-msgstr "å¹å¾ç¨å¼ååæåã"
+msgstr ""
#: ../src/daemon/main.c:731
#, c-format
msgid "This is PulseAudio %s"
-msgstr "éæ¯ PulseAudio %s"
+msgstr ""
#: ../src/daemon/main.c:732
-#, fuzzy, c-format
+#, c-format
msgid "Compilation host: %s"
-msgstr "主æ©ï¼host:portï¼"
+msgstr ""
#: ../src/daemon/main.c:733
#, c-format
@@ -247,14 +246,14 @@ msgid "Compilation CFLAGS: %s"
msgstr ""
#: ../src/daemon/main.c:736
-#, fuzzy, c-format
+#, c-format
msgid "Running on host: %s"
-msgstr "%s %s å®è£å¨ä¸»æ© %s"
+msgstr ""
#: ../src/daemon/main.c:739
#, c-format
msgid "Found %u CPUs."
-msgstr "æ¾å° %u å CPUã"
+msgstr ""
#: ../src/daemon/main.c:741
#, c-format
@@ -263,24 +262,24 @@ msgstr ""
#: ../src/daemon/main.c:744
msgid "Compiled with Valgrind support: yes"
-msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼æ¯"
+msgstr ""
#: ../src/daemon/main.c:746
msgid "Compiled with Valgrind support: no"
-msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼å¦"
+msgstr ""
#: ../src/daemon/main.c:749
#, c-format
msgid "Running in valgrind mode: %s"
-msgstr "æ£å¨ä»¥ valgrind 模å¼å·è¡ä¸ï¼%s"
+msgstr ""
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
-msgstr "æä½³åç建æ§çæ¬ï¼æ¯"
+msgstr ""
#: ../src/daemon/main.c:754
msgid "Optimized build: no"
-msgstr "æä½³åç建æ§çæ¬ï¼å¦"
+msgstr ""
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
@@ -291,43 +290,42 @@ msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
#: ../src/daemon/main.c:762
-#, fuzzy
msgid "All asserts enabled."
-msgstr "æªåç¨ä»»ä½è»é«å¥ä»¶åº«"
+msgstr ""
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
-msgstr "ç¡æ³åå¾æ©å¨ ID"
+msgstr ""
#: ../src/daemon/main.c:769
#, c-format
msgid "Machine ID is %s."
-msgstr "æ©å¨ ID çº %sã"
+msgstr ""
#: ../src/daemon/main.c:773
#, c-format
msgid "Session ID is %s."
-msgstr "ä½æ¥é段 ID çº %sã"
+msgstr ""
#: ../src/daemon/main.c:779
-#, fuzzy, c-format
+#, c-format
msgid "Using runtime directory %s."
-msgstr "åæ¾æ åæªçç®éï¼"
+msgstr ""
#: ../src/daemon/main.c:784
-#, fuzzy, c-format
+#, c-format
msgid "Using state directory %s."
-msgstr "åæ¾æ åæªçç®éï¼"
+msgstr ""
#: ../src/daemon/main.c:787
-#, fuzzy, c-format
+#, c-format
msgid "Using modules directory %s."
-msgstr "åæ¾æ åæªçç®éï¼"
+msgstr ""
#: ../src/daemon/main.c:789
-#, fuzzy, c-format
+#, c-format
msgid "Running in system mode: %s"
-msgstr "å¨å½ä»¤å模å¼ä¸å¯æä¸ååèï¼"
+msgstr ""
#: ../src/daemon/main.c:792
msgid ""
@@ -354,7 +352,7 @@ msgstr ""
#: ../src/daemon/main.c:904
msgid "Failed to initialize daemon."
-msgstr "åå§åå¹å¾ç¨å¼å¤±æã"
+msgstr ""
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
@@ -362,15 +360,15 @@ msgstr ""
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
-msgstr "å¹å¾ç¨å¼ååå®æã"
+msgstr ""
#: ../src/daemon/main.c:932
msgid "Daemon shutdown initiated."
-msgstr "å·²éå§ééå¹å¾ç¨å¼ã"
+msgstr ""
#: ../src/daemon/main.c:954
msgid "Daemon terminated."
-msgstr "å¹å¾ç¨å¼å·²çµæ¢ã"
+msgstr ""
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -467,7 +465,7 @@ msgstr ""
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr "ç¡æçç´éç®æ¨ï¼è«ä½¿ç¨ãsyslogãããstderrãææ¯ãautoãã"
+msgstr ""
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
@@ -480,7 +478,7 @@ msgstr ""
#: ../src/daemon/cmdline.c:354
#, c-format
msgid "Invalid resample method '%s'."
-msgstr "ç¡æçéæ°å樣æ¹æ³ã%sãã"
+msgstr ""
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
@@ -497,67 +495,67 @@ msgstr ""
#: ../src/daemon/dumpmodules.c:60
#, c-format
msgid "Name: %s\n"
-msgstr "å稱ï¼%s\n"
+msgstr ""
#: ../src/daemon/dumpmodules.c:63
#, c-format
msgid "No module information available\n"
-msgstr "æ²æå¯ç¨ç模çµè³è¨\n"
+msgstr ""
#: ../src/daemon/dumpmodules.c:66
#, c-format
msgid "Version: %s\n"
-msgstr "çæ¬ï¼%s\n"
+msgstr ""
#: ../src/daemon/dumpmodules.c:68
#, c-format
msgid "Description: %s\n"
-msgstr "æè¿°ï¼%s\n"
+msgstr ""
#: ../src/daemon/dumpmodules.c:70
#, c-format
msgid "Author: %s\n"
-msgstr "ä½è
ï¼%s\n"
+msgstr ""
#: ../src/daemon/dumpmodules.c:72
#, c-format
msgid "Usage: %s\n"
-msgstr "使ç¨çï¼%s\n"
+msgstr ""
#: ../src/daemon/dumpmodules.c:73
-#, fuzzy, c-format
+#, c-format
msgid "Load Once: %s\n"
-msgstr "è¼å
¥å¦ä¸å¼µç¢ç"
+msgstr ""
#: ../src/daemon/dumpmodules.c:75
-#, fuzzy, c-format
+#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr "ç£ç¢åå²è¦å"
+msgstr ""
#: ../src/daemon/dumpmodules.c:79
#, c-format
msgid "Path: %s\n"
-msgstr "è·¯å¾ï¼%s\n"
+msgstr ""
#: ../src/daemon/daemon-conf.c:232
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid log target '%s'."
-msgstr "è¨æé è¨éæ©ç®æ¨ (_T)"
+msgstr ""
#: ../src/daemon/daemon-conf.c:248
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid log level '%s'."
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/daemon/daemon-conf.c:264
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "æªç¥ç Url æ¹æ³ %s"
+msgstr ""
#: ../src/daemon/daemon-conf.c:287
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "ç¡æçéé°"
+msgstr ""
#: ../src/daemon/daemon-conf.c:294
#, c-format
@@ -565,44 +563,44 @@ msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
#: ../src/daemon/daemon-conf.c:310
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "è¦æ ¼å¼åçº Swap åå²ååï¼"
+msgstr ""
#: ../src/daemon/daemon-conf.c:328
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/daemon/daemon-conf.c:352
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/daemon/daemon-conf.c:370
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/daemon/daemon-conf.c:388
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/daemon/daemon-conf.c:406
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "輸å
¥çåå²å大å°ç¡æ"
+msgstr ""
#: ../src/daemon/daemon-conf.c:424
-#, fuzzy, c-format
+#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/daemon/daemon-conf.c:546
-#, fuzzy, c-format
+#, c-format
msgid "Failed to open configuration file: %s"
-msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
+msgstr ""
#: ../src/daemon/daemon-conf.c:562
msgid "The specified default channel map has a different number of channels than the specified default number of channels."
@@ -614,17 +612,16 @@ msgid "### Read from configuration file: %s ###\n"
msgstr ""
#: ../src/daemon/caps.c:62
-#, fuzzy
msgid "Cleaning up privileges."
-msgstr "è¨å®å¥ä»¶åº«æç¼çé¯èª¤"
+msgstr ""
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
-msgstr "PulseAudio é³æ系統"
+msgstr ""
#: ../src/daemon/pulseaudio.desktop.in.h:2
msgid "Start the PulseAudio Sound System"
-msgstr "åå PulseAudio é³æ系統"
+msgstr ""
#: ../src/pulse/channelmap.c:105
#: ../src/pulse/channelmap.c:757
@@ -633,203 +630,203 @@ msgstr "å®è²é"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
-msgstr ""
+msgstr "åæ¹ä¸å¤®"
#: ../src/pulse/channelmap.c:108
msgid "Front Left"
-msgstr ""
+msgstr "åæ¹å·¦å´"
#: ../src/pulse/channelmap.c:109
msgid "Front Right"
-msgstr ""
+msgstr "åæ¹å³å´"
#: ../src/pulse/channelmap.c:111
msgid "Rear Center"
-msgstr ""
+msgstr "å¾æ¹ä¸å¤®"
#: ../src/pulse/channelmap.c:112
msgid "Rear Left"
-msgstr ""
+msgstr "å¾æ¹å·¦å´"
#: ../src/pulse/channelmap.c:113
msgid "Rear Right"
-msgstr ""
+msgstr "å¾æ¹å³å´"
#: ../src/pulse/channelmap.c:115
msgid "Low Frequency Emmiter"
-msgstr ""
+msgstr "ä½é »çæè²å¨"
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
-msgstr ""
+msgstr "åæ¹ä¸å¤®åå·¦"
#: ../src/pulse/channelmap.c:118
msgid "Front Right-of-center"
-msgstr ""
+msgstr "åæ¹ä¸å¤®åå³"
#: ../src/pulse/channelmap.c:120
msgid "Side Left"
-msgstr ""
+msgstr "å·¦å´"
#: ../src/pulse/channelmap.c:121
msgid "Side Right"
-msgstr ""
+msgstr "å³å´"
#: ../src/pulse/channelmap.c:123
msgid "Auxiliary 0"
-msgstr "è¼å©è¼¸å
¥ 0"
+msgstr "è¼å© 0"
#: ../src/pulse/channelmap.c:124
msgid "Auxiliary 1"
-msgstr ""
+msgstr "è¼å© 1"
#: ../src/pulse/channelmap.c:125
msgid "Auxiliary 2"
-msgstr ""
+msgstr "è¼å© 2"
#: ../src/pulse/channelmap.c:126
msgid "Auxiliary 3"
-msgstr ""
+msgstr "è¼å© 3"
#: ../src/pulse/channelmap.c:127
msgid "Auxiliary 4"
-msgstr ""
+msgstr "è¼å© 4"
#: ../src/pulse/channelmap.c:128
msgid "Auxiliary 5"
-msgstr ""
+msgstr "è¼å© 5"
#: ../src/pulse/channelmap.c:129
msgid "Auxiliary 6"
-msgstr ""
+msgstr "è¼å© 6"
#: ../src/pulse/channelmap.c:130
msgid "Auxiliary 7"
-msgstr ""
+msgstr "è¼å© 7"
#: ../src/pulse/channelmap.c:131
msgid "Auxiliary 8"
-msgstr ""
+msgstr "è¼å© 8"
#: ../src/pulse/channelmap.c:132
msgid "Auxiliary 9"
-msgstr ""
+msgstr "è¼å© 9"
#: ../src/pulse/channelmap.c:133
msgid "Auxiliary 10"
-msgstr ""
+msgstr "è¼å© 10"
#: ../src/pulse/channelmap.c:134
msgid "Auxiliary 11"
-msgstr ""
+msgstr "è¼å© 11"
#: ../src/pulse/channelmap.c:135
msgid "Auxiliary 12"
-msgstr ""
+msgstr "è¼å© 12"
#: ../src/pulse/channelmap.c:136
msgid "Auxiliary 13"
-msgstr ""
+msgstr "è¼å© 13"
#: ../src/pulse/channelmap.c:137
msgid "Auxiliary 14"
-msgstr ""
+msgstr "è¼å© 14"
#: ../src/pulse/channelmap.c:138
msgid "Auxiliary 15"
-msgstr ""
+msgstr "è¼å© 15"
#: ../src/pulse/channelmap.c:139
msgid "Auxiliary 16"
-msgstr ""
+msgstr "è¼å© 16"
#: ../src/pulse/channelmap.c:140
msgid "Auxiliary 17"
-msgstr ""
+msgstr "è¼å© 17"
#: ../src/pulse/channelmap.c:141
msgid "Auxiliary 18"
-msgstr ""
+msgstr "è¼å© 18"
#: ../src/pulse/channelmap.c:142
msgid "Auxiliary 19"
-msgstr ""
+msgstr "è¼å© 19"
#: ../src/pulse/channelmap.c:143
msgid "Auxiliary 20"
-msgstr ""
+msgstr "è¼å© 20"
#: ../src/pulse/channelmap.c:144
msgid "Auxiliary 21"
-msgstr ""
+msgstr "è¼å© 21"
#: ../src/pulse/channelmap.c:145
msgid "Auxiliary 22"
-msgstr ""
+msgstr "è¼å© 22"
#: ../src/pulse/channelmap.c:146
msgid "Auxiliary 23"
-msgstr ""
+msgstr "è¼å© 23"
#: ../src/pulse/channelmap.c:147
msgid "Auxiliary 24"
-msgstr ""
+msgstr "è¼å© 24"
#: ../src/pulse/channelmap.c:148
msgid "Auxiliary 25"
-msgstr ""
+msgstr "è¼å© 25"
#: ../src/pulse/channelmap.c:149
msgid "Auxiliary 26"
-msgstr ""
+msgstr "è¼å© 26"
#: ../src/pulse/channelmap.c:150
msgid "Auxiliary 27"
-msgstr ""
+msgstr "è¼å© 27"
#: ../src/pulse/channelmap.c:151
msgid "Auxiliary 28"
-msgstr ""
+msgstr "è¼å© 28"
#: ../src/pulse/channelmap.c:152
msgid "Auxiliary 29"
-msgstr ""
+msgstr "è¼å© 29"
#: ../src/pulse/channelmap.c:153
msgid "Auxiliary 30"
-msgstr ""
+msgstr "è¼å© 30"
#: ../src/pulse/channelmap.c:154
msgid "Auxiliary 31"
-msgstr ""
+msgstr "è¼å© 31"
#: ../src/pulse/channelmap.c:156
msgid "Top Center"
-msgstr ""
+msgstr "é 端ä¸å¤®"
#: ../src/pulse/channelmap.c:158
msgid "Top Front Center"
-msgstr ""
+msgstr "é 端åæ¹ä¸å¤®"
#: ../src/pulse/channelmap.c:159
msgid "Top Front Left"
-msgstr ""
+msgstr "é 端åæ¹å·¦å´"
#: ../src/pulse/channelmap.c:160
msgid "Top Front Right"
-msgstr ""
+msgstr "é 端åæ¹å³å´"
#: ../src/pulse/channelmap.c:162
msgid "Top Rear Center"
-msgstr ""
+msgstr "é 端å¾æ¹ä¸å¤®"
#: ../src/pulse/channelmap.c:163
msgid "Top Rear Left"
-msgstr ""
+msgstr "é 端å¾æ¹å·¦å´"
#: ../src/pulse/channelmap.c:164
msgid "Top Rear Right"
-msgstr ""
+msgstr "é 端å¾æ¹å³å´"
#: ../src/pulse/channelmap.c:484
#: ../src/pulse/sample.c:170
@@ -846,72 +843,71 @@ msgstr "ç«é«è²"
#: ../src/pulse/channelmap.c:766
msgid "Surround 4.0"
-msgstr "ç°ç¹é³æ 4.0"
+msgstr "ç°ç¹è² 4.0"
#: ../src/pulse/channelmap.c:772
msgid "Surround 4.1"
-msgstr "ç°ç¹é³æ 4.1"
+msgstr "ç°ç¹è² 4.1"
#: ../src/pulse/channelmap.c:778
msgid "Surround 5.0"
-msgstr "ç°ç¹é³æ 5.0"
+msgstr "ç°ç¹è² 5.0"
#: ../src/pulse/channelmap.c:784
msgid "Surround 5.1"
-msgstr "ç°ç¹é³æ 5.1"
+msgstr "ç°ç¹è² 5.1"
#: ../src/pulse/channelmap.c:791
msgid "Surround 7.1"
-msgstr "ç°ç¹é³æ 7.1"
+msgstr "ç°ç¹è² 7.1"
#: ../src/pulse/error.c:43
msgid "OK"
-msgstr "確èª"
+msgstr "確å®"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr "åååæ"
+msgstr ""
#: ../src/pulse/error.c:45
msgid "Unknown command"
-msgstr "æªç¥çæ令"
+msgstr ""
#: ../src/pulse/error.c:46
msgid "Invalid argument"
-msgstr "ç¡æçåæ¸"
+msgstr ""
#: ../src/pulse/error.c:47
msgid "Entity exists"
msgstr ""
#: ../src/pulse/error.c:48
-#, fuzzy
msgid "No such entity"
-msgstr "æ²æå¯ç¨ç網路"
+msgstr ""
#: ../src/pulse/error.c:49
msgid "Connection refused"
-msgstr "é£æ¥åæ"
+msgstr ""
#: ../src/pulse/error.c:50
msgid "Protocol error"
-msgstr "åå®é¯èª¤"
+msgstr ""
#: ../src/pulse/error.c:51
msgid "Timeout"
-msgstr "é¾æ"
+msgstr ""
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr "æ²æææ¬éé°"
+msgstr ""
#: ../src/pulse/error.c:53
msgid "Internal error"
-msgstr "å
§é¨é¯èª¤"
+msgstr ""
#: ../src/pulse/error.c:54
msgid "Connection terminated"
-msgstr "é£æ¥å·²çµæ¢"
+msgstr ""
#: ../src/pulse/error.c:55
msgid "Entity killed"
@@ -919,61 +915,55 @@ msgstr ""
#: ../src/pulse/error.c:56
msgid "Invalid server"
-msgstr "ç¡æç伺æå¨"
+msgstr ""
#: ../src/pulse/error.c:57
msgid "Module initalization failed"
-msgstr "模çµåå§å失æ"
+msgstr ""
#: ../src/pulse/error.c:58
msgid "Bad state"
-msgstr "ä¸è¯ççæ
"
+msgstr ""
#: ../src/pulse/error.c:59
msgid "No data"
-msgstr "ç¡è³æ"
+msgstr ""
#: ../src/pulse/error.c:60
msgid "Incompatible protocol version"
-msgstr "ä¸ç¸å®¹çåå®çæ¬"
+msgstr ""
#: ../src/pulse/error.c:61
msgid "Too large"
-msgstr "太大"
+msgstr ""
#: ../src/pulse/error.c:62
msgid "Not supported"
-msgstr "æªæ¯æ´"
+msgstr ""
#: ../src/pulse/error.c:63
msgid "Unknown error code"
-msgstr "æªç¥çé¯èª¤ç¢¼"
+msgstr ""
#: ../src/pulse/error.c:64
-#, fuzzy
msgid "No such extension"
-msgstr "æ²æå¯ç¨ç網路"
+msgstr ""
#: ../src/pulse/error.c:65
msgid "Obsolete functionality"
-msgstr "æ£ç¨çåè½"
+msgstr ""
#: ../src/pulse/error.c:66
-#, fuzzy
msgid "Missing implementation"
-msgstr "æ¾ä¸å°å¥ä»¶"
+msgstr ""
#: ../src/pulse/error.c:67
msgid "Client forked"
msgstr ""
#: ../src/pulse/error.c:68
-#, fuzzy
msgid "Input/Output error"
msgstr ""
-"éæ°è¨èª¿æ´åå²å %s ç大å°æç¼çé¯èª¤ã\n"
-"\n"
-"%s"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
@@ -1006,18 +996,17 @@ msgstr ""
#: ../src/pulse/client-conf-x11.c:55
#: ../src/utils/pax11publish.c:100
-#, fuzzy
msgid "XOpenDisplay() failed"
-msgstr "ç£ç¢åå²å¤±æï¼%s"
+msgstr ""
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
msgstr ""
#: ../src/pulse/client-conf.c:111
-#, fuzzy, c-format
+#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
+msgstr ""
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
@@ -1039,18 +1028,17 @@ msgid "Received message for unknown extension '%s'"
msgstr ""
#: ../src/utils/pacat.c:108
-#, fuzzy, c-format
+#, c-format
msgid "Failed to drain stream: %s"
-msgstr "è®åç®é %s 失æï¼%m"
+msgstr ""
#: ../src/utils/pacat.c:113
msgid "Playback stream drained."
msgstr ""
#: ../src/utils/pacat.c:123
-#, fuzzy
msgid "Draining connection to server."
-msgstr "å³éè³é 端伺æå¨ï¼scpï¼"
+msgstr ""
#: ../src/utils/pacat.c:136
#, c-format
@@ -1074,9 +1062,8 @@ msgid "pa_stream_peek() failed: %s"
msgstr ""
#: ../src/utils/pacat.c:307
-#, fuzzy
msgid "Stream successfully created."
-msgstr "串æµå·²æå建ç«\n"
+msgstr ""
#: ../src/utils/pacat.c:310
#, c-format
@@ -1094,39 +1081,39 @@ msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr ""
#: ../src/utils/pacat.c:321
-#, fuzzy, c-format
+#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "æ£ä½¿ç¨å樣è¦æ ¼ã%sã\n"
+msgstr ""
#: ../src/utils/pacat.c:325
-#, fuzzy, c-format
+#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "é¸åè¦è¼å
¥çè£ç½®é©
åç¨å¼"
+msgstr ""
#: ../src/utils/pacat.c:335
-#, fuzzy, c-format
+#, c-format
msgid "Stream error: %s"
-msgstr "è¨å®åå²åé¯èª¤"
+msgstr ""
#: ../src/utils/pacat.c:345
-#, fuzzy, c-format
+#, c-format
msgid "Stream device suspended.%s"
-msgstr "編輯 RAID è£ç½®"
+msgstr ""
#: ../src/utils/pacat.c:347
-#, fuzzy, c-format
+#, c-format
msgid "Stream device resumed.%s"
-msgstr "編輯 RAID è£ç½®"
+msgstr ""
#: ../src/utils/pacat.c:355
-#, fuzzy, c-format
+#, c-format
msgid "Stream underrun.%s"
-msgstr "串æµé¯èª¤ï¼%s\n"
+msgstr ""
#: ../src/utils/pacat.c:362
-#, fuzzy, c-format
+#, c-format
msgid "Stream overrun.%s"
-msgstr "串æµé¯èª¤ï¼%s\n"
+msgstr ""
#: ../src/utils/pacat.c:369
#, c-format
@@ -1139,9 +1126,8 @@ msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr ""
#: ../src/utils/pacat.c:376
-#, fuzzy
msgid "not "
-msgstr "æ¾ä¸å° %s"
+msgstr ""
#: ../src/utils/pacat.c:383
#, c-format
@@ -1149,9 +1135,9 @@ msgid "Stream buffer attributes changed.%s"
msgstr ""
#: ../src/utils/pacat.c:415
-#, fuzzy, c-format
+#, c-format
msgid "Connection established.%s"
-msgstr "æ£å¨çå telnet é£ç·..."
+msgstr ""
#: ../src/utils/pacat.c:418
#, c-format
@@ -1170,29 +1156,27 @@ msgstr ""
#: ../src/utils/pacat.c:470
#: ../src/utils/pactl.c:857
-#, fuzzy, c-format
+#, c-format
msgid "Connection failure: %s"
-msgstr "æ令稿å°ç¨å¼å¤±æ"
+msgstr ""
#: ../src/utils/pacat.c:503
-#, fuzzy
msgid "Got EOF."
-msgstr "åå¾æªæ¡çµå°¾ (EOF)ã\n"
+msgstr ""
#: ../src/utils/pacat.c:540
-#, fuzzy, c-format
+#, c-format
msgid "write() failed: %s"
-msgstr "ç£ç¢åå²å¤±æï¼%s"
+msgstr ""
#: ../src/utils/pacat.c:561
-#, fuzzy
msgid "Got signal, exiting."
-msgstr "åå¾è¨èï¼æ£å¨é¢éã\n"
+msgstr ""
#: ../src/utils/pacat.c:575
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get latency: %s"
-msgstr "è®åç®é %s 失æï¼%m"
+msgstr ""
#: ../src/utils/pacat.c:580
#, c-format
@@ -1255,44 +1239,43 @@ msgstr ""
#: ../src/utils/pacat.c:764
#: ../src/utils/pactl.c:953
-#, fuzzy, c-format
+#, c-format
msgid "Invalid client name '%s'"
-msgstr "Initiator å稱ç¡æ"
+msgstr ""
#: ../src/utils/pacat.c:779
-#, fuzzy, c-format
+#, c-format
msgid "Invalid stream name '%s'"
-msgstr "Initiator å稱ç¡æ"
+msgstr ""
#: ../src/utils/pacat.c:816
-#, fuzzy, c-format
+#, c-format
msgid "Invalid channel map '%s'"
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/utils/pacat.c:845
-#, fuzzy, c-format
+#, c-format
msgid "Invalid latency specification '%s'"
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/utils/pacat.c:852
-#, fuzzy, c-format
+#, c-format
msgid "Invalid process time specification '%s'"
-msgstr "ç¡æçéæ°å樣æ¹æ³ã%sãã"
+msgstr ""
#: ../src/utils/pacat.c:864
-#, fuzzy, c-format
+#, c-format
msgid "Invalid property '%s'"
-msgstr "ç¡æçéé°"
+msgstr ""
#: ../src/utils/pacat.c:881
-#, fuzzy, c-format
+#, c-format
msgid "Unknown file format %s."
-msgstr "è¦æ ¼å¼åçº Swap åå²ååï¼"
+msgstr ""
#: ../src/utils/pacat.c:900
-#, fuzzy
msgid "Invalid sample specification"
-msgstr "ç¡æçé¯èª¤è³è¨"
+msgstr ""
#: ../src/utils/pacat.c:910
#, c-format
@@ -1305,19 +1288,16 @@ msgid "dup2(): %s"
msgstr ""
#: ../src/utils/pacat.c:922
-#, fuzzy
msgid "Too many arguments."
-msgstr "太å¤åæ´ç£ç¢æ©"
+msgstr ""
#: ../src/utils/pacat.c:933
-#, fuzzy
msgid "Failed to generate sample specification for file."
-msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
+msgstr ""
#: ../src/utils/pacat.c:953
-#, fuzzy
msgid "Failed to open audio file."
-msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
+msgstr ""
#: ../src/utils/pacat.c:959
msgid "Warning: specified sample specification will be overwritten with specification from file."
@@ -1325,18 +1305,16 @@ msgstr ""
#: ../src/utils/pacat.c:962
#: ../src/utils/pactl.c:997
-#, fuzzy
msgid "Failed to determine sample specification from file."
-msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
+msgstr ""
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
msgstr ""
#: ../src/utils/pacat.c:982
-#, fuzzy
msgid "Channel map doesn't match sample specification"
-msgstr "é »éå°æ表ä¸ç¬¦åæªæ¡ã\n"
+msgstr ""
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
@@ -1349,11 +1327,11 @@ msgstr ""
#: ../src/utils/pacat.c:1009
msgid "recording"
-msgstr "æ£å¨é製"
+msgstr ""
#: ../src/utils/pacat.c:1009
msgid "playback"
-msgstr "ææ¾æ§å¶"
+msgstr ""
#: ../src/utils/pacat.c:1035
#: ../src/utils/pactl.c:1267
@@ -1361,9 +1339,8 @@ msgid "pa_mainloop_new() failed."
msgstr ""
#: ../src/utils/pacat.c:1054
-#, fuzzy
msgid "io_new() failed."
-msgstr "LVM æä½å¤±æ"
+msgstr ""
#: ../src/utils/pacat.c:1061
#: ../src/utils/pactl.c:1279
@@ -1396,14 +1373,14 @@ msgid "execvp(): %s\n"
msgstr ""
#: ../src/utils/pasuspender.c:109
-#, fuzzy, c-format
+#, c-format
msgid "Failure to suspend: %s\n"
-msgstr "ç¡æ³ç»å
¥"
+msgstr ""
#: ../src/utils/pasuspender.c:124
-#, fuzzy, c-format
+#, c-format
msgid "Failure to resume: %s\n"
-msgstr "ç¡æ³ç»å
¥"
+msgstr ""
#: ../src/utils/pasuspender.c:147
#, c-format
@@ -1411,9 +1388,9 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
#: ../src/utils/pasuspender.c:159
-#, fuzzy, c-format
+#, c-format
msgid "Connection failure: %s\n"
-msgstr "æ令稿å°ç¨å¼å¤±æ"
+msgstr ""
#: ../src/utils/pasuspender.c:176
#, c-format
@@ -1460,9 +1437,9 @@ msgid "pa_mainloop_run() failed.\n"
msgstr ""
#: ../src/utils/pactl.c:135
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get statistics: %s"
-msgstr "è®åç®é %s 失æï¼%m"
+msgstr ""
#: ../src/utils/pactl.c:141
#, c-format
@@ -1475,14 +1452,14 @@ msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
#: ../src/utils/pactl.c:147
-#, fuzzy, c-format
+#, c-format
msgid "Sample cache size: %s\n"
-msgstr "é¡å¤ç大å°é¸é
"
+msgstr ""
#: ../src/utils/pactl.c:156
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get server information: %s"
-msgstr "ç¡æ³åå¾æ©å¨ ID"
+msgstr ""
#: ../src/utils/pactl.c:164
#, c-format
@@ -1499,9 +1476,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:205
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink information: %s"
-msgstr "ç¡æ³åå¾æ©å¨ ID"
+msgstr ""
#: ../src/utils/pactl.c:221
#, c-format
@@ -1533,14 +1510,14 @@ msgstr ""
#: ../src/utils/pactl.c:274
#: ../src/utils/pactl.c:366
-#, fuzzy, c-format
+#, c-format
msgid "\tActive Port: %s\n"
-msgstr "主æ©ï¼host:portï¼"
+msgstr ""
#: ../src/utils/pactl.c:297
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source information: %s"
-msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
+msgstr ""
#: ../src/utils/pactl.c:313
#, c-format
@@ -1578,12 +1555,12 @@ msgstr ""
#: ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
-msgstr "ä¸åå¨"
+msgstr ""
#: ../src/utils/pactl.c:375
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get module information: %s"
-msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
+msgstr ""
#: ../src/utils/pactl.c:393
#, c-format
@@ -1597,9 +1574,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:412
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get client information: %s"
-msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
+msgstr ""
#: ../src/utils/pactl.c:430
#, c-format
@@ -1612,9 +1589,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:447
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get card information: %s"
-msgstr "ç¡æ³åå¾æ©å¨ ID"
+msgstr ""
#: ../src/utils/pactl.c:465
#, c-format
@@ -1638,9 +1615,9 @@ msgid "\tActive Profile: %s\n"
msgstr ""
#: ../src/utils/pactl.c:496
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "ç¡æ³çµæ¢å¹å¾ç¨å¼ï¼%s"
+msgstr ""
#: ../src/utils/pactl.c:515
#, c-format
@@ -1664,9 +1641,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:554
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get source output information: %s"
-msgstr "ç¡æ³è®æ´ç¾¤çµæ¸
å®ï¼%s"
+msgstr ""
#: ../src/utils/pactl.c:574
#, c-format
@@ -1686,9 +1663,9 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:605
-#, fuzzy, c-format
+#, c-format
msgid "Failed to get sample information: %s"
-msgstr "ç¡æ³ä¸å³å樣ï¼%s\n"
+msgstr ""
#: ../src/utils/pactl.c:623
#, c-format
@@ -1710,24 +1687,22 @@ msgstr ""
#: ../src/utils/pactl.c:653
#: ../src/utils/pactl.c:663
-#, fuzzy, c-format
+#, c-format
msgid "Failure: %s"
-msgstr "æ令稿å°ç¨å¼å¤±æ"
+msgstr ""
#: ../src/utils/pactl.c:687
-#, fuzzy, c-format
+#, c-format
msgid "Failed to upload sample: %s"
-msgstr "è®åç®é %s 失æï¼%m"
+msgstr ""
#: ../src/utils/pactl.c:704
-#, fuzzy
msgid "Premature end of file"
-msgstr "æªç¶æ£å¸¸ç¨åºéæ©ï¼Dirtyï¼çæªæ¡ç³»çµ±"
+msgstr ""
#: ../src/utils/pactl.c:863
-#, fuzzy
msgid "Got SIGINT, exiting."
-msgstr "åå¾è¨èï¼æ£å¨é¢éã\n"
+msgstr ""
#: ../src/utils/pactl.c:869
#, c-format
@@ -1770,78 +1745,64 @@ msgid ""
msgstr ""
#: ../src/utils/pactl.c:979
-#, fuzzy
msgid "Please specify a sample file to load"
-msgstr "è«æå®ä¸ä»½æ¨£æ¬æªä»¥è¼å
¥\n"
+msgstr ""
#: ../src/utils/pactl.c:992
-#, fuzzy
msgid "Failed to open sound file."
-msgstr "å¾æªæ¡è¼å
¥é©
åç¨å¼ç¢ç失æã"
+msgstr ""
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
#: ../src/utils/pactl.c:1014
-#, fuzzy
msgid "You have to specify a sample name to play"
-msgstr "æ¨å¿
é æå®è¦ææ¾ç樣æ¬å稱\n"
+msgstr ""
#: ../src/utils/pactl.c:1026
-#, fuzzy
msgid "You have to specify a sample name to remove"
-msgstr "æ¨å¿
é æå®è¦ç§»é¤ç樣æ¬å稱\n"
+msgstr ""
#: ../src/utils/pactl.c:1035
-#, fuzzy
msgid "You have to specify a sink input index and a sink"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1045
-#, fuzzy
msgid "You have to specify a source output index and a source"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1060
-#, fuzzy
msgid "You have to specify a module name and arguments."
-msgstr "æ¨å¿
é æå®ä¸å模çµå稱èåæ¸ã\n"
+msgstr ""
#: ../src/utils/pactl.c:1080
-#, fuzzy
msgid "You have to specify a module index"
-msgstr "æ¨å¿
é æå®ä¸å模çµç´¢å¼\n"
+msgstr ""
#: ../src/utils/pactl.c:1090
-#, fuzzy
msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "ä½ å¯è½ç¡æ³æå®ä¸å以ä¸çä¾æºãæ¨å¿
é æå®ä¸åå¸æå¼ã\n"
+msgstr ""
#: ../src/utils/pactl.c:1103
-#, fuzzy
msgid "You may not specify more than one source. You have to specify a boolean value."
-msgstr "ä½ å¯è½ç¡æ³æå®ä¸å以ä¸çä¾æºãæ¨å¿
é æå®ä¸åå¸æå¼ã\n"
+msgstr ""
#: ../src/utils/pactl.c:1115
-#, fuzzy
msgid "You have to specify a card name/index and a profile name"
-msgstr "æ¨å¿
é æå®ä¸å模çµå稱èåæ¸ã\n"
+msgstr ""
#: ../src/utils/pactl.c:1126
-#, fuzzy
msgid "You have to specify a sink name/index and a port name"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1137
-#, fuzzy
msgid "You have to specify a source name/index and a port name"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1149
-#, fuzzy
msgid "You have to specify a sink name/index and a volume"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1154
#: ../src/utils/pactl.c:1171
@@ -1849,47 +1810,40 @@ msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
#: ../src/utils/pactl.c:1209
#: ../src/utils/pactl.c:1226
#: ../src/utils/pactl.c:1248
-#, fuzzy
msgid "Invalid volume specification"
-msgstr "é輯å·åå稱ï¼"
+msgstr ""
#: ../src/utils/pactl.c:1166
-#, fuzzy
msgid "You have to specify a source name/index and a volume"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1183
-#, fuzzy
msgid "You have to specify a sink input index and a volume"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1188
msgid "Invalid sink input index"
msgstr ""
#: ../src/utils/pactl.c:1204
-#, fuzzy
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "æ¨å¿
é æå®è¦ææ¾ç樣æ¬å稱\n"
+msgstr ""
#: ../src/utils/pactl.c:1221
-#, fuzzy
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1238
-#, fuzzy
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "æ¨å¿
é æå®ä¸åä¾æºç´¢å¼ä»¥åä¸åä¾æº\n"
+msgstr ""
#: ../src/utils/pactl.c:1243
msgid "Invalid sink input index specification"
msgstr ""
#: ../src/utils/pactl.c:1262
-#, fuzzy
msgid "No valid command specified."
-msgstr "å¨ç¶²è·¯æ令ä¸æå®äºä¸è¯ç bootproto %s"
+msgstr ""
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -1905,17 +1859,17 @@ msgstr ""
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr "ç¡æ³åæå½ä»¤åã\n"
+msgstr ""
#: ../src/utils/pax11publish.c:108
#, c-format
msgid "Server: %s\n"
-msgstr "伺æå¨ï¼%s\n"
+msgstr ""
#: ../src/utils/pax11publish.c:110
#, c-format
msgid "Source: %s\n"
-msgstr "ä¾æºï¼%s\n"
+msgstr ""
#: ../src/utils/pax11publish.c:112
#, c-format
@@ -1930,37 +1884,37 @@ msgstr ""
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr "ç¡æ³è§£æ cookie è³æ\n"
+msgstr ""
#: ../src/utils/pax11publish.c:137
#, c-format
msgid "Failed to save cookie data\n"
-msgstr "ç¡æ³å²å cookie è³æ\n"
+msgstr ""
#: ../src/utils/pax11publish.c:152
#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr "ç¡æ³è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
+msgstr ""
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr "ç¡æ³è®åç°å¢é
ç½®è³æã\n"
+msgstr ""
#: ../src/utils/pax11publish.c:174
#, c-format
msgid "Failed to get FQDN.\n"
-msgstr "ç¡æ³åå¾ FQDNã\n"
+msgstr ""
#: ../src/utils/pax11publish.c:194
#, c-format
msgid "Failed to load cookie data\n"
-msgstr "ç¡æ³è¼å
¥ cookie è³æ\n"
+msgstr ""
#: ../src/utils/pax11publish.c:211
#, c-format
msgid "Not yet implemented.\n"
-msgstr "å°æªå¯¦ç¾ã\n"
+msgstr ""
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
@@ -1978,11 +1932,11 @@ msgstr ""
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr "ç¡æ³çµæ PulseAudio å¹å¾ç¨å¼ã"
+msgstr ""
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
-msgstr "å¹å¾ç¨å¼ç®åæ²æåæã"
+msgstr ""
#: ../src/utils/pacmd.c:161
#, c-format
@@ -1991,9 +1945,9 @@ msgstr ""
#: ../src/utils/pacmd.c:171
#: ../src/utils/pacmd.c:188
-#, fuzzy, c-format
+#, c-format
msgid "read(): %s"
-msgstr "å¯è®"
+msgstr ""
#: ../src/utils/pacmd.c:207
#: ../src/utils/pacmd.c:223
@@ -2032,16 +1986,15 @@ msgstr "éé"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
msgid "High Fidelity Playback (A2DP)"
-msgstr "é«å³çææ¾ (A2DP)"
+msgstr "é«å³çææ¾è£ç½® (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
-#, fuzzy
msgid "High Fidelity Capture (A2DP)"
-msgstr "é«å³çææ¾ (A2DP)"
+msgstr "é«å³çæ·åè£ç½® (A2DP)"
#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
msgid "Telephony Duplex (HSP/HFP)"
-msgstr "é»è©±éçµç· (HSP/HFP)"
+msgstr "é»è©±éå·¥ (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
@@ -2049,25 +2002,21 @@ msgstr "PulseAudio é³æ伺æå¨"
#: ../src/modules/module-rygel-media-server.c:569
#: ../src/modules/module-rygel-media-server.c:583
-#, fuzzy
msgid "Output Devices"
-msgstr "æ¾ä¸å°è£ç½®"
+msgstr "輸åºè£ç½®"
#: ../src/modules/module-rygel-media-server.c:570
#: ../src/modules/module-rygel-media-server.c:584
-#, fuzzy
msgid "Input Devices"
-msgstr "æ¾ä¸å°è£ç½®"
+msgstr "輸å
¥è£ç½®"
#: ../src/modules/module-rygel-media-server.c:774
-#, fuzzy
msgid "Audio on @HOSTNAME@"
-msgstr "主æ©å稱é¯èª¤"
+msgstr "é³æä½æ¼ @HOSTNAME@"
#: ../src/modules/alsa/alsa-mixer.c:1701
-#, fuzzy
msgid "Input"
-msgstr "輸å
¥ç«¯ %s"
+msgstr "輸å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1702
msgid "Docking Station Input"
@@ -2078,35 +2027,32 @@ msgid "Docking Station Microphone"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1704
-#, fuzzy
msgid "Line-In"
-msgstr "æ£å¨é²è¡... "
+msgstr "ç·è·¯è¼¸å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1705
msgid "Microphone"
-msgstr ""
+msgstr "麥å
風"
#: ../src/modules/alsa/alsa-mixer.c:1706
msgid "External Microphone"
-msgstr ""
+msgstr "å¤æ¥éº¥å
風"
#: ../src/modules/alsa/alsa-mixer.c:1707
-#, fuzzy
msgid "Internal Microphone"
-msgstr "å
§é¨é³æ"
+msgstr "å
§å»ºéº¥å
風"
#: ../src/modules/alsa/alsa-mixer.c:1708
msgid "Radio"
-msgstr ""
+msgstr "ç¡ç·é»"
#: ../src/modules/alsa/alsa-mixer.c:1709
msgid "Video"
-msgstr ""
+msgstr "è¦è¨"
#: ../src/modules/alsa/alsa-mixer.c:1710
-#, fuzzy
msgid "Automatic Gain Control"
-msgstr "èªååå²ç£ç¢ç¼çé¯èª¤"
+msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
@@ -2117,62 +2063,52 @@ msgid "Boost"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1713
-#, fuzzy
msgid "No Boost"
-msgstr "ç¡å¯ç¢¼"
+msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1715
-#, fuzzy
msgid "No Amplifier"
-msgstr "ç¡å¯ç¢¼"
+msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1773
-#, fuzzy
msgid "Analog Input"
-msgstr "é¡æ¯å®è²é"
+msgstr "é¡æ¯è¼¸å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1774
-#, fuzzy
msgid "Analog Microphone"
-msgstr "é¡æ¯å®è²é"
+msgstr "é¡æ¯éº¥å
風"
#: ../src/modules/alsa/alsa-mixer.c:1775
-#, fuzzy
msgid "Analog Line-In"
-msgstr "æ¤åå²åæ£è¢«å®è£ç¨å¼ä½¿ç¨ã"
+msgstr "é¡æ¯ç·è·¯è¼¸å
¥"
#: ../src/modules/alsa/alsa-mixer.c:1776
-#, fuzzy
msgid "Analog Radio"
-msgstr "é¡æ¯å®è²é"
+msgstr "é¡æ¯ç¡ç·é»"
#: ../src/modules/alsa/alsa-mixer.c:1777
-#, fuzzy
msgid "Analog Video"
-msgstr "é¡æ¯ç«é«è²"
+msgstr "é¡æ¯è¦è¨"
#: ../src/modules/alsa/alsa-mixer.c:1778
-#, fuzzy
msgid "Analog Output"
-msgstr "é¡æ¯ç«é«è²"
+msgstr "é¡æ¯è¼¸åº"
#: ../src/modules/alsa/alsa-mixer.c:1779
-#, fuzzy
msgid "Analog Headphones"
-msgstr "é¡æ¯å®è²é"
+msgstr "é¡æ¯é æ´å¼éº¥å
風"
#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Output (LFE)"
-msgstr ""
+msgstr "é¡æ¯è¼¸åº (LFE)"
#: ../src/modules/alsa/alsa-mixer.c:1781
-#, fuzzy
msgid "Analog Mono Output"
-msgstr "é¡æ¯å®è²é"
+msgstr "é¡æ¯å®è²é輸åº"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
@@ -2194,19 +2130,16 @@ msgid "Analog Stereo"
msgstr "é¡æ¯ç«é«è²"
#: ../src/modules/alsa/alsa-mixer.c:2792
-#, fuzzy
msgid "Analog Surround 2.1"
-msgstr "é¡æ¯ç°ç¹è² 4.1"
+msgstr "é¡æ¯ç°ç¹è² 2.1"
#: ../src/modules/alsa/alsa-mixer.c:2793
-#, fuzzy
msgid "Analog Surround 3.0"
-msgstr "é¡æ¯ç°ç¹è² 4.0"
+msgstr "é¡æ¯ç°ç¹è² 3.0"
#: ../src/modules/alsa/alsa-mixer.c:2794
-#, fuzzy
msgid "Analog Surround 3.1"
-msgstr "é¡æ¯ç°ç¹è² 4.1"
+msgstr "é¡æ¯ç°ç¹è² 3.1"
#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Surround 4.0"
@@ -2225,19 +2158,16 @@ msgid "Analog Surround 5.1"
msgstr "é¡æ¯ç°ç¹è² 5.1"
#: ../src/modules/alsa/alsa-mixer.c:2799
-#, fuzzy
msgid "Analog Surround 6.0"
-msgstr "é¡æ¯ç°ç¹è² 4.0"
+msgstr "é¡æ¯ç°ç¹è² 6.0"
#: ../src/modules/alsa/alsa-mixer.c:2800
-#, fuzzy
msgid "Analog Surround 6.1"
-msgstr "é¡æ¯ç°ç¹è² 4.1"
+msgstr "é¡æ¯ç°ç¹è² 6.1"
#: ../src/modules/alsa/alsa-mixer.c:2801
-#, fuzzy
msgid "Analog Surround 7.0"
-msgstr "é¡æ¯ç°ç¹è² 4.0"
+msgstr "é¡æ¯ç°ç¹è² 7.0"
#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 7.1"
@@ -2248,13 +2178,12 @@ msgid "Digital Stereo (IEC958)"
msgstr "æ¸ä½ç«é«è² (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2804
-#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
-msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958/AC3)"
+msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958)"
#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958/AC3)"
+msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958/AC3)"
#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Digital Surround 5.1 (IEC958/AC3)"
@@ -2265,52 +2194,14 @@ msgid "Digital Stereo (HDMI)"
msgstr "æ¸ä½ç«é«è² (HDMI)"
#: ../src/modules/alsa/alsa-mixer.c:2928
-#, fuzzy
msgid "Analog Mono Duplex"
-msgstr "é¡æ¯å®è²é"
+msgstr "é¡æ¯å®è²ééå·¥"
#: ../src/modules/alsa/alsa-mixer.c:2929
-#, fuzzy
msgid "Analog Stereo Duplex"
-msgstr "é¡æ¯ç«é«è²"
+msgstr "é¡æ¯ç«é«è²éå·¥"
#: ../src/modules/alsa/alsa-mixer.c:2930
-#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
-msgstr "æ¸ä½ç«é«è² (IEC958)"
-
-#~ msgid "Cannot connect to system bus: %s"
-#~ msgstr "ç¡æ³é£æ¥å°ç³»çµ± busï¼ %s"
-#~ msgid "Cannot get caller from PID: %s"
-#~ msgstr "ç¡æ³åå¾ä¾èª PID çå¼å«ç¨å¼ï¼%s"
-#~ msgid "Cannot set UID on caller object."
-#~ msgstr "ç¡æ³å°å¼å«ç¨å¼å¨ç©ä»¶è¨å® UIDã"
-#~ msgid "Failed to get CK session."
-#~ msgstr "ç¡æ³åå¾ CK ä½æ¥é段ã"
-#~ msgid "Cannot set UID on session object."
-#~ msgstr "ç¡æ³å¨ä½æ¥é段ç©ä»¶ä¸è¨å® UIDã"
-#~ msgid "Cannot allocate PolKitAction."
-#~ msgstr "ç¡æ³åé
PolKitActionã"
-#~ msgid "Cannot set action_id"
-#~ msgstr "ç¡æ³è¨å® action_id"
-#~ msgid "Cannot allocate PolKitContext."
-#~ msgstr "ç¡æ³åé
PolKitContextã"
-#~ msgid "Cannot initialize PolKitContext: %s"
-#~ msgstr "ç¡æ³åå§å PolKitContextï¼%s"
-#~ msgid "Could not determine whether caller is authorized: %s"
-#~ msgstr "ç¡æ³æ±ºå®å¼å«ç¨å¼æ¯å¦åå¾ææ¬ï¼%s"
-#~ msgid "Cannot obtain auth: %s"
-#~ msgstr "ç¡æ³åå¾æ¬åï¼%s"
-#~ msgid "PolicyKit responded with '%s'"
-#~ msgstr "PolicyKit åæäºã%sã"
-#~ msgid "Successfully increased RLIMIT_RTPRIO"
-#~ msgstr "æåå°å¢å RLIMIT_RTPRIO"
-#~ msgid "RLIMIT_RTPRIO failed: %s"
-#~ msgstr "RLIMIT_RTPRIO 失æï¼%s"
-#~ msgid "Giving up CAP_NICE"
-#~ msgstr "æ£å¨æ¾æ£ CAP_NICE"
-#~ msgid "Failed to open file '%s'\n"
-#~ msgstr "ç¡æ³éåæªæ¡ã%sã\n"
-#~ msgid "Output %s + Input %s"
-#~ msgstr "輸åºç«¯ %s + 輸å
¥ç«¯ %s"
+msgstr "æ¸ä½ç«é«è²éå·¥ (IEC958)"
commit 3e463e0872daadd504881a1c03dfa36bed559985
Author: Cheng-Chia Tseng <pswo10680 at gmail.com>
Date: Fri Feb 19 12:10:30 2010 +0000
l10n: Updates to Chinese (Taiwan) (zh_TW) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 1a08823..40deec3 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PulseAudio Volume Control\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-02-05 08:05+0000\n"
-"PO-Revision-Date: 2010-02-19 19:41+0800\n"
+"PO-Revision-Date: 2010-02-19 20:10+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
"Language-Team: zh_TW\n"
"MIME-Version: 1.0\n"
@@ -21,7 +21,7 @@ msgstr ""
#: ../src/pulsecore/sink.c:2629
#, c-format
msgid "%s %s"
-msgstr ""
+msgstr "%s %s"
#: ../src/modules/alsa/alsa-util.c:1106
#, c-format
@@ -78,34 +78,34 @@ msgstr "æ¸ææ©"
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
-msgstr ""
+msgstr "æ¾ä¸å° original lt_dlopen loaderã"
#: ../src/daemon/ltdl-bind-now.c:129
msgid "Failed to allocate new dl loader."
-msgstr ""
+msgstr "åé
æ°ç dl loader 失æã"
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr ""
+msgstr "å å
¥ bind-now-loader 失æã"
#: ../src/daemon/main.c:141
#, c-format
msgid "Got signal %s."
-msgstr ""
+msgstr "åå¾ä¿¡è %sã"
#: ../src/daemon/main.c:168
msgid "Exiting."
-msgstr ""
+msgstr "æ£å¨éåºã"
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
-msgstr ""
+msgstr "å°æ¾ä½¿ç¨è
ã%sã失æã"
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr ""
+msgstr "å°æ¾ç¾¤çµã%sã失æã"
#: ../src/daemon/main.c:195
#, c-format
@@ -145,7 +145,7 @@ msgstr ""
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
-msgstr ""
+msgstr "æåå°æ¾ä¸ root ç¹æ¬ã"
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
@@ -158,7 +158,7 @@ msgstr ""
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr ""
+msgstr "解æå½ä»¤å失æã"
#: ../src/daemon/main.c:541
msgid "Daemon not running"
@@ -180,7 +180,7 @@ msgstr ""
#: ../src/daemon/main.c:573
msgid "Root privileges required."
-msgstr ""
+msgstr "éè¦ root ç¹æ¬ã"
#: ../src/daemon/main.c:578
msgid "--start not supported for system instances."
@@ -209,31 +209,31 @@ msgstr ""
#: ../src/daemon/main.c:627
#, c-format
msgid "pipe failed: %s"
-msgstr ""
+msgstr "pipe 失æ: %s"
#: ../src/daemon/main.c:632
#, c-format
msgid "fork() failed: %s"
-msgstr ""
+msgstr "fork() 失æ: %s"
#: ../src/daemon/main.c:646
#: ../src/utils/pacat.c:508
#, c-format
msgid "read() failed: %s"
-msgstr ""
+msgstr "read() 失æ: %s"
#: ../src/daemon/main.c:652
msgid "Daemon startup failed."
-msgstr ""
+msgstr "å¹å¾ç¨å¼åå失æã"
#: ../src/daemon/main.c:654
msgid "Daemon startup successful."
-msgstr ""
+msgstr "å¹å¾ç¨å¼ååæåã"
#: ../src/daemon/main.c:731
#, c-format
msgid "This is PulseAudio %s"
-msgstr ""
+msgstr "éæ¯ PulseAudio %s"
#: ../src/daemon/main.c:732
#, c-format
@@ -253,7 +253,7 @@ msgstr ""
#: ../src/daemon/main.c:739
#, c-format
msgid "Found %u CPUs."
-msgstr ""
+msgstr "æ¾å° %u å CPUã"
#: ../src/daemon/main.c:741
#, c-format
@@ -352,23 +352,23 @@ msgstr ""
#: ../src/daemon/main.c:904
msgid "Failed to initialize daemon."
-msgstr ""
+msgstr "åå§åå¹å¾ç¨å¼å¤±æã"
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr ""
+msgstr "å¹å¾ç¨å¼ååèæ²æä»»ä½è¼å
¥ç模çµï¼æçµéä½ã"
#: ../src/daemon/main.c:926
msgid "Daemon startup complete."
-msgstr ""
+msgstr "å¹å¾ç¨å¼ååå®æã"
#: ../src/daemon/main.c:932
msgid "Daemon shutdown initiated."
-msgstr ""
+msgstr "å¹å¾ç¨å¼å·²éå§ééã"
#: ../src/daemon/main.c:954
msgid "Daemon terminated."
-msgstr ""
+msgstr "å¹å¾ç¨å¼å·²çµæ¢ã"
#: ../src/daemon/cmdline.c:115
#, c-format
@@ -495,32 +495,32 @@ msgstr ""
#: ../src/daemon/dumpmodules.c:60
#, c-format
msgid "Name: %s\n"
-msgstr ""
+msgstr "å稱ï¼%s\n"
#: ../src/daemon/dumpmodules.c:63
#, c-format
msgid "No module information available\n"
-msgstr ""
+msgstr "æ²æå¯ç¨ç模çµè³è¨\n"
#: ../src/daemon/dumpmodules.c:66
#, c-format
msgid "Version: %s\n"
-msgstr ""
+msgstr "çæ¬ï¼%s\n"
#: ../src/daemon/dumpmodules.c:68
#, c-format
msgid "Description: %s\n"
-msgstr ""
+msgstr "æè¿°ï¼%s\n"
#: ../src/daemon/dumpmodules.c:70
#, c-format
msgid "Author: %s\n"
-msgstr ""
+msgstr "ä½è
ï¼%s\n"
#: ../src/daemon/dumpmodules.c:72
#, c-format
msgid "Usage: %s\n"
-msgstr ""
+msgstr "ç¨æ³ï¼%s\n"
#: ../src/daemon/dumpmodules.c:73
#, c-format
@@ -535,7 +535,7 @@ msgstr ""
#: ../src/daemon/dumpmodules.c:79
#, c-format
msgid "Path: %s\n"
-msgstr ""
+msgstr "è·¯å¾ï¼%s\n"
#: ../src/daemon/daemon-conf.c:232
#, c-format
@@ -613,15 +613,15 @@ msgstr ""
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
-msgstr ""
+msgstr "æ£å¨æ¸
é¤ç¹æ¬ã"
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
-msgstr ""
+msgstr "PulseAudio é³æ系統"
#: ../src/daemon/pulseaudio.desktop.in.h:2
msgid "Start the PulseAudio Sound System"
-msgstr ""
+msgstr "åå PulseAudio é³æ系統"
#: ../src/pulse/channelmap.c:105
#: ../src/pulse/channelmap.c:757
@@ -630,27 +630,27 @@ msgstr "å®è²é"
#: ../src/pulse/channelmap.c:107
msgid "Front Center"
-msgstr "åæ¹ä¸å¤®"
+msgstr "æ£åæ¹"
#: ../src/pulse/channelmap.c:108
msgid "Front Left"
-msgstr "åæ¹å·¦å´"
+msgstr "å·¦åæ¹"
#: ../src/pulse/channelmap.c:109
msgid "Front Right"
-msgstr "åæ¹å³å´"
+msgstr "å³åæ¹"
#: ../src/pulse/channelmap.c:111
msgid "Rear Center"
-msgstr "å¾æ¹ä¸å¤®"
+msgstr "æ£å¾æ¹"
#: ../src/pulse/channelmap.c:112
msgid "Rear Left"
-msgstr "å¾æ¹å·¦å´"
+msgstr "å·¦å¾æ¹"
#: ../src/pulse/channelmap.c:113
msgid "Rear Right"
-msgstr "å¾æ¹å³å´"
+msgstr "å³å¾æ¹"
#: ../src/pulse/channelmap.c:115
msgid "Low Frequency Emmiter"
@@ -802,31 +802,31 @@ msgstr "è¼å© 31"
#: ../src/pulse/channelmap.c:156
msgid "Top Center"
-msgstr "é 端ä¸å¤®"
+msgstr "æ£ä¸æ¹"
#: ../src/pulse/channelmap.c:158
msgid "Top Front Center"
-msgstr "é 端åæ¹ä¸å¤®"
+msgstr "é 端æ£ä¸æ¹"
#: ../src/pulse/channelmap.c:159
msgid "Top Front Left"
-msgstr "é 端åæ¹å·¦å´"
+msgstr "é 端左åæ¹"
#: ../src/pulse/channelmap.c:160
msgid "Top Front Right"
-msgstr "é 端åæ¹å³å´"
+msgstr "é 端å³åæ¹"
#: ../src/pulse/channelmap.c:162
msgid "Top Rear Center"
-msgstr "é 端å¾æ¹ä¸å¤®"
+msgstr "é 端æ£å¾æ¹"
#: ../src/pulse/channelmap.c:163
msgid "Top Rear Left"
-msgstr "é 端å¾æ¹å·¦å´"
+msgstr "é 端左å¾æ¹"
#: ../src/pulse/channelmap.c:164
msgid "Top Rear Right"
-msgstr "é 端å¾æ¹å³å´"
+msgstr "é 端å³å¾æ¹"
#: ../src/pulse/channelmap.c:484
#: ../src/pulse/sample.c:170
@@ -867,15 +867,15 @@ msgstr "確å®"
#: ../src/pulse/error.c:44
msgid "Access denied"
-msgstr ""
+msgstr "æçµåå"
#: ../src/pulse/error.c:45
msgid "Unknown command"
-msgstr ""
+msgstr "æªç¥æ令"
#: ../src/pulse/error.c:46
msgid "Invalid argument"
-msgstr ""
+msgstr "ç¡æçåæ¸"
#: ../src/pulse/error.c:47
msgid "Entity exists"
@@ -887,27 +887,27 @@ msgstr ""
#: ../src/pulse/error.c:49
msgid "Connection refused"
-msgstr ""
+msgstr "æçµé£ç·"
#: ../src/pulse/error.c:50
msgid "Protocol error"
-msgstr ""
+msgstr "åå®é¯èª¤"
#: ../src/pulse/error.c:51
msgid "Timeout"
-msgstr ""
+msgstr "é¾æ"
#: ../src/pulse/error.c:52
msgid "No authorization key"
-msgstr ""
+msgstr "æ²æèªèéé°"
#: ../src/pulse/error.c:53
msgid "Internal error"
-msgstr ""
+msgstr "å
§é¨é¯èª¤"
#: ../src/pulse/error.c:54
msgid "Connection terminated"
-msgstr ""
+msgstr "é£ç·å·²çµæ¢"
#: ../src/pulse/error.c:55
msgid "Entity killed"
@@ -915,47 +915,47 @@ msgstr ""
#: ../src/pulse/error.c:56
msgid "Invalid server"
-msgstr ""
+msgstr "ç¡æç伺æå¨"
#: ../src/pulse/error.c:57
msgid "Module initalization failed"
-msgstr ""
+msgstr "模çµåå§å失æ"
#: ../src/pulse/error.c:58
msgid "Bad state"
-msgstr ""
+msgstr "ä¸è¯çæ
"
#: ../src/pulse/error.c:59
msgid "No data"
-msgstr ""
+msgstr "ç¡è³æ"
#: ../src/pulse/error.c:60
msgid "Incompatible protocol version"
-msgstr ""
+msgstr "ä¸ç¸å®¹çåå®çæ¬"
#: ../src/pulse/error.c:61
msgid "Too large"
-msgstr ""
+msgstr "é大"
#: ../src/pulse/error.c:62
msgid "Not supported"
-msgstr ""
+msgstr "ä¸æ¯æ´"
#: ../src/pulse/error.c:63
msgid "Unknown error code"
-msgstr ""
+msgstr "æªç¥çé¯èª¤ç¢¼"
#: ../src/pulse/error.c:64
msgid "No such extension"
-msgstr ""
+msgstr "ç¡æ¤æ´å±åè½"
#: ../src/pulse/error.c:65
msgid "Obsolete functionality"
-msgstr ""
+msgstr "æ·æ±°çåè½"
#: ../src/pulse/error.c:66
msgid "Missing implementation"
-msgstr ""
+msgstr "éºå¤±ç實ä½"
#: ../src/pulse/error.c:67
msgid "Client forked"
@@ -963,64 +963,64 @@ msgstr ""
#: ../src/pulse/error.c:68
msgid "Input/Output error"
-msgstr ""
+msgstr "輸å
¥/è¼¸åº é¯èª¤"
#: ../src/pulse/error.c:69
msgid "Device or resource busy"
-msgstr ""
+msgstr "è£ç½®æè³æºå¿ç¢"
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
-msgstr ""
+msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
-msgstr ""
+msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
-msgstr ""
+msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
-msgstr ""
+msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
-msgstr ""
+msgstr "%u B"
#: ../src/pulse/client-conf-x11.c:55
#: ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
-msgstr ""
+msgstr "XOpenDisplay() 失æ"
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
-msgstr ""
+msgstr "解æ cookie è³æ失æ"
#: ../src/pulse/client-conf.c:111
#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr ""
+msgstr "éåé
ç½®æªã%sã失æï¼%s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
-msgstr ""
+msgstr "æ²æè¼å
¥ cookieã試åé£æ¥èä¸ç¨ cookieã"
#: ../src/pulse/context.c:693
#, c-format
msgid "fork(): %s"
-msgstr ""
+msgstr "fork(): %s"
#: ../src/pulse/context.c:748
#, c-format
msgid "waitpid(): %s"
-msgstr ""
+msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
@@ -1043,32 +1043,32 @@ msgstr ""
#: ../src/utils/pacat.c:136
#, c-format
msgid "pa_stream_drain(): %s"
-msgstr ""
+msgstr "pa_stream_drain(): %s"
#: ../src/utils/pacat.c:159
#, c-format
msgid "pa_stream_write() failed: %s"
-msgstr ""
+msgstr "pa_stream_write() failed: %s"
#: ../src/utils/pacat.c:197
#, c-format
msgid "pa_stream_begin_write() failed: %s"
-msgstr ""
+msgstr "pa_stream_begin_write() 失æ: %s"
#: ../src/utils/pacat.c:237
#: ../src/utils/pacat.c:267
#, c-format
msgid "pa_stream_peek() failed: %s"
-msgstr ""
+msgstr "pa_stream_peek() 失æ: %s"
#: ../src/utils/pacat.c:307
msgid "Stream successfully created."
-msgstr ""
+msgstr "å·²æå建ç«ä¸²æµã"
#: ../src/utils/pacat.c:310
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr ""
+msgstr "pa_stream_get_buffer_attr() 失æ: %s"
#: ../src/utils/pacat.c:314
#, c-format
@@ -1280,12 +1280,12 @@ msgstr ""
#: ../src/utils/pacat.c:910
#, c-format
msgid "open(): %s"
-msgstr ""
+msgstr "open(): %s"
#: ../src/utils/pacat.c:915
#, c-format
msgid "dup2(): %s"
-msgstr ""
+msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
msgid "Too many arguments."
@@ -1327,11 +1327,11 @@ msgstr ""
#: ../src/utils/pacat.c:1009
msgid "recording"
-msgstr ""
+msgstr "é製"
#: ../src/utils/pacat.c:1009
msgid "playback"
-msgstr ""
+msgstr "ææ¾æ§å¶"
#: ../src/utils/pacat.c:1035
#: ../src/utils/pactl.c:1267
@@ -1365,7 +1365,7 @@ msgstr ""
#: ../src/utils/pasuspender.c:81
#, c-format
msgid "fork(): %s\n"
-msgstr ""
+msgstr "fork(): %s\n"
#: ../src/utils/pasuspender.c:92
#, c-format
@@ -1555,7 +1555,7 @@ msgstr ""
#: ../src/utils/pactl.c:638
#: ../src/utils/pactl.c:645
msgid "n/a"
-msgstr ""
+msgstr "n/a"
#: ../src/utils/pactl.c:375
#, c-format
@@ -1702,7 +1702,7 @@ msgstr ""
#: ../src/utils/pactl.c:863
msgid "Got SIGINT, exiting."
-msgstr ""
+msgstr "åå¾ SIGINTï¼æ£å¨éåºã"
#: ../src/utils/pactl.c:869
#, c-format
@@ -1843,7 +1843,7 @@ msgstr ""
#: ../src/utils/pactl.c:1262
msgid "No valid command specified."
-msgstr ""
+msgstr "æ²ææå®ææçå½ä»¤ã"
#: ../src/utils/pax11publish.c:61
#, c-format
@@ -1859,27 +1859,27 @@ msgstr ""
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr ""
+msgstr "解æå½ä»¤å失æã\n"
#: ../src/utils/pax11publish.c:108
#, c-format
msgid "Server: %s\n"
-msgstr ""
+msgstr "伺æå¨ï¼%s\n"
#: ../src/utils/pax11publish.c:110
#, c-format
msgid "Source: %s\n"
-msgstr ""
+msgstr "ä¾æºï¼%s\n"
#: ../src/utils/pax11publish.c:112
#, c-format
msgid "Sink: %s\n"
-msgstr ""
+msgstr "Sink: %s\n"
#: ../src/utils/pax11publish.c:114
#, c-format
msgid "Cookie: %s\n"
-msgstr ""
+msgstr "Cookie: %s\n"
#: ../src/utils/pax11publish.c:132
#, c-format
@@ -1928,7 +1928,7 @@ msgstr ""
#: ../src/utils/pacmd.c:91
#, c-format
msgid "connect(): %s"
-msgstr ""
+msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
@@ -1936,24 +1936,24 @@ msgstr ""
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
-msgstr ""
+msgstr "å¹å¾ç¨å¼æ²æåæã"
#: ../src/utils/pacmd.c:161
#, c-format
msgid "poll(): %s"
-msgstr ""
+msgstr "poll(): %s"
#: ../src/utils/pacmd.c:171
#: ../src/utils/pacmd.c:188
#, c-format
msgid "read(): %s"
-msgstr ""
+msgstr "read(): %s"
#: ../src/utils/pacmd.c:207
#: ../src/utils/pacmd.c:223
#, c-format
msgid "write(): %s"
-msgstr ""
+msgstr "write(): %s"
#: ../src/pulsecore/lock-autospawn.c:136
#: ../src/pulsecore/lock-autospawn.c:219
@@ -2068,11 +2068,11 @@ msgstr ""
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
-msgstr ""
+msgstr "æè²å¨"
#: ../src/modules/alsa/alsa-mixer.c:1715
msgid "No Amplifier"
-msgstr ""
+msgstr "ç¡æè²å¨"
#: ../src/modules/alsa/alsa-mixer.c:1773
msgid "Analog Input"
@@ -2113,13 +2113,13 @@ msgstr "é¡æ¯å®è²é輸åº"
#: ../src/modules/alsa/alsa-mixer.c:1981
#, c-format
msgid "%s+%s"
-msgstr ""
+msgstr "%s+%s"
#: ../src/modules/alsa/alsa-mixer.c:1984
#: ../src/modules/alsa/alsa-mixer.c:3404
#, c-format
msgid "%s / %s"
-msgstr ""
+msgstr "%s / %s"
#: ../src/modules/alsa/alsa-mixer.c:2790
msgid "Analog Mono"
commit 4df917cb27e847da8bdb1c3f0e5ebaf20c788045
Author: Cheng-Chia Tseng <pswo10680 at gmail.com>
Date: Sat Feb 20 04:57:35 2010 +0000
l10n: Updates to Chinese (Taiwan) (zh_TW) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 40deec3..5fa7550 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PulseAudio Volume Control\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-02-05 08:05+0000\n"
-"PO-Revision-Date: 2010-02-19 20:10+0800\n"
+"PO-Revision-Date: 2010-02-20 12:55+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
"Language-Team: zh_TW\n"
"MIME-Version: 1.0\n"
@@ -50,7 +50,7 @@ msgstr ""
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
-msgstr ""
+msgstr "Dummy Output"
#: ../src/modules/module-ladspa-sink.c:49
msgid "Virtual LADSPA sink"
@@ -62,11 +62,11 @@ msgstr ""
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
-msgstr ""
+msgstr "Clocked Null sink"
#: ../src/modules/module-null-sink.c:291
msgid "Null Output"
-msgstr ""
+msgstr "Null Output"
#: ../src/pulsecore/sink.c:2613
msgid "Internal Audio"
@@ -82,11 +82,11 @@ msgstr "æ¾ä¸å° original lt_dlopen loaderã"
#: ../src/daemon/ltdl-bind-now.c:129
msgid "Failed to allocate new dl loader."
-msgstr "åé
æ°ç dl loader 失æã"
+msgstr "æªè½åé
æ°ç dl loaderã"
#: ../src/daemon/ltdl-bind-now.c:142
msgid "Failed to add bind-now-loader."
-msgstr "å å
¥ bind-now-loader 失æã"
+msgstr "æªè½å å
¥ bind-now-loaderã"
#: ../src/daemon/main.c:141
#, c-format
@@ -100,48 +100,48 @@ msgstr "æ£å¨éåºã"
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
-msgstr "å°æ¾ä½¿ç¨è
ã%sã失æã"
+msgstr "æ¾ä¸å°ä½¿ç¨è
ã%sãã"
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
-msgstr "å°æ¾ç¾¤çµã%sã失æã"
+msgstr "æ¾ä¸å°ç¾¤çµã%sãã"
#: ../src/daemon/main.c:195
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr ""
+msgstr "æ¾å°ä½¿ç¨è
ã%sã(UID %lu) è群çµã%sã(GID %lu)ã"
#: ../src/daemon/main.c:200
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr ""
+msgstr "使ç¨è
ã%sãç GID è群çµã%sãç GID ä¸ç¸ç¬¦ã"
#: ../src/daemon/main.c:205
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr ""
+msgstr "使ç¨è
ã%sãç家ç®éä¸æ¯ã%sãï¼å¿½ç¥ä¸ã"
#: ../src/daemon/main.c:208
#: ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
-msgstr ""
+msgstr "æªè½å»ºç«ã%sãï¼%s"
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
-msgstr ""
+msgstr "æªè½è®æ´ç¾¤çµæ¸
å®ï¼%s"
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
-msgstr ""
+msgstr "æªè½è®æ´ GICï¼%s"
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
-msgstr ""
+msgstr "æªè½è®æ´ UIDï¼%s"
#: ../src/daemon/main.c:271
msgid "Successfully dropped root privileges."
@@ -149,16 +149,16 @@ msgstr "æåå°æ¾ä¸ root ç¹æ¬ã"
#: ../src/daemon/main.c:279
msgid "System wide mode unsupported on this platform."
-msgstr ""
+msgstr "æ¬å¹³å°ä¸æ¯æ´ system wide 模å¼ã"
#: ../src/daemon/main.c:297
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr ""
+msgstr "setrlimit(%s, (%u, %u)) 失æï¼%s"
#: ../src/daemon/main.c:474
msgid "Failed to parse command line."
-msgstr "解æå½ä»¤å失æã"
+msgstr "æªè½è§£æå½ä»¤åã"
#: ../src/daemon/main.c:541
msgid "Daemon not running"
@@ -167,16 +167,16 @@ msgstr "å¹å¾ç¨å¼æ²æå¨å·è¡ä¸"
#: ../src/daemon/main.c:543
#, c-format
msgid "Daemon running as PID %u"
-msgstr ""
+msgstr "å¹å¾ç¨å¼æ£å¨å·è¡ä¸ï¼PID çº %u "
#: ../src/daemon/main.c:553
#, c-format
msgid "Failed to kill daemon: %s"
-msgstr ""
+msgstr "æªè½çµæå¹å¾ç¨å¼ï¼%s"
#: ../src/daemon/main.c:571
msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr ""
+msgstr "æ¬ç¨å¼ä¸é æ以 root 身份å·è¡ï¼é¤éææå® --systemï¼ã"
#: ../src/daemon/main.c:573
msgid "Root privileges required."
@@ -204,7 +204,7 @@ msgstr ""
#: ../src/daemon/main.c:621
msgid "Failed to acquire stdio."
-msgstr ""
+msgstr "æªè½ç²å stdioã"
#: ../src/daemon/main.c:627
#, c-format
@@ -248,7 +248,7 @@ msgstr ""
#: ../src/daemon/main.c:736
#, c-format
msgid "Running on host: %s"
-msgstr ""
+msgstr "æ£å¨å·è¡æ¼æ¤ä¸»æ©ä¸ï¼%s"
#: ../src/daemon/main.c:739
#, c-format
@@ -258,28 +258,28 @@ msgstr "æ¾å° %u å CPUã"
#: ../src/daemon/main.c:741
#, c-format
msgid "Page size is %lu bytes"
-msgstr ""
+msgstr "åé 大å°çº %lu bytes"
#: ../src/daemon/main.c:744
msgid "Compiled with Valgrind support: yes"
-msgstr ""
+msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼æ¯"
#: ../src/daemon/main.c:746
msgid "Compiled with Valgrind support: no"
-msgstr ""
+msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼å¦"
#: ../src/daemon/main.c:749
#, c-format
msgid "Running in valgrind mode: %s"
-msgstr ""
+msgstr "æ£å¨ä»¥ valgrind 模å¼å·è¡ä¸ï¼%s"
#: ../src/daemon/main.c:752
msgid "Optimized build: yes"
-msgstr ""
+msgstr "æä½³åç建æ§çæ¬ï¼æ¯"
#: ../src/daemon/main.c:754
msgid "Optimized build: no"
-msgstr ""
+msgstr "æä½³åç建æ§çæ¬ï¼å¦"
#: ../src/daemon/main.c:758
msgid "NDEBUG defined, all asserts disabled."
@@ -295,17 +295,17 @@ msgstr ""
#: ../src/daemon/main.c:766
msgid "Failed to get machine ID"
-msgstr ""
+msgstr "æªè½åå¾æ©å¨ ID"
#: ../src/daemon/main.c:769
#, c-format
msgid "Machine ID is %s."
-msgstr ""
+msgstr "æ©å¨ ID çº %sã"
#: ../src/daemon/main.c:773
#, c-format
msgid "Session ID is %s."
-msgstr ""
+msgstr "å·¥ä½é段 ID çº %sã"
#: ../src/daemon/main.c:779
#, c-format
@@ -320,12 +320,12 @@ msgstr ""
#: ../src/daemon/main.c:787
#, c-format
msgid "Using modules directory %s."
-msgstr ""
+msgstr "使ç¨æ¨¡çµç®é %sã"
#: ../src/daemon/main.c:789
#, c-format
msgid "Running in system mode: %s"
-msgstr ""
+msgstr "以系統模å¼å·è¡ä¸ï¼%s"
#: ../src/daemon/main.c:792
msgid ""
@@ -336,23 +336,23 @@ msgstr ""
#: ../src/daemon/main.c:809
msgid "pa_pid_file_create() failed."
-msgstr ""
+msgstr "pa_pid_file_create() 失æã"
#: ../src/daemon/main.c:819
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr ""
+msgstr "ææ°é®®çé«è§£æ度è¨æå¨å¯ç¨ï¼æææ¨æå好é£æ
¾ï¼"
#: ../src/daemon/main.c:821
msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr ""
+msgstr "å
çï¼æ¨çæ ¸å¿ç³éäºï¼ä»æ¥ä¸»å»æ¨è¦æ¯åç¨é«è§£æ度è¨æå¨ç Linuxï¼"
#: ../src/daemon/main.c:844
msgid "pa_core_new() failed."
-msgstr ""
+msgstr "pa_core_new() 失æã"
#: ../src/daemon/main.c:904
msgid "Failed to initialize daemon."
-msgstr "åå§åå¹å¾ç¨å¼å¤±æã"
+msgstr "æªè½åå§åå¹å¾ç¨å¼ã"
#: ../src/daemon/main.c:909
msgid "Daemon startup without any loaded modules, refusing to work."
@@ -478,7 +478,7 @@ msgstr ""
#: ../src/daemon/cmdline.c:354
#, c-format
msgid "Invalid resample method '%s'."
-msgstr ""
+msgstr "ç¡æçéæ°å樣æ¹æ³ã%sã"
#: ../src/daemon/cmdline.c:361
msgid "--system expects boolean argument"
@@ -525,12 +525,12 @@ msgstr "ç¨æ³ï¼%s\n"
#: ../src/daemon/dumpmodules.c:73
#, c-format
msgid "Load Once: %s\n"
-msgstr ""
+msgstr "è¼å
¥ä¸æ¬¡ï¼%s\n"
#: ../src/daemon/dumpmodules.c:75
#, c-format
msgid "DEPRECATION WARNING: %s\n"
-msgstr ""
+msgstr "åå°è¦åï¼%s\n"
#: ../src/daemon/dumpmodules.c:79
#, c-format
@@ -550,7 +550,7 @@ msgstr ""
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
-msgstr ""
+msgstr "[%s:%u] ç¡æçéæ°å樣æ¹æ³ã%sãã"
#: ../src/daemon/daemon-conf.c:287
#, c-format
@@ -600,16 +600,16 @@ msgstr ""
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
-msgstr ""
+msgstr "æªè½éåé
ç½®æªï¼%s"
#: ../src/daemon/daemon-conf.c:562
msgid "The specified default channel map has a different number of channels than the specified default number of channels."
-msgstr ""
+msgstr "æå®çé è¨è²éå°æ表çè²éæ¸èæå®çé è¨è²éæ¸ä¸åã"
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
-msgstr ""
+msgstr "### å¾æ¤é
ç½®æªè®åï¼%s ###\n"
#: ../src/daemon/caps.c:62
msgid "Cleaning up privileges."
@@ -879,11 +879,11 @@ msgstr "ç¡æçåæ¸"
#: ../src/pulse/error.c:47
msgid "Entity exists"
-msgstr ""
+msgstr "實é«åå¨"
#: ../src/pulse/error.c:48
msgid "No such entity"
-msgstr ""
+msgstr "ç¡æ¤å¯¦é«"
#: ../src/pulse/error.c:49
msgid "Connection refused"
@@ -911,7 +911,7 @@ msgstr "é£ç·å·²çµæ¢"
#: ../src/pulse/error.c:55
msgid "Entity killed"
-msgstr ""
+msgstr "實é«å·²çµæ"
#: ../src/pulse/error.c:56
msgid "Invalid server"
@@ -959,7 +959,7 @@ msgstr "éºå¤±ç實ä½"
#: ../src/pulse/error.c:67
msgid "Client forked"
-msgstr ""
+msgstr "客æ¶ç«¯å·²åæ¯"
#: ../src/pulse/error.c:68
msgid "Input/Output error"
@@ -1001,12 +1001,12 @@ msgstr "XOpenDisplay() 失æ"
#: ../src/pulse/client-conf-x11.c:93
msgid "Failed to parse cookie data"
-msgstr "解æ cookie è³æ失æ"
+msgstr "æªè½è§£æ cookie è³æ"
#: ../src/pulse/client-conf.c:111
#, c-format
msgid "Failed to open configuration file '%s': %s"
-msgstr "éåé
ç½®æªã%sã失æï¼%s"
+msgstr "æªè½éåé
ç½®æªã%sãï¼%s"
#: ../src/pulse/context.c:550
msgid "No cookie loaded. Attempting to connect without."
@@ -1025,20 +1025,20 @@ msgstr "waitpid(): %s"
#: ../src/pulse/context.c:1438
#, c-format
msgid "Received message for unknown extension '%s'"
-msgstr ""
+msgstr "å·²æ¥æ¶å°æªç¥æ´å±åè½çè¨æ¯ã%sã"
#: ../src/utils/pacat.c:108
#, c-format
msgid "Failed to drain stream: %s"
-msgstr ""
+msgstr "æªè½æåºä¸²æµï¼%s"
#: ../src/utils/pacat.c:113
msgid "Playback stream drained."
-msgstr ""
+msgstr "ææ¾æ§å¶ä¸²æµå·²æåºã"
#: ../src/utils/pacat.c:123
msgid "Draining connection to server."
-msgstr ""
+msgstr "æ£å¨æåºé£ç·å°ä¼ºæå¨ã"
#: ../src/utils/pacat.c:136
#, c-format
@@ -1083,110 +1083,110 @@ msgstr ""
#: ../src/utils/pacat.c:321
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr ""
+msgstr "使ç¨å樣è¦æ ¼ã%sãï¼è²éå°æ表ã%sã"
#: ../src/utils/pacat.c:325
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
-msgstr ""
+msgstr "æ£å¨é£æ¥å°è£ç½® %s (%u, %ssuspended)ã"
#: ../src/utils/pacat.c:335
#, c-format
msgid "Stream error: %s"
-msgstr ""
+msgstr "串æµé¯èª¤ï¼%s"
#: ../src/utils/pacat.c:345
#, c-format
msgid "Stream device suspended.%s"
-msgstr ""
+msgstr "串æµè£ç½®å·²æ«åã%s"
#: ../src/utils/pacat.c:347
#, c-format
msgid "Stream device resumed.%s"
-msgstr ""
+msgstr "串æµè£ç½®å·²æ¢å¾©ï¼%s"
#: ../src/utils/pacat.c:355
#, c-format
msgid "Stream underrun.%s"
-msgstr ""
+msgstr "串æµæ¬ è¼éè¡ã%s"
#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream overrun.%s"
-msgstr ""
+msgstr "串æµè¶
è¼éè¡ã%s"
#: ../src/utils/pacat.c:369
#, c-format
msgid "Stream started.%s"
-msgstr ""
+msgstr "串æµå·²éå§ã%s"
#: ../src/utils/pacat.c:376
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr ""
+msgstr "串æµç§»è³è£ç½® %s (%u, %ssuspended)ã%s"
#: ../src/utils/pacat.c:376
msgid "not "
-msgstr ""
+msgstr "ä¸æ¯"
#: ../src/utils/pacat.c:383
#, c-format
msgid "Stream buffer attributes changed.%s"
-msgstr ""
+msgstr "串æµç·©è¡ç¹å¾µå·²è®æ´ã%s"
#: ../src/utils/pacat.c:415
#, c-format
msgid "Connection established.%s"
-msgstr ""
+msgstr "é£ç·å·²å»ºç«ã%s"
#: ../src/utils/pacat.c:418
#, c-format
msgid "pa_stream_new() failed: %s"
-msgstr ""
+msgstr "pa_stream_new() 失æï¼%s"
#: ../src/utils/pacat.c:450
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
-msgstr ""
+msgstr "pa_stream_connect_playback() 失æï¼%s"
#: ../src/utils/pacat.c:456
#, c-format
msgid "pa_stream_connect_record() failed: %s"
-msgstr ""
+msgstr "pa_stream_connect_record() 失æï¼%s"
#: ../src/utils/pacat.c:470
#: ../src/utils/pactl.c:857
#, c-format
msgid "Connection failure: %s"
-msgstr ""
+msgstr "é£ç·å¤±æï¼%s"
#: ../src/utils/pacat.c:503
msgid "Got EOF."
-msgstr ""
+msgstr "åå¾æªæ¡çµå°¾ (EOF)ã"
#: ../src/utils/pacat.c:540
#, c-format
msgid "write() failed: %s"
-msgstr ""
+msgstr "write() 失æï¼%s"
#: ../src/utils/pacat.c:561
msgid "Got signal, exiting."
-msgstr ""
+msgstr "åå¾è¨èï¼æ£å¨éåºã"
#: ../src/utils/pacat.c:575
#, c-format
msgid "Failed to get latency: %s"
-msgstr ""
+msgstr "æªè½åå¾å³è¼¸å»¶é²ï¼%s"
#: ../src/utils/pacat.c:580
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr ""
+msgstr "æéï¼%0.3f ç§ï¼å»¶é²ï¼%0.0f å¾®ç§ã"
#: ../src/utils/pacat.c:599
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr ""
+msgstr "pa_stream_update_timing_info() 失æï¼%s"
#: ../src/utils/pacat.c:609
#, c-format
@@ -1241,41 +1241,41 @@ msgstr ""
#: ../src/utils/pactl.c:953
#, c-format
msgid "Invalid client name '%s'"
-msgstr ""
+msgstr "ç¡æç客æ¶ç«¯å稱ã%sã"
#: ../src/utils/pacat.c:779
#, c-format
msgid "Invalid stream name '%s'"
-msgstr ""
+msgstr "ç¡æç串æµå稱ã%sã"
#: ../src/utils/pacat.c:816
#, c-format
msgid "Invalid channel map '%s'"
-msgstr ""
+msgstr "ç¡æçè²éå°æ表ã%sã"
#: ../src/utils/pacat.c:845
#, c-format
msgid "Invalid latency specification '%s'"
-msgstr ""
+msgstr "ç¡æç延é²è¦æ ¼ã%sã"
#: ../src/utils/pacat.c:852
#, c-format
msgid "Invalid process time specification '%s'"
-msgstr ""
+msgstr "ç¡æçç¨åºæéè¦æ ¼ã%sã"
#: ../src/utils/pacat.c:864
#, c-format
msgid "Invalid property '%s'"
-msgstr ""
+msgstr "ç¡æç屬æ§ã%sã"
#: ../src/utils/pacat.c:881
#, c-format
msgid "Unknown file format %s."
-msgstr ""
+msgstr "æªç¥æªæ¡æ ¼å¼ %sã"
#: ../src/utils/pacat.c:900
msgid "Invalid sample specification"
-msgstr ""
+msgstr "ç¡æçå樣è¦æ ¼"
#: ../src/utils/pacat.c:910
#, c-format
@@ -1289,41 +1289,41 @@ msgstr "dup2(): %s"
#: ../src/utils/pacat.c:922
msgid "Too many arguments."
-msgstr ""
+msgstr "太å¤åæ¸ã"
#: ../src/utils/pacat.c:933
msgid "Failed to generate sample specification for file."
-msgstr ""
+msgstr "æªè½æ¿æªæ¡ç¢çå樣è¦æ ¼ã"
#: ../src/utils/pacat.c:953
msgid "Failed to open audio file."
-msgstr ""
+msgstr "æªè½éåé³ææªã"
#: ../src/utils/pacat.c:959
msgid "Warning: specified sample specification will be overwritten with specification from file."
-msgstr ""
+msgstr "è¦åï¼æå®çå樣è¦æ ¼å°æè¦å¯«å¾æªæ¡å¾å°çè¦æ ¼ã"
#: ../src/utils/pacat.c:962
#: ../src/utils/pactl.c:997
msgid "Failed to determine sample specification from file."
-msgstr ""
+msgstr "æªè½å¾æªæ¡å¾ç¥å樣è¦æ ¼ã"
#: ../src/utils/pacat.c:971
msgid "Warning: Failed to determine channel map from file."
-msgstr ""
+msgstr "è¦åï¼æªè½å¾æªæ¡åå¾è²éå°æ表ã"
#: ../src/utils/pacat.c:982
msgid "Channel map doesn't match sample specification"
-msgstr ""
+msgstr "è²éå°æ表èå樣è¦æ ¼ä¸ç¬¦"
#: ../src/utils/pacat.c:993
msgid "Warning: failed to write channel map to file."
-msgstr ""
+msgstr "è¦åï¼æªè½å°è²éå°æ表寫å
¥æªæ¡ã"
#: ../src/utils/pacat.c:1008
#, c-format
msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
+msgstr "æ£å¨éåä¸é %s 串æµï¼å樣è¦æ ¼çºã%sãï¼è²éå°æ表çºã%sãã"
#: ../src/utils/pacat.c:1009
msgid "recording"
@@ -1336,31 +1336,31 @@ msgstr "ææ¾æ§å¶"
#: ../src/utils/pacat.c:1035
#: ../src/utils/pactl.c:1267
msgid "pa_mainloop_new() failed."
-msgstr ""
+msgstr "pa_mainloop_new() 失æã"
#: ../src/utils/pacat.c:1054
msgid "io_new() failed."
-msgstr ""
+msgstr "io_new() 失æã"
#: ../src/utils/pacat.c:1061
#: ../src/utils/pactl.c:1279
msgid "pa_context_new() failed."
-msgstr ""
+msgstr "pa_context_new() 失æã"
#: ../src/utils/pacat.c:1069
#: ../src/utils/pactl.c:1285
#, c-format
msgid "pa_context_connect() failed: %s"
-msgstr ""
+msgstr "pa_context_connect() 失æï¼%s"
#: ../src/utils/pacat.c:1075
msgid "pa_context_rttime_new() failed."
-msgstr ""
+msgstr "pa_context_rttime_new() 失æã"
#: ../src/utils/pacat.c:1082
#: ../src/utils/pactl.c:1290
msgid "pa_mainloop_run() failed."
-msgstr ""
+msgstr "pa_mainloop_run() 失æã"
#: ../src/utils/pasuspender.c:81
#, c-format
@@ -1370,37 +1370,37 @@ msgstr "fork(): %s\n"
#: ../src/utils/pasuspender.c:92
#, c-format
msgid "execvp(): %s\n"
-msgstr ""
+msgstr "execvp(): %s\n"
#: ../src/utils/pasuspender.c:109
#, c-format
msgid "Failure to suspend: %s\n"
-msgstr ""
+msgstr "æªè½æ«åï¼%s\n"
#: ../src/utils/pasuspender.c:124
#, c-format
msgid "Failure to resume: %s\n"
-msgstr ""
+msgstr "æªè½æ¢å¾©ï¼%s\n"
#: ../src/utils/pasuspender.c:147
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr ""
+msgstr "è¦åï¼é³æ伺æå¨ä¸¦éæ¬æ©ï¼ä¸ææ«åã\n"
#: ../src/utils/pasuspender.c:159
#, c-format
msgid "Connection failure: %s\n"
-msgstr ""
+msgstr "é£ç·å¤±æï¼%s\n"
#: ../src/utils/pasuspender.c:176
#, c-format
msgid "Got SIGINT, exiting.\n"
-msgstr ""
+msgstr "åå¾ SIGINTï¼æ£å¨éåºã\n"
#: ../src/utils/pasuspender.c:194
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr ""
+msgstr "è¦åï¼åç¨åºå·²è¢«è¨è %u æçµæ¢\n"
#: ../src/utils/pasuspender.c:212
#, c-format
@@ -1424,22 +1424,22 @@ msgstr ""
#: ../src/utils/pasuspender.c:277
#, c-format
msgid "pa_mainloop_new() failed.\n"
-msgstr ""
+msgstr "pa_mainloop_new() 失æã\n"
#: ../src/utils/pasuspender.c:290
#, c-format
msgid "pa_context_new() failed.\n"
-msgstr ""
+msgstr "pa_context_new() 失æã\n"
#: ../src/utils/pasuspender.c:298
#, c-format
msgid "pa_mainloop_run() failed.\n"
-msgstr ""
+msgstr "pa_mainloop_run() 失æã\n"
#: ../src/utils/pactl.c:135
#, c-format
msgid "Failed to get statistics: %s"
-msgstr ""
+msgstr "æªè½åå¾çµ±è¨ï¼%s"
#: ../src/utils/pactl.c:141
#, c-format
@@ -1454,12 +1454,12 @@ msgstr ""
#: ../src/utils/pactl.c:147
#, c-format
msgid "Sample cache size: %s\n"
-msgstr ""
+msgstr "å樣快å大å°ï¼%s\n"
#: ../src/utils/pactl.c:156
#, c-format
msgid "Failed to get server information: %s"
-msgstr ""
+msgstr "æªè½åå¾ä¼ºæå¨è³è¨ï¼%s"
#: ../src/utils/pactl.c:164
#, c-format
@@ -1478,7 +1478,7 @@ msgstr ""
#: ../src/utils/pactl.c:205
#, c-format
msgid "Failed to get sink information: %s"
-msgstr ""
+msgstr "æªè½åå¾ sink è³è¨ï¼%s"
#: ../src/utils/pactl.c:221
#, c-format
@@ -1517,7 +1517,7 @@ msgstr ""
#: ../src/utils/pactl.c:297
#, c-format
msgid "Failed to get source information: %s"
-msgstr ""
+msgstr "æªè½åå¾ä¾æºè³è¨ï¼%s"
#: ../src/utils/pactl.c:313
#, c-format
@@ -1560,7 +1560,7 @@ msgstr "n/a"
#: ../src/utils/pactl.c:375
#, c-format
msgid "Failed to get module information: %s"
-msgstr ""
+msgstr "æªè½åå¾æ¨¡çµè³è¨ï¼%s"
#: ../src/utils/pactl.c:393
#, c-format
@@ -1576,7 +1576,7 @@ msgstr ""
#: ../src/utils/pactl.c:412
#, c-format
msgid "Failed to get client information: %s"
-msgstr ""
+msgstr "æªè½åå¾å®¢æ¶ç«¯è³è¨ï¼%s"
#: ../src/utils/pactl.c:430
#, c-format
@@ -1591,7 +1591,7 @@ msgstr ""
#: ../src/utils/pactl.c:447
#, c-format
msgid "Failed to get card information: %s"
-msgstr ""
+msgstr "æªè½åå¾é³æå¡è³è¨ï¼%s"
#: ../src/utils/pactl.c:465
#, c-format
@@ -1607,17 +1607,17 @@ msgstr ""
#: ../src/utils/pactl.c:479
#, c-format
msgid "\tProfiles:\n"
-msgstr ""
+msgstr "\tå人è¨å®æªï¼\n"
#: ../src/utils/pactl.c:485
#, c-format
msgid "\tActive Profile: %s\n"
-msgstr ""
+msgstr "\tåç¨çå人è¨å®æªï¼%s\n"
#: ../src/utils/pactl.c:496
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr ""
+msgstr "æªè½åå¾ sink 輸å
¥è³è¨ï¼%s"
#: ../src/utils/pactl.c:515
#, c-format
@@ -1643,7 +1643,7 @@ msgstr ""
#: ../src/utils/pactl.c:554
#, c-format
msgid "Failed to get source output information: %s"
-msgstr ""
+msgstr "æªè½åå¾ä¾æºè¼¸åºè³è¨ï¼%s"
#: ../src/utils/pactl.c:574
#, c-format
@@ -1665,7 +1665,7 @@ msgstr ""
#: ../src/utils/pactl.c:605
#, c-format
msgid "Failed to get sample information: %s"
-msgstr ""
+msgstr "æªè½åå¾å樣è³è¨ï¼%s"
#: ../src/utils/pactl.c:623
#, c-format
@@ -1689,16 +1689,16 @@ msgstr ""
#: ../src/utils/pactl.c:663
#, c-format
msgid "Failure: %s"
-msgstr ""
+msgstr "失æï¼%s"
#: ../src/utils/pactl.c:687
#, c-format
msgid "Failed to upload sample: %s"
-msgstr ""
+msgstr "æªè½ä¸å³æ¨£æ¬ï¼%s"
#: ../src/utils/pactl.c:704
msgid "Premature end of file"
-msgstr ""
+msgstr "æªå®æçæªæ¡çµå°¾"
#: ../src/utils/pactl.c:863
msgid "Got SIGINT, exiting."
@@ -1746,15 +1746,15 @@ msgstr ""
#: ../src/utils/pactl.c:979
msgid "Please specify a sample file to load"
-msgstr ""
+msgstr "è«æ¨å®è¦è¼å
¥çå樣æª"
#: ../src/utils/pactl.c:992
msgid "Failed to open sound file."
-msgstr ""
+msgstr "æªè½éåé³ææªã"
#: ../src/utils/pactl.c:1004
msgid "Warning: Failed to determine sample specification from file."
-msgstr ""
+msgstr "è¦åï¼æªè½å¾æªæ¡å¾ç¥å樣è¦æ ¼ã"
#: ../src/utils/pactl.c:1014
msgid "You have to specify a sample name to play"
@@ -1859,7 +1859,7 @@ msgstr ""
#: ../src/utils/pax11publish.c:94
#, c-format
msgid "Failed to parse command line.\n"
-msgstr "解æå½ä»¤å失æã\n"
+msgstr "æªè½è§£æå½ä»¤åã\n"
#: ../src/utils/pax11publish.c:108
#, c-format
@@ -1884,37 +1884,37 @@ msgstr "Cookie: %s\n"
#: ../src/utils/pax11publish.c:132
#, c-format
msgid "Failed to parse cookie data\n"
-msgstr ""
+msgstr "æªè½è§£æ cookie è³æ\n"
#: ../src/utils/pax11publish.c:137
#, c-format
msgid "Failed to save cookie data\n"
-msgstr ""
+msgstr "æªè½å²å cookie è³æ\n"
#: ../src/utils/pax11publish.c:152
#, c-format
msgid "Failed to load client configuration file.\n"
-msgstr ""
+msgstr "æªè½è¼å
¥å®¢æ¶ç«¯é
ç½®æªã\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr ""
+msgstr "æªè½è®åç°å¢é
ç½®è³æã\n"
#: ../src/utils/pax11publish.c:174
#, c-format
msgid "Failed to get FQDN.\n"
-msgstr ""
+msgstr "æªè½åå¾ FQDNã\n"
#: ../src/utils/pax11publish.c:194
#, c-format
msgid "Failed to load cookie data\n"
-msgstr ""
+msgstr "æªè½è¼å
¥ cookie è³æ\n"
#: ../src/utils/pax11publish.c:211
#, c-format
msgid "Not yet implemented.\n"
-msgstr ""
+msgstr "å°æªå¯¦ä½ã\n"
#: ../src/utils/pacmd.c:69
msgid "No PulseAudio daemon running, or not running as session daemon."
@@ -1932,7 +1932,7 @@ msgstr "connect(): %s"
#: ../src/utils/pacmd.c:99
msgid "Failed to kill PulseAudio daemon."
-msgstr ""
+msgstr "æªè½çµæ PulseAudio å¹å¾ç¨å¼ã"
#: ../src/utils/pacmd.c:107
msgid "Daemon not responding."
@@ -2052,19 +2052,19 @@ msgstr "è¦è¨"
#: ../src/modules/alsa/alsa-mixer.c:1710
msgid "Automatic Gain Control"
-msgstr ""
+msgstr "èªåå¢çæ§å¶"
#: ../src/modules/alsa/alsa-mixer.c:1711
msgid "No Automatic Gain Control"
-msgstr ""
+msgstr "ç¡èªåå¢çæ§å¶"
#: ../src/modules/alsa/alsa-mixer.c:1712
msgid "Boost"
-msgstr ""
+msgstr "å éå¨"
#: ../src/modules/alsa/alsa-mixer.c:1713
msgid "No Boost"
-msgstr ""
+msgstr "ç¡å éå¨"
#: ../src/modules/alsa/alsa-mixer.c:1714
msgid "Amplifier"
commit f7415e3ce98472e8b5da002276ddaf505c2f3394
Author: Cheng-Chia Tseng <pswo10680 at gmail.com>
Date: Sat Feb 20 09:58:28 2010 +0000
l10n: Updates to Chinese (Taiwan) (zh_TW) translation
Transmitted-via: Transifex (www.transifex.net)
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 5fa7550..18b94c4 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,7 +1,7 @@
-# SOME DESCRIPTIVE TITLE.
+# Chinese (Taiwan) translation for pulseaudio.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Cheng-Chia Tseng <pswo10680 at gmail.com>, 2010
#
msgid ""
msgstr ""
commit cde8044f28483ad0666cc12b94d07b6d46f76458
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 21:15:10 2010 +0100
i18n: update LINGUAS
diff --git a/po/LINGUAS b/po/LINGUAS
index 14414f4..205e482 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -2,14 +2,16 @@ as
bn_IN
ca
cs
-de
de_CH
+de
el
es
fi
fr
gu
+he
hi
+hu
it
ja
kn
@@ -19,12 +21,14 @@ nl
or
pa
pl
-pt
pt_BR
-sr
+pt
+ru
sr at latin
+sr
sv
ta
te
uk
zh_CN
+zh_TW
commit ebf2116810fa8f18baf1fa693eaf35a8a83109ee
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 21 21:16:33 2010 +0100
i18n: run make update-po
diff --git a/po/as.po b/po/as.po
index 9586cba..0c20a63 100644
--- a/po/as.po
+++ b/po/as.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.as\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-11 17:11+0530\n"
"Last-Translator: Amitakhya Phukan <aphukan at fedoraproject.org>\n"
"Language-Team: Assamese <>\n"
@@ -17,12 +17,12 @@ msgstr ""
"X-Generator: Lokalize 0.2\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -34,7 +34,7 @@ msgstr ""
"à¦
তি সমà§à¦à§± à¦à¦à¦à§ ALSA à¦à¦¾à¦²à¦ '%s' ৰ à¦à¦à¦¾ বাঠ। à¦
নà§à¦à§à§°à¦¹ à¦à§°à¦¿ à¦à¦ সমসà§à¦¯à¦¾ ALSA বিà¦à¦¾à¦¶à¦à¦ "
"à¦à¦¨à¦¾à¦à¦ ।"
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -46,7 +46,7 @@ msgstr ""
"à¦
তি সমà§à¦à§± à¦à¦à¦à§ ALSA à¦à¦¾à¦²à¦ '%s' ৰ à¦à¦à¦¾ বাঠ। à¦
নà§à¦à§à§°à¦¹ à¦à§°à¦¿ à¦à¦ সমসà§à¦¯à¦¾ ALSA বিà¦à¦¾à¦¶à¦à¦ "
"à¦à¦¨à¦¾à¦à¦ ।"
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -92,11 +92,11 @@ msgstr "NULL sink ৰ সমৠনিৰà§à¦§à¦¾à§°à¦£"
msgid "Null Output"
msgstr "Null ফলাফল"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à¦à¦à§à¦¯à¦¨à§à¦¤à§°à§à¦£ à¦
'ডিà¦
'"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "মà§à¦¡à§à¦®"
@@ -112,248 +112,269 @@ msgstr "নতà§à¦¨ dl loader বিতৰণ à¦à§°à¦¿à¦¬à¦²à§ বিফল
msgid "Failed to add bind-now-loader."
msgstr "bind now loader যà§à¦ à¦à§°à¦¿à¦¬à¦²à§ বিফল ।"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "à¦à¦¿à¦à§à¦¨à§à¦² %s পà§à§±à¦¾ à¦'ল ।"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦à§°à§à¦¤à¦¾ '%s' পà§à§±à¦¾ ন'à¦'ল ।"
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "'%s' সমষà§à¦à¦¿ পà§à§±à¦¾ ন'à¦'ল ।"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦à§°à§à¦¤à¦¾ '%s' (UID %lu) à¦à§°à§ সমষà§à¦à¦¿ '%s' (GID %lu) পà§à§±à¦¾ à¦'ল ।"
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦à§°à§à¦¤à¦¾ '%s' à¦à§°à§ সমষà§à¦à¦¿ '%s' ৰ GID à¦
মিল ।"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "বà§à¦¯à§±à¦¹à¦¾à§°à¦à§°à§à¦¤à¦¾ '%s' ৰ à¦à§°à§° পà¦à§à¦à¦¿à¦à¦¾ '%s' নহà§, à¦à¦à¦à¦¾à¦£ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' সà§à¦·à§à¦à¦¿ à¦à§°à¦¿à¦¬à¦²à§ বিফল: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "সমষà§à¦à¦¿à§° তালিà¦à¦¾ সলনি à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID সলনি à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID সলনি à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "ৰà§à¦à§° à¦
ধিà¦à¦¾à§° সফলà¦à¦¾à¦¬à§ à¦à§°à§à§±à¦¾ à¦'ল ।"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à¦à¦ সà§à¦¥à¦¾à¦ªà¦¤à§à¦¯à¦¤ পà§à§°à¦£à¦¾à¦²à§ বà§à¦¯à¦¾à¦ªà¦ মà§à¦¡ à¦
সমৰà§à¦¥à¦¿à¦¤ ।"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) বিফল: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à¦à¦¦à§à¦¶ শাৰৠবিশà§à¦²à§à¦·à¦£ à¦à§°à¦¿à¦¬à¦²à§ বিফল ।"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ডà§à¦®à¦¨ নাঠà¦à¦²à¦¾"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "PID %u ৰà§à¦ªà§ ডà§à¦®à¦¨ à¦à¦²à¦¿à¦à§"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ডà§à¦®à¦¨ kill à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr ""
"root পৰিà¦à§à§ à¦à¦ পà§à§°à§à¦à§à§°à¦¾à¦® সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà§à§±à¦¾ à¦à¦à¦¿à¦¤ নহৠ(ন'হ'লৠsystem à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§) ।"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Root ৰ à¦
ধিà¦à¦¾à§° à¦à§±à¦¶à§à¦¯à¦ ।"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "পà§à§°à¦£à¦¾à¦²à§ à¦à¦¾à¦¨à§à¦à¦¿à§° à¦à§à¦·à§à¦¤à§à§°à¦¤ start সমৰà§à¦¥à¦¿à¦¤ নহৠ।"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¿à¦¨à§à¦¤à§ disallow exit নিৰà§à¦§à¦¾à§°à¦¿à¦¤ নহà§!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¿à¦¨à§à¦¤à§ disallow module loading নিৰà§à¦§à¦¾à§°à¦¿à¦¤ নহà§!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, SHM মà§à¦¡ বলপà§à§°à§à¦¬à¦ নিষà§à¦à§à§°à¦¿à§ à¦à§°à¦¾ হà§à¦à§!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§, à¦à¦¾à¦® নà¦à§°à¦¾ সমà§à§° পৰা পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ বলপà§à§°à§à¦¬à¦ নিষà§à¦à§à§°à¦¿à§ à¦à§°à¦¾ হà§à¦à§!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥ ।"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe বিফল: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() বিফল: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() বিফল: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ডà§à¦®à¦¨ à¦à§°à¦®à§à¦ à¦à§°à¦¿à¦¬à¦²à§ বিফল ।"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "সফলতাৰৠডà§à¦®à¦¨ à¦à§°à¦®à§à¦ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() বিফল: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à¦à¦à¦à§ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "সà¦à§à¦à¦²à¦¨à§° à¦à§à¦¹à¦¸à§à¦¥: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "সà¦à§à¦à¦²à¦¨à§° CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "à¦à§à¦¹à¦¸à§à¦¥à¦¤ à¦à¦²à§à§±à¦¾ হà§à¦à§: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPU পà§à§±à¦¾ à¦à§à¦à§ ।"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "পà§à¦à§° মাপ %lu bytes"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind সমৰà§à¦¥à¦¨à§° সà§à¦¤à§ সà¦à§à¦à¦²à¦¨ à¦à§°à¦¾ হà§à¦à§: হà§"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind সমৰà§à¦¥à¦¨à§° সà§à¦¤à§ সà¦à§à¦à¦²à¦¨ à¦à§°à¦¾ হà§à¦à§: নহà§"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "à¦à§à¦¹à¦¸à§à¦¥à¦¤ à¦à¦²à§à§±à¦¾ হà§à¦à§: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimized build: হà§"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimized build: নহà§"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG বà§à¦¯à¦¾à¦à§à¦¯à¦¾ à¦à§°à¦¾ হà§à¦à§, সà¦à¦²à§ asserts নিষà§à¦à§à§°à¦¿à§ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH বà§à¦¯à¦¾à¦à§à¦¯à¦¾ à¦à§°à¦¾ হà§à¦à§, à¦
à¦à¦² fast path asserts নিষà§à¦à§à§°à¦¿à§ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "সà¦à¦²à§ asserts সà¦à§à§°à¦¿à§ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "যনà§à¦¤à§à§° ID পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "যনà§à¦¤à§à§° ID হ'ল %s ।"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "সà§à¦¶à¦¾à¦¨ ID হল %s।"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ৰান à¦à¦¾à¦à¦® পà¦à§à¦à¦¿à¦à¦¾ %s বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "à¦
ৱসà§à¦¥à¦¾à¦¸à§à¦à¦ পà¦à§à¦à¦¿à¦à¦¾ %s বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "মডিà¦à¦² ডিৰà§à¦à§à¦à§°à¦¿ %s বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "পà§à§°à¦£à¦¾à¦²à§ মà§à¦¡à¦¤ à¦à¦²à¦¿à¦à§: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -367,15 +388,15 @@ msgstr ""
"সিসà§à¦à§à¦® মà§à¦¡à§ বà§à¦¯à§±à¦¹à¦¾à§°à§à§° সমসà§à¦¯à¦¾ সমà§à¦ªà§°à§à¦à§ à¦à¦¾à¦¨à¦¤à§ হলৠhttp://pulseaudio.org/wiki/"
"WhatIsWrongWithSystemMode দà§à¦à§à¦¨à¥¤"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() বà§à¦¯à§°à§à¦¥ ।"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "নতà§à¦¨ high resolution timers পà§à§±à¦¾ হà§! à¦
à¦à¦¿à¦¨à¦¨à§à¦¦à¦¨!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -383,28 +404,28 @@ msgstr ""
"শà§à§°à§à¦®à¦¾à¦¨, à¦à¦ªà§à¦¨à¦¾à§° à¦à¦¾à§°à§à¦£à§à¦² পà§à§°à¦£à¦¿! high resolution timer সà¦à§à§°à¦¿à§ থà¦à¦¾ Linux ঠà¦à¦à¦¿ "
"à¦à¦ªà¦¦à§à¦¶ দিà§à¦¾ হà§!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() বà§à¦¯à§°à§à¦¥ ।"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ডà§à¦®à¦¨ à¦à§°à¦®à§à¦ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥ ।"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"তà§à¦²à¦¿ লà§à§±à¦¾ মডিà¦à¦² নà§à¦¹à§à§±à¦¾à¦à§ ডà§à¦®à¦¨ à¦à§°à¦®à§à¦ à¦à§°à¦¾ হà§à¦à§, à¦à§à¦¨à§ à¦à¦¾à¦® সà¦à§à¦à¦¾à¦²à¦¨ à¦à§°à¦¾ সমà§à¦à§± নহৠ।"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ডà§à¦®à¦¨ à¦à§°à¦®à§à¦ à¦à§°à¦¾ সমà§à¦ªà§à§°à§à¦£ ।"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ডà§à¦®à¦¨ বনà§à¦§ à¦à§°à¦¾à§° পà§à§°à¦à§à§°à¦¿à§à¦¾ à¦à§°à¦®à§à¦ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ডà§à¦®à¦¨ বনà§à¦§ à¦à§°à¦¾ হà§à¦à§ ।"
@@ -661,72 +682,77 @@ msgstr "à¦
বà¦à¦¿à¦¤ à¦à§°à¦¾à§° সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: %s\n"
msgid "Path: %s\n"
msgstr "পাথ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] লঠলà¦à§à¦·à§à¦¯ '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] লà¦à§° সà§à¦¤à§° '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] resample পদà§à¦§à¦¤à¦¿ '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] à¦à¦ সà§à¦¥à¦¾à¦ªà¦¤à§à¦¯à¦¤ rlimit সমৰà§à¦¥à¦¿à¦¤ নহৠ।"
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à¦à¦¾à¦¨à§à¦à¦¿à§° বিনà§à¦¯à¦¾à¦¸ '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à¦à¦¾à¦¨à§à¦à¦¿à§° মাতà§à§°à¦¾ '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à¦à¦¾à¦¨à§à¦à¦¿à§° à¦à§à¦¨à§à¦² '%s' বà§à¦§ নহà§"
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à¦à§à¦¨à§à¦² মà§à¦ª '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à¦
à¦à¦¶à§° সà¦à¦à§à¦¯à¦¾ '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à¦
à¦à¦¶à§° মাপ '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] nice সà§à¦¤à§° '%s' বà§à¦§ নহৠ।"
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à¦à¦¾à¦¨à§à¦à¦¿à§° মাতà§à§°à¦¾ '%s' বà§à¦§ নহৠ।"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "বিনà§à¦¯à¦¾à¦¸ নথিপতà§à§° à¦à§à¦²à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -734,7 +760,7 @@ msgstr ""
"নিৰà§à¦§à¦¾à§°à¦¿à¦¤ à¦
বিà¦à¦²à§à¦ªà¦¿à¦¤ à¦à§à¦¨à§à¦² মà§à¦ªà¦¤ নিৰà§à¦§à¦¾à§°à¦¿à¦¤ à¦
বিà¦à¦²à§à¦ªà¦¿à¦¤ à¦à§à¦¨à§à¦²à§° সà¦à¦à§à¦¯à¦¾à¦¤à¦à§ বà§à¦²à§à¦ সà¦à¦à§à¦¯à¦ "
"à¦à§à¦¨à§à¦² à¦à¦à§ ।"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ বিনà§à¦¯à¦¾à¦¸ নথিপতà§à§°à§° পৰা পà§à¦¾ হ'ব: %s ###\n"
@@ -780,8 +806,8 @@ msgid "Rear Right"
msgstr "পিà¦à¦¤ সà§à¦à¦«à¦¾à¦²à§"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Low Frequency Emmiter"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1126,191 +1152,191 @@ msgstr "XOpenDisplay() বà§à¦¯à§°à§à¦¥"
msgid "Failed to parse cookie data"
msgstr "à¦à§à¦à¦¿à§° তথà§à¦¯ বিশà§à¦²à§à¦·à¦£ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "বিনà§à¦¯à¦¾à¦¸ নথিপতà§à§° '%s' à¦à§à¦²à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à¦à§à¦¨à§ à¦à§à¦à¦¿ তà§à¦²à¦¿ লà§à§±à¦¾ নহৠ। à¦à§à¦à¦¿ নà§à¦¹à§à§±à¦¾à¦à§ সà¦à¦¯à§à¦à§° পà§à§°à¦à§à¦·à§à¦à¦¾ à¦à§°à¦¾ হà§à¦à§ ।"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à¦
à¦à¦¾à¦¨à¦¾ à¦à¦à§à¦¸à¦à§à¦¨à¦¶à¦¨ '%s' ৰ বাবৠবাৰà§à¦¤à¦¾ পà§à§°à¦¾à¦ªà§à¦¤ হà§à¦à§"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "সà§à¦à§à§°à¦¿à¦® ডà§à§°à§à¦à¦¨ (à¦
ৰà§à¦¥à¦¾à§ ফাà¦à¦à¦¾) à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "পà§à¦²à§ বà§à¦¯à¦¾à¦ সà§à¦à§à§°à¦¿à¦® ফাà¦à¦à¦¾ à¦à§°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "সাৰà§à¦à¦¾à§°à§à§° সাথৠসà§à¦¥à¦¾à¦ªà¦¿à¦¤ সà¦à¦¯à§à¦ ফাà¦à¦à¦¾ à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "সাফলà§à¦¯à§à§° সাথৠসà§à¦à§à§°à¦¿à¦® নিৰà§à¦®à¦¿à¦¤ হà§à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "বাফাৰà§à§° মাপ: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "বাফাৰà§à§° মাপ: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° spec '%s', ঠà¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦¯à§±à¦¹à¦¾à§° à¦à§°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "যনà§à¦¤à§à§° %s ৰ সাথৠসà¦à¦¯à§à¦ à¦à§°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ষà§à¦à§à§°à¦¿à¦® সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তà§à§°à§à¦à¦¿: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "সà§à¦à§à§°à¦¿à¦® যনà§à¦¤à§à§° সà§à¦¥à¦à¦¿à¦¤ à¦à§°à¦¾ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "সà§à¦à§à§°à¦¿à¦® যনà§à¦¤à§à§° পà§à¦¨à§°à¦¾à§°à¦®à§à¦ à¦à§°à¦¾ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ধà§à§° à¦à¦¤à¦¿à§° সà§à¦à§à§°à¦¿à¦®.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "সà§à¦à§à§°à¦¿à¦® মাতà§à§°à¦¾ à¦
তিà¦à§à§°à¦® à¦à§°à¦¿à¦à§à¥¤%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "সà§à¦à§à§°à¦¿à¦® à¦à§°à¦®à§à¦ à¦à§°à¦¾ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "%s যনà§à¦¤à§à§°à§ সà§à¦à§à§°à¦¿à¦® সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à§° à¦à§°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "not "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "সà§à¦à§à§°à¦¿à¦® বাফাৰà§à§° à¦à¦à§à§°à¦¿à¦¬à¦¿à¦à¦ পৰিবৰà§à¦¤à¦¿à¦¤ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "সà¦à¦¯à§à¦ সà§à¦¥à¦¾à¦ªà¦¿à¦¤ হà§à§à¦à§à¥¤%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "সà¦à¦¯à§à¦ বিফল: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "ফাà¦à¦²à§à§° সমাপà§à¦¤à¦¿ সনাà¦à§à¦¤ হà§à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "সিà¦à¦¨à§à¦¯à¦¾à¦² পà§à§°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ হ'ব।"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à§° পৰিমাণ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "সমà§: %0.3f à¦à§à¦à§à¦£à§à¦¡; লà§à¦à§à¦¨à§à¦¸à¦¿: %0.0f usec ।"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1362,10 +1388,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1424,7 +1454,7 @@ msgstr ""
" file format=FFORMAT Record/play formatted PCM data.\n"
" list file formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1435,68 +1465,68 @@ msgstr ""
"libpulse ৰ সà§à¦¤à§ সà¦à§à¦à¦²à¦¨ à¦à§°à¦¾ হà§à¦à§ %s\n"
"libpulse ৰ সà§à¦¤à§ যà§à¦à§à¦¤ %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦à§à§° নাম '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "সà§à¦à§à§°à¦¿à¦®à§à§° নাম '%s' বà§à¦§ নà§à¥¤"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à§° à¦à¦¨à§à¦¯ নিৰà§à¦§à¦¾à§°à¦¿à¦¤ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "পà§à§°à¦¸à§à¦¸à§à§° সমà§à§à§° বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "ফাà¦à¦²à§à§° à¦
à¦à¦¾à¦¨à¦¾ বিনà§à¦¯à¦¾à¦¸ %s।"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à¦
বà§à¦§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিৰà§à¦§à¦¾à§°à¦¿à¦¤"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à¦
তà§à¦¯à¦¾à¦§à¦¿à¦ à¦à§°à§à¦à§à¦®à§à¦¨à§à¦à¥¤"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° মান নিৰà§à¦§à¦¾à§°à¦£à§à§° ফাà¦à¦² নিৰà§à¦®à¦¾à¦£ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "শবà§à¦¦à§à§° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1504,103 +1534,104 @@ msgstr ""
"সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিৰà§à¦§à¦¾à§°à¦£à§à§° ফাà¦à¦²à¦à¦¿à§° তথà§à¦¯, à¦à¦ ফাà¦à¦²à§à§°à§° পৰা à¦à¦ªà¦²à¦¬à§à¦§ তথà§à¦¯ "
"দà§à¦¬à¦¾à§°à¦¾ পà§à§°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হ'ব।"
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ফাà¦à¦²à§° পৰা সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ফাà¦à¦²à§° পৰা à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª ঠসà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° নিৰà§à¦§à¦¾à§°à¦¿à¦¤ মানৠà¦à§°à¦®à¦¿à¦²"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ফাà¦à¦²à§à¦¤ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª লিà¦à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"à¦à¦à¦¾ %s সà§à¦à§à§°à¦¿à¦® à¦à§à¦²à¦¾ হà¦à§à¦à§à¥¤ à¦à¦à¦¿à§° à¦à¦¨à§à¦¯ '%s' ৰ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° নিৰà§à¦§à¦¾à§°à¦¿à¦¤ মান ঠ'%s' "
"à¦à§à¦¯à¦¾à¦¨à§à¦²à§à§° মà§à¦¯à¦¾à¦ª পà§à§°à§à§à¦ à¦à§°à¦¾ হ'ব।"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "ৰà§à¦à§°à§à¦¡ à¦à§°à¦¾ হà§à¦à§"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "পà§à¦²à§ বà§à¦"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "সà§à¦¥à¦à¦¿à¦¤ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "পà§à¦¨à§°à¦¾à§°à¦®à§à¦ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ধà§à¦¬à¦¨à¦¿ সà§à§±à¦ সà§à¦¥à¦¾à¦¨à§à§ নহà§, সà§à¦¥à¦à¦¿à¦¤ à¦à§°à¦¾ নহৠ।\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "<b>সà¦à¦¯à§à¦à§° মà§à¦¡</b>: %s<br>\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT পà§à§°à¦¾à¦ªà§à¦¤ হà§à¦à§, পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ হà§à¦à§ ।\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: à¦à¦¿à¦à§à¦¨à§à¦² %u দà§à¦¬à¦¾à§°à¦¾ à¦à¦¾à¦à¦²à§à¦¡ পà§à§°à¦à§à§°à¦¿à§à¦¾ বনà§à¦§ à¦à§°à¦¾ হà§à¦à§\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1619,7 +1650,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1630,50 +1661,61 @@ msgstr ""
"libpulse ৰ সà§à¦¤à§ সà¦à§à¦à¦²à¦¨ à¦à§°à¦¾ হà§à¦à§ %s\n"
"libpulse ৰ সà§à¦¤à§ যà§à¦à§à¦¤ %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() বà§à¦¯à§°à§à¦¥ ।\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() বà§à¦¯à§°à§à¦¥ ।\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() বà§à¦¯à§°à§à¦¥ ।\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "পৰিসà¦à¦à§à¦¯à¦¾à¦¨ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "বৰà§à¦¤à§à¦¤à¦®à¦¾à¦¨à§ বà§à¦¯à§±à¦¹à§à¦¤: %u blocks containing %s bytes total.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "সমà§à¦ªà§à§°à§à¦£ à¦à§à§±à¦¨à¦à¦¾à¦²à¦¤ বিতৰণ à¦à§°à¦¾: %u blocks containing %s bytes total.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "à¦à¦¾à¦¨à§à¦à¦¿ à¦à§à¦¶à§à¦¬à§° মাপ: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "সাৰà§à¦à¦¾à§° সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1681,7 +1723,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"বà§à¦¯à§±à¦¹à¦¾à§°à¦à§°à§à¦¤à¦¾à§° নাম: %s\n"
"à¦à§à¦¹à¦¸à§à¦¥à§° নাম: %s\n"
@@ -1693,12 +1735,12 @@ msgstr ""
"à¦
বিà¦à¦²à§à¦ªà¦¿à¦¤ à¦à§à¦¸: %s\n"
"à¦à§à¦à¦¿: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "sink সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1737,22 +1779,22 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tপà§à§°à§à¦:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tসà¦à§à§°à¦¿à§ পà§à§°à§à¦: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à¦à§à¦¸ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1791,20 +1833,20 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "মডিà¦à¦² সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1821,12 +1863,12 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1841,12 +1883,12 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à¦à¦¾à§°à§à¦¡ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1863,22 +1905,22 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tপাৰà§à¦¶à§à¦¬à§°à§à¦ª:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tসà¦à§à§°à¦¿à§ পাৰà§à¦¶à§à¦¬à§°à§à¦ª: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "sink নিবà§à¦¶ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1915,12 +1957,12 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à¦à§à¦¸ নিৰà§à¦à¦® সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1949,12 +1991,12 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à§°à¦¾à¦ªà§à¦¤ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1985,26 +2027,80 @@ msgstr ""
"\tà¦à§à¦£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "বà§à¦¯à§°à§à¦¥à¦¤à¦¾: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² à¦à¦ªà¦²à§à¦¡ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "সমà§à¦ªà§à§°à§à¦£ হà¦à§à¦¾à§° পà§à§°à§à¦¬à§ ফাà¦à¦² সমাপà§à¦¤ হà§à§à¦à§"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "সà§à§±à¦ বà§à¦§ নহà§"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT পà§à§°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à§°à¦¸à§à¦¥à¦¾à¦¨ à¦à§°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2027,6 +2123,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2066,7 +2163,7 @@ msgstr ""
" n, client name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2077,103 +2174,104 @@ msgstr ""
"libpulseৰ সà§à¦¤à§ সà¦à§à¦à¦²à¦¨ à¦à§°à¦¾ %s\n"
"libpulse ৰ সà§à¦¤à§ যà§à¦à§à¦¤ %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "লà§à¦¡ à¦à§°à¦¾à§° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦
নà§à¦à§à§°à¦¹ à¦à§°à¦¿ à¦à¦à¦¾ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à§°à§à¦¨"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "শবà§à¦¦à§à§° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "সতৰà§à¦à¦¬à¦¾à§°à§à¦¤à¦¾: ফাà¦à¦²à§° পৰা সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à§° নিৰà§à¦§à¦¾à§°à¦¿à¦¤ মাপ নিৰà§à¦®à¦¾à¦£ à¦à§°à¦¤à§ বà§à¦¯à§°à§à¦¥à¥¤"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "বাà¦à¦¾à¦¨à§à§° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦¾ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à¦
পসাৰণà§à§° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦¾ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ সিà¦à¦ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "সà§à§°à§à¦¸ নিৰà§à¦à¦® à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ সà§à§°à§à¦¸ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "মডিà¦à¦²à§à§° নাম ঠà¦à§°à§à¦à§à¦®à§à¦¨à§à¦ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "মডিà¦à¦² à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সিà¦à¦ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সà§à§°à§à¦¸ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à¦à¦¾à§°à§à¦¡à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦«à¦¾à¦à¦²à§à§° নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "sink ৰ নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦à§à§° নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à¦à§à¦¸à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦à§ নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "sink ৰ নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ পà§à§°à§à¦à§à§° নাম à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à¦
বà§à¦§ শবà§à¦¦à§à§° মাতà§à§°à¦¾ নিৰà§à¦§à¦¾à§°à¦¿à¦¤"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à¦à§à¦¸à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ শবà§à¦¦à§à§° মাতà§à§°à¦¾ à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠশবà§à¦¦à§à§° মাতà§à§°à¦¾ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ বà§à¦§ নà§"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "sink ৰ নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦¾ নিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à§° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à¦à§à¦¸à§à§° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à§° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à§° বà§à¦²à¦¿à§à¦¾à¦¨ নিৰà§à¦§à¦¾à§°à¦£ à¦à§°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à¦
বà§à¦§ সিà¦à¦ নিবà§à¦¶ à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিৰà§à¦§à¦¾à§°à¦¿à¦¤"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à¦à§à¦¨à§ বà§à¦§ à¦à¦®à¦¾à¦¨à§à¦¡ নিৰà§à¦§à¦¾à§°à¦¿à¦¤ হà§à¦¨à¦¿à¥¤"
@@ -2256,44 +2354,44 @@ msgstr "à¦à§à¦à¦¿ সà¦à¦à§à§°à¦¾à¦¨à§à¦¤ তথà§à¦¯ তà§à¦²à¦¿à¦¬à¦²
msgid "Not yet implemented.\n"
msgstr "à¦à¦¤à¦¿à§à¦¾à¦ বাসà§à¦¤à¦¬à¦¾à§à¦¿à¦¤ নহৠ।\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "PulseAudio ডà§à¦®à¦¨ à¦à¦²à¦à§ না বা সà§à¦¶à¦¾à¦¨à§° ডà§à¦®à¦¨ ৰà§à¦ªà§ à¦à¦²à¦à§ না।"
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio ডà§à¦®à¦¨ kill à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥ ।"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ডà§à¦®à¦¨à§° পৰা à¦à§à¦¨à§ পà§à§°à¦¤à¦¿à¦à§à§°à¦¿à§à¦¾ পà§à§±à¦¾ নাযাৠ।"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn লঠপà§à§°à§à§à¦ à¦à§°à¦¿à¦¬à¦²à§ বà§à¦¯à§°à§à¦¥ ।"
@@ -2330,38 +2428,42 @@ msgstr ""
"দিলৠবা à¦
নà§à¦¯ à¦à¦à¦¾ মান < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "বনà§à¦§"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "High Fidelity Playback (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "হাঠফিডà§à¦²à¦¿à¦à¦¿ à¦à§à¦¯à¦¾à¦ªà¦à¦¾à§° (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telephony Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio ধà§à¦¬à¦¨à¦¿ সà§à§±à¦"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "নিৰà§à¦à¦® যনà§à¦¤à§à§°"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "নিবà§à¦¶ যনà§à¦¤à§à§°"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ ত à¦
'ডিà¦
'"
@@ -2425,133 +2527,159 @@ msgstr "বিবৰà§à¦§à¦"
msgid "No Amplifier"
msgstr "বিবৰà§à¦§à¦¨ পà§à§°à§à§à¦ à¦à§°à¦¾ ন'হ'ব"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "বà§à¦¸à§à¦"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "বà§à¦¸à§à¦ পà§à§°à§à§à¦ à¦à§°à¦¾ ন'হ'ব"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à¦à¦¨à¦¾à¦²à¦ হà§à¦¡ ফà§à¦¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à¦à¦¨à¦¾à¦²à¦ নিবà§à¦¶"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à¦à¦¨à¦¾à¦²à¦ মাà¦à¦à§à§°à§à¦«à§à¦¨"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à¦à¦¨à¦¾à¦²à¦ লাà¦à¦¨ à¦à¦¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à¦à¦¨à¦¾à¦²à¦ ৰà§à¦¡à¦¿à¦"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¿à¦¡à¦¿à¦
'"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à¦à¦¨à¦¾à¦²à¦ নিৰà§à¦à¦®"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à¦à¦¨à¦¾à¦²à¦ হà§à¦¡ ফà§à¦¨"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à¦à¦¨à¦¾à¦²à¦ নিৰà§à¦à¦® (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à¦à¦¨à¦¾à¦²à¦ মà§à¦¨à§ নিৰà§à¦à¦®"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à¦à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à§°à¦¿à¦
'"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à¦à¦¨à¦¾à¦²à¦ মà§à¦¨à§"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à¦à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à§°à¦¿à¦
'"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ২.১"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৩.০"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৩.১"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.০"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.১"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৫.০"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৫.১"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৬.০"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৬.১"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ à§.০"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à¦à¦¨à¦¾à¦²à¦ à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ à§.১"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ডিà¦à¦¿à¦à§à¦² সà§à¦à¦¿à§°à¦¿à¦
' (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ডিà¦à¦¿à¦à§à¦² à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.০ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ডিà¦à¦¿à¦à§à¦² à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৪.০ (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ডিà¦à¦¿à¦à§à¦² à¦à¦¾à§°à¦¾à¦à¦¨à§à¦¡ ৫.১ (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ডিà¦à¦¿à¦à§à¦² সà§à¦à¦¿à§°à¦¿à¦
' (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à¦à¦¨à¦¾à¦²à¦ মà§à¦¨à§ ডà§à¦ªà§à¦²à§à¦à§à¦¸"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à¦à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à§°à¦¿à¦
' ডà§à¦ªà§à¦²à§à¦à§à¦¸"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ডিà¦à¦¿à¦à§à¦² সà§à¦à¦¿à§°à¦¿à¦
' ডà§à¦ªà§à¦²à§à¦à§à¦¸ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Low Frequency Emmiter"
diff --git a/po/bn_IN.po b/po/bn_IN.po
index 65b26cc..1e11457 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.bn_IN\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-08 14:34+0530\n"
"Last-Translator: Runa Bhattacharjee <runab at redhat.com>\n"
"Language-Team: Bengali INDIA <anubad at lists.ankur.org.in>\n"
@@ -18,12 +18,12 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -35,7 +35,7 @@ msgstr ""
"সমà§à¦à¦¬à¦¤ à¦à¦à¦¿ ALSA ডà§à¦°à¦¾à¦à¦à¦¾à¦° '%s'-র à¦à¦à¦à¦¿ বাà¦à¥¤ à¦
নà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦ সমসà§à¦¯à¦¾ সমà§à¦¬à¦¨à§à¦§à§ ALSA "
"ডিà¦à§à¦²à¦ªà¦°à¦¦à§à¦° সà§à¦à¦¿à¦¤ à¦à¦°à§à¦¨à¥¤"
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"সমà§à¦à¦¬à¦¤ à¦à¦à¦¿ ALSA ডà§à¦°à¦¾à¦à¦à¦¾à¦° '%s'-র à¦à¦à¦à¦¿ বাà¦à¥¤ à¦
নà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦ সমসà§à¦¯à¦¾ সমà§à¦¬à¦¨à§à¦§à§ ALSA "
"ডিà¦à§à¦²à¦ªà¦°à¦¦à§à¦° সà§à¦à¦¿à¦¤ à¦à¦°à§à¦¨à¥¤"
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -61,7 +61,8 @@ msgstr ""
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "সরà§à¦¬à¦¦à¦¾ à¦
নà§à¦¤à¦¤ à¦à¦à¦à¦¿ sink লà§à¦¡ à¦à¦°à§ রাà¦à¦¾ হবà§, পà§à¦°à§à§à¦à¦¨à§ null sink বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হবà§"
+msgstr ""
+"সরà§à¦¬à¦¦à¦¾ à¦
নà§à¦¤à¦¤ à¦à¦à¦à¦¿ sink লà§à¦¡ à¦à¦°à§ রাà¦à¦¾ হবà§, পà§à¦°à§à§à¦à¦¨à§ null sink বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হবà§"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
@@ -93,11 +94,11 @@ msgstr "NULL sink-র সমৠনিরà§à¦§à¦¾à¦°à¦£"
msgid "Null Output"
msgstr "Null ফলাফল"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à¦
à¦à§à¦¯à¦¨à§à¦¤à¦°à§à¦£ à¦
ডিà¦"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "মà§à¦¡à§à¦®"
@@ -113,249 +114,272 @@ msgstr "নতà§à¦¨ dl লà§à¦¡à¦¾à¦° বরাদà§à¦¦ à¦à¦°à¦¤à§ বà§
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader যà§à¦ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "%s সিà¦à¦¨à§à¦¯à¦¾à¦² পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ সনà§à¦§à¦¾à¦¨ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "দল '%s' সনà§à¦§à¦¾à¦¨ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ '%s' (UID %lu) ঠদল '%s' (GID %lu) পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦° ঠ'%s' দলà§à¦° GID-র মধà§à¦¯à§ à¦à¦°à¦®à¦¿à¦²à¥¤"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ বà§à¦¯à¦à§à¦¤à¦¿à¦à¦¤ ডিরà§à¦à§à¦à¦°à¦¿ রà§à¦ªà§ '%s' ধারà§à¦¯ à¦à¦°à¦¾ হà§à¦¨à¦¿, à¦
à¦à§à¦°à¦¾à¦¹à§à¦¯ à¦à¦°à¦¾ হবà§à¥¤"
+msgstr ""
+"'%s' বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§ বà§à¦¯à¦à§à¦¤à¦¿à¦à¦¤ ডিরà§à¦à§à¦à¦°à¦¿ রà§à¦ªà§ '%s' ধারà§à¦¯ à¦à¦°à¦¾ হà§à¦¨à¦¿, à¦
à¦à§à¦°à¦¾à¦¹à§à¦¯ à¦à¦°à¦¾ হবà§à¥¤"
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' নিরà§à¦®à¦¾à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "দলà§à¦° তালিà¦à¦¾ পরিবরà§à¦¤à¦¨ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID পরিবরà§à¦¤à¦¨ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID পরিবরà§à¦¤à¦¨ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "root-র à¦
ধিà¦à¦¾à¦° সাফলà§à¦¯à§à¦° সাথৠবরà§à¦à¦¨ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à¦à¦ পà§à¦²à§à¦¯à¦¾à¦à¦«à¦°à§à¦®à§, সিসà§à¦à§à¦®à¦¬à§à¦¯à¦¾à¦ªà§ মà§à¦¡ সমরà§à¦¥à¦¿à¦¤ নà§à¥¤"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) বিফল: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à¦à¦®à¦¾à¦¨à§à¦¡-লাà¦à¦¨ পারà§à¦¸ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ডà§à¦®à¦¨ à¦à¦²à¦à§ না"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "PID %u রà§à¦ªà§ ডà§à¦®à¦¨ à¦à¦²à¦à§"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ডà§à¦®à¦¨ kill à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
-msgstr "root পরিà¦à§à§ à¦à¦ পà§à¦°à§à¦à§à¦°à¦¾à¦®à¦à¦¿ সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà¦à§à¦¾ à¦à¦à¦¿à¦¤ নৠ(যদি না --system à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§)।"
+msgstr ""
+"root পরিà¦à§à§ à¦à¦ পà§à¦°à§à¦à§à¦°à¦¾à¦®à¦à¦¿ সà¦à§à¦à¦¾à¦²à¦¿à¦¤ হà¦à§à¦¾ à¦à¦à¦¿à¦¤ নৠ(যদি না --system à¦à¦²à§à¦²à¦¿à¦à¦¿à¦¤ হà§)।"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Root-র à¦
ধিà¦à¦¾à¦° à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "সিসà§à¦à§à¦® à¦à¦¨à¦¸à§à¦à§à¦¯à¦¾à¦¨à§à¦¸à§à¦° à¦à§à¦·à§à¦¤à§à¦°à§ --start সমরà§à¦¥à¦¿à¦¤ নà§à¥¤"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "সিসà§à¦à§à¦® মà§à¦¡à§ à¦à¦²à¦à§, à¦à¦¿à¦¨à§à¦¤à§ --disallow-exit নিরà§à¦§à¦¾à¦°à¦¿à¦¤ হà§à¦¨à¦¿!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "সিসà§à¦à§à¦® মà§à¦¡à§ à¦à¦²à¦à§, à¦à¦¿à¦¨à§à¦¤à§ --disallow-module-loading নিরà§à¦§à¦¾à¦°à¦¿à¦¤ হà§à¦¨à¦¿!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "সিসà§à¦à§à¦® মà§à¦¡à§ à¦à¦²à¦à§, SHM মà§à¦¡ বলপà§à¦°à§à¦¬à¦ নিষà§à¦à§à¦°à¦¿à§ à¦à¦°à¦¾ হà¦à§à¦à§!"
# http://linux.die.net/man/1/pulseaudio à¦à¦à¦¾à¦¨à§ রà§à¦«à¦¾à¦°à§à¦¨à§à¦¸ পাà¦à§à¦¾ যাবà§
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"সিসà§à¦à§à¦® মà§à¦¡à§ à¦à¦²à¦à§, à¦à¦°à§à¦®à¦¹à§à¦¨ à¦
বসà§à¦¥à¦¾à¦° à¦à¦¨à§à¦¯ ধারà§à¦¯ সমà§à¦¸à§à¦®à¦¾ পà§à¦°à§à¦¤à§ পরৠপà§à¦°à¦¸à§à¦¥à¦¾à¦¨à§à¦° বà§à¦¯à¦¬à¦¸à§à¦¥à¦¾ "
"বলপà§à¦°à§à¦¬à¦ নিষà§à¦à§à¦°à¦¿à§ à¦à¦°à¦¾ হà¦à§à¦à§!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "পাà¦à¦ª বিফল: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() বিফল: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() বিফল: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¤à§ বিফল।"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "সাফলà§à¦¯à§à¦° সাথৠডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() বিফল: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à¦à¦à¦¿ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "à¦à¦®à§à¦ªà¦¾à¦à¦²à§à¦¶à¦¨à§à¦° হà§à¦¸à§à¦: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "à¦à¦®à§à¦ªà¦¾à¦à¦²à¦¶à¦¨à§à¦° CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ হà§à¦¸à§à¦à§ à¦à¦²à¦à§: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPU পাà¦à§à¦¾ à¦à¦¿à§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "পà§à¦à§à¦° মাপ %lu বাà¦à¦"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind সমরà§à¦¥à¦¨ সহ à¦à¦®à§à¦ªà¦¾à¦à¦² à¦à¦°à¦¾ হà§à§à¦à§: হà§à¦¯à¦¾à¦"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind সমরà§à¦¥à¦¨ সহ à¦à¦®à§à¦ªà¦¾à¦à¦² à¦à¦°à¦¾ হà§à§à¦à§: না"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind মà§à¦¡à§ à¦à¦²à¦à§: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ হà§à¦¸à§à¦à§ à¦à¦²à¦à§: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "সরà§à¦¬à¦¾à¦ªà§à¦à§à¦· à¦à¦¤à§à¦¤à¦® বিলà§à¦¡: হà§à¦¯à¦¾à¦"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "সরà§à¦¬à¦¾à¦ªà§à¦à§à¦· à¦à¦¤à§à¦¤à¦® বিলà§à¦¡: না"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG বà§à¦¯à¦¾à¦à§à¦¯à¦¾ à¦à¦°à¦¾ হà§à§à¦à§, সà¦à¦² à¦
à§à¦¯à¦¾à¦¸à¦¾à¦°à§à¦ নিষà§à¦à§à¦°à¦¿à§ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH বà§à¦¯à¦¾à¦à§à¦¯à¦¾ à¦à¦°à¦¾ হà§à§à¦à§, শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ফাসà§à¦ পাথ à¦
à§à¦¯à¦¾à¦¸à¦¾à¦°à§à¦ নিষà§à¦à§à¦°à¦¿à§ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "সà¦à¦² à¦
à§à¦¯à¦¾à¦¸à¦¾à¦°à§à¦ সà¦à§à¦°à¦¿à§ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "মà§à¦¶à¦¿à¦¨ ID পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "মà§à¦¶à¦¿à¦¨ ID হল %s।"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "সà§à¦¶à¦¾à¦¨ ID হল %s।"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "রান-à¦à¦¾à¦à¦® ডিরà§à¦à§à¦à¦°à¦¿ %s বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "à¦
বসà§à¦¥à¦¾à¦¸à§à¦à¦ ডিরà§à¦à§à¦à¦°à¦¿ %s বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "মডিà¦à¦² ডিরà§à¦à§à¦à¦°à¦¿ %s বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "সিসà§à¦à§à¦® মà§à¦¡à§ à¦à¦²à¦à§: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -369,41 +393,42 @@ msgstr ""
"সিসà§à¦à§à¦® মà§à¦¡à§ বà§à¦¯à¦¬à¦¹à¦¾à¦°à§à¦° সমসà§à¦¯à¦¾ সমà§à¦ªà¦°à§à¦à§ à¦à¦¾à¦¨à¦¤à§ হলৠhttp://pulseaudio.org/wiki/"
"WhatIsWrongWithSystemMode দà§à¦à§à¦¨à¥¤"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "à¦à¦à§à¦-রà§à¦¸à§à¦²à¦¿à¦à¦¶à¦¨à§à¦° নতà§à¦¨ à¦à¦¾à¦à¦®à¦¾à¦° à¦à¦ªà¦²à¦¬à§à¦§ রà§à§à¦à§! পরà§à¦à§à¦·à¦¾ à¦à¦°à§ দà§à¦à§à¦¨!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "à¦à¦à§à¦-রà§à¦¸à§à¦²à¦¿à¦à¦¶à¦¨à§à¦° নতà§à¦¨ à¦à¦¾à¦à¦®à¦¾à¦° সহ Linux সà¦à§à¦°à¦¿à§ à¦à¦°à¦¾ বাà¦à§à¦à¦¨à§à§!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "লà§à¦¡ à¦à¦°à¦¾ মডিà¦à¦² বিনা ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§ à¦à¦¬à¦ à¦à§à¦¨à§ à¦à¦°à§à¦® সà¦à§à¦à¦¾à¦²à¦¨ à¦à¦°à¦¾ সমà§à¦à¦¬ নà§à¥¤"
+msgstr ""
+"লà§à¦¡ à¦à¦°à¦¾ মডিà¦à¦² বিনা ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§ à¦à¦¬à¦ à¦à§à¦¨à§ à¦à¦°à§à¦® সà¦à§à¦à¦¾à¦²à¦¨ à¦à¦°à¦¾ সমà§à¦à¦¬ নà§à¥¤"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ডà§à¦®à¦¨ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ডà§à¦®à¦¨ বনà§à¦§ à¦à¦°à¦¾à¦° পà§à¦°à¦à§à¦°à¦¿à§à¦¾ à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ডà§à¦®à¦¨ বনà§à¦§ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
@@ -669,72 +694,77 @@ msgstr "à¦
বà¦à¦¿à¦¤ à¦à¦°à¦¾à¦° সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: %s\n"
msgid "Path: %s\n"
msgstr "পাথ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] লঠà¦à¦¾à¦°à§à¦à§à¦ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] লà¦à§à¦° সà§à¦¤à¦° '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] রি-সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² পদà§à¦§à¦¤à¦¿ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] à¦à¦ পà§à¦²à§à¦¯à¦¾à¦à¦«à¦°à§à¦®à§ rlimit সমরà§à¦¥à¦¿à¦¤ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° বিনà§à¦¯à¦¾à¦¸ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° মাতà§à¦°à¦¾ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° à¦à§à¦¯à¦¾à¦¨à§à¦² '%s' বà§à¦§ নà§"
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à¦
à¦à¦¶ সà¦à¦à§à¦¯à¦¾ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à¦
à¦à¦¶à§à¦° মাপ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] nice সà§à¦¤à¦° '%s' বà§à¦§ নà§à¥¤"
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° মাতà§à¦°à¦¾ '%s' বà§à¦§ নà§à¥¤"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "à¦à¦¨à¦«à¦¿à¦à¦¾à¦°à§à¦¶à¦¨ ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -742,7 +772,7 @@ msgstr ""
"ডিফলà§à¦ à¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ªà§à¦° মধà§à¦¯à§ à¦
নà§à¦¤à¦°à§à¦à§à¦à§à¦¤ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° সà¦à¦à§à¦¯à¦¾ ঠà¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° ডিফলà§à¦ সà¦à¦à§à¦¯à¦¾à¦° মধà§à¦¯à§ "
"à¦à¦°à¦®à¦¿à¦²à¥¤"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ à¦à¦¨à¦«à¦¿à¦à¦¾à¦°à§à¦¶à¦¨ ফাà¦à¦² থà§à¦à§ পà§à¦¾ হবà§: %s ###\n"
@@ -788,8 +818,8 @@ msgid "Rear Right"
msgstr "পিà¦à¦¨à§ ডানদিà¦à§"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "à¦à¦® ফà§à¦°à¦¿à¦à§à§à§à¦¨à§à¦¸à¦¿à¦° নিà¦à¦¸à¦°à¦£à¦à¦¾à¦°à§"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1134,196 +1164,196 @@ msgstr "XOpenDisplay() বà§à¦¯à¦°à§à¦¥"
msgid "Failed to parse cookie data"
msgstr "à¦à§à¦à¦¿à¦° তথà§à¦¯ পারà§à¦¸ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "à¦à¦¨à¦«à¦¿à¦à¦¾à¦°à§à¦¶à¦¨ ফাà¦à¦² '%s' à¦à§à¦²à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à¦à§à¦¨à§ à¦à§à¦à¦¿ লà§à¦¡ à¦à¦°à¦¾ হà§à¦¨à¦¿à¥¤ à¦à§à¦à¦¿ বিনা সà¦à¦¯à§à¦à§à¦° পà§à¦°à¦à§à¦·à§à¦à¦¾ à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à¦
à¦à¦¾à¦¨à¦¾ à¦à¦à§à¦¸à¦à§à¦¨à¦¶à¦¨ '%s'-র à¦à¦¨à§à¦¯ বারà§à¦¤à¦¾ পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§"
# drain a stream = যà¦à¦¨ সà§à¦à§à¦°à¦¿à¦®à§à¦° মধà§à¦¯à§ à¦à¦ªà¦¸à§à¦¥à¦¿à¦¤ সà¦à¦² তথà§à¦¯ à¦à¦¹à¦°à¦£ à¦à¦°à¦¾ হৠঠসà§à¦à§à¦°à¦¿à¦®à¦à¦¿ সমà§à¦ªà§à¦°à§à¦£à¦°à§à¦ªà§ ফাà¦à¦à¦¾ হà§à§ যাà§à¥¤
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "সà§à¦à§à¦°à¦¿à¦® ডà§à¦°à§à¦à¦¨ (à¦
রà§à¦¥à¦¾à§ ফাà¦à¦à¦¾) à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "পà§à¦²à§-বà§à¦¯à¦¾à¦ সà§à¦à§à¦°à¦¿à¦® ফাà¦à¦à¦¾ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "সারà§à¦à¦¾à¦°à§à¦° সাথৠসà§à¦¥à¦¾à¦ªà¦¿à¦¤ সà¦à¦¯à§à¦ ফাà¦à¦à¦¾ à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "সাফলà§à¦¯à§à¦° সাথৠসà§à¦à§à¦°à¦¿à¦® নিরà§à¦®à¦¿à¦¤ হà§à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "বাফারà§à¦° মাপ: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "বাফারà§à¦° মাপ: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° spec '%s', ঠà¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦¯à¦¬à¦¹à¦¾à¦° à¦à¦°à¦¾ হà¦à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "ডিà¦à¦¾à¦à¦¸ %s-র সাথৠসà¦à¦¯à§à¦ à¦à¦°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ষà§à¦à§à¦°à¦¿à¦® সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তà§à¦°à§à¦à¦¿: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "সà§à¦à§à¦°à¦¿à¦® ডিà¦à¦¾à¦à¦¸ সà§à¦¥à¦à¦¿à¦¤ à¦à¦°à¦¾ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "সà§à¦à§à¦°à¦¿à¦® ডিà¦à¦¾à¦à¦¸ পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤ %s"
# underrun = ধà§à¦° à¦à¦¤à¦¿à¦° সà§à¦à§à¦°à¦¿à¦®
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ধà§à¦° à¦à¦¤à¦¿à¦° সà§à¦à§à¦°à¦¿à¦®.%s"
# overrun=the stream fills up the allocated buffer space and there is no more space for it
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "সà§à¦à§à¦°à¦¿à¦® মাতà§à¦°à¦¾ à¦
তিà¦à§à¦°à¦® à¦à¦°à§à¦à§à¥¤%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "সà§à¦à§à¦°à¦¿à¦® à¦à¦°à¦®à§à¦ à¦à¦°à¦¾ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "%s ডিà¦à¦¾à¦à¦¸à§ সà§à¦à§à¦°à¦¿à¦® সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° à¦à¦°à¦¾ হà§à§à¦à§ (%u, %ssuspended)।%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "না "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "সà§à¦à§à¦°à¦¿à¦® বাফারà§à¦° à¦
à§à¦¯à¦¾à¦à§à¦°à¦¿à¦¬à¦¿à¦à¦ পরিবরà§à¦¤à¦¿à¦¤ হà§à§à¦à§à¥¤ %s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "সà¦à¦¯à§à¦ সà§à¦¥à¦¾à¦ªà¦¿à¦¤ হà§à§à¦à§à¥¤%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "সà¦à¦¯à§à¦ বিফল: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "ফাà¦à¦²à§à¦° সমাপà§à¦¤à¦¿ সনাà¦à§à¦¤ হà§à§à¦à§à¥¤"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "সিà¦à¦¨à§à¦¯à¦¾à¦² পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ à¦à¦°à¦¾ হবà§à¥¤"
# latency here = delay (technical term
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à¦° পরিমাণ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "সমà§: %0.3f সà§à¦à§à¦¨à§à¦¡; লà§à¦à§à¦¨à§à¦¸à¦¿: %0.0f usec।"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() বà§à¦¯à¦°à§à¦¥: %s"
# reverting this to english because the command line text gets messed up
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1375,10 +1405,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1437,7 +1471,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1448,68 +1482,68 @@ msgstr ""
"libpulse সহযà§à¦à§ à¦à¦®à§à¦ªà¦¾à¦à¦² à¦à¦°à¦¾ হà§à§à¦à§ %s\n"
"libpulse-র সাথৠযà§à¦à§à¦¤ %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦à§à¦° নাম '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "সà§à¦à§à¦°à¦¿à¦®à§à¦° নাম '%s' বà§à¦§ নà§à¥¤"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦² মà§à¦¯à¦¾à¦ª '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "লà§à¦à§à¦¨à§à¦¸à¦¿à¦° à¦à¦¨à§à¦¯ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "পà§à¦°à¦¸à§à¦¸à§à¦° সমà§à§à¦° বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "বà§à¦¶à¦¿à¦·à§à¦à§à¦¯ '%s' বà§à¦§ নà§à¥¤"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "ফাà¦à¦²à§à¦° à¦
à¦à¦¾à¦¨à¦¾ বিনà§à¦¯à¦¾à¦¸ %s।"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à¦
বà§à¦§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিরà§à¦§à¦¾à¦°à¦¿à¦¤"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à¦
তà§à¦¯à¦¾à¦§à¦¿à¦ à¦à¦°à§à¦à§à¦®à§à¦¨à§à¦à¥¤"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° মান নিরà§à¦§à¦¾à¦°à¦£à§à¦° ফাà¦à¦² নিরà§à¦®à¦¾à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "শবà§à¦¦à§à¦° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1517,103 +1551,104 @@ msgstr ""
"সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: à¦à¦¿à¦¹à§à¦¨à¦¿à¦¤ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² নিরà§à¦§à¦¾à¦°à¦£à§à¦° ফাà¦à¦²à¦à¦¿à¦° তথà§à¦¯, à¦à¦ ফাà¦à¦²à§à¦° থà§à¦à§ à¦à¦ªà¦²à¦¬à§à¦§ তথà§à¦¯ "
"দà§à¦¬à¦¾à¦°à¦¾ পà§à¦°à¦¤à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হবà§à¥¤"
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ফাà¦à¦² থà§à¦à§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦² থà§à¦à§ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª ঠসà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মানৠà¦à¦°à¦®à¦¿à¦²"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦²à§à¦° মধà§à¦¯à§ à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª লিà¦à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"à¦à¦à¦à¦¿ %s সà§à¦à§à¦°à¦¿à¦® à¦à§à¦²à¦¾ হà¦à§à¦à§à¥¤ à¦à¦à¦¿à¦° à¦à¦¨à§à¦¯ '%s'-র সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মান ঠ'%s' "
"à¦à§à¦¯à¦¾à¦¨à§à¦²à§à¦° মà§à¦¯à¦¾à¦ª পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবà§à¥¤"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "রà§à¦à¦°à§à¦¡ à¦à¦°à¦¾ হà¦à§à¦à§"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "পà§à¦²à§-বà§à¦¯à¦¾à¦"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "সà§à¦¥à¦à¦¿à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "পà§à¦¨à¦°à¦¾à¦°à¦®à§à¦ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: শবà§à¦¦à§à¦° সারà§à¦à¦¾à¦°à¦à¦¿ সà§à¦¥à¦¾à¦¨à§à§ নৠঠসà§à¦¥à¦à¦¿à¦¤ à¦à¦°à¦¾ হà¦à§à¦à§ না।\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "সà¦à¦¯à§à¦ বিফল: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ à¦à¦°à¦¾ হà§à§à¦à§à¥¤\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: সিà¦à¦¨à§à¦¯à¦¾à¦² %u দà§à¦¬à¦¾à¦°à¦¾ à¦à¦¾à¦à¦²à§à¦¡ পà§à¦°à¦¸à§à¦¸ বনà§à¦§ à¦à¦°à¦¾ হà§à§à¦à§\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1632,7 +1667,7 @@ msgstr ""
"নাম\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1643,50 +1678,62 @@ msgstr ""
"libpulse সহযà§à¦à§ à¦à¦®à§à¦ªà¦¾à¦à¦² à¦à¦°à¦¾ হà§à§à¦à§ %s\n"
"libpulse-র সাথৠযà§à¦à§à¦¤ %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() বà§à¦¯à¦°à§à¦¥à¥¤\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() বà§à¦¯à¦°à§à¦¥à¥¤\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() বà§à¦¯à¦°à§à¦¥à¥¤\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "পরিসà¦à¦à§à¦¯à¦¾à¦¨ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "বরà§à¦¤à¦®à¦¾à¦¨à§ বà§à¦¯à¦¬à¦¹à§à¦¤: %u বà§à¦²à¦à§à¦° মধà§à¦¯à§ à¦à¦ªà¦¸à§à¦¥à¦¿à¦¤ সরà§à¦¬à¦®à§à¦ %s বাà¦à¦à¥¤\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "সমà§à¦ªà§à¦°à§à¦£ à¦à¦°à§à¦®à¦à¦¾à¦²à§à¦° à¦à¦¨à§à¦¯ বরাদà§à¦¦ à¦à¦°à¦¾ হà§à§à¦à§: %u বà§à¦²à¦à§à¦° মধà§à¦¯à§ à¦à¦ªà¦¸à§à¦¥à¦¿à¦¤ সরà§à¦¬à¦®à§à¦ %s বাà¦à¦à¥¤\n"
+msgstr ""
+"সমà§à¦ªà§à¦°à§à¦£ à¦à¦°à§à¦®à¦à¦¾à¦²à§à¦° à¦à¦¨à§à¦¯ বরাদà§à¦¦ à¦à¦°à¦¾ হà§à§à¦à§: %u বà§à¦²à¦à§à¦° মধà§à¦¯à§ à¦à¦ªà¦¸à§à¦¥à¦¿à¦¤ সরà§à¦¬à¦®à§à¦ %s বাà¦à¦à¥¤\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² à¦à§à¦¯à¦¾à¦¶à§à¦° মাপ: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "সারà§à¦à¦¾à¦° সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1694,7 +1741,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦à¦¾à¦°à§à¦° নাম: %s\n"
"হà§à¦¸à§à¦-নà§à¦®: %s\n"
@@ -1706,12 +1753,12 @@ msgstr ""
"ডিফলà§à¦ সà§à¦°à§à¦¸: %s\n"
"à¦à§à¦à¦¿: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "sink সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1750,22 +1797,22 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tপà§à¦°à§à¦:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tসà¦à§à¦°à¦¿à§ পà§à¦°à§à¦: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à¦à§à¦¸ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1804,20 +1851,20 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "মডিà¦à¦² সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1834,12 +1881,12 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à¦à§à¦²à¦¾à§à§à¦¨à§à¦ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1854,12 +1901,12 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à¦à¦¾à¦°à§à¦¡ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1876,22 +1923,22 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tপà§à¦°à§à¦«à¦¾à¦à¦²:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tসà¦à§à¦°à¦¿à§ পà§à¦°à§à¦«à¦¾à¦à¦²: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "sink à¦à¦¨à¦ªà§à¦ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1928,12 +1975,12 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à¦à§à¦¸ à¦à¦à¦à¦ªà§à¦ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1962,13 +2009,13 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ পà§à¦°à¦¾à¦ªà§à¦¤ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
# Lazy = low quality sample
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1999,27 +2046,81 @@ msgstr ""
"\tবিবিধ বà§à¦¶à¦¿à¦·à§à¦à§à¦¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "বà§à¦¯à¦°à§à¦¥à¦¤à¦¾: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² à¦à¦ªà¦²à§à¦¡ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "সমà§à¦ªà§à¦°à§à¦£ হà¦à§à¦¾à¦° পà§à¦°à§à¦¬à§ ফাà¦à¦² সমাপà§à¦¤ হà§à§à¦à§"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "সারà§à¦à¦¾à¦° বà§à¦§ নà§"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§, পà§à¦°à¦¸à§à¦¥à¦¾à¦¨ à¦à¦°à¦¾ হà§à§à¦à§à¥¤"
# reverting to english because the command line output gets messed up
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2042,6 +2143,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2081,7 +2183,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2092,103 +2194,104 @@ msgstr ""
"libpulse সহযà§à¦à§ à¦à¦®à§à¦ªà¦¾à¦à¦² à¦à¦°à¦¾ %s\n"
"libpulse-র সাথৠযà§à¦à§à¦¤ %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "লà§à¦¡ à¦à¦°à¦¾à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦
নà§à¦à§à¦°à¦¹ à¦à¦°à§ à¦à¦à¦à¦¿ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à¦°à§à¦¨"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "শবà§à¦¦à§à¦° ফাà¦à¦² à¦à§à¦²à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "সতরà§à¦à¦¬à¦¾à¦°à§à¦¤à¦¾: ফাà¦à¦² থà§à¦à§ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦²à§à¦° নিরà§à¦§à¦¾à¦°à¦¿à¦¤ মাপ নিরà§à¦®à¦¾à¦£ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "বাà¦à¦¾à¦¨à§à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦à¦¿ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à¦
পসারণà§à¦° à¦à¦¦à§à¦¦à§à¦¶à§à¦¯à§ à¦à¦à¦à¦¿ সà§à¦¯à¦¾à¦®à§à¦ªà§à¦² ফাà¦à¦² à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ সিà¦à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "সà§à¦°à§à¦¸ à¦à¦à¦à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ সà§à¦°à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "মডিà¦à¦²à§à¦° নাম ঠà¦à¦°à§à¦à§à¦®à§à¦¨à§à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "মডিà¦à¦² à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সিà¦à¦ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr "à¦à¦à¦¾à¦§à¦¿à¦ সà§à¦°à§à¦¸ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ যাবৠনা। বà§à¦²à¦¿à§à§à¦¨ মান নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦à¥¤"
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à¦à¦¾à¦°à§à¦¡à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦«à¦¾à¦à¦²à§à¦° নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "sink-র নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦à§à¦° নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à¦à§à¦¸à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦à§ নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "sink-র নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ পà§à¦°à§à¦à§à¦° নাম à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à¦
বà§à¦§ শবà§à¦¦à§à¦° মাতà§à¦°à¦¾ নিরà§à¦§à¦¾à¦°à¦¿à¦¤"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à¦à§à¦¸à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ শবà§à¦¦à§à¦° মাতà§à¦°à¦¾ à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠশবà§à¦¦à§à¦° মাতà§à¦°à¦¾ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ বà§à¦§ নà§"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "sink-র নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠà¦à¦à¦à¦¿ নিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à¦° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à¦à§à¦¸à§à¦° নাম/à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à¦° বà§à¦²à¦¿à§à¦¾à¦¨ à¦à¦²à§à¦²à§à¦ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ ঠনিà¦à¦¶à¦¬à§à¦¦à¦¤à¦¾à¦° বà§à¦²à¦¿à§à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ à¦à¦°à¦¾ à¦à¦¬à¦¶à§à¦¯à¦"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à¦
বà§à¦§ সিà¦à¦ à¦à¦¨à¦ªà§à¦ à¦à¦¨à§à¦¡à§à¦à§à¦¸ নিরà§à¦§à¦¾à¦°à¦¿à¦¤"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à¦à§à¦¨à§ বà§à¦§ à¦à¦®à¦¾à¦¨à§à¦¡ নিরà§à¦§à¦¾à¦°à¦¿à¦¤ হà§à¦¨à¦¿à¥¤"
@@ -2271,44 +2374,44 @@ msgstr "à¦à§à¦à¦¿ সà¦à¦à§à¦°à¦¾à¦¨à§à¦¤ তথà§à¦¯ লà§à¦¡ à¦à¦°
msgid "Not yet implemented.\n"
msgstr "à¦à¦à¦¨à§ বাসà§à¦¤à¦¬à¦¾à§à¦¿à¦¤ হà§à¦¨à¦¿à¥¤\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "PulseAudio ডà§à¦®à¦¨ à¦à¦²à¦à§ না à¦
থবা সà§à¦¶à¦¾à¦¨à§à¦° ডà§à¦®à¦¨ রà§à¦ªà§ à¦à¦²à¦à§ না।"
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio ডà§à¦®à¦¨ kill à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ডà§à¦®à¦¨ থà§à¦à§ à¦à§à¦¨à§ পà§à¦°à¦¤à¦¿à¦à§à¦°à¦¿à§à¦¾ পাà¦à§à¦¾ যাà¦à§à¦à§ না।"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn লঠপà§à¦°à§à§à¦ à¦à¦°à¦¤à§ বà§à¦¯à¦°à§à¦¥à¥¤"
@@ -2347,38 +2450,42 @@ msgstr ""
"min_avail-র থà§à¦à§ à¦à¦® à¦
নà§à¦¯ à¦à¦à¦à¦¿ মান পà§à¦°à¦¾à¦ªà§à¦¤ হà§à§à¦à§à¥¤"
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "বনà§à¦§"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "হাà¦-ফিডà§à¦²à¦¿à¦à¦¿ পà§à¦²à§-বà§à¦¯à¦¾à¦ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "হাà¦-ফিডà§à¦²à¦¿à¦à¦¿ à¦à§à¦¯à¦¾à¦ªà¦à¦¾à¦° (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à¦à§à¦²à¦¿à¦«à§à¦¨à¦¿ ডà§à¦ªà§à¦²à§ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio শবà§à¦¦à§à¦° সারà§à¦à¦¾à¦°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à¦à¦à¦à¦ªà§à¦ ডিà¦à¦¾à¦à¦¸"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à¦à¦¨à¦ªà§à¦ ডিà¦à¦¾à¦à¦¸"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME at -র মধà§à¦¯à§ à¦
ডিà¦"
@@ -2442,133 +2549,159 @@ msgstr "বিবরà§à¦§à¦"
msgid "No Amplifier"
msgstr "বিবরà§à¦§à¦¨ পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবৠনা"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "বà§à¦¸à§à¦"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "বà§à¦¸à§à¦ পà§à¦°à§à§à¦ à¦à¦°à¦¾ হবৠনা"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ হà§à¦¡-ফà§à¦¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦¨à¦ªà§à¦"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মাà¦à¦à§à¦°à§à¦«à§à¦¨"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ লাà¦à¦¨-à¦à¦¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ রà§à¦¡à¦¿à¦"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦¿à¦¡à¦¿à¦"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦à¦à¦ªà§à¦"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ হà§à¦¡-ফà§à¦¨"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ à¦à¦à¦à¦ªà§à¦ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মà§à¦¨à§ à¦à¦à¦à¦ªà§à¦"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à¦°à¦¿à¦"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মà§à¦¨à§"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à¦°à¦¿à¦"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ২.১"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৩.০"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৩.১"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৪.০"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৪.১"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৫.০"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৫.১"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৬.০"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ ৬.১"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ à§.০"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সারাà¦à¦¨à§à¦¡ à§.১"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সà§à¦à¦¿à¦°à¦¿à¦ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সারাà¦à¦¨à§à¦¡ ৪.০ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সারাà¦à¦¨à§à¦¡ ৪.০ (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সারাà¦à¦¨à§à¦¡ ৫.১ (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সà§à¦à¦¿à¦°à¦¿à¦ (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ মà§à¦¨à§ ডà§à¦ªà§à¦²à§"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à¦
à§à¦¯à¦¾à¦¨à¦¾à¦²à¦ সà§à¦à¦¿à¦°à¦¿à¦ ডà§à¦ªà§à¦²à§"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ডিà¦à¦¿à¦à§à¦¯à¦¾à¦² সà§à¦à¦¿à¦°à¦¿à¦ ডà§à¦ªà§à¦²à§ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "à¦à¦® ফà§à¦°à¦¿à¦à§à§à§à¦¨à§à¦¸à¦¿à¦° নিà¦à¦¸à¦°à¦£à¦à¦¾à¦°à§"
diff --git a/po/ca.po b/po/ca.po
index e9938df..95d9377 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -24,7 +24,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-09-12 11:40+0100\n"
"Last-Translator: Josep Torné Llavall <josep.torne at gmail.com>\n"
"Language-Team: Catalan <fedora at softcatala.net>\n"
@@ -32,12 +32,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -50,7 +50,7 @@ msgstr ""
"Probablement es tracta d'un error del controlador de l'ALSA '%s'. Informeu "
"d'aquest incident als desenvolupadors de l'ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -63,7 +63,7 @@ msgstr ""
"Probablement es tracta d'un error del controlador de l'ALSA '%s'. Informeu "
"d'aquest incident als desenvolupadors de l'ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -110,11 +110,11 @@ msgstr "Conducte NULL"
msgid "Null Output"
msgstr "Sortida nul·la"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Audio intern"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Mòdem"
@@ -130,92 +130,98 @@ msgstr "No s'ha pogut allotjar el nou carregador dl."
msgid "Failed to add bind-now-loader."
msgstr "No s'ha pogut afegir bind-now-loader."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "S'ha obtingut la senyal %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "S'està sortint."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "No s'ha trobat l'usuari '%s'."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "No s'ha trobat el grup '%s'."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "S'han trobat l'usuari '%s' (UID %lu) i el grup '%s' (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "El GID de l'usuari '%s' i del grup '%s' no coincideixen."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
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:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "No s'ha pogut crear '%s': %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "No s'ha pogut canviar la llista del grup: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "No s'ha pogut canviar el GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "No s'ha pogut canviar l'UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "S'han alliberat els permisos de root."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "El mode de sistema global no és compatible amb aquesta plataforma."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "S'ha produït un error en setrlimit(%s, (%u, %u)): %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "No s'ha pogut interpretar la lÃnia d'ordres."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "El dimoni no s'està executant"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "El dimoni s'està executant amb PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "S'ha produït un error en matar el dimoni: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -223,163 +229,178 @@ msgstr ""
"No és necessari executar aquesta aplicació com a root (excepte si "
"s'especifica --system)"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Es requereixen privilegis de root."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "La opció --start no està suportada per a instà ncies de sistema."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
"S'està executant en mode sistema, però no s'ha especificat l'opció --"
"disallow-exit."
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"S'està executant en mode sistema, però no s'ha especificat l'opció --"
"disallow-module-loading."
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
"S'està executant en mode sistema, es deshabilitarà el mode SHM forçosament."
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"S'està executant en mode sistema, la sortida per temps d'inactivitat es "
"deshabilita."
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "S'ha produït un error en adquirir stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "Ha fallat la canonada: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "Ha fallat fork(): %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "Ha fallat read(): %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "S'ha produït un error en iniciar el dimoni."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "S'ha iniciat el dimoni."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "Ha fallat read(): %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Aquest és el PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilació: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS de compilació: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "S'està executant en el host: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "S'han trobat %u CPU's"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "La mida de pà gina és de %lu bytes."
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Compilat amb suport per a Valgrind: sÃ"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Compilat amb suport per a Valgrind: no"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "S'està executant amb el mode valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "S'està executant en el host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Construcció optimitzada: sÃ"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Construcció optmitzada: no"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG està definit, s'han desactivat totes les assercions."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
"FASTPATH està definit, només s'ha deshabilitat les assercions de camà rà pid."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "S'han habilitat totes les assercions."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "No s'ha pogut obtenir l'ID de la mà quina"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID de la mà quina és %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "L'ID de la sessió és %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "S'està utilitzant el directori d'execució %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "S'està utilitzant el directori d'estat %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "S'està utilitzant el directori dels móduls %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "S'està executant en mode sistema: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -395,15 +416,15 @@ msgstr ""
"Si us plau, llegiu http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode per "
"a una explicació de per què el mode sistema sol ser una mala idea."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "S'ha produït un error en pa_pid_file_create()."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Estan disponibles els temporitzadors frescos d'alta resolució."
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -411,27 +432,27 @@ msgstr ""
"Es recomana la utilització d'un nucli amb els temporitzadors d'alta "
"resolució habilitats."
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "S'ha produït un error en pa_core_new()."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "S'ha produït un error en inicialitzar el dimoni."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "El dimoni s'ha iniciat sense cap mòdul carregat, no funcionarà ."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "S'ha completat la inicialització del dimoni."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "S'ha iniciat l'aturada del dimoni."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "S'ha aturat el dimoni."
@@ -701,72 +722,77 @@ msgstr "Advertència d'obsolescència: %s\n"
msgid "Path: %s\n"
msgstr "Ruta: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destà de registre incorrecte '%s'"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nivell de registre incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Mètode de remostreig incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, 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:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Format de mostra incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Velocitat de mostreig '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canals de mostreig incorrectes '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canals incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Nombre de fragments incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Mida de fragment incorrecta '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Nivell de prioritat incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Velocitat de mostreig '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Error en obrir el fitxer de configuració: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -774,7 +800,7 @@ msgstr ""
"El mapa de canals especificat per omissió té un número de canals diferent "
"del número de canals especificat per omissió."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lectura del fitxer de configuració: %s ###\n"
@@ -820,8 +846,8 @@ msgid "Rear Right"
msgstr "Posterior dreta"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Emissor de baixa freqüència"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1166,193 +1192,193 @@ msgstr "Ha fallat XOpenDisplay()"
msgid "Failed to parse cookie data"
msgstr "Ha fallat el parseig de les dades de la cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
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:550
+#: ../src/pulse/context.c:539
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:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "S'ha rebut un missatge per a una extensió desconeguda '%s'"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "S'ha produït un error en drenar el fluxe: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Flux de reproducció drenat."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "S'està drenant la connexió amb el servidor."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "Ha fallat pa_stream_write(): %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "Ha fallat pa_stream_begin_write(): %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "Ha fallat pa_stream_peek(): %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Flux creat correctament."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "Ha fallat pa_stream_get_buffer_attr(): %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Mètriques del búffer: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Mètriques del búffer: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr ""
"S'estan utilitzant les especificacions de mostreig '%s', mapejat del canal '%"
"s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "S'ha connectat al dispositiu %s (%u, %ssuspès)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "S'ha produït un error en l'stream: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Flux del dispositiu suspès.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Flux del dispositiu reprès.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Dades insuficients al flux.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Desbordament de flux.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "S'ha iniciat el flux.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "S'ha mogut el flux al dispositiu %s (%u, %ssuspès).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "no "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Els atributs del flux de memòria intermèdia han canviat.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "S'ha establert la connexió.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "Ha fallat pa_stream_new(): %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "Ha fallat pa_stream_connect_playback(): %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "Ha fallat pa_stream_connect_record(): %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Ha fallat la connexió: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "S'ha llegit el fi del fitxer."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "Ha fallat write(): %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "S'ha rebut un senyal, s'està sortint."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "No s'ha pogut obtenir la latència: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Temps: %0.3f segs; Latència: %0.0f microsegs."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "Ha fallat pa_stream_update_timing_info(): %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1404,10 +1430,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opcions]\n"
@@ -1467,7 +1497,7 @@ msgstr ""
" --list-file-formats Llista disponible de formats de "
"fitxer.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1478,68 +1508,68 @@ msgstr ""
"Compilat amb libpulse %s\n"
"Enllaçat amb libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nom del client invà lid '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nom de flux de dades invà lid '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Mapa de canals invà lid '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Especificació de latència invà lida '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Especificació de temps de procés invà lida '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Propietat invà lida '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Format desconegut de fitxer %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Especificació de mostra invà lida"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Massa arguments."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "No s'ha pogut generar l'especificació de mostra del fitxer."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "No s'ha pogut obrir el fitxer d'Ã udio."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1547,24 +1577,24 @@ msgstr ""
"Advertència: l'especificació de mostra especificada se sobreescriurà amb "
"l'especificació del fitxer."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "No s'ha pogut determinar l'especificació de mostra del fitxer."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr ""
"Advertència: no s'ha pogut determinar el mapeig de canals des del fitxer."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "El mapa de canals no coincideix amb l'especificació de mostra"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Advertència: no s'ha pogut escriure el mapa de canals en un fitxer."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -1572,80 +1602,80 @@ msgstr ""
"S'està obrint un flux de dades %s amb especificació de mostra '%s' i mapa de "
"canals '%s'."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "enregistrant"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "reproducció"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "Ha fallat el pa_mainloop_new()."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "Ha fallat el io_new()."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "Ha fallat el pa_context_new()."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "Ha fallat pa_context_connect(): %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "Ha fallat el pa_context_new()."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "Ha fallat el pa_mainloop_run()."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "No s'ha pogut suspendre: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "No s'ha pogut en rependre: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "ADVERTÃNCIA: el sevidor de so no és local, no s'està suspenent.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Ha fallat la connexió: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "S'ha rebut SIGINT, s'està sortint.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "ADVERTÃNCIA: procés fill acabat pel senyal %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1664,7 +1694,7 @@ msgstr ""
"se\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1675,52 +1705,63 @@ msgstr ""
"Compilat amb libpulse %s\n"
"Enllaçat amb libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "Ha fallat el pa_mainloop_new().\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "Ha fallat el pa_context_new().\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "Ha fallat el pa_mainloop_run().\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "No s'han pogut obtenir les estadÃstiques: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr ""
"Actualment s'estan utilitzant: %u blocs que contenen %s bytes en total.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"Allotjats durant el temps de vida: %u blocs que contenen %s bytes en total.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Mida de la memòria cau de mostres: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "No s'ha pogut obtenir la informació del servidor: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1728,7 +1769,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nom d'usuari: %s\n"
"Nom del host: %s\n"
@@ -1740,12 +1781,12 @@ msgstr ""
"Font per omissió: %s\n"
"Galeta: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "No s'ha pogut obtenir la informació del conducte: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1784,22 +1825,22 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorts:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPort actiu: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "No s'ha pogut obtenir la informació de la font: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1838,20 +1879,20 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "No s'ha pogut obtenir informació del mòdul: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1868,12 +1909,12 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "No s'ha pogut obtenir informació del client: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1888,12 +1929,12 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "No s'ha pogut obtenir la informació de la targeta: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1910,22 +1951,22 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tPerfils:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tPerfil actiu: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "No s'ha pogut obtenir informació del conducte d'entrada: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1962,12 +2003,12 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "No s'ha pogut obtenir la informació del conducte de sortida: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1996,12 +2037,12 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "No s'ha pogut obtenir informació de la mostra: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2032,26 +2073,81 @@ msgstr ""
"\tPropietats:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Ha fallat: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "No s'ha pogut pujar la mostra: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "S'ha trobat un fi de fitxer prematurament"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "conducte"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "font"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "font"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Servidor incorrecte"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "S'ha rebut SIGINT, s'està sortint."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2074,6 +2170,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2112,7 +2209,7 @@ msgstr ""
" -n, --client-name=NOM Com cridar aquest client en el "
"servidor\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2123,111 +2220,111 @@ msgstr ""
"Compilat amb libpulse %s\n"
"Enllaçat amb libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Si us plau, especifiqueu un fitxer de mostra per a carregar"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "No s'ha pogut obrir el fitxer de so."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
"Advertiment: No s'ha pogut determinar l'especificació de mostra a partir del "
"fitxer."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Heu d'especificar un nom de mostra a reproduir"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Heu d'especificar un nom de mostra a suprimir"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Heu d'especificar una entrada del conducte i un conducte"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Heu d'especificar un Ãndex de font de sortida i una font"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Heu d'especificar un nom de mòdul i els seus arguments."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Heu d'especificar un Ãndex de mòdul"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"No harÃeu d'especificar més d'un conducte. Heu d'especificar un valor booleà ."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
"No harÃeu d'especificar més d'una font. Heu d'especificar un valor booleà ."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Heu d'especificar un nom o un Ãndex de targeta i un nom de perfil"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Heu d'especificar un nom o un Ãndex de conducte i un nom de port"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Heu d'especificar un nom o un Ãndex de font i un nom de port"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Heu d'especificar un nom o un Ãndex de conducte i un volum"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Especificació de volum invà lida"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Heu d'especificar un nom o un Ãndex de font i un volum"
#
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Heu d'especificar un Ãndex entrada del conducte i un volum"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Ãndex d'entrada del conducte invà lid"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr ""
"Heu d'especificar un nom o un Ãndex de conducte i un booleà de silenciat"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Heu d'especificar un nom o un Ãndex de font i un booleà de silenciat"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
"Heu d'especificar un Ãndex d'entrada del conducte i un booleà de silenciat"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Especificació d'Ãndex d'entrada del conducte invà lida"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Ordre especificada no và lida."
@@ -2312,46 +2409,46 @@ msgstr "No s'han pogut carregar les dades de la galeta\n"
msgid "Not yet implemented.\n"
msgstr "Encara no s'ha implementat.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"El dimoni PulseAudio no s'està executant, o no s'està executant com a dimoni "
"de la sessió."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "No s'ha pogut matar el dimoni PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "El dimoni no respon."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "No s'ha pogut accedir al bloqueig d'autospawn."
@@ -2390,39 +2487,43 @@ msgstr ""
"snd_pcm_avail() ha retornat 0 o un altre valor < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Inactiu"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Reproducció d'alta fidelitat (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Captura d'alta fidelitat (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Dúplex de telefonia (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Servidor de so PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
#, fuzzy
msgid "Input Devices"
msgstr "Entrada %s"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr ""
@@ -2488,154 +2589,179 @@ msgstr ""
msgid "No Amplifier"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+msgid "Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+msgid "No Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Mono analògic"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
#, fuzzy
msgid "Analog Input"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
#, fuzzy
msgid "Analog Microphone"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
#, fuzzy
msgid "Analog Line-In"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
#, fuzzy
msgid "Analog Radio"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
#, fuzzy
msgid "Analog Video"
msgstr "Estèreo analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
#, fuzzy
msgid "Analog Output"
msgstr "Sortida nul·la"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
#, fuzzy
msgid "Analog Headphones"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
#, fuzzy
msgid "Analog Mono Output"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Estèreo analògic"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, fuzzy, c-format
msgid "%s+%s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, fuzzy, c-format
msgid "%s / %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Estèreo analògic"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
#, fuzzy
msgid "Analog Surround 2.1"
msgstr "Envolvent analògic 4.1 "
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
#, fuzzy
msgid "Analog Surround 3.0"
msgstr "Envolvent analògic 4.0 "
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
#, fuzzy
msgid "Analog Surround 3.1"
msgstr "Envolvent analògic 4.1 "
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Envolvent analògic 4.0 "
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Envolvent analògic 4.1 "
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Envolvent analògic 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Envolvent analògic 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
#, fuzzy
msgid "Analog Surround 6.0"
msgstr "Envolvent analògic 4.0 "
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
#, fuzzy
msgid "Analog Surround 6.1"
msgstr "Envolvent analògic 4.1 "
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
#, fuzzy
msgid "Analog Surround 7.0"
msgstr "Envolvent analògic 4.0 "
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Envolvent analògic 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Estèreo digital (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Envolvent digital 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Envolvent digital 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Envolvent digital 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Estèreo digital (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
#, fuzzy
msgid "Analog Mono Duplex"
msgstr "Mono analògic"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
#, fuzzy
msgid "Analog Stereo Duplex"
msgstr "Estèreo analògic"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Estèreo digital (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Emissor de baixa freqüència"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Nom del client invà lid '%s'\n"
@@ -2928,9 +3054,3 @@ msgstr "Estèreo digital (IEC958)"
#~ "Tipus: %s\n"
#~ "Mòdul: %s\n"
#~ "Arguments: %s\n"
-
-#~ msgid "sink"
-#~ msgstr "conducte"
-
-#~ msgid "source"
-#~ msgstr "font"
diff --git a/po/cs.po b/po/cs.po
index 6d6c3a5..b9a713c 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-17 09:51+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-17 17:08+0200\n"
"Last-Translator: Petr Kovar <pknbe at volny.cz>\n"
"Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
@@ -16,12 +16,12 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Lokalize 1.0\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -34,7 +34,7 @@ msgstr ""
"S nejvÄtÅ¡Ã pravdÄpodobnostà se jedná o chybu v ovladaÄi ALSA \"%s\". "
"Nahlaste prosÃm tento problém vývojáÅům ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"S nejvÄtÅ¡Ã pravdÄpodobnostà se jedná o chybu v ovladaÄi ALSA \"%s\". "
"Nahlaste prosÃm tento problém vývojáÅům ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -94,11 +94,11 @@ msgstr "Taktovaný cÃl NULL"
msgid "Null Output"
msgstr "Výstup \"null\""
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "VnitÅnà zvukový systém"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -114,92 +114,98 @@ msgstr "NezdaÅilo se pÅidÄlenà nového nahrávacÃho programu dl."
msgid "Failed to add bind-now-loader."
msgstr "NezdaÅilo se pÅidat bind-now-loader."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "ZÃskán signál %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "UkonÄovánÃ."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "NezdaÅilo se nalézt uživatele \"%s\"."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "NezdaÅilo se nalézt skupinu \"%s\"."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Nalezen uživatel \"%s\" (UID %lu) a skupina \"%s\" (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID uživatele \"%s\" a skupiny \"%s\" nesouhlasÃ."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Domovský adresáŠuživatele \"%s\" nenà \"%s\", bude ignorováno."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "NezdaÅilo se vytvoÅit \"%s\": %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "NezdaÅilo se zmÄnit seznam skupin: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "NezdaÅilo se zmÄnit GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "NezdaÅilo se zmÄnit UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "OprávnÄnà superuživatele úspÄÅ¡nÄ zruÅ¡ena."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Režim celého systému nenà na této platformÄ podporován."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) selhalo: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "NezdaÅila se analýza pÅÃkazového Åádku."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Démon nebÄžÃ"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Démon bÄžà jako PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Zabità démona se nezdaÅilo: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -207,155 +213,170 @@ msgstr ""
"Tento program nenà urÄen ke spuÅ¡tÄnà pod superuživatelem (nenÃ-li zadáno --"
"system)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Jsou vyžadována oprávnÄnà superuživatele."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start nepodporováno u systémových instancÃ."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
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:586
+#: ../src/daemon/main.c:686
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:589
+#: ../src/daemon/main.c:689
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:594
+#: ../src/daemon/main.c:694
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:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "NezdaÅilo se zÃskánà stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe selhalo: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() selhalo: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() selhalo: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "SpuÅ¡tÄnà démona selhalo."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "SpuÅ¡tÄnà démona bylo úspÄÅ¡né."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() selhalo: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Toto je PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "PÅekladový poÄÃtaÄ: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "PÅekladové CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "BÄžà na poÄÃtaÄi: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Nalezen následujÃcà poÄet CPU: %u."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Velikost stránky je %lu bajtů"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "PÅeloženo s podporou Valgrind: ano"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "PÅeloženo s podporou Valgrind: ne"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "BÄžà v režimu valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "BÄžà na poÄÃtaÄi: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimalizované sestavenÃ: ano"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimalizované sestavenÃ: ne"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definováno, všechny výrazy zakázány."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH definováno, zakázány pouze výrazy rychlých cest."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Všechny výrazy povoleny."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "NezdaÅilo se zÃskánà ID poÄÃtaÄe"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ID poÄÃtaÄe je %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ID sezenà je %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "PoužÃván bÄhový adresáŠ%s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "PoužÃván stavový adresáŠ%s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "PoužÃván adresáŠmodulů %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "BÄžà v systémovém režimu: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -371,16 +392,16 @@ msgstr ""
"VysvÄtlenÃ, proÄ je systémový režim obvykle velmi Å¡patný nápad, si můžete "
"pÅeÄÃst na http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() selhalo."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
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:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -388,27 +409,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:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() selhalo."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Selhalo spuÅ¡tÄnà démona."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
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:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "SpuÅ¡tÄnà démona dokonÄeno."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "VypÃnánà démona spuÅ¡tÄno."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Démon ukonÄen."
@@ -669,72 +690,77 @@ msgstr "VAROVÃNÃ ZASTARALOSTI: %s\n"
msgid "Path: %s\n"
msgstr "Cesta: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Neplatný protokolovacà cÃl \"%s\"."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Neplatná protokolovacà úroveŠ\"%s\"."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Neplatná metoda pÅevzorkovánà \"%s\"."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Neplatné rlimit \"%s\"."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit na této platformÄ nenà podporováno."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Neplatný vzorkovacà formát \"%s\"."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Neplatná vzorkovacà frekvence \"%s\"."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Neplatné vzorkovacà kanály \"%s\"."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Neplatná mapa kanálů \"%s\"."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Neplatný poÄet fragmentů \"%s\"."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Neplatná velikost fragmentu \"%s\"."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Neplatná úroveŠnice \"%s\"."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Neplatná vzorkovacà frekvence \"%s\"."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "NezdaÅilo se otevÅÃt konfiguraÄnà soubor: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -742,7 +768,7 @@ msgstr ""
"Zadaná výchozà mapa kanálů obsahuje odliÅ¡ný poÄet kanálů než je zadaný "
"výchozà poÄet kanálů."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Ätenà z konfiguraÄnÃho souboru: %s ###\n"
@@ -788,8 +814,8 @@ msgid "Rear Right"
msgstr "Zadnà pravý"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "NÃzkofrekvenÄnà záÅiÄ"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1134,192 +1160,192 @@ msgstr "XOpenDisplay() selhalo"
msgid "Failed to parse cookie data"
msgstr "Selhala analýza dat cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Selhalo otevÅenà konfiguraÄnÃho souboru \"%s\": %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Žádný soubor cookie nenahrán. Pokus o spojenà bez tohoto kroku."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "PÅijata zpráva pro neznámé rozÅ¡ÃÅenà \"%s\""
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "NezdaÅilo se vyprázdnit proud: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Proud pÅehrávánà vyprázdnÄn."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "VyprazdÅovánà spojenà se serverem."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() selhalo: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() selhalo: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() selhalo: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Proud úspÄÅ¡nÄ vytvoÅen."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() selhalo: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr ""
"Metrika vyrovnávacà pamÄti: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Metrika vyrovnávacà pamÄti: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "PoužÃváno urÄenà vzorku \"%s\", mapa kanálů \"%s\"."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "PÅipojeno k zaÅÃzenà %s (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Chyba proudu: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Proudové zaÅÃzenà pozastaveno.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Proudové zaÅÃzenà obnoveno.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "PodbÄhnutà proudu.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "PÅebÄhnutà proudu.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Proud spuÅ¡tÄn.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Proud pÅesunut na zaÅÃzenà %s (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "nikoliv "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ZmÄnÄny atributy vyrovnávacà pamÄti proudu.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Spojenà navázáno.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() selhalo: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() selhalo: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() selhalo: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Spojenà selhalo: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "ZÃskáno EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() selhalo: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ZÃskán signál, ukonÄovánÃ."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "NezdaÅilo se zÃskat latenci: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Äas: %0.3f sekund; latence: %0.0f μs"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() selhalo: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1371,10 +1397,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [pÅepÃnaÄe]\n"
@@ -1429,7 +1459,7 @@ msgstr ""
" --list-file-formats Zobrazà seznam dostupných formátů "
"souborů.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1440,170 +1470,170 @@ msgstr ""
"PÅeloženo s libpulse %s\n"
"Propojeno s libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Neplatný název klienta \"%s\""
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Neplatný název proudu \"%s\""
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Neplatná mapa kanálů \"%s\""
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Neplatné upÅesnÄnà latence \"%s\""
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Neplatné upÅesnÄnà Äasu zpracovánà \"%s\""
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Neplatná vlastnost \"%s\""
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Neznámý formát souboru %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Neplatné urÄenà vzorku"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "PÅÃliÅ¡ mnoho argumentů."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Selhalo vytvoÅenà urÄenà vzorku souboru."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Selhalo otevÅenà zvukového souboru."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr ""
"VarovánÃ: zadané urÄenà vzorku bude pÅepsáno urÄenÃm zÃskaným ze souboru."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Selhalo zjiÅ¡tÄnà urÄenà vzorku ze souboru."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "VarovánÃ: Selhalo zjiÅ¡tÄnà mapy kanálů ze souboru."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Mapa kanálů se neshoduje s urÄenÃm vzorku"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "VarovánÃ: selhal zápis mapy kanálů do souboru."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "OtevÃránà proudu %s s urÄenÃm vzorku \"%s\" a mapou kanálů \"%s\"."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "nahrávánÃ"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "pÅehrávánÃ"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() selhalo."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() selhalo."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() selhalo."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() selhalo: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() selhalo."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() selhalo."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "NezdaÅilo se pozastavenÃ: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "NezdaÅilo se obnovenÃ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
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:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Spojenà selhalo: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "ZÃskáno SIGINT, ukonÄovánÃ.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "VAROVÃNÃ: Proces potomka ukonÄen signálem %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1621,7 +1651,7 @@ msgstr ""
" -s, --server=SERVER Název pÅipojovaného serveru\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1632,50 +1662,61 @@ msgstr ""
"PÅeloženo s libpulse %s\n"
"Propojeno s libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() selhalo.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() selhalo.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() selhalo.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Selhalo zÃskánà statistik: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "PrávÄ použÃváno: %u bloků obsahujÃcÃch celkem %s bajtů.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "Alokováno bÄhem celého bÄhu: %u bloků obsahujÃcÃch celkem %s bajtů.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Velikost vzorkovacà vyrovnávacà pamÄti: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "NezdaÅilo se zÃskánà informacà o serveru: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1683,7 +1724,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Uživatelské jméno: %s\n"
"Název poÄÃtaÄe: %s\n"
@@ -1695,12 +1736,12 @@ msgstr ""
"Výchozà zdroj: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "NezdaÅilo se zÃskánà informacà o cÃli: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1739,22 +1780,22 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorty:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktivnà port: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "NezdaÅilo se zÃskánà informacà o zdroji: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1793,20 +1834,20 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "nic"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Selhalo zÃskánà informacà o modulu: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1823,12 +1864,12 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Selhalo zÃskánà informacà o klientu: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1843,12 +1884,12 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Selhalo zÃskánà informacà o kartÄ: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1865,22 +1906,22 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfily:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktivnà profil: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "NezdaÅilo se zÃskánà informacà o vstupu cÃle: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1917,12 +1958,12 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Selhalo zÃskánà informace o výstupu zdroje: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1951,12 +1992,12 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Selhalo zÃskánà informace o vzorku: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1987,26 +2028,80 @@ msgstr ""
"\tVlastnosti:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "SelhánÃ: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Selhalo nahránà vzorku: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "PÅedÄasný konec souboru"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Neplatný server"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "ZÃskáno SIGINT, ukonÄovánÃ."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2029,6 +2124,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2067,7 +2163,7 @@ msgstr ""
" -n, --client-name=NÃZEV Způsob volánà tohoto klienta na "
"serveru\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2078,104 +2174,104 @@ msgstr ""
"PÅeloženo s libpulse %s\n"
"Propojeno s libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Zadejte prosÃm soubor se vzorkem urÄeným k nahránÃ"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Selhalo otevÅenà zvukového souboru."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "VarovánÃ: Selhalo zjiÅ¡tÄnà urÄenà vzorku ze souboru."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Je nutné zadat název vzorku urÄeného k pÅehránÃ"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Je nutné zadat název vzorku urÄeného k odstranÄnÃ"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Je nutné zadat vstup cÃle a cÃl"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Je nutné zadat index výstupu zdroje a zdroj"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Je nutné zadat název modulu a argumenty."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Je nutné zadat index modulu"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr "Nelze zadat vÃce než jeden cÃl. Je nutné zadat booleovskou hodnotu."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr "Nelze zadat vÃce než jeden zdroj. Je nutné zadat booleovskou hodnotu."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Je nutné upÅesnit název karty/indexu a název profilu"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Je nutné upÅesnit název cÃle/indexu a název portu"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Je nutné upÅesnit název zdroje/indexu a název portu"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Je nutné upÅesnit název cÃle/indexu a hlasitost"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Neplatné urÄenà hlasitosti"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Je nutné upÅesnit název zdroje/indexu a hlasitost"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Je nutné zadat index vstupu cÃle a hlasitost"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Neplatný index vstupu cÃle"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Je nutné upÅesnit název cÃle/indexu a booleovskou hodnotu ztlumenÃ"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Je nutné upÅesnit název zdroje/indexu a booleovskou hodnotu ztlumenÃ"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "Je nutné zadat index vstupu cÃle a booleovskou hodnotu ztlumenÃ"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Neplatné urÄenà indexu vstupu cÃle"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Nezadán žádný platný pÅÃkaz."
@@ -2258,44 +2354,44 @@ msgstr "NezdaÅilo se nahrát data cookie\n"
msgid "Not yet implemented.\n"
msgstr "Doposud neimplementováno.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "NebÄžà žádný démon PulseAudio, nebo nebÄžà jako démon sezenÃ."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "NezdaÅilo se zabÃt démona PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Démon neodpovÃdá."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Nelze pÅistoupit k zámku automatického spouÅ¡tÄnÃ."
@@ -2334,38 +2430,42 @@ msgstr ""
"Äi jinou hodnotu < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Vypnuto"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "PÅehrávánà s velmi vÄrnou reprodukcà (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Záznam s velmi vÄrnou reprodukcà (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Duplexnà telefonie (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Zvukový server PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Výstupnà zaÅÃzenÃ"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Vstupnà zaÅÃzenÃ"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Zvuk na @HOSTNAME@"
@@ -2429,136 +2529,163 @@ msgstr "ZesilovaÄ"
msgid "No Amplifier"
msgstr "Bez zesilovaÄe"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ZesÃlenÃ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Bez zesÃlenÃ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analogová sluchátka"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Analogový vstup"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Analogový mikrofon"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analogový linkový vstup"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analogové rádio"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analogový obraz"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Analogový výstup"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Analogová sluchátka"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analogový výstup (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analogový výstup mono"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analogové stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analogové mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analogové stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analogový Surround 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analogový Surround 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analogový Surround 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analogový Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analogový Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analogový Surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analogový Surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analogový Surround 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analogový Surround 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analogový Surround 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analogový Surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digitálnà stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digitálnà Surround 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digitálnà Surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digitálnà Surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digitálnà stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analogové duplexnà mono"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analogové duplexnà stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digitálnà duplexnà stereo (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "NÃzkofrekvenÄnà záÅiÄ"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Neplatný název klienta \"%s\"\n"
diff --git a/po/de.po b/po/de.po
index 25b015b..d08a3fa 100644
--- a/po/de.po
+++ b/po/de.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.de\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-08 02:51+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-08 15:14+1000\n"
"Last-Translator: Hedda Peters <hpeters at redhat.com>\n"
"Language-Team: \n"
@@ -22,12 +22,12 @@ msgstr ""
"X-Poedit-Language: German\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -40,7 +40,7 @@ msgstr ""
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
"dieses Problem den ALSA-Entwicklern."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -53,7 +53,7 @@ msgstr ""
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
"dieses Problem den ALSA-Entwicklern."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -61,8 +61,8 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
-"snd_pcm_mmap_begin() gibt einen Wert zurück, der ausserordentlich gross "
-"ist: %lu bytes (%lu ms).\n"
+"snd_pcm_mmap_begin() gibt einen Wert zurück, der ausserordentlich gross ist: "
+"%lu bytes (%lu ms).\n"
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
"dieses Problem den ALSA-Entwicklern."
@@ -87,8 +87,10 @@ msgid ""
"input control values>"
msgstr ""
"sink_name=<Name des Sinks> sink_properties=<Eigenschaften des Sinks> "
-"master=<Name des zu filternden Sinks> format=<Sample-Format> rate=<Sample-Rate> "
-"channels=<Anzahl der Channels> channel_map=<Channel-Map> plugin=<ladspa Plugin-Name> label=<ladspa Plugin-Label> control=<kommagetrennte Liste von Eingabekontrollwerten>"
+"master=<Name des zu filternden Sinks> format=<Sample-Format> rate=<Sample-"
+"Rate> channels=<Anzahl der Channels> channel_map=<Channel-Map> "
+"plugin=<ladspa Plugin-Name> label=<ladspa Plugin-Label> "
+"control=<kommagetrennte Liste von Eingabekontrollwerten>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -98,11 +100,11 @@ msgstr "Clocked NULL Sink"
msgid "Null Output"
msgstr "Null-Ausgabe"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Internes Audio"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -118,92 +120,98 @@ msgstr "Neuer dlopen-Loader konnte nicht gefunden werden."
msgid "Failed to add bind-now-loader."
msgstr "Hinzufügen von Bind-Now-Loader fehlgeschlagen."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Signal %s empfangen."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Wird beendet."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Benutzer '%s' nicht gefunden."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Gruppe '%s' nicht gefunden."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Benutzer '%s' (UID %lu) und Gruppe '%s' (GID %lu) gefunden."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID von Benutzer '%s' und Gruppe '%s' stimmen nicht überein."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Benutzerverzeichnis von Benutzer '%s' ist nicht '%s', ignoriere."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Konnte '%s' nciht erzeugen: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Wechseln der Gruppen-Liste fehlgeschlagen: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Wechseln der GID fehlgeschlagen: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Wechseln der UID fehlgeschlagen: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Root-Berechtigungen erfolgreich zurückgesetzt."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "System-Modus auf dieser Plattform nicht unterstützt."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) fehlgeschlagen: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Parsen der Kommandzeile fehlgeschlagen."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Daemon läuft nicht"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon läuft als PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Konnte Prozess nicht abbrechen: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -211,155 +219,170 @@ msgstr ""
"Dieses Programm sollte ohne die Option --system nicht als Administrator "
"ausgeführt werden."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Root-Berechtigungen benötigt."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start nicht unterstützt für System-Instanzen."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "System-Modus aktiv, jeodch --disallow-exit nicht gesetzt!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
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:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "System-Modus aktiv, SHM-Modus gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "System-Modus aktiv, Exit-Idle-Time gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Reservieren von STDIO fehlgeschlagen."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe fehlgeschlagen: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Start des Daemons fehlgeschlagen."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Start des Daemons erfolgreich."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() fehlgeschlagen: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Dies ist PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Kompilier-Host: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Kompilier-CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Laufe auf Host: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs gefunden."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "SeitengröÃe ist %lu Bytes."
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Kompiliere mit Valgrind-Unterstützung: ja"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Kompiliere mit Valgrind-Unterstützung: nein"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Läuft im Valgrind-Modus: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Laufe auf Host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimiertes Build: ja"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimiertes Build: nein"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definiert, alle Ansprüche deaktiviert."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH definiert, nur fast-path-Ansprüche deaktiviert."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Alle Ansprüche aktiviert."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Beziehen der Maschinen-ID fehlgeschlagen"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "System- ID ist %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "System- ID ist %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Nutze Laufzeit-Verzeichnis %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Nutze Zustands-Verzeichnis %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Modul-Verzeichnis %s benutzen."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Laufe im System-Modus: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -374,41 +397,41 @@ msgstr ""
"Für eine Erklärung warum System Mode eine schlechte Idee ist, bitte http://"
"pulseaudio.org/wiki/WhatIsWrongWithSystemMode lesen"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() fehlgeschlagen."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
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:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() fehlgeschlagen."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Konnte Daemon nicht initialisieren."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon verweigert Ausführung, da keine Module geladen."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Start des Daemons abgeschlossen."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Herunterfahren des Daemon gestartet."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Daemon beendet."
@@ -493,7 +516,8 @@ 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 Bereinige veraltete Bereiche des gemeinsamen Speichers\n"
+" --cleanup-shm Bereinige veraltete Bereiche des "
+"gemeinsamen Speichers\n"
" --start Starte Daemon, falls noch nicht "
"geschehen\n"
" -k --kill Laufenden Daemon beenden\n"
@@ -504,7 +528,8 @@ msgstr ""
" --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] Versuche höchste Priorität zu setzen\n"
+" --high-priority[=BOOL] Versuche höchste Priorität zu "
+"setzen\n"
" (Nur verfügbar als root, wenn SUID "
"oder\n"
" mit erhöhtem RLIMIT_NICE)\n"
@@ -528,12 +553,13 @@ msgstr ""
" --log-level[=LEVEL] Grad der Ausführlichkeit angeben\n"
" -v Ausführliche Meldungen\n"
" --log-target={auto,syslog,stderr} Protokoll-Ziel angeben\n"
-" --log-meta[=BOOL] Speicherort des Codes in Protokollnachrichten"
+" --log-meta[=BOOL] Speicherort des Codes in "
+"Protokollnachrichtenangeben\n"
+" --log-time[=BOOL] Zeitstempel in Protokollnachrichten "
+"angeben\n"
+" --log-backtrace=FRAMES Backtrace in Protokollnachrichten "
"angeben\n"
-" --log-time[=BOOL] Zeitstempel in Protokollnachrichten angeben\n"
-" --log-backtrace=FRAMES Backtrace in Protokollnachrichten angeben\n"
-" -p, --dl-search-path=PATH Suchpfad für dynamisch "
-"freigegebene\n"
+" -p, --dl-search-path=PATH Suchpfad für dynamisch freigegebene\n"
" Objekte (Plugins) angeben\n"
" --resample-method=METHOD Nutze diese Resampling-Methode\n"
" (Siehe --dump-resample-methods für\n"
@@ -542,11 +568,12 @@ msgstr ""
" --no-cpu-limit[=BOOL] CPU-Lastbegrenzung auf "
"unterstützten\n"
" Systemen nicht installieren.\n"
-" --disable-shm[=BOOL] Unterstützung für Shared "
-"Memory deaktivieren.\n"
+" --disable-shm[=BOOL] Unterstützung für Shared Memory "
+"deaktivieren.\n"
"\n"
"STARTUP SCRIPT:\n"
-" -L, --load=\"MODULE ARGUMENTS\" Plugin-Modul mit diesen Parametern\n"
+" -L, --load=\"MODULE ARGUMENTS\" Plugin-Modul mit diesen "
+"Parametern\n"
" laden.\n"
" -F, --file=FILENAME Dieses Skript ausführen\n"
" -C Nach Start auf laufendem TTY\n"
@@ -567,8 +594,8 @@ 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 Parameter für Grad der Protokollierung (entweder numerisch "
-"im Bereich 0..4 or einen dieser: debug, info, notice, warn, error)."
+"--log-level erfordert Parameter für Grad der Protokollierung (entweder "
+"numerisch im Bereich 0..4 or einen dieser: debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -592,7 +619,8 @@ msgstr "--use-pid-file erfordert Boolsche Variable"
#: ../src/daemon/cmdline.c:321
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:328
msgid "--log-time expects boolean argument"
@@ -664,72 +692,77 @@ msgstr "WARNUNG (DEPRECATION): %s\n"
msgid "Path: %s\n"
msgstr "Pfad: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Ungültiges Log-Ziel '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Ungültige Log-Stufe '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Ungültige Resample-Methode '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Ungültiges rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit auf dieser Plattform nicht unterstützt."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Ungültiges Sample-Format '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Ungültige Sample-Kanäle '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Ungültige Kanal-Zuordnung '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Ungültige Anzahl von Fragmenten '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Ungültige FragmentgröÃe '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Ungültige Nice-Stufe '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Ãffnen der Konfigurationsdatei fehlgeschlagen : %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -737,7 +770,7 @@ msgstr ""
"Die angegebene Standard-Kanalzuordnung hat eine andere Anzahl von Kanälen "
"als die angegebene Standard-Kanal-Anzahl."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lese von Konfigurationsdatei: %s ###\n"
@@ -783,8 +816,8 @@ msgid "Rear Right"
msgstr "Hinten Rechts"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Niedrigfrequenzemitter"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1129,191 +1162,191 @@ msgstr "XOpenDisplay() fehlgeschlagen"
msgid "Failed to parse cookie data"
msgstr "Parsen der Cookie-Daten fehlgeschlagen"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Konfigurationsdatei '%s' konnte nicht geöffnet werden: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Verbindungsversuch ohne Cookie, da keines geladen."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Nachricht für unbekannte Erweiterung '%s' erhalten"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Entleeren des Streams fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Wiedergabe-Stream entleert."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Verbindung zu Server entleert."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Stream wurde erfolgreich erstellt."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Pufferdaten: maxlenght=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Pufferdaten: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Benutze Sample-Angabe '%s', Kanalzuordnung '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Verbunden mit Gerät %s (%u, %sausgesetzt)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Stream-Fehler: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Stream-Gerät ausgesetzt.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Stream-Gerät reaktiviert.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Stream leergelaufen.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Stream überlaufen.%s "
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Stream gestartet: %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Stream an Gerät %s übergeben (%u, %sausgesetzt).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "nicht "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Stream-Zwischenspeicher-Attribute geändert.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Verbindung hergestellt.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Verbindungsfehler: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF empfangen."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Signal empfangen, beenden."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Erhalten der Latenz fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Zeit: %0.3f sec; Latenz: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1365,10 +1398,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1382,17 +1419,19 @@ msgstr ""
" -v, --verbose Ausführliche Meldungen\n"
"\n"
" -s, --server=SERVER Name des zu verbindenden Servers\n"
-" -d, --device=DEVICE Name des/der zu verbindender Sink/Quelle\n"
+" -d, --device=DEVICE Name des/der 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"
" --rate=SAMPLERATE Sample-Rate in Hz (Standard 44100)\n"
-" --format=SAMPLEFORMAT Ein Sample-Format von s16le, "
-"s16be, u8, float32le,\n"
+" --format=SAMPLEFORMAT Ein Sample-Format von s16le, s16be, "
+"u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
"s24le, s24be,\n"
-" s24-32le, s24-32be (Standard ist s16ne)\n"
+" s24-32le, s24-32be (Standard ist "
+"s16ne)\n"
" --channels=CHANNELS Anzahl Kanäle, 1 für Mono, 2 für "
"Stereo\n"
" (Standard ist 2)\n"
@@ -1411,13 +1450,14 @@ msgstr ""
" --latency=BYTES Diese Latenz verwenden.\n"
" --process-time=BYTES Diese Prozesszeit pro Anfrage "
"verwenden.\n"
-" --property=PROPERTY=VALUE Die angegebene Eigenschaft auf den"
-"spezifizierten Wert setzen.\n"
+" --property=PROPERTY=VALUE Die angegebene Eigenschaft auf "
+"denspezifizierten Wert setzen.\n"
" --raw PCM-Rohdaten aufnehmen/wiedergeben.\n"
-" --file-format=FFORMAT Formatierte PCM-Daten aufnehmen/wiedergeben.\n"
+" --file-format=FFORMAT Formatierte PCM-Daten aufnehmen/"
+"wiedergeben.\n"
" --list-file-formats Verfügbare Dateiformate auflisten.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1428,168 +1468,170 @@ msgstr ""
"Kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Ungültiger Client-Name '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Ungültiger Stream-Name '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Ungültige Kanal-Zuweisung '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Ungültige Latenz-Angaben '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Ungültige Prozesszeit-Angaben '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Ungültige Eigenschaft '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Unbekanntes Dateiformat %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Ungültige Sample-Angaben"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Zu viele Argumente."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Beziehen der Sample-Informationen für die Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Ãffnen der Audio-Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "Warnung: Beziehen der Sample-Angabe aus Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Beziehen der Sample-Informationen der Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Warnung: Bestimmung der Kanalzuordnung aus Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Kanalzuordnung entspricht nicht Einstellungen des Samples"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Warnung: Schreiben der Kanalzuordnung in Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "Ãffnen eines %s-Streams mit Sample-Angabe '%s' und Kanalzuordnung '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"Ãffnen eines %s-Streams mit Sample-Angabe '%s' und Kanalzuordnung '%s'."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "aufnehmen"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "abspielen"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() fehlgeschlagen"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() fehlgeschlagen."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() fehlgeschlagen."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_new() fehlgeschlagen."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() fehlgeschlagen."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Aussetzen fehlgeschlagen: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Resume fehlgeschlagen: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
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:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Verbindungsfehler: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT empfangen, beende.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "WARNUNG: Kind-Prozess durch Signal %u beendet\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1607,7 +1649,7 @@ msgstr ""
" -s, --server=SERVER Name des Zielservers\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1618,50 +1660,61 @@ msgstr ""
"kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() fehlgeschlagen.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() fehlgeschlagen.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() fehlgeschlagen.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Beziehen der Statistik fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Momentane Nutzung: %u Blöcke mit insgesamt %s Bytes.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "Während gesamter Laufzeit: %u Blöcke mit insgesamt %s Bytes.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Sample-Pufferspeichergrösse: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Beziehen der Server-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1669,7 +1722,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Name des Nutzers: %s\n"
"Rechnername: %s\n"
@@ -1681,12 +1734,12 @@ msgstr ""
"Standard-Quelle: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Erhalten der Sink-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1725,22 +1778,22 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tProfile:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktive Profile: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Beziehen der Quellen-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1779,20 +1832,20 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "k. A."
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Beziehen der Modul-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1809,12 +1862,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Beziehen der Client-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1829,12 +1882,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Beziehen der Karten-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1851,22 +1904,22 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfile:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktive Profile: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Erhalten der Sink-Eingabe-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1903,12 +1956,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Konnte Informationen über Quell-Ausgabe nicht holen: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1937,12 +1990,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Beziehen der Sample-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1973,26 +2026,80 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Hochladen des Sample fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Dateiende ist zu früh aufgetreten"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Ungültiger Server"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT empfangen, beenden."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2015,6 +2122,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2052,7 +2160,7 @@ msgstr ""
" -s, --server=SERVER Name des Zielservers\n"
" -n, --client-name=NAME Rufname des Clients auf dem Server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2063,103 +2171,115 @@ msgstr ""
"Kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Geben Sie eine zu öffnende Sample-Datei an"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Ãffnen der Audio-Datei fehlgeschlagen."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "Warnung: Beziehen der Sample-Angabe aus Datei fehlgeschlagen."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Sie müssen eine abzuspielende Sample-Datei angeben"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Sie müssen eine zu löschende Sample-Datei angeben"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
-msgstr "Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben"
+msgstr ""
+"Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Sie müssen einen Modulnamen angeben und Argumente übergeben."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Sie müssen einen Indexwert für ein Modul angeben"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "Sie sollten nur einen Sink angeben. Sie müssen zumindest eine Boolsche Variable übergeben."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"Sie sollten nur einen Sink angeben. Sie müssen zumindest eine Boolsche "
+"Variable übergeben."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "Sie sollten nur eine Quelle angeben. Sie müssen zumindest eine Boolsche Variable übergeben."
+msgstr ""
+"Sie sollten nur eine Quelle angeben. Sie müssen zumindest eine Boolsche "
+"Variable übergeben."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Sie müssen einen Karten-Name/Indexwert und einen Profilnamen angeben"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Sie müssen einen Sink-Namen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Sie müssen einen Sink-Namen/-Indexwert und eine Lautstärke angeben"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Ungültige Sample-Angaben"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Sie müssen einen Sink-Eingabe-Indexwert und eine Lautstärke angeben."
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Ungültiger Sink-Eingabe-Index"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Sie müssen einen Sink-Namen/-Indexwert und eine Boolsche Variable für Stummschaltung angeben"
+msgstr ""
+"Sie müssen einen Sink-Namen/-Indexwert und eine Boolsche Variable für "
+"Stummschaltung angeben"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Sie müssen einen Quellennamen/-Indexwert und eine Boolsche Variable für Stummschaltung angeben"
+msgstr ""
+"Sie müssen einen Quellennamen/-Indexwert und eine Boolsche Variable für "
+"Stummschaltung angeben"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Sie müssen einen Sink-Eingabe-Indexwert und eine Boolsche Variable für Stummschaltung angeben"
+msgstr ""
+"Sie müssen einen Sink-Eingabe-Indexwert und eine Boolsche Variable für "
+"Stummschaltung angeben"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Ungültige Sink-Eingabe-Index-Angaben"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Kein gültiger Befehl angegeben."
@@ -2242,44 +2362,44 @@ msgstr "Laden der Cookie-Daten fehlgeschlagen\n"
msgid "Not yet implemented.\n"
msgstr "Noch nicht implementiert.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "Es läuft kein PulseAudio-Dienst oder nicht als Sessiondienst."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Beenden des PulseAudio-Daemon fehlgeschlagen."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Daemon antwortet nicht."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Fehler beim Zugriff auf Autostart-Sperre."
@@ -2293,10 +2413,13 @@ msgid ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
msgstr ""
-"ALSA weckte uns auf, um neue Daten auf das Gerät zu schreiben, doch es gab nichts zum Schreiben!\n"
-"Dies ist höchstwahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie diesen Fehler den ALSA-Entwicklern.\n"
-"Wir wurden durch das POLLOUT-Set geweckt, allerdings lieferte ein anschliessender snd_pcm_avail() "
-"den Wert 0 oder einen anderen Wert < min_avail."
+"ALSA weckte uns auf, um neue Daten auf das Gerät zu schreiben, doch es gab "
+"nichts zum Schreiben!\n"
+"Dies ist höchstwahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden "
+"Sie diesen Fehler den ALSA-Entwicklern.\n"
+"Wir wurden durch das POLLOUT-Set geweckt, allerdings lieferte ein "
+"anschliessender snd_pcm_avail() den Wert 0 oder einen anderen Wert < "
+"min_avail."
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
@@ -2308,44 +2431,51 @@ msgid ""
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
msgstr ""
-"ALSA weckte uns auf, um neue Daten vom Gerät zu lesen, doch es gab nichts zum Lesen!\n"
-"Dies ist höchstwahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie diesen Fehler den ALSA-Entwicklern.\n"
-"Wir wurden durch das POLLIN-Set geweckt, allerdings lieferte ein anschliessender snd_pcm_avail() "
-"den Wert 0 oder einen anderen Wert < min_avail."
+"ALSA weckte uns auf, um neue Daten vom Gerät zu lesen, doch es gab nichts "
+"zum Lesen!\n"
+"Dies ist höchstwahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden "
+"Sie diesen Fehler den ALSA-Entwicklern.\n"
+"Wir wurden durch das POLLIN-Set geweckt, allerdings lieferte ein "
+"anschliessender snd_pcm_avail() den Wert 0 oder einen anderen Wert < "
+"min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Aus"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "High Fidelity Playback (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "High Fidelity-Wiedergabe (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telephony Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio Sound Server"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Ausgabegeräte"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Eingabegeräte"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Audio auf @HOSTNAME@"
@@ -2409,133 +2539,159 @@ msgstr "Verstärker"
msgid "No Amplifier"
msgstr "Kein Verstärker"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Boost"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Kein Boost"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analoge Kopfhörer"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Analoge Eingabe"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Analoges Mikrofon"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analoges Line-In"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analoges Radio"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analoges Video"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Analoge Ausgabe"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Analoge Kopfhörer"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analoge Ausgabe (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analoge Mono-Ausgabe"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analog Stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analog Stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analog Surround 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analog Surround 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analog Surround 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analog Surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analog Surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analog Surround 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analog Surround 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analog Surround 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analog Surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digital Stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digital Surround 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digital Surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digital Surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digital Stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analog Mono Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analog Stereo Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digital Stereo Duplex (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Niedrigfrequenzemitter"
diff --git a/po/de_CH.po b/po/de_CH.po
index e239deb..e31419f 100644
--- a/po/de_CH.po
+++ b/po/de_CH.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-09-14 10:22+0100\n"
"Last-Translator: Fabian Affolter <fab at fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de at redhat.com>\n"
@@ -19,12 +19,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: German\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -37,7 +37,7 @@ msgstr ""
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
"diesen Punkt den ALSA-Entwicklern."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -50,7 +50,7 @@ msgstr ""
"Dies ist wahrscheinlich ein Fehler im ALSA-Treiber '%s'. Bitte melden Sie "
"diesen Punkt den ALSA-Entwicklern."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -94,11 +94,11 @@ msgstr ""
msgid "Null Output"
msgstr "Ausgang %s"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Internes Audio"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -114,92 +114,98 @@ msgstr "Neuer dlopen-Loader konnte nicht gefunden werden."
msgid "Failed to add bind-now-loader."
msgstr "Hinzufügen von Bind-Now-Loader fehlgeschlagen."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Signal %s empfangen."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Wird beendet."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Benutzer '%s' nicht gefunden."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Gruppe '%s' nicht gefunden."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Benutzer '%s' (UID %lu) und Gruppe '%s' (GID %lu) gefunden."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID von Benutzer '%s' und Gruppe '%s' stimmen nicht überein."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Benutzerverzeichnis von Benutzer '%s' ist nicht '%s', ignoriere."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Konnte '%s' nciht erzeugen: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Wechseln der Gruppen-Liste fehlgeschlagen: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Wechseln der GID fehlgeschlagen: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Wechseln der UID fehlgeschlagen: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Root-Berechtigungen erfolgreich zurückgesetzt."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "System-Modus auf dieser Plattform nicht unterstützt."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) fehlgeschlagen: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Parsen der Kommandzeile fehlgeschlagen."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Daemon läuft nicht"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon läuft als PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Konnte Prozess nicht abbrechen: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -207,155 +213,170 @@ msgstr ""
"Dieses Programm sollte ohne die Option --system nicht als Administrator "
"ausgeführt werden."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Root-Berechtigungen benötigt."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start nicht unterstützt für System-Instanzen."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "System-Modus aktiv, jeodch --disallow-exit nicht gesetzt!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
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:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "System-Modus aktiv, SHM-Modus gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "System-Modus aktiv, Exit-Idle-Time gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Reservieren von STDIO fehlgeschlagen."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe fehlgeschlagen: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Start des Daemons fehlgeschlagen."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Start des Daemons erfolgreich."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() fehlgeschlagen: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Dies ist PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Kompilier-Host: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Kompilier-CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Laufe auf Host: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs gefunden."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "SeitengröÃe ist %lu Bytes."
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Kompiliere mit Valgrind-Unterstützung: ja"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Kompiliere mit Valgrind-Unterstützung: nein"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Läuft im Valgrind-Modus: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Laufe auf Host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimiertes Build: ja"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimiertes Build: nein"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definiert, alle Ansprüche deaktiviert."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH definiert, nur fast-path-Ansprüche deaktiviert."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Alle Ansprüche aktiviert."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Beziehen der Maschinen-ID fehlgeschlagen"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "System- ID ist %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "System- ID ist %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Nutze Laufzeit-Verzeichnis %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Nutze Zustands-Verzeichnis %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Modul-Verzeichnis %s benutzen."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Laufe im System-Modus: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -365,41 +386,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() fehlgeschlagen."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
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:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() fehlgeschlagen."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Konnte Daemon nicht initialisieren."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon verweigert Ausführung, da keine Module geladen."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Start des Daemons abgeschlossen."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Herunterfahren des Daemon gestartet."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Daemon beendet."
@@ -653,72 +674,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "Pfad: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Ungültiges Log-Ziel '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Ungültige Log-Stufe '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Ungültige Resample-Methode '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Ungültiges rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit auf dieser Plattform nicht unterstützt."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Ungültiges Sample-Format '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Ungültige Sample-Kanäle '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Ungültige Kanal-Zuordnung '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Ungültige Anzahl von Fragmenten '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Ungültige FragmentgröÃe '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Ungültige Nice-Stufe '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Ãffnen der Konfigurationsdatei fehlgeschlagen : %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -726,7 +752,7 @@ msgstr ""
"Die angegebene Standard-Kanalzuordnung hat eine andere Anzahl von Kanälen "
"als die angegebene Standard-Kanal-Anzahl."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lese von Konfigurationsdatei: %s ###\n"
@@ -772,8 +798,8 @@ msgid "Rear Right"
msgstr "Hinten Rechts"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Niedrigfrequenzemitter"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1118,190 +1144,190 @@ msgstr "XOpenDisplay() fehlgeschlagen"
msgid "Failed to parse cookie data"
msgstr "Parsen der Cookie-Daten fehlgeschlagen"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Konfigurationsdatei '%s' konnte nicht geöffnet werden: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Verbindungsversuch ohne Cookie, da keines geladen."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Nachricht für unbekannte Erweiterung '%s' erhalten"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Entleeren des Streams fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Wiedergabe-Stream entleert."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Verbindung zu Server entleert."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Stream wurde erfolgreich erstellt."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Pufferdaten: maxlenght=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Pufferdaten: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Benutze Sample-Angabe '%s', Kanalzuordnung '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Verbunden mit Gerät %s (%u, %sausgesetzt)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Stream-Fehler: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Stream-Gerät ausgesetzt.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Stream-Gerät reaktiviert.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Stream leergelaufen.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Stream überlaufen.%s "
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Stream gestartet: %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Stream an Gerät %s übergeben (%u, %sausgesetzt).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "nicht "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Stream-Zwischenspeicher-Attribute geändert.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Verbindung hergestellt.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Verbindungsfehler: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF empfangen."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Signal empfangen, beenden."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Erhalten der Latenz fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Zeit: %0.3f sec; Latenz: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:609
+#: ../src/utils/pacat.c:630
#, fuzzy, c-format
msgid ""
"%s [options]\n"
@@ -1354,10 +1380,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1400,7 +1430,7 @@ msgstr ""
" --process-time=BYTES Diese Prozesszeit pro Anfrage "
"verwenden.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1411,170 +1441,170 @@ msgstr ""
"Kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Ungültiger Client-Name '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Ungültiger Stream-Name '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Ungültige Kanal-Zuweisung '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Ungültige Latenz-Angaben '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Ungültige Prozesszeit-Angaben '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Ungültige Eigenschaft '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Unbekanntes Dateiformat %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Ungültige Sample-Angaben"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Zu viele Argumente."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Beziehen der Sample-Informationen für die Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Ãffnen der Audio-Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "Warnung: Beziehen der Sample-Angabe aus Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Beziehen der Sample-Informationen der Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Warnung: Bestimmung der Kanalzuordnung aus Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Kanalzuordnung entspricht nicht Einstellungen des Samples"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Warnung: Schreiben der Kanalzuordnung in Datei fehlgeschlagen."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"Ãffnen eines %s-Streams mit Sample-Angabe '%s' und Kanalzuordnung '%s'."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "aufnehmen"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "abspielen"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() fehlgeschlagen"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() fehlgeschlagen."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() fehlgeschlagen."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_new() fehlgeschlagen."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() fehlgeschlagen."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Aussetzen fehlgeschlagen: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Resume fehlgeschlagen: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
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:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Verbindungsfehler: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT empfangen, beende.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "WARNUNG: Kind-Prozess durch Signal %u beendet\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1592,7 +1622,7 @@ msgstr ""
" -s, --server=SERVER Name des Zielservers\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1603,50 +1633,61 @@ msgstr ""
"kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() fehlgeschlagen.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() fehlgeschlagen.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() fehlgeschlagen.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Beziehen der Statistik fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Momentane Nutzung: %u Blöcke mit insgesamt %s Bytes.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "Während gesamter Laufzeit: %u Blöcke mit insgesamt %s Bytes.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Sample-Pufferspeichergrösse: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Beziehen der Server-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1654,7 +1695,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Name des Nutzers: %s\n"
"Rechnername: %s\n"
@@ -1666,12 +1707,12 @@ msgstr ""
"-Standard-Quelle: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Erhalten der Sink-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1710,22 +1751,22 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tProfile:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktive Profile: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Beziehen der Quellen-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1764,20 +1805,20 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "k. A."
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Beziehen der Modul-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1794,12 +1835,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Beziehen der Client-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1814,12 +1855,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Beziehen der Karten-Information fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1836,22 +1877,22 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfile:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktive Profile: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Konnte Sink-Eingabe-Informationen nicht holen: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1888,12 +1929,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Konnte Informationen über Quell-Ausgabe nicht holen: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1922,12 +1963,12 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Beziehen der Sample-Informationen fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1958,26 +1999,81 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Hochladen des Sample fehlgeschlagen: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Dateiende ist zu früh aufgetreten"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "Sink"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "Quelle"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "Quelle"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Ungültiger Server"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT empfangen, beenden."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2000,6 +2096,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2037,7 +2134,7 @@ msgstr ""
" -s, --server=SERVER Name des Zielservers\n"
" -n, --client-name=NAME Rufname des Clients auf dem Server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2048,51 +2145,51 @@ msgstr ""
"Kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Geben Sie eine zu öffnende Sample-Datei an"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Ãffnen der Audio-Datei fehlgeschlagen."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "Warnung: Beziehen der Sample-Angabe aus Datei fehlgeschlagen."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Sie müssen eine abzuspielende Sample-Datei angeben"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Sie müssen eine zu löschende Sample-Datei angeben"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr ""
"Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Sie müssen einen Modulnamen angeben und Argumente übergeben."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Sie müssen einen Indexwert für ein Modul angeben"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Sie sollten nur eine Senke angeben. Sie müssen zumindest einen bool'schen "
"Wert übergeben."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2100,57 +2197,57 @@ msgstr ""
"Sie sollten nur eine Quelle angeben. Sie müssen zumindest einen bool'schen "
"Wert übergeben."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Sie müssen einen Karten-Name/Indexwert und einen Profilnamen angeben"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Sie müssen einen Senkennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Sie müssen einen Senkennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Ungültige Sample-Angaben"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Ungültiger Sink-Eingabe-Index"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Sie müssen einen Senkennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Sie müssen einen Quellennamen/-Indexwert und einen Portnamen angeben"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Ungültige Sink-Eingabe-Index-Angaben"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Kein gültiger Befehl angegeben."
@@ -2233,44 +2330,44 @@ msgstr "Laden der Cookie-Daten fehlgeschlagen\n"
msgid "Not yet implemented.\n"
msgstr "Noch nicht implementiert.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "Es läuft kein PulseAudio-Dienst oder nicht als Sessiondienst."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Terminieren des PulseAudio-Daemon fehlgeschlagen."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Daemon antwortet nicht."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Fehler beim Zugriff auf Autostart -Sperre."
@@ -2297,39 +2394,43 @@ msgid ""
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Aus"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "High Fidelity-Wiedergabe (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "High Fidelity-Aufnahme (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telephony Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio Sound Server"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
#, fuzzy
msgid "Input Devices"
msgstr "Eingang %s"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr ""
@@ -2395,154 +2496,179 @@ msgstr ""
msgid "No Amplifier"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+msgid "Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+msgid "No Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analog Mono"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
#, fuzzy
msgid "Analog Input"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
#, fuzzy
msgid "Analog Microphone"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
#, fuzzy
msgid "Analog Line-In"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
#, fuzzy
msgid "Analog Radio"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
#, fuzzy
msgid "Analog Video"
msgstr "Analog Stereo"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
#, fuzzy
msgid "Analog Output"
msgstr "Ausgang %s"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
#, fuzzy
msgid "Analog Headphones"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
#, fuzzy
msgid "Analog Mono Output"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analog Stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, fuzzy, c-format
msgid "%s+%s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, fuzzy, c-format
msgid "%s / %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analog Stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
#, fuzzy
msgid "Analog Surround 2.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
#, fuzzy
msgid "Analog Surround 3.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
#, fuzzy
msgid "Analog Surround 3.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analog Surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analog Surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
#, fuzzy
msgid "Analog Surround 6.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
#, fuzzy
msgid "Analog Surround 6.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
#, fuzzy
msgid "Analog Surround 7.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analog Surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digital Stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digital Surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digital Surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digital Surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digital Stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
#, fuzzy
msgid "Analog Mono Duplex"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
#, fuzzy
msgid "Analog Stereo Duplex"
msgstr "Analog Stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digital Stereo (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Niedrigfrequenzemitter"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Ungültiger Client-Name '%s'\n"
@@ -2794,11 +2920,5 @@ msgstr "Digital Stereo (IEC958)"
#~ "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 01334a4..de92385 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1,13 +1,13 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Dimitris Glezos <dimitris at glezos.com>, 2008.
# Thalia Papoutsaki <saliyath at gmail.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: el\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-15 06:45+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-26 17:15+0200\n"
"Last-Translator: Thalia Papoutsaki <saliyath at gmail.com>\n"
"Language-Team: Greek <fedora-trans-el at redhat.com>\n"
@@ -17,30 +17,36 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: KAider 0.1\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
#: ../src/modules/module-always-sink.c:39
@@ -56,7 +62,12 @@ msgid "Virtual LADSPA sink"
msgstr ""
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
msgstr ""
#: ../src/modules/module-null-sink.c:55
@@ -67,11 +78,11 @@ msgstr ""
msgid "Null Output"
msgstr ""
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "ÎÏÏÏεÏικÏÏ Î®ÏοÏ"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -87,283 +98,313 @@ msgstr ""
msgid "Failed to add bind-now-loader."
msgstr ""
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Îγινε λήÏη ÏήμαÏÎ¿Ï %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "ÎξοδοÏ."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï Î¿Î¼Î¬Î´Î±Ï ÏÏηÏÏÏν '%s'."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr ""
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr ""
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr ""
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr ""
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr ""
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr ""
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr ""
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr ""
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr ""
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr ""
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
+#: ../src/daemon/main.c:662
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
msgstr ""
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr ""
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:627
+#: ../src/daemon/main.c:726
#, c-format
-msgid "pipe failed: %s"
+msgid "pipe() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "ÎÏοÏÏ
Ïία ÏÏνδεÏηÏ: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "ÎÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ Ïο PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, c-format
+msgid "Running in VM: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr ""
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr ""
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
msgstr ""
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr ""
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr "ÎικΠμοÏ
, ο ÏÏ
ÏÎ®Î½Î±Ï ÏοÏ
είναι για Ïα μÏάζα! Î ÏÏÏÏαÏη ÏοÏ
ÏÎµÏ ÏήμεÏα είναι Linux με ενεÏγοÏοιημÎνα Ïα high-resolution timers!"
+#: ../src/daemon/main.c:922
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"ÎικΠμοÏ
, ο ÏÏ
ÏÎ®Î½Î±Ï ÏοÏ
είναι για Ïα μÏάζα! Î ÏÏÏÏαÏη ÏοÏ
ÏÎµÏ ÏήμεÏα είναι "
+"Linux με ενεÏγοÏοιημÎνα Ïα high-resolution timers!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr ""
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr ""
@@ -378,37 +419,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"
@@ -419,10 +471,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"
@@ -437,7 +491,9 @@ msgid "--fail expects boolean argument"
msgstr ""
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of 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 ""
#: ../src/daemon/cmdline.c:276
@@ -534,76 +590,83 @@ msgstr ""
msgid "Path: %s\n"
msgstr ""
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr ""
-#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+#: ../src/daemon/daemon-conf.c:602
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
msgstr ""
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@@ -649,7 +712,7 @@ msgid "Rear Right"
msgstr ""
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
+msgid "Subwoofer"
msgstr ""
#: ../src/pulse/channelmap.c:117
@@ -995,190 +1058,190 @@ msgstr ""
msgid "Failed to parse cookie data"
msgstr ""
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr ""
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr ""
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, fuzzy, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, fuzzy, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr ""
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, fuzzy, c-format
msgid "Failed to drain stream: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr ""
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr ""
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr ""
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr ""
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr ""
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr ""
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr ""
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr ""
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr ""
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr ""
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr ""
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr ""
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr ""
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr ""
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr ""
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr ""
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr ""
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr ""
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "ÎÏοÏÏ
Ïία ÏÏνδεÏηÏ: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr ""
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr ""
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, fuzzy, c-format
msgid "Failed to get latency: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr ""
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:609
+#: ../src/utils/pacat.c:630
#, c-format
msgid ""
"%s [options]\n"
@@ -1191,35 +1254,58 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1227,177 +1313,181 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr ""
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr ""
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr ""
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr ""
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr ""
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr ""
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr ""
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr ""
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr ""
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr ""
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr ""
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr ""
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr ""
-#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
+#: ../src/utils/pacat.c:1000
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
msgstr ""
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr ""
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr ""
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr ""
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr ""
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr ""
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr ""
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, fuzzy, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, fuzzy, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr ""
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
"\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 ""
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1405,50 +1495,61 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr ""
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, fuzzy, c-format
msgid "Failed to get statistics: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, fuzzy, c-format
msgid "Failed to get server information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1456,15 +1557,15 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, fuzzy, c-format
msgid "Failed to get sink information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1486,22 +1587,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, fuzzy, c-format
msgid "Failed to get source information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1523,20 +1624,20 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr ""
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, fuzzy, c-format
msgid "Failed to get module information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1547,12 +1648,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, fuzzy, c-format
msgid "Failed to get client information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1562,12 +1663,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, fuzzy, c-format
msgid "Failed to get card information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1578,22 +1679,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr ""
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, fuzzy, c-format
msgid "Failed to get sink input information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1614,12 +1715,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, fuzzy, c-format
msgid "Failed to get source output information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1636,12 +1737,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, fuzzy, c-format
msgid "Failed to get sample information: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1659,25 +1760,78 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "ÎÏοÏÏ
Ïία: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, fuzzy, c-format
msgid "Failed to upload sample: %s"
msgstr "ÎÏοÏÏ
Ïία εÏÏεÏÎ·Ï ÏÏήÏÏη '%s'."
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr ""
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+msgid "server"
+msgstr ""
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr ""
-#: ../src/utils/pactl.c:869
+#: ../src/utils/pactl.c:961
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1701,15 +1855,18 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\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:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1717,101 +1874,104 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr ""
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ÎÏοÏÏ
Ïία ανοίγμαÏÎ¿Ï Î±ÏÏείοÏ
ήÏοÏ
."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr ""
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr ""
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr ""
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr ""
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr ""
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr ""
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1196
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
msgstr ""
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr ""
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr ""
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr ""
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr ""
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr ""
@@ -1822,7 +1982,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 ""
@@ -1886,96 +2047,106 @@ msgstr ""
msgid "Not yet implemented.\n"
msgstr ""
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr ""
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "ÏÏνδεÏη(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr ""
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr ""
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr ""
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr ""
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr ""
@@ -2039,132 +2210,153 @@ msgstr ""
msgid "No Amplifier"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+msgid "Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+msgid "No Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+msgid "Headphones"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analog Radio"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analog Video"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analog Output (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analog Mono Output"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analog Stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analog Mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analog Stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analog Surround 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analog Surround 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analog Surround 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analog Surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analog Surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analog Surround 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analog Surround 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analog Surround 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analog Surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digital Stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digital Surround 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digital Surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digital Surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digital Stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analog Mono Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analog Stereo Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digital Stereo Duplex (IEC958)"
diff --git a/po/es.po b/po/es.po
index 48a4f13..84c67f0 100644
--- a/po/es.po
+++ b/po/es.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-04 16:37+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-04 21:16+0200\n"
"Last-Translator: Fernando Gonzalez Blanco <fgonz at fedoraproject.org>\n"
"Language-Team: Spanish <fedora-trans-es at redhat.com>\n"
@@ -19,12 +19,12 @@ msgstr ""
"X-Poedit-Language: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -37,7 +37,7 @@ msgstr ""
"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, "
"informe ésto a los desarrolladores de ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -50,7 +50,7 @@ msgstr ""
"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, "
"informe ésto a los desarrolladores de ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -98,11 +98,11 @@ msgstr "Sumidero nulo sincronizado"
msgid "Null Output"
msgstr "Salida Nula"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Audio Interno"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Módem"
@@ -118,92 +118,98 @@ msgstr "Falló al asignar el cargador dl nuevo."
msgid "Failed to add bind-now-loader."
msgstr "Falló al agregar bind-now-loader."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Se obtuvo la señal %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Saliendo."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Falló al buscar usuario '%s'."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Falló al buscar grupo '%s'."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Se encontró el usuario '%s' (UID %lu) y el grupo '%s' (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID del usuario '%s' y del grupo '%s' no son similares."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "El directorio de inicio del usuario '%s' no es '%s', ignorando."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Falló al crear '%s': %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Falló al cambiar la lista de grupo: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Falló al cambiar GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Falló al cambiar UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Se han liberado con éxitos los privilegios de root."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "El modo a nivel de sistema no es soportado en esta plataforma."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) falló: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Falló al analizar la lÃnea de comando."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "El demonio no está funcionando"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "El demonio está funcionando como PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "No se ha podido detener el demonio: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -211,160 +217,175 @@ msgstr ""
"Este programa no tiene por qué ser ejecutado como root (a menos que --system "
"sea especificado)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Se necesitan privilegios de root."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start no está soportado para las instancias del sistema."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
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:586
+#: ../src/daemon/main.c:686
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:589
+#: ../src/daemon/main.c:689
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:594
+#: ../src/daemon/main.c:694
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:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Fallo al intentar adquirir stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "Falló el pipe: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "Falló el fork(): %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "Falló la operación read(): %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Falló el inicio del demonio. "
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "El demonio se inició exitosamente."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "Falló la operación read(): %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Esto es PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilación: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilación CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Ejecutándose en el host: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Se encontraron %u CPUs."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "El tamaño de la página es de %lu bytes"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Soporte para compilar con Valgrind: si"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Soporte para compilar con Valgrind: no"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Ejecutándose en modo valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Ejecutándose en el host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Build optimizado: si"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Build optimizado: no"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definido, todos los chequeos deshabilitados."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH definido, sólo se deshabilitan los chequeos fast path."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Todos los chequeos habilitados."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Fallo al intentar obtener el ID de la máquina"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "El ID de la máquina es %s"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "El ID de la sesión es %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Utilizando directorio de tiempo de ejecución %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Utilizando directorio de estado %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Utilizando directorio de módulos %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Ejecutándose en modo de sistema: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -381,17 +402,17 @@ msgstr ""
"obtener una explicación acerca de por qué es una mala idea utilizar el modo "
"sistema."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "Ha fallado pa_pid_file_create()."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
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:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -399,29 +420,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:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "Falló pa_core_new()."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Fallo al intentar iniciar el demonio."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
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:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "El demonio se inició completamente."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Comienza a apagarse el demonio."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "El demonio se ha apagado."
@@ -688,72 +709,77 @@ msgstr "ADVERTENCIA DE COMPATIBILIDAD: %s\n"
msgid "Path: %s\n"
msgstr "Ruta: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destino de log inválido '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nivel de log inválido '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Método de remuestreo inválido '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Rlimit inválido '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] Rlimit no soportado en esta plataforma."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato de muestra inválido '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Tasa de muestra inválida '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canales de muestra inválidos '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canal inválido '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Cantidad de fragmentoa inválidos '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Tamaño inválido de fragmento '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Nivel de nice inválido '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Tasa de muestra inválida '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "No se pudo abrir el archivo de configuración: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -761,7 +787,7 @@ msgstr ""
"El mapa de canal predeterminado especificado tiene un número de canales "
"distinto al especificado como predeterminado."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Leyendo desde el archivo de confioguración: %s ###\n"
@@ -807,8 +833,8 @@ msgid "Rear Right"
msgstr "POsterior derecho"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Emisor de baja frecuencia"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1153,191 +1179,191 @@ msgstr "XOpenDisplay() falló"
msgid "Failed to parse cookie data"
msgstr "Fallo al analizar los datos de la cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Fallo al abrir el archivo de configuración '%s': %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "No se ha cargado ninguna cookie. Intentando conectar de todos modos."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(:) %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Se ha recibido un mensaje para una extensión desconocida '%s'"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Falló al drenar el flujo: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "El flujo de reproducción ha sido drenado."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Drenando conexión con el servidor."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() falló: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() falló: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() falló: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Se ha creado exitosamente el flujo (stream)."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() falló: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Métrica del búfer: maxlenght=%u, tlenghth=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Métrica del búfer: maxlenght=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Utilizando especificaciones de muestra '%s', mapa del canal '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Conectado al dispositivo %s (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Error de flujo: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Dispositivo de flujo suspendido.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Dispositivo de flujo reestablecido.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Flujo agotado.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Flujo saturado.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Flujo iniciado.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Fujo trasladado al dispositivo %s (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "no"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Los atributos del búfer de flujo han cambiado.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Conexión establecida.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() falló: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() falló: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() falló: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Error en la conexión: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Se tiene EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() falló: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Hay señal, saliendo (exiting)."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "No se pudo obtener latencia: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Tiempo: %0.3f seg; Latencia: %0.0f useg."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() falló: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1389,10 +1415,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opciones]\n"
@@ -1454,7 +1484,7 @@ msgstr ""
" --list-file-formats Muestra una lista con los formatos "
"de archivo disponibles.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1465,68 +1495,68 @@ msgstr ""
"Compilado con libpulse %s\n"
"Linkeado con libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nombre de cliente '%s' inválido"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nombre de flujo '%s' inválido"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Mapa de canales '%s' inválido"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Especificación de latencia '%s' inválida"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Especificación de tiempo de proceso '%s' inválida"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Propiedad '%s' inválida"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Formato de archivo desconocido %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Especificación de muestra inválida"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open() %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Demasiados argumentos."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Falló al generar especificación de ejemplo para el archivo."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Falló al abrir el archivo de sonido."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1534,23 +1564,23 @@ msgstr ""
"Aviso: el ejemplo de especificación indicado será sobreescrito con las "
"especificaciones del archivo."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Falló al determinar especificación de ejemplo del archivo."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Aviso: Falló al determinar el mapeo del canal desde el archivo."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "El mapa del canal no se corresponde con la especificación de muestra"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Aviso: Faló al escribir el mapeo del canal en el archivo."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -1558,80 +1588,80 @@ msgstr ""
"Abriendo un flujo %s con especificación de muestra '%s' y mapeo de canal '%"
"s'."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "grabando"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "playback"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() falló."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() falló."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() falló."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() falló: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() falló."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() falló."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Error al suspender: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Error al continuar: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
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:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Error en la conexión: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Hay SIGINT, saliendo.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "AVISO: El proceso niño terminado por la señal %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1650,7 +1680,7 @@ msgstr ""
"conectarse\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1661,52 +1691,63 @@ msgstr ""
"Compilado con libpulse %s\n"
"Linkeado con libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() falló.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() falló.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() falló.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Error al intentar obtener estadÃsticas: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Actualmente en uso: %u bloques conteniendo %s bytes en total.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"Ubicados durante a lo largo del tiempo: %u bloques conteniendo %s bytes en "
"total.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Tamaño del cache de muestra: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Error al intentar obtener información del servidor: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1714,7 +1755,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nombre de usuario: %s\n"
"Nombre del equipo: %s\n"
@@ -1726,12 +1767,12 @@ msgstr ""
"Fuente por defecto: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Error al intentar obtener información del sumidero: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1770,22 +1811,22 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPuertos:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPuerto Activo: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Error al intentar obtener información de la fuente: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1824,20 +1865,20 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Error al intentar obtener información del módulo: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1854,12 +1895,12 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Error al intentar obtener información del cliente: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1874,12 +1915,12 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Fallo al obtener la información de la placa: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1896,22 +1937,22 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tPerfiles:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tPerfil Activo: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Error al intentar obtener información de entrada del sumidero: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1948,12 +1989,12 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Falló al obtener información de salida de la fuente: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1982,12 +2023,12 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Falló al obtener información de la muestra: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2018,26 +2059,81 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Falla: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Falló al subir muestra: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Fin de archivo prematuro"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "destino"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "fuente"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "fuente"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Servidor inválido"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Hay un SIGINT, saliendo."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2060,6 +2156,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2099,7 +2196,7 @@ msgstr ""
" -n, --client-name=NAME El nombre de este cliente en el "
"servidor\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2110,52 +2207,52 @@ msgstr ""
"Compilado con libpulse %s\n"
"Linked con libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Por favor, especifique un archivo de muestra a cargar"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Error al intentar abrir el archivo de sonido."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
"Aviso: Falló al intentar determinar especificación de la muestra desde el "
"archivo."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Debe especificar un nombre de muestra para reproducir"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Debe especificar un nombre de muestra a eliminar"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Debe especificar un Ãndice para la entrada al sumidero y un sumidero"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Debe especificar un Ãndice para las salida de la fuente y una fuente"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Debe especificar un nombre de módulo y los argumentos."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Debe especificar un Ãndice de módulo"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"No puede especificar más de un sumidero. Tiene que especificar un valor "
"booleano."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2163,58 +2260,58 @@ msgstr ""
"No puede especificar más de una fuente. Tiene que especificar un valor "
"booleano."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Debe especificar un nombre/Ãndice de placa y un nombre de perfil"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Debe especificar un nombre/Ãndice de sumidero y un nombre de puerto"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Debe especificar un nombre/Ãndice de fuente y un nombre de puerto"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Debe especificar un nombre/Ãndice de sumidero y el volumen"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Especificación de volumen inválida"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Debe especificar un nombre/Ãndice de fuente y un volumen"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Debe especificar un Ãndice de sumidero y un volumen"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Indice de entrada a sumidero inválido"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Debe especificar un nombre/Ãndice de sumidero y un booleano para mudo"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Debe especificar un nombre/Ãndice de fuente y un booleano para mudo"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
"Debe especificar un Ãndice de entrada a sumidero y un booleano para mudo"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Especificación de Ãndice de entrada a sumidero inválida"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "No se ha especificado ningún comando válido."
@@ -2298,46 +2395,46 @@ msgstr "Error al cargar datos de cookie\n"
msgid "Not yet implemented.\n"
msgstr "Aún no se ha implementado.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"El demonio PulseAudio no está ejecutándose, o no se está ejecutando como un "
"demonio de sesión."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Error al intentar detener el demonio de PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "El demonio no responde."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "No se puede acceder al candado de autogeneración."
@@ -2376,38 +2473,42 @@ msgstr ""
"() devolvió 0 u otro valor < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Apagado"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Reproducción de Alta Fidelidad (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Captura de Alta Fidelidad (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "TelefonÃa Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Servidor de Sonido PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Dispositivos de salida"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Dispositivos de entrada"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Audio en @HOSTNAME@"
@@ -2471,136 +2572,163 @@ msgstr "Amplificador"
msgid "No Amplifier"
msgstr "Sin amplificador"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Incremento de ganancia"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Sin incremento de ganancia"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Auriculares analógicos"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Entrada analógica"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Micrófono analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Entrada en lÃnea analógica"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Radio analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "VÃdeo analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Salida analógica"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Auriculares analógicos"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Salida analógica (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Salida Mono analógica "
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Estéreo Analógico"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Estéreo Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Análogico Envolvente 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Análogico Envolvente 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Análogico Envolvente 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Análogo Envolvente 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Análogo Envolvente 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Análogo Envolvente 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Análogo Envolvente 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Análogico Envolvente 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Análogico Envolvente 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Análogico Envolvente 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Análogo Envolvénte 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Estéreo Digital (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digital Envolvente 4.0 (IEC9588)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digital Envolvente 4.0 (IEC9588/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digital Envolvente 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Estéreo Digital (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Mono Analógico.Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Estéreo Analógico.Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Estéreo Digital Duplex(IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Emisor de baja frecuencia"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Nombre de cliente inválido '%s'\n"
@@ -2875,9 +3003,3 @@ msgstr "Estéreo Digital Duplex(IEC958)"
#~ "Tipo: %s\n"
#~ "Módulo: %s\n"
#~ "Argumento: %s\n"
-
-#~ msgid "sink"
-#~ msgstr "destino"
-
-#~ msgid "source"
-#~ msgstr "fuente"
diff --git a/po/fi.po b/po/fi.po
index 00bfda9..fcdfa2a 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-12-23 17:25+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-23 23:45+0200\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
@@ -16,12 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -33,7 +33,7 @@ msgstr ""
"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
"ongelmasta ALSA-kehittäjille."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -46,7 +46,7 @@ msgstr ""
"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
"ongelmasta ALSA-kehittäjille."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -94,11 +94,11 @@ msgstr "Kellotettu tyhjä nielu"
msgid "Null Output"
msgstr "Tyhjä ulostulo"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Sisäinen äänentoisto"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modeemi"
@@ -114,92 +114,98 @@ msgstr "Uuden dl-lataaminen varaaminen epäonnistui."
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loaderin lisääminen epäonnistui."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Saatiin signaali %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Poistutaan."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Käyttäjää â%sâ ei löydetty."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Ryhmää â%sâ ei löydetty."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Löydettiin käyttäjä â%sâ (UID %lu) ja ryhmä â%sâ (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "Käyttäjän â%sâ ja ryhmän â%sâ GID:t eivät vastaa toisiaan."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Käyttäjän â%sâ kotihakemisto ei ole â%sâ, ohitetaan."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Hakemiston â%sâ luominen epäonnistui: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Ryhmäluettelon vaihtaminen epäonnistui: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID:n vaihtaminen epäonnistui: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID:n vaihtaminen epäonnistui: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Root-oikeuksista luopuminen onnistui."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Järjestelmänlaajuista tilaa ei tueta tällä alustalla."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) epäonnistui: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Komentorivin jäsentäminen epäonnistui."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Taustaprosessi ei ole käynnissä"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Taustaprosessi käynnissä prosessitunnisteella %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Taustaprosessin lopettaminen epäonnistui: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -207,161 +213,176 @@ msgstr ""
"Tätä ohjelmaa ei ole tarkoitettu suoritettavaksi pääkäyttäjänä (ellei --"
"system ole määritelty)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Pääkäyttäjän (root) oikeudet vaaditaan."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start-valitsinta ei tueta järjestelmätilassa."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
"Suoritetaan järjestelmätilassa, mutta --disallow-exit ei ole asetettuna!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"Suoritetaan järjestelmätilassa, mutta -disallow-module-loading ei ole "
"asetettuna!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
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:594
+#: ../src/daemon/main.c:694
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:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio:n saaminen epäonnistui."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "putki epäonnistui: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() epäonnistui: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() epäonnistui: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Taustaprosessin käynnistys epäonnistui."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Taustaprosessin käynnistys onnistui."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() epäonnistui: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Tämä on PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Käännöksen isäntäkone: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Käännösaikaiset C-liput (CFLAGS): %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Käynnissä isäntäkoneella: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Löydettiin %u CPU:ta."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Sivun koko on %lu tavua"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Käännetty Valgrind-tuella: kyllä"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Käännetty Valgrind-tuella: ei"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Käynnissä valgrind-tilassa: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Käynnissä isäntäkoneella: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimoitu rakentaminen: kyllä"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimoitu rakentaminen: ei"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG on määritelty, kaikki assertit ovat poissa käytöstä."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH on määritelty, vain fast path -assertit ovat poissa käytöstä."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Kaikki assertit ovat käytössä."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Konetunnisteen nouto epäonnistui"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "Konetunniste on %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "Istunnon tunniste on %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Käytetään ajonaikaista hakemistoa %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Käytetään tilahakemistoa %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Käytetään moduulihakemistoa %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Suoritetaan järjestelmätilassa: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -375,15 +396,15 @@ msgstr ""
"Lisätietoja siitä, miksi järjestelmätilan käyttäminen on yleensä huono "
"ajatus on osoitteessa http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() epäonnistui."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Korkean tarkkuuden ajastimet käytettävissä."
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -391,29 +412,29 @@ msgstr ""
"Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
"suositeltava!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() epäonnistui."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Taustaprosessin alustus epäonnistui."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
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:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Taustaprosessin käynnistys valmis."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Taustaprosessin sulkeminen käynnistetty."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Taustaprosessi lopetettu."
@@ -684,72 +705,77 @@ msgstr "VAROITUS VANHENTUNEISUUDESTA: %s\n"
msgid "Path: %s\n"
msgstr "Polku: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Virheellinen lokikirjoituksen kohde â%sâ."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Virheellinen lokikirjoituksen taso â%sâ."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Virheellinen uudelleennäytteistyksen tapa â%sâ."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Virheellinen rlimit â%sâ."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimitiä ei tueta tällä alustalla."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Virheellinen näytemuoto â%sâ."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Virheellinen näytteenottotaajuus â%sâ."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Virheelliset näytekanavat â%sâ."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Virheellinen kanavakartta â%sâ."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Virheellinen fragmenttimäärä â%sâ."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Virheellinen fragmenttikoko â%sâ."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Virheellinen nice-taso â%sâ."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Virheellinen näytteenottotaajuus â%sâ."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Asetustiedoston avaaminen epäonnistui: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -757,7 +783,7 @@ msgstr ""
"Kanavien oletusmäärä ja oletuskanavakartan kanavien määrä poikkeavat "
"toisistaan."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Luettu asetustiedostosta: %s ###\n"
@@ -803,8 +829,8 @@ msgid "Rear Right"
msgstr "Oikea taka"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Alataajuus"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1149,191 +1175,191 @@ msgstr "XOpenDisplay() epäonnistui"
msgid "Failed to parse cookie data"
msgstr "Evästetietojen jäsennys epäonnistui"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Asetustiedoston avaaminen epäonnistui: â%sâ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Ei ladattua evästettä. Yritetään yhdistämistä ilman."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Saatiin viesti tuntemattomalle laajennokselle â%sâ"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Virran tyhjentäminen epäonnistui: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Toistovirta on tyhjennetty."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Tyhjennetään yhteyttä palvelimelle."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() epäonnistui: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() epäonnistui: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() epäonnistui: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Virran luonti onnistui."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() epäonnistui: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Puskuritiedot: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Puskuritiedot: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Käytetään näytemäärittelyä â%sâ, kanavakarttaa â%sâ."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Yhdistetty laitteeseen %s (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Virtavirhe: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Virtalaite keskeytetty.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Virtalaite palautettu.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Virran alivuoto.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Virran ylivuoto.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Virta käynnistetty.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Virta siirretty laitteelle %s (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "ei "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Virran puskuriattribuutteja muutettu.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Yhteys muodostettu.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() epäonnistui: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() epäonnistui: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() epäonnistui: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Yhteysvirhe: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Saatiin EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() epäonnistui: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Saatiin signaali, lopetetaan."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Latenssin selvittäminen epäonnistui: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Aika: %0.3f s; Latenssi: %0.0f μs."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() epäonnistui: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1385,10 +1411,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [valitsimet]\n"
@@ -1444,7 +1474,7 @@ msgstr ""
" --list-file-formats Luettele käytettävissä olevat "
"tiedostomuodot.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1455,170 +1485,170 @@ msgstr ""
"Käännetty libpulsen versiolle %s\n"
"Linkitetty libpulsen versiolle %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Virheellinen asiakasohjelman nimi â%sâ"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Virheellinen virran nimi â%sâ"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Virheellinen kanavakartta â%sâ"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Virheellinen latenssimääritys â%sâ"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Virheellinen prosessiajan määritys â%sâ"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Virheellinen asetus â%sâ"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Tuntematon tiedostomuoto %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Virheellinen näytemääritys"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Liian monta argumenttia."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Näytemäärityksen generointi tiedostolle epäonnistui."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Ãänitiedoston avaaminen epäonnistui."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr ""
"Varoitus: tiedostosta luettava näytemääritys korvaa annetun määrityksen."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Näytemäärityksen selvittäminen tiedostosta epäonnistui."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Varoitus: Kanavakartan selvittäminen tiedostosta epäonnistui."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Kanavakartta ei vastaa näytemääritystä"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Varoitus: kanavakartan kirjoittaminen tiedostoon epäonnistui."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "Avataan %svirta näytemäärityksellä â%sâ ja kanavakartalla â%sâ."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "nauhoitus"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "toisto"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() epäonnistui."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() epäonnistui."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() epäonnistui."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() epäonnistui: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_new() epäonnistui."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() epäonnistui."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Keskeytys epäonnistui: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Palautus epäonnistui: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "VAROITUS: Ãänipalvelin ei ole paikallinen, ei keskeytetä.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Yhteysvirhe: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Saatiin SIGINT, lopetetaan.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "VAROITUS: Lapsiprosessi lopetettiin signaalilla %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1637,7 +1667,7 @@ msgstr ""
" yhdistetään\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1648,50 +1678,61 @@ msgstr ""
"Käännetty libpulsen versiolle %s\n"
"Linkitetty libpulsen versiolle %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() epäonnistui.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() epäonnistui.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() epäonnistui.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Tilastojen selvittäminen epäonnistui: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Nyt käytössä: %u lohkoa sisältäen yhteensä %s tavua.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "Koko käyttöaikana varattu: %u lohkoa sisältäen yhteensä %s tavua.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Näytevälimuistin koko: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Palvelintietojen selvittäminen epäonnistui: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1699,7 +1740,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Käyttäjänimi: %s\n"
"Konenimi: %s\n"
@@ -1711,12 +1752,12 @@ msgstr ""
"Oletuslähde: %s\n"
"Eväste: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Nielun tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1755,22 +1796,22 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPortit:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktiivinen portti: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Lähteen tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1809,20 +1850,20 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "-"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Moduulin tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1839,12 +1880,12 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Asiakkaan tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1859,12 +1900,12 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Kortin tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1881,22 +1922,22 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfiilit:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktiivinen profiili: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Nielun sisääntulon tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1933,12 +1974,12 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Lähteen ulostulon tietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1967,12 +2008,12 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Näytetietojen nouto epäonnistui: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2003,26 +2044,81 @@ msgstr ""
"\tOminaisuudet:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Epäonnistuminen: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Näytteen lähettäminen epäonnistui: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Ennenaikainen tiedoston päättyminen"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "nielu"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "lähde"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "lähde"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Virheellinen palvelin"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Saatiin SIGINT, lopetetaan."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2045,6 +2141,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2084,7 +2181,7 @@ msgstr ""
" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
"kutsutaan palvelimella\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2095,104 +2192,104 @@ msgstr ""
"Käännetty libpulsen versiolle %s\n"
"Linkitetty libpulsen versiolle %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Anna ladattava näytetiedosto"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Ãänitiedoston avaaminen epäonnistui."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "Varoitus: näytemäärityksen selvitys tiedostosta epäonnistui."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Soitettavan näytteen nimi on annettava"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Poistettavan näytteen nimi on annettava"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Nielun syöteindeksi ja nielu on annettava"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Lähteen ulostuloindeksi ja lähde on annettava"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Moduulin nimi ja argumentit on annettava."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Moduulin indeksi on annettava"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr "Ei voi antaa enempää kuin yhden nielun. Totuusarvo on annettava."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr "Ei voi antaa enempää kuin yhden lähteen. Totuusarvo on annettava."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Kortin nimi/indeksi ja profiilin nimi on annettava"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Nielun nimi/indeksi ja portin nimi on annettava"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Lähteen nimi/indeksi ja portin nimi on annettava"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Nielun nimi/indeksi ja portin nimi on annettava"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Virheellinen äänenvoimakkuuden määritys"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Lähteen nimi/indeksi ja äänenvoimakkuus on annettava"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Nielun syöteindeksi ja äänenvoimakkuus on annettava"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Virheellinen nielun syöteindeksi"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Nielun nimi/indeksi ja vaimennuksen totuusarvo on annettava"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Lähteen nimi/indeksi ja vaimennuksen totuusarvo on annettava"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "Nielun syöteindeksi ja vaimennuksen totuusarvo on annettava"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Virheellinen nielun syöteindeksin määritys"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Mitään kelvollista komentoa ei annettu."
@@ -2277,46 +2374,46 @@ msgstr "Evästetietojen lataaminen epäonnistui\n"
msgid "Not yet implemented.\n"
msgstr "Toteutusta ei vielä ole.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"PulseAudio-taustaprosessi ei ole käynnissä eikä PulseAudiota suoriteta "
"istunnon taustaprosessina."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio-taustaprosessin lopettaminen epäonnistui."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Taustaprosessi ei vastaa."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Automaattisen käynnistyksen lukkoa ei voida käyttää."
@@ -2354,38 +2451,42 @@ msgstr ""
"snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, on < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Poissa"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Korkean äänenlaadun toisto (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Korkean äänenlaadun tallennus (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Puhelut, molemmat suunnat (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio-äänipalvelin"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Ulostulolaitteet"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Sisääntulolaitteet"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Ãäni koneella @HOSTNAME@"
@@ -2449,136 +2550,163 @@ msgstr "Vahvistin"
msgid "No Amplifier"
msgstr "Ei vahvistinta"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Vahvistus"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Ei vahvistusta"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analoginen kuulokeliitäntä"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Analoginen sisääntulo"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Analoginen mikrofoni"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analoginen linjasisääntulo"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analoginen radio"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analoginen video"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Analoginen ulostulo"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Analoginen kuulokeliitäntä"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analoginen ulostulo (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analoginen monoulostulo"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analoginen stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analoginen mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analoginen stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analoginen tilaääni 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analoginen tilaääni 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analoginen tilaääni 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analoginen tilaääni 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analoginen tilaääni 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analoginen tilaääni 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analoginen tilaääni 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analoginen tilaääni 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analoginen tilaääni 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analoginen tilaääni 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analoginen tilaääni 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digitaalinen stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digitaalinen tilaääni 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digitaalinen tilaääni 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digitaalinen tilaääni 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digitaalinen stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analoginen mono, molemmat suunnat"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analoginen stereo, molemmat suunnat"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digitaalinen stereo, molemmat suunnat (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Alataajuus"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Virheellinen asiakasohjelman nimi â%sâ\n"
@@ -2807,9 +2935,3 @@ msgstr "Digitaalinen stereo, molemmat suunnat (IEC958)"
#~ "Tyyppi: %s\n"
#~ "Moduuli: %s\n"
#~ "Argumentto: %s\n"
-
-#~ msgid "sink"
-#~ msgstr "nielu"
-
-#~ msgid "source"
-#~ msgstr "lähde"
diff --git a/po/fr.po b/po/fr.po
index 5c2cd78..355ec23 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,8 +1,8 @@
# French translation of pulseaudio.
# Copyright (C) 2006-2008 Lennart Poettering
# This file is distributed under the same license as the pulseaudio package.
-#
-#
+#
+#
# Robert-André Mauchin <zebob.m at pengzone.org>, 2008.
# Michaël Ughetto <telimektar esraonline com>, 2008.
# Pablo Martin-Gomez <pablo.martin-gomez at laposte.net>, 2008.
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-17 06:48+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-09 21:40+0100\n"
"Last-Translator: Thomas Canniot <mrtom at fedoraproject.org>\n"
"Language-Team: French <fedora-trans-fr at redhat.com>\n"
@@ -22,37 +22,49 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n>1;\n"
"X-Generator: Lokalize 1.0\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu octets (%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA."
+"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu "
+"octets (%lu ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"snd_pcm_delay() a retourné une valeur qui est exceptionnellement large : %li octets (%s%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA."
+"snd_pcm_delay() a retourné une valeur qui est exceptionnellement large : %li "
+"octets (%s%lu ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"snd_pcm_mmap_begin() a retourné une valeur qui est exceptionnellement large : %lu octets (%lu·ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA."
+"snd_pcm_mmap_begin() a retourné une valeur qui est exceptionnellement "
+"large : %lu octets (%lu·ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
@@ -67,8 +79,19 @@ msgid "Virtual LADSPA sink"
msgstr "Destination virtuelle LADSPA"
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
-msgstr "sink_name=<nom de la destination> sink_properties=<propriétés de la destination> master=<nom de la destination à filter> format=<format de l'échantillon> rate=<taux d'échantillonage> channels=<nombre de canaux> channel_map=<plan des canaux> plugin=<nom de l'extension ladspa> label=<étiquette de l'extension ladspa> control=<liste des valeurs de contrôle de l'entrée séparées par des virgules>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+"sink_name=<nom de la destination> sink_properties=<propriétés de la "
+"destination> master=<nom de la destination à filter> format=<format de "
+"l'échantillon> rate=<taux d'échantillonage> channels=<nombre de canaux> "
+"channel_map=<plan des canaux> plugin=<nom de l'extension ladspa> "
+"label=<étiquette de l'extension ladspa> control=<liste des valeurs de "
+"contrôle de l'entrée séparées par des virgules>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -78,11 +101,11 @@ msgstr "Horloge de la destination vide"
msgid "Null Output"
msgstr "Sortie vide"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Audio interne"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -98,286 +121,329 @@ msgstr "Ãchec lors de l'allocation du nouveau chargeur dl."
msgid "Failed to add bind-now-loader."
msgstr "Ãchec lors de l'ajout du chargeur bind-now."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Signal %s obtenu."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Fermeture."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Impossible de trouver l'utilisateur « %s »."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Impossible de trouver le groupe « %s »."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Utilisateur « %s â (UID %lu) et groupe « %s » (GID %lu) trouvé."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "Le GID de l'utilisateur « %s » et du groupe « %s » ne sont pas identiques."
+msgstr ""
+"Le GID de l'utilisateur « %s » et du groupe « %s » ne sont pas identiques."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Le dossier personnel de l'utilisateur « %s » n'est pas « %s », ignoré."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Ãchec lors de la création de « %s » : %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Ãchec lors du changement de la liste du groupe : %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Ãchec lors du changement de GIDÂ : %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Ãchec lors du changement d'UIDÂ : %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Les privilèges root ont été correctement abandonnés."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Mode système étendu non pris en charge sur cette plateforme."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) a échoué : %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Ãchec lors de l'analyse de la ligne de commande"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Lé démon n'est pas lancé"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Le démon est lancé avec le PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Impossible de tuer le démon : %s"
-#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "Le programme n'est pas conçu pour être lancé en tant que root (sauf si --system est renseigné)."
+#: ../src/daemon/main.c:662
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
+"system est renseigné)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Les privilèges root sont nécessaires."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start n'est pas pris en charge pour les instances système."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
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."
+msgstr ""
+"Le démon s'exécute en mode système, mais --disallow-exit n'est pas défini."
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
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."
+msgstr ""
+"Le démon s'exécute en mode système, mais --disallow-module-loading n'est pas "
+"défini."
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
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:594
+#: ../src/daemon/main.c:694
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é."
+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:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Ãchec lors de l'acquisition de stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "Ãchec du tube : %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "Ãchec de fork()Â : %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "Ãchec de read()Â : %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Ãchec lors du démarrage du démon."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Démarrage du démon réussi."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "Ãchec de read()Â : %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Pulseaudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Hôte de compilation : %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS de compilation : %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Exécution sur l'hôte : %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u processeurs trouvés."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "La taille de la page est de %lu octets"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Compilé avec la prise en charge Valgrind : oui"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Compilé avec la prise en charge Valgrind : non"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Exécution en mode valgrind : %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Exécution sur l'hôte : %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Construction optimisée : oui"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Construction optimisée : non"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG défini, tous les messages d'erreur sont désactivés."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr "FASTPATH défini, seuls les messages d'erreur fastpath ont été désactivés."
+msgstr ""
+"FASTPATH défini, seuls les messages d'erreur fastpath ont été désactivés."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Tous les messages d'erreur sont activés."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Ãchec lors de l'obtention de l'ID de la machine"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID de la machine est %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "L'ID de la session est %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Utilisation du répertoire d'exécution %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Utilisation du répertoire d'état %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Utilisation du répertoire des modules %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Exécution en mode système : %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
msgstr ""
-"Vous exécutez PA dans un mode système. Sachez que vous ne devriez pas faire cela.\n"
-"Si vous choisissez malgré tout de le faire, vous êtes responsable de tout dysfonctionnement inattendu.\n"
-"Veuillez lire http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode pour comprendre pourquoi le mode système est généralement une mauvaise idée."
-
-#: ../src/daemon/main.c:809
+"Vous exécutez PA dans un mode système. Sachez que vous ne devriez pas faire "
+"cela.\n"
+"Si vous choisissez malgré tout de le faire, vous êtes responsable de tout "
+"dysfonctionnement inattendu.\n"
+"Veuillez lire http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode pour "
+"comprendre pourquoi le mode système est généralement une mauvaise idée."
+
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "Ãchec de pa_pid_file_create()."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr "De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
+msgstr ""
+"De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
-#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-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:922
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+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:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "Ãchec de pa_core_new()."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Ãchec lors de l'initialisation du démon"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
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:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Démarrage du démon effectué."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Fermeture du démon initiée."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Démon terminé."
@@ -392,37 +458,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"
@@ -433,10 +510,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"
@@ -447,56 +526,87 @@ msgstr ""
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
" --dump-conf Affiche la configuration par défaut\n"
-" --dump-modules Affiche la liste des modules disponibles\n"
-" --dump-resample-methods Affiche la liste des méthodes d'échantillonnage disponibles\n"
-" --cleanup-shm Nettoie les segments de mémoire partagée périmés\n"
-" --start Démarre le démon s'il n'est pas lancé\n"
+" --dump-modules Affiche la liste des modules "
+"disponibles\n"
+" --dump-resample-methods Affiche la liste des méthodes "
+"d'échantillonnage disponibles\n"
+" --cleanup-shm Nettoie les segments de mémoire "
+"partagée périmés\n"
+" --start Démarre le démon s'il n'est pas "
+"lancé\n"
" -k --kill Tue un démon en cours d'exécution\n"
-" --check Vérifie s'il existe un démon en cours d'exécution (ne retourne que le code de sortie)\n"
+" --check Vérifie s'il existe un démon en "
+"cours d'exécution (ne retourne que le code de sortie)\n"
"\n"
"OPTIONSÂ :\n"
-" --system[=BOOL] Exécuter en tant qu'instance système\n"
-" -D, --daemonize[=BOOL] Définir en tant que démon après le démarrage\n"
+" --system[=BOOL] Exécuter en tant qu'instance "
+"système\n"
+" -D, --daemonize[=BOOL] Définir en tant que démon après le "
+"démarrage\n"
" --fail[=BOOL] Quitte quand le démarrage échoue\n"
-" --high-priority[=BOOL] Tente de définir un niveau nice plus élevé\n"
-" (seulement disponible en tant que root, avec le SUID ou\n"
+" --high-priority[=BOOL] Tente de définir un niveau nice plus "
+"élevé\n"
+" (seulement disponible en tant que "
+"root, avec le SUID ou\n"
" avec un RLIMIT_NICE élevé)\n"
-" --realtime[=BOOL] Tente d'activer une planification en temps réel\n"
-" (seulement disponible en tant que root, avec le SUID ou\n"
+" --realtime[=BOOL] Tente d'activer une planification en "
+"temps réel\n"
+" (seulement disponible en tant que "
+"root, avec le SUID ou\n"
" ave un RLIMIT_RTPRIO élevé)\n"
-" --disallow-module-loading[=BOOL] Empêche les chargements/déchargements de module\n"
-" demandés par l'utilisateur après le démarrage\n"
-" --disallow-exit[=BOOL] Empêche les fermetures demandées par l'utilisateur\n"
-" --exit-idle-time=SECS Termine le démon quand la durée d'inactivité \n"
+" --disallow-module-loading[=BOOL] Empêche les chargements/"
+"déchargements de module\n"
+" demandés par l'utilisateur après le "
+"démarrage\n"
+" --disallow-exit[=BOOL] Empêche les fermetures demandées par "
+"l'utilisateur\n"
+" --exit-idle-time=SECS Termine le démon quand la durée "
+"d'inactivité \n"
" et ce temps se sont écoulés\n"
-" --module-idle-time=SECS Décharge les modules chargés automatiquement \n"
-" quand la durée d'inactivité et ce temps se sont écoulés\n"
-" --scache-idle-time=SECS Décharge les échantillons chargés automatiquement \n"
-" quand la durée d'inactivité et ce temps se sont écoulés\n"
-" --log-level[=NIVEAU] Augmente ou définit le niveau de verbosité\n"
+" --module-idle-time=SECS Décharge les modules chargés "
+"automatiquement \n"
+" quand la durée d'inactivité et ce "
+"temps se sont écoulés\n"
+" --scache-idle-time=SECS Décharge les échantillons chargés "
+"automatiquement \n"
+" quand la durée d'inactivité et ce "
+"temps se sont écoulés\n"
+" --log-level[=NIVEAU] Augmente ou définit le niveau de "
+"verbosité\n"
" -v Augmente le niveau de verbosité\n"
" --log-target={auto,syslog,stderr} Indique la cible du journal\n"
-" --log-meta[=BOOL] Inclure la position du code dans les messages ·du journal\n"
-" --log-time[=BOOL] Inclure la date dans les messages du journal\n"
-" --log-backtrace=TRAMES Inclure un traçage de la pile dans les messages du journal\n"
-" -p, --dl-search-path=CHEMIN Définit le chemin de recherche pour les objets dynamiques\n"
+" --log-meta[=BOOL] Inclure la position du code dans les "
+"messages ·du journal\n"
+" --log-time[=BOOL] Inclure la date dans les messages du "
+"journal\n"
+" --log-backtrace=TRAMES Inclure un traçage de la pile dans "
+"les messages du journal\n"
+" -p, --dl-search-path=CHEMIN Définit le chemin de recherche pour "
+"les objets dynamiques\n"
" partagés (extensions)\n"
-" --resample-method=MÃTHODE Utilise la méthode de rééchantillonnage indiquée\n"
+" --resample-method=MÃTHODE Utilise la méthode de "
+"rééchantillonnage indiquée\n"
" (Voir --dump-resample-methods pour\n"
" les valeurs possibles)\n"
" --use-pid-file[=BOOL] Crée un fichier PID\n"
-" --no-cpu-limit[=BOOL] Ne pas installer de limiteur de charge CPU\n"
-" sur les plateformes qui le supportent.\n"
-" --disable-shm[=BOOL] Désactive la prise en charge de la mémoire partagée.\n"
+" --no-cpu-limit[=BOOL] Ne pas installer de limiteur de "
+"charge CPU\n"
+" sur les plateformes qui le "
+"supportent.\n"
+" --disable-shm[=BOOL] Désactive la prise en charge de la "
+"mémoire partagée.\n"
"\n"
"SCRIPT DE DÃMARRAGEÂ :\n"
-" -L, --load=\"PARAMÃTRES DU MODULE\" Charge le module d'extension indiqué avec\n"
+" -L, --load=\"PARAMÃTRES DU MODULE\" Charge le module d'extension indiqué "
+"avec\n"
" le paramètre indiqué\n"
" -F, --file=NOMDEFICHIER Exécute le script indiqué\n"
-" -C Ouvre une ligne de commande sur le TTY en cours \n"
+" -C Ouvre une ligne de commande sur le "
+"TTY en cours \n"
" après le démarrage\n"
"\n"
-" -n Ne pas charger les fichiers de scripts par défaut\n"
+" -n Ne pas charger les fichiers de "
+"scripts par défaut\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
@@ -507,8 +617,12 @@ msgid "--fail expects boolean argument"
msgstr "--fail requiert un paramètre booléen"
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr "--log-level requiert un paramètre de niveau de journal (soit numérique entre 0 et 4, soit de débogage : 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 requiert un paramètre de niveau de journal (soit numérique entre "
+"0 et 4, soit de débogage : info, notice, warn , error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -605,76 +719,85 @@ msgid "Path: %s\n"
msgstr "Chemin : %s\n"
# dans les lignes suivantes [%s = nom de fichier: %u = ligne dans celui-ci]
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Cible du journal « %s » invalide."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Niveau du journal « %s » invalide."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Méthode de rééchantillonnage « %s » invalide."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit « %s » invalide."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit n'est pas pris en charge sur cette plateforme."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Format d'échantillon « %s » invalide."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canaux d'échantillonnage « %s » invalide."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Plan de canaux « %s » invalide."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Nombre de fragments « %s » invalide."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Taille du fragment « %s » invalide."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Niveau de priorité (nice) « %s » invalide."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Ãchec lors de l'ouverture du fichier de configuration : %s"
-#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
-msgstr "Le plan de canaux spécifié par défaut a un nombre de canaux différent du nombre spécifié par défaut."
+#: ../src/daemon/daemon-conf.c:602
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+"Le plan de canaux spécifié par défaut a un nombre de canaux différent du "
+"nombre spécifié par défaut."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lecture à partir du fichier de configuration : %s ###\n"
@@ -720,8 +843,8 @@ msgid "Rear Right"
msgstr "Arrière droit"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Ãmetteur à basse fréquence"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1066,187 +1189,188 @@ msgstr "Ãchec de XOpenDisplay()"
msgid "Failed to parse cookie data"
msgstr "Ãchec lors de l'analyse des données du cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Ãchec lors de l'ouverture du fichier de configuration « %s » :%s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Aucun cookie chargé. Tentative de connexion sans celui-ci."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork()Â : %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid()Â : %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Message reçu pour une extension inconnue « %s »"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Ãchec lors du vidage du flux : %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Flux de lecture vidé."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Vidage de la connexion au serveur."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain()Â : %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "Ãchec de pa_stream_write()Â : %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "Ãchec de pa_stream_begin_write()Â : %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "Ãchec de pa_stream_peek()Â : %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Création du flux réussie."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "Ãchec de pa_stream_get_buffer_attr()Â : %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Mesures du tampon : maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Mesures du tampon : maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
-msgstr "Utilisation de la spécification d'échantillon « %s », plan des canaux « %s »."
+msgstr ""
+"Utilisation de la spécification d'échantillon « %s », plan des canaux « %s »."
# l'espace manquant entre %s et suspended est voulu
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Connecté au périphérique %s (%u, %ssuspendu)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Erreur du flux : %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Périphérique de flux suspendu.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Périphérique de flux repris.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Flux vide.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Flux saturé.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Flux démarré.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Flux déplacé vers le périphérique %s (%u, %ssuspendu).%s"
# suspendu ou non suspendu
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "non "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Des attributs du tampon de flux ont changé.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Connexion établie.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "Ãchec de pa_stream_new()Â : %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "Ãchec de pa_stream_connect_playback()Â : %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "Ãchec de pa_stream_connect_record()Â : %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Ãchec lors de la connexion : %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF obtenu."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "Ãchec de write()Â : %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Signal obtenu, fermeture."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Ãchec lors de l'obtention de la latence : %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Durée : %0.3f sec. ; Latence : %0.0f µsec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "Ãchec de pa_stream_update_timing_info()Â : %s"
@@ -1254,8 +1378,8 @@ msgstr "Ãchec de pa_stream_update_timing_info()Â : %s"
# 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:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1267,31 +1391,54 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1299,38 +1446,62 @@ msgstr ""
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
"\n"
-" -r, --record Crée une connexion pour l'enregistrement\n"
-" -p, --playback Crée une connexion pour la relecture\n"
+" -r, --record Crée une connexion pour "
+"l'enregistrement\n"
+" -p, --playback Crée une connexion pour la "
+"relecture\n"
"\n"
" -v, --verbose Active le mode verbeux\n"
"\n"
-" -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
-" -d, --device=PÃRIPHÃRIQUE Le nom de la destination/source à laquelle se connecter\n"
-" -n, --client-name=NOM Définit le nom de ce client sur le serveur\n"
-" --stream-name=NOM Définit le nom de ce flux sur le serveur\n"
-" --volume=VOLUME Indique le volume initial (linéaire) entre 0 et 65536\n"
-" --rate=TAUXDÃCHANTILLONNAGE Le taux d'échantillonnage en Hz (par défaut 44100)\n"
-" --format=FORMATDELÃCHANTILLON Le type de l'échantillon, parmi : s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw (par défaut s16ne)\n"
-" --channels=CANAUX Le nombre de canaux, 1 pour mono, 2 pour stéréo\n"
+" -s, --server=SERVEUR Le nom du serveur auquel se "
+"connecter\n"
+" -d, --device=PÃRIPHÃRIQUE Le nom de la destination/source à "
+"laquelle se connecter\n"
+" -n, --client-name=NOM Définit le nom de ce client sur le "
+"serveur\n"
+" --stream-name=NOM Définit le nom de ce flux sur le "
+"serveur\n"
+" --volume=VOLUME Indique le volume initial (linéaire) "
+"entre 0 et 65536\n"
+" --rate=TAUXDÃCHANTILLONNAGE Le taux d'échantillonnage en Hz (par "
+"défaut 44100)\n"
+" --format=FORMATDELÃCHANTILLON Le type de l'échantillon, parmi : "
+"s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw (par défaut "
+"s16ne)\n"
+" --channels=CANAUX Le nombre de canaux, 1 pour mono, 2 "
+"pour stéréo\n"
" (par défaut 2)\n"
-" --channel-map=PLANDESCANAUX Plan des canaux à utiliser au lieu de celui par défaut\n"
-" --fix-format Prend le format de l'échantillon de la destination où le flux\n"
+" --channel-map=PLANDESCANAUX Plan des canaux à utiliser au lieu "
+"de celui par défaut\n"
+" --fix-format Prend le format de l'échantillon de "
+"la destination où le flux\n"
" est en train de se connecter.\n"
-" --fix-rate Prend le taux d'échantillonnage de la destination où le flux\n"
+" --fix-rate Prend le taux d'échantillonnage de "
+"la destination où le flux\n"
" est en train de se connecter.\n"
-" --fix-channels Prend le nombre et le plan des canaux de la destination \n"
-" où le flux est en train de se connecter.\n"
-" --no-remix Ne pas augmenter ou diminuer le nombre de canaux par mixage.\n"
-" --no-remap Créer le plan des canaux par index et non par nom.\n"
-" --latency=OCTETS Demande la latence indiquée en octets.\n"
-" --process-time=OCTETS Demande le temps de traitement indiqué par requête en octets.\n"
-" --property=PROPRIÃTÃ=VALEUR Attribut la propriété définie à la valeur définie.\n"
-" --raw Enregistre/lit les données PCM brutes.\n"
-" --file-format=FFORMAT Enregistre/lit les données PCM formatées.\n"
-" --list-file-formats Liste les formats de fichiers disponibles.\n"
-
-#: ../src/utils/pacat.c:731
+" --fix-channels Prend le nombre et le plan des "
+"canaux de la destination \n"
+" où le flux est en train de se "
+"connecter.\n"
+" --no-remix Ne pas augmenter ou diminuer le "
+"nombre de canaux par mixage.\n"
+" --no-remap Créer le plan des canaux par index "
+"et non par nom.\n"
+" --latency=OCTETS Demande la latence indiquée en "
+"octets.\n"
+" --process-time=OCTETS Demande le temps de traitement "
+"indiqué par requête en octets.\n"
+" --property=PROPRIÃTÃ=VALEUR Attribut la propriété définie à la "
+"valeur définie.\n"
+" --raw Enregistre/lit les données PCM "
+"brutes.\n"
+" --file-format=FFORMAT Enregistre/lit les données PCM "
+"formatées.\n"
+" --list-file-formats Liste les formats de fichiers "
+"disponibles.\n"
+
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1341,183 +1512,198 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nom du client invalide « %s »"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nom du flux invalide « %s »"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Plan des canaux invalide « %s »"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Spécification de latence invalide « %s »"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Spécification de temps de traitement invalide « %s »"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Propriété invalide « %s »"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Format de fichier inconnu %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Spécification d'échantillon invalide"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open()Â : %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2()Â : %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Trop de paramètres."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
-msgstr "Ãchec lors de la génération des informations de l'échantillon du fichier."
+msgstr ""
+"Ãchec lors de la génération des informations de l'échantillon du fichier."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Ãchec lors de l'ouverture du fichier audio."
-#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
-msgstr "Avertissement : les spécifications de l'échantillon spécifié seront écrasées par celles du fichier."
+#: ../src/utils/pacat.c:1000
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
+msgstr ""
+"Avertissement : les spécifications de l'échantillon spécifié seront écrasées "
+"par celles du fichier."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
-msgstr "Ãchec lors de l'obtention des informations de l'échantillon du fichier."
+msgstr ""
+"Ãchec lors de l'obtention des informations de l'échantillon du fichier."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
-msgstr "Avertissement : échec lors de l'obtention des informations du plan des canaux du fichier."
+msgstr ""
+"Avertissement : échec lors de l'obtention des informations du plan des "
+"canaux du fichier."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Le plan des canaux ne correspond pas à la spécification d'échantillon"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
-msgstr "Avertissement : Ãchec lors de l'écriture du plan des canaux dans le fichier."
+msgstr ""
+"Avertissement : Ãchec lors de l'écriture du plan des canaux dans le fichier."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s » et un plan des canaux « %s »."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"Ouverture d'un flux %s avec une spécification d'échantillon « %s » et un plan "
+"des canaux « %s »."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "enregistrement"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "lecture"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "Ãchec de pa_mainloop_new()."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "Ãchec de io_new()."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "Ãchec de pa_context_new()."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "Ãchec de pa_context_connect() : %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "Ãchec de pa_context_rttime_new()."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "Ãchec de pa_mainloop_run()."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork()Â : %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp()Â : %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Ãchec lors de la suspension : %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Ãchec lors de la reprise : %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
+msgstr ""
+"AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Ãchec lors de la connexion : %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT reçu, fermeture.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "AVERTISSEMENT : le processus fils a été terminé par le signal %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
"\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"
"\n"
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
-" -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
+" -s, --server=SERVEUR Le nom du serveur auquel se "
+"connecter\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1528,50 +1714,63 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "Ãchec de pa_mainloop_new().\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "Ãchec de pa_context_new().\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "Ãchec de pa_mainloop_run().\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Ãchec lors de l'obtention des statistiques : %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "En cours d'utilisation : %u blocs contenant au total %s octets.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "Alloué pendant l'ensemble de la durée d'exécution : %u blocs contenant au total %s octets.\n"
+msgstr ""
+"Alloué pendant l'ensemble de la durée d'exécution : %u blocs contenant au "
+"total %s octets.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Taille du cache de l'échantillon : %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Ãchec lors de l'obtention des informations du serveur : %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1579,7 +1778,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nom d'utilisateur : %s\n"
"Nom d'hôte : %s\n"
@@ -1591,13 +1790,13 @@ msgstr ""
"Source par défaut : %s\n"
"Cookie : %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Ãchec lors de l'obtention des informations sur la destination : %s"
# demander à Lennart s'il s'agit de monitor of source
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1636,22 +1835,22 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorts :\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPort actif : %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Ãchec lors de l'obtention des informations sur la source : %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1690,20 +1889,20 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/d"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Ãchec lors de l'obtention des informations du module : %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1720,12 +1919,12 @@ msgstr ""
"\tPropriétés : \n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Ãchec lors de l'obtention des informations du client : %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1740,12 +1939,12 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Impossible d'obtenir des informations sur la carte : %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1762,22 +1961,23 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfils :\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tProfil actif : %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
-msgstr "Ãchec lors de l'obtention des informations de l'entrée de la destination : %s"
+msgstr ""
+"Ãchec lors de l'obtention des informations de l'entrée de la destination : %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1814,12 +2014,13 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
-msgstr "Ãchec lors de l'obtention des informations de la sortie de la source : %s"
+msgstr ""
+"Ãchec lors de l'obtention des informations de la sortie de la source : %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1848,7 +2049,7 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s"
@@ -1856,7 +2057,7 @@ msgstr "Ãchec lors de l'obtention des informations de l'échantillon : %s"
# Lazy ?
# load-sample-lazy = Create a new entry in the sample cache, but don't load
# the sample immediately. The sample is loaded only when it is first used
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1887,26 +2088,81 @@ msgstr ""
"\tPropriétés :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Ãchec : %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Ãchec lors de l'envoi de l'échantillon : %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Fin prématurée du fichier"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "destination"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "source"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "source"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Serveur invalide"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT reçu, fermeture."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1929,12 +2185,15 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\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 ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1961,10 +2220,12 @@ msgstr ""
" -h, --help Affiche cette aide\n"
" --version Affiche la version\n"
"\n"
-" -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
-" -n, --client-name=NOM Définit le nom de ce client sur le serveur\n"
+" -s, --server=SERVEUR Le nom du serveur auquel se "
+"connecter\n"
+" -n, --client-name=NOM Définit le nom de ce client sur le "
+"serveur\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1975,101 +2236,112 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Veuillez indiquer un fichier d'échantillon à charger"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Ãchec lors de l'ouverture du fichier audio."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
-msgstr "Avertissement : Ãchec lors de l'obtention des spécifications de l'échantillon du fichier."
+msgstr ""
+"Avertissement : Ãchec lors de l'obtention des spécifications de "
+"l'échantillon du fichier."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Vous devez indiquer un nom d'échantillon à lire"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Vous devez indiquer un nom d'échantillon à supprimer"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
-msgstr "Vous devez indiquer un index d'entrée de destination et une destination"
+msgstr ""
+"Vous devez indiquer un index d'entrée de destination et une destination"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Vous devez indiquer un index de sortie de source et une source"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Vous devez indiquer un nom de module et des paramètres."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Vous devez indiquer un index de module"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer une valeur booléenne."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer une "
+"valeur booléenne."
-#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
-msgstr "Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer une valeur booléenne."
+#: ../src/utils/pactl.c:1196
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
+msgstr ""
+"Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer une "
+"valeur booléenne."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Vous devez indiquer un nom/un index de destination et un nom de port"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Vous devez indiquer un nom/un index de source et un nom de port"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Vous devez indiquer un nom/un index de destination et un volume"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Spécification de volume invalide"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Vous devez indiquer un nom/un index de source et un volume"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Vous devez indiquer un index d'entrée de destination et un volume"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Index invalide d'entrée de la destination"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Vous devez indiquer un nom/un index de destination et un booléen muet"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Vous devez indiquer un nom/un index de source et un booléen muet"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Vous devez indiquer un index d'entrée de destination et un booléen muet"
+msgstr ""
+"Vous devez indiquer un index d'entrée de destination et un booléen muet"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Spécification d'index d'entrée de la destination invalide"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Aucune commande valide indiquée."
@@ -2080,14 +2352,18 @@ 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 visuel] [-S serveur] [-O destination] [-I source] [-c fichier] [-d|-e|-i|-r]\n"
+"%s [-D visuel] [-S serveur] [-O destination] [-I source] [-c fichier] [-d|-"
+"e|-i|-r]\n"
"\n"
-" -d Affiche les données PulseAudio actuelles attachées au visuel X11 (par défaut)\n"
+" -d Affiche les données PulseAudio actuelles attachées au visuel X11 (par "
+"défaut)\n"
" -e Exporte les données PulseAudio locales vers le visuel X11\n"
-" -i Importe les données PulseAudio depuis le visuel X11 vers les variables de l'environnement local et le fichier de cookie.\n"
+" -i Importe les données PulseAudio depuis le visuel X11 vers les "
+"variables de l'environnement local et le fichier de cookie.\n"
" -r Enlève les données PulseAudio du visuel X11\n"
#: ../src/utils/pax11publish.c:94
@@ -2133,7 +2409,8 @@ msgstr "Ãchec lors du chargement du fichier de configuration du client.\n"
#: ../src/utils/pax11publish.c:157
#, c-format
msgid "Failed to read environment configuration data.\n"
-msgstr "Ãchec lors de la lecture des données de configuration de l'environnement.\n"
+msgstr ""
+"Ãchec lors de la lecture des données de configuration de l'environnement.\n"
# Fully Qualified Domain Name
#: ../src/utils/pax11publish.c:174
@@ -2151,102 +2428,120 @@ msgstr "Ãchec lors du chargement des données du cookie\n"
msgid "Not yet implemented.\n"
msgstr "Pas encore implémenté.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr "Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas dans une session de type démon."
+msgstr ""
+"Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas dans une "
+"session de type démon."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0)Â : %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect()Â : %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Impossible de tuer le démon PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Le démon ne répond pas."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll()Â : %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read()Â : %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write()Â : %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Impossible d'accèder au verrou autonome."
#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-"ALSA nous a réveillé pour écrire de nouvelles données à partir du périphérique, mais il n'y avait en fait rien à écrire !\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA.\n"
-"Nous avons été réveillés avec POLLOUT actif, cependant un snd_pcm_avail() ultérieur a retourné 0 ou une autre valeur < min_avail."
+"ALSA nous a réveillé pour écrire de nouvelles données à partir du "
+"périphérique, mais il n'y avait en fait rien à écrire !\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA.\n"
+"Nous avons été réveillés avec POLLOUT actif, cependant un snd_pcm_avail() "
+"ultérieur a retourné 0 ou une autre valeur < min_avail."
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-"ALSA nous a réveillé pour lire de nouvelles données à partir du périphérique, mais il n'y avait en fait rien à lire !\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez rapporter ce problème aux développeurs d'ALSA.\n"
-"Nous avons été réveillés avec POLLIN actif, cependant un snd_pcm_avail() ultérieur a retourné 0 ou une autre valeur < min_avail."
+"ALSA nous a réveillé pour lire de nouvelles données à partir du "
+"périphérique, mais il n'y avait en fait rien à lire !\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA.\n"
+"Nous avons été réveillés avec POLLIN actif, cependant un snd_pcm_avail() "
+"ultérieur a retourné 0 ou une autre valeur < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Ãteint"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Lecture haute fidélité (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Capture haute fidélité (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telephonie en duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Serveur de son PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Périphériques de sortie"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Périphériques d'entrée"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Audio sur @HOSTNAME@"
@@ -2310,136 +2605,163 @@ msgstr "Amplificateur"
msgid "No Amplifier"
msgstr "Pas d'amplificateur"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Boost"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Pas de boost"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Casques analogiques"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Entrée analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Microphone analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Entrée-ligne analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Radio analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Vidéo analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Sortie analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Casques analogiques"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Sortie analogique (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Sortie mono analogique"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Stéréo analogique"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Mono analogique"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Stéréo analogique"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Surround analogique 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Surround analogique 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Surround analogique 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Surround analogique 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Surround analogique 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Surround analogique 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Surround analogique 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Surround analogique 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Surround analogique 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Surround analogique 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Surround analogique 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Stéréo numérique (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Surround numérique 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Surround numérique 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Surround numérique 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Stéréo numérique (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Duplex Mono analogique"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Duplex stéréo analogique"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Duplex stéréo numérique (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Ãmetteur à basse fréquence"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Plan des canaux invalide « %s »\n"
@@ -2485,17 +2807,27 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgid "PolicyKit responded with '%s'"
#~ msgstr "PolicyKit a renvoyé « %s »"
-#~ msgid "High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
-#~ msgstr "Ordonnancement haute priorité (niveau Unix « nice » négatif) pour le démon PulseAudio"
+#~ msgid ""
+#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
+#~ "daemon"
+#~ msgstr ""
+#~ "Ordonnancement haute priorité (niveau Unix « nice » négatif) pour le démon "
+#~ "PulseAudio"
#~ msgid "Real-time scheduling for the PulseAudio daemon"
#~ msgstr "Ordonnancement en temps réel pour le démon PulseAudio"
-#~ msgid "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr "La politique du système empêche PulseAudio d'acquérir un ordonnancement haute priorité"
+#~ msgid ""
+#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
+#~ msgstr ""
+#~ "La politique du système empêche PulseAudio d'acquérir un ordonnancement "
+#~ "haute priorité"
-#~ msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr "La politique du système empêche PulseAudio d'acquérir un ordonnancement en temps réel"
+#~ msgid ""
+#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
+#~ msgstr ""
+#~ "La politique du système empêche PulseAudio d'acquérir un ordonnancement "
+#~ "en temps réel"
#~ msgid "read() failed: %s\n"
#~ msgstr "Ãchec de read()Â : %s\n"
@@ -2504,13 +2836,18 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgstr "Ãchec de pa_context_connect() : %s"
#~ msgid "We're in the group '%s', allowing high-priority scheduling."
-#~ msgstr "Nous sommes dans le groupe « %s », permettant une planification à haute priorité."
+#~ msgstr ""
+#~ "Nous sommes dans le groupe « %s », permettant une planification à haute "
+#~ "priorité."
#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr "Nous sommes dans le groupe « %s », permettant un ordonnancement en temps réel."
+#~ msgstr ""
+#~ "Nous sommes dans le groupe « %s », permettant un ordonnancement en temps "
+#~ "réel."
#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr "PolicyKit a accordé l'acquisition des permissions de haute priorité."
+#~ msgstr ""
+#~ "PolicyKit a accordé l'acquisition des permissions de haute priorité."
#~ msgid "PolicyKit refuses acquire-high-priority privilege."
#~ msgstr "PolicyKit a refusé l'acquisition des permissions de haute priorité."
@@ -2522,16 +2859,33 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgstr "PolicyKit a refusé l'acquisition des permissions de temps réel."
#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '%s', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
+#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+#~ "limits.\n"
+#~ "For enabling real-time/high-priority scheduling please acquire the "
+#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
+#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
#~ msgstr ""
-#~ "Le SUID root et l'ordonnancement en temps réel et/ou haute priorité ont été spécifiés dans la configuration. Cependant, il nous manque les privilèges nécessaires :\n"
-#~ "Nous ne sommes pas dans le groupe « %s », PolicyKit refuse de nous accorder les privilèges demandés et nous devons augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO.\n"
-#~ "Pour activer l'ordonnancement en temps réel/haute priorité, veuillez acquérir les privilèges PolicyKit apropriés, ou devenir membre de « %s », ou augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO pour cet utilisateur."
+#~ "Le SUID root et l'ordonnancement en temps réel et/ou haute priorité ont "
+#~ "été spécifiés dans la configuration. Cependant, il nous manque les "
+#~ "privilèges nécessaires :\n"
+#~ "Nous ne sommes pas dans le groupe « %s », PolicyKit refuse de nous "
+#~ "accorder les privilèges demandés et nous devons augmenter les limites de "
+#~ "ressources RLIMIT_NICE/RLIMIT_RTPRIO.\n"
+#~ "Pour activer l'ordonnancement en temps réel/haute priorité, veuillez "
+#~ "acquérir les privilèges PolicyKit apropriés, ou devenir membre de « %s », "
+#~ "ou augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO pour cet "
+#~ "utilisateur."
-#~ 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."
+#~ 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."
#~ msgid "Successfully increased RLIMIT_RTPRIO"
#~ msgstr "Augmentation de RLIMIT_RTPRIO réussie"
@@ -2542,8 +2896,11 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgid "Giving up CAP_NICE"
#~ msgstr "Abandon de CAP_NICE"
-#~ 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."
+#~ 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."
#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
#~ msgstr "Limitation des capacités à CAP_SYS_NICE réussie."
@@ -2571,11 +2928,16 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ "\n"
#~ " -v, --verbose Enable verbose operation\n"
#~ "\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"
+#~ " -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"
#~ " --channel-map=CHANNELMAP Set the channel map to the use\n"
#~ msgstr ""
#~ "%s [options] [FICHIER]\n"
@@ -2585,12 +2947,18 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ "\n"
#~ " -v, --verbose Active le mode verbeux\n"
#~ "\n"
-#~ " -s, --server=SERVEUR Le nom du serveur auquel se connecter\n"
-#~ " -d, --device=PÃRIPHÃRIQUE Le nom de la destination à laquelle se connecter\n"
-#~ " -n, --client-name=NOM Définit le nom de ce client sur le serveur\n"
-#~ " --stream-name=NOM Définit le nom de ce flux sur le serveur\n"
-#~ " --volume=VOLUME Définit le volume initial (linéaire) entre 0 et 65536\n"
-#~ " --channel-map=PLANDESCANAUX Définit le plan des canaux à utiliser\n"
+#~ " -s, --server=SERVEUR Le nom du serveur auquel se "
+#~ "connecter\n"
+#~ " -d, --device=PÃRIPHÃRIQUE Le nom de la destination à "
+#~ "laquelle se connecter\n"
+#~ " -n, --client-name=NOM Définit le nom de ce client sur "
+#~ "le serveur\n"
+#~ " --stream-name=NOM Définit le nom de ce flux sur le "
+#~ "serveur\n"
+#~ " --volume=VOLUME Définit le volume initial "
+#~ "(linéaire) entre 0 et 65536\n"
+#~ " --channel-map=PLANDESCANAUX Définit le plan des canaux à "
+#~ "utiliser\n"
#~ msgid ""
#~ "paplay %s\n"
@@ -2614,17 +2982,23 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ msgstr "Utilisation de la spécification de l'échantillon « %s »\n"
#~ 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 ""
-#~ "Le SUID root a été appelé et la planification à haute priorité/en temps réel demandée dans la configuration. Néanmoins nous n'avons pas les permissions nécessaires :\n"
+#~ "Le SUID root a été appelé et la planification à haute priorité/en temps "
+#~ "réel demandée dans la configuration. Néanmoins nous n'avons pas les "
+#~ "permissions nécessaires :\n"
#~ "nous ne somme pas dans le groupe "
#~ msgid "--log-time boolean argument"
#~ msgstr "--disallow-exit requiert un paramètre booléen"
#~ msgid "Default sink name (%s) does not exist in name register."
-#~ msgstr "Le nom de la destination par défaut (%s) n'existe pas dans le registre des noms."
+#~ msgstr ""
+#~ "Le nom de la destination par défaut (%s) n'existe pas dans le registre "
+#~ "des noms."
#~ msgid "Buffer overrun, dropping incoming data\n"
#~ msgstr "Saturation du tampon, abandon des données entrantes\n"
@@ -2648,21 +3022,22 @@ msgstr "Duplex stéréo numérique (IEC958)"
#~ "Module : %s\n"
#~ "Paramètre : %s\n"
-#~ msgid "sink"
-#~ msgstr "destination"
-
-#~ msgid "source"
-#~ msgstr "source"
-
#~ 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 '"
+#~ "For enabling real-time scheduling please acquire the appropriate "
+#~ "PolicyKit priviliges, or become a member of '"
#~ msgstr ""
-#~ " et PolicyKit refuse de nous accorder les permissions. Abandon du SUID Ã nouveau.\n"
-#~ "Pour activer la planification en temps réel, veuillez aquérir les permissions PolicyKit appropriées, ou devenez membre de "
+#~ " et PolicyKit refuse de nous accorder les permissions. Abandon du SUID Ã "
+#~ "nouveau.\n"
+#~ "Pour activer la planification en temps réel, veuillez aquérir les "
+#~ "permissions PolicyKit appropriées, ou devenez membre de "
-#~ msgid "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-#~ msgstr ", ou augmentez les limites de ressource RLIMIT_NICE/RLIMIT_RTPRIO pour cet utilisateur."
+#~ msgid ""
+#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
+#~ "user."
+#~ msgstr ""
+#~ ", ou augmentez les limites de ressource RLIMIT_NICE/RLIMIT_RTPRIO pour "
+#~ "cet utilisateur."
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair()Â : %s"
diff --git a/po/gu.po b/po/gu.po
index 2486027..1d0f38d 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-07 17:22+0530\n"
"Last-Translator: Sweta Kothari <swkothar at redhat.com>\n"
"Language-Team: Gujarati\n"
@@ -17,12 +17,12 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -34,7 +34,7 @@ msgstr ""
"ALSA ડà«àª°àª¾àªàªµàª° '%s' માઠમà«àªà«àªàª¾àªà« ઠàªà«àª² àªà«àªµà« àªà«. ALSA ડà«àªµàª²à«àªªàª°à«àª®àª¾àª ઠસમસà«àª¯àª¾àª¨à« મહà«àª°àª¬àª¾àª¨à« àªàª°à«àª¨à« "
"àª
હà«àªµàª¾àª² àªàª°à«."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"ALSA ડà«àª°àª¾àªàªµàª° '%s' માઠમà«àªà«àªàª¾àªà« ઠàªà«àª² àªà«àªµà« àªà«. ALSA ડà«àªµàª²à«àªªàª°à«àª®àª¾àª ઠસમસà«àª¯àª¾àª¨à« મહà«àª°àª¬àª¾àª¨à« àªàª°à«àª¨à« "
"àª
હà«àªµàª¾àª² àªàª°à«."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -94,11 +94,11 @@ msgstr "àªà«àª²à«àª થયà«àª² NULL સિàªàª"
msgid "Null Output"
msgstr "શà«àª¨à«àª¯ àªàªàªàªªà«àª"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "àªàªàª¤àª°àª¿àª àªàª¡àª¿àª¯à«"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "મà«àª¡à«àª®"
@@ -114,248 +114,270 @@ msgstr "નવા dl લà«àª¡àª°àª¨à« ફાળવવાનà«àª નિષà«
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader નૠàªàª®à«àª°àªµàª¾àª¨à«àª નિષà«àª«àª³."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "સàªàªà«àª¤ %s મળà«àª¯à«."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "બહાર નà«àªàª³à« રહà«àª¯àª¾ àªà«."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "વપરાશàªàª°à«àª¤àª¾ '%s' નૠશà«àª§àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "àªà«àª¥ '%s' નૠશà«àª§àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "વપરાશàªàª°à«àª¤àª¾ '%s' (UID %lu) àª
નૠàªà«àª¥ '%s' (GID %lu) શà«àª§àª¾àª¯à«."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "વપરાશàªàª°à«àª¤àª¾ '%s' àª
નૠàªà«àª¥ '%s' નૠGID બàªàª§àª¬à«àª¸àª¤à« નથà«."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "વપરાશàªàª°à«àª¤àª¾àª '%s' નૠàªàª° ડિરà«àªà«àªàª°à« '%s' નથà«, àª
વàªàª£à« રહà«àª¯àª¾ àªà«."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' નૠબનાવવામાઠનિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "àªà«àª¥ યાદà«àª¨à« બદલવામાઠનિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID નૠબદલવામાઠનિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID નૠબદલવામાઠનિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "સફળતાપà«àª°à«àªµàª àªà«àª¡à« દà«àª§à«àª² રà«àª àª
ધિàªàª¾àª°à«."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "ઠપà«àª²à«àªàª«à«àª°à«àª® પર બિનàªàª§àª¾àª°àªà«àª¤ સિસà«àªàª® વિશાળ સà«àª¥àª¿àª¤àª¿."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) નિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "àªàª¦à«àª¶ વાàªà«àª¯àª¨à« પદàªà«àªà«àª¦àª¨ àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ડિમન àªàª¾àª²à« રહà«àª¯à« નથà«"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "PID %u તરà«àªà« ડિમન àªàª¾àª²à« રહà«àª¯à« àªà«"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ડિમનનૠમારવાનà«àª નિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
-msgstr "ઠપà«àª°àªà«àª°àª¿àª¯àª¾àª¨à« રà«àª તરà«àªà« àªàª²àª¾àªµàªµàª¾ માàªà« વિàªàª¾àª° થયà«àª² નથૠ(નહિઠતૠ--system ઠસà«àªªàª·à«àª થયà«àª² àªà«)."
+msgstr ""
+"ઠપà«àª°àªà«àª°àª¿àª¯àª¾àª¨à« રà«àª તરà«àªà« àªàª²àª¾àªµàªµàª¾ માàªà« વિàªàª¾àª° થયà«àª² નથૠ(નહિઠતૠ--system ઠસà«àªªàª·à«àª થયà«àª² àªà«)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "રà«àª àª
ધિàªàª¾àª°à« àªàª°à«àª°à« àªà«."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start ઠસિસà«àªàª® àªàª¦àª¾àª¹àª°àª£à« માàªà« àªàª§àª¾àª°àªà«àª¤ નથà«."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "સિસà«àªàª® સà«àª¥àª¿àª¤àª¿àª®àª¾àª àªàª¾àª²à« રહà«àª¯à« àªà«, પરàªàª¤à« --disallow-exit સà«àª¯à«àªàª¿àª¤ નથà«!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "સિસà«àªàª® સà«àª¥àª¿àª¤àª¿àª®àª¾àª àªàª¾àª²à« રહà«àª¯à« àªà«, પરàªàª¤à« --disallow-module-loading ઠસà«àª¯à«àªàª¿àª¤ નથà«!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "સિસà«àªàª® સà«àª¥àª¿àª¤àª¿àª®àª¾àª àªàª¾àª²à« રહà«àª¯à« àªà«, SHM સà«àª¥àª¿àª¤àª¿àª¨à« દબાણપà«àª°à«àªµàª નિષà«àªà«àª°àª¿àª¯ àªàª°à« રહà«àª¯àª¾ àªà«!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"સિસà«àªàª® સà«àª¥àª¿àª¤àª¿àª®àª¾àª àªàª¾àª²à« રહà«àª¯à« àªà«, બહાર નà«àªàª³àªµàª¨àª¾àª નિષà«àªàª¾àª°à«àª¯ સમયનૠદબાણપà«àª°à«àªµàª નિષà«àªà«àª°àª¿àª¯ àªàª°à« "
"રહà«àª¯àª¾ àªà«!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio નૠમà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "પાàªàªª નિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() નિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() નિષà«àª«àª³: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ડિમન શરà«àªàª¤ નિષà«àª«àª³."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "ડિમન શરà«àªàª¤ àªàª°àªµà« સફળ àªà«."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() નિષà«àª«àª³: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "ઠPulseAudio %s àªà«"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "àªàª®à«àªªàª¾àªàª²à«àª¶àª¨ યàªàª®àª¾àª¨: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "àªàª®à«àªªàª¾àªàª²à«àª¶àª¨ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "યàªàª®àª¾àª¨ પર àªàª¾àª²à« રહà«àª¯à« àªà«: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs શà«àª§àª¾àª¯à«."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "પાનાàªàª¨à« માપ %lu બાàªàªà« àªà«"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind àªàª§àª¾àª° સાથૠàªàª®à«àªªàª¾àªàª² થયà«àª² àªà«: હા"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind àªàª§àª¾àª° સાથૠàªàª®à«àªªàª¾àªàª² થયà«àª² àªà«: ના"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind સà«àª¥àª¿àª¤àª¿àª®àª¾àª àªàª¾àª²à« રહà«àª¯à« àªà«: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "યàªàª®àª¾àª¨ પર àªàª¾àª²à« રહà«àª¯à« àªà«: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "શà«àª°à«àª·à«àª થયà«àª² બિલà«àª¡: હા"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "શà«àª°à«àª·à«àª થયà«àª² બિલà«àª¡: ના"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG વà«àª¯àª¾àªà«àª¯àª¾àª¯àª¿àª¤ થયà«àª² àªà«, બધા હàªà« નિષà«àªà«àª°àª¿àª¯ થયà«àª² àªà«."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH વà«àª¯àª¾àªà«àª¯àª¾àª¯àª¿àª¤ થયà«àª² àªà«, ફàªà«àª¤ àªàª¡àªªà« પાથનાઠહàªà« નિષà«àªà«àª°àª¿àª¯ થયà«àª² àªà«."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "બધા હàªà« સàªà«àª°àª¿àª¯ થયà«àª² àªà«."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "મશà«àª¨ ID નૠમà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "મશà«àª¨ ID %s àªà«."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "સતà«àª° ID %s àªà«."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "રનàªàª¾àªàª® ડિરà«àªà«àªàª°à« %s નૠવાપરૠરહà«àª¯àª¾ àªà«."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "સà«àª¥àª¿àª¤àª¿ ડિરà«àªà«àªàª°à« %s નૠવાપરૠરહà«àª¯àª¾ àªà«."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "àªà«àª¡à«àª¯à«àª²à«àª® ડિરà«àªà«àªàª°à« %s નૠવાપરૠરહà«àª¯àª¾ àªà«."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "સિસà«àªàª® સà«àª¥àª¿àª¤àª¿àª®àª¾àª àªàª¾àª²à« રહà«àª¯à« àªà«: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -370,15 +392,15 @@ msgstr ""
"શા માàªà« સિસà«àªàª® સà«àª¥àª¿àª¤àª¿ સામાનà«àª¯ રà«àª¤à« àªàª°àª¾àª¬ વિàªàª¾àª° àªà« તૠમાàªà« વિàªàª¤àªµàª¾àª° àªàª¾àª£àªàª¾àª°à« માàªà« મહà«àª°àª¬àª¾àª¨à« "
"àªàª°à«àª¨à« http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode àªàª¨à« વાàªàªà«."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() નિષà«àª«àª³."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "તાàªà« high-resolution àªàª¾àªàª®àª°à« àªàªªàª²à«àª¬àª§ àªà«! બà«àª¨ àªàªªà«àªàª¾àªàª!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -386,27 +408,27 @@ msgstr ""
"મિતà«àª°, તમારૠàªàª°à«àª¨àª²àª®àª¾àª àªàª¡àª¬àª¡ àªà«! રસà«àªàª¯àª¾àª¨à«àª àªàªà« àªàª²àª¾àª®àª£ ઠસàªà«àª°àª¿àª¯ થયà«àª² high-resolution "
"àªàª¾àªàª®àª°à« સાથૠLinux નà«àª àªà«!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() નિષà«àª«àª³."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ડિમનનૠશરૠàªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "àªà«àªàªªàª£ લà«àª¡ થયà«àª² મà«àª¡à«àª¯à«àª²à« વàªàª° ડિમનનૠશરૠàªàª°à«, àªàª¾àª® àªàª°àªµàª¾ માàªà« ફરૠશરૠàªàª°à« રહà«àª¯àª¾ àªà«."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ડિમન પારàªàª àªàª°àªµàª¾àª¨à«àª સમાપà«àª¤ àªà«."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ડિમનનૠબàªàª§ àªàª°àªµàª¾àª¨à«àª પà«àª°àª¾àª°àªàª થયà«àª² àªà«."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ડિમનનૠàª
àªàª¤ àªàªµà«àª² àªà«."
@@ -662,78 +684,84 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "પાથ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ લà«àª લàªà«àª·à«àª¯ '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ લà«àª સà«àª¤àª° '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ resample પદà«àª¦àª¤àª¿ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ઠઠપà«àª²à«àªàª«à«àª°à«àª® પર àªàª§àª¾àª°àªà«àª¤ નથà«."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ નમà«àª¨àª¾ બàªàª§àª¾àª°àª£ '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ નમà«àª¨àª¾ દર '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ નમà«àª¨àª¾ àªà«àª¨àª²à« '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ àªà«àª¨àª² મà«àªª '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ ફà«àª°à«àªàª®à«àª¨à«àªà«àª¨àª¾àª નàªàª¬àª° '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ ફà«àª°à«àªàª®à«àª¨à«àª માપ '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] àª
યà«àªà«àª¯ સારૠસà«àª¤àª° '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] àª
યà«àªà«àª¯ નમà«àª¨àª¾ દર '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "રà«àªªàª°à«àªàª¾àªàªàª¨ ફાàªàª²àª¨à« àªà«àª²àªµàª¾àª¨à«àª નિષà«àª«àª³: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
-msgstr "સà«àªªàª·à«àª થયà«àª² મà«àª³àªà«àª¤ àªà«àª¨àª² મà«àªª પાસૠસà«àªªàª·à«àª થયà«àª² àªà«àª¨àª²à«àª¨à« મà«àª³àªà«àª¤ સàªàªà«àª¯àª¾ àªàª°àª¤àª¾ વિવિધ àªà«àª¨àª²à«àª¨à« સàªàªà«àª¯àª¾ àªà«."
+msgstr ""
+"સà«àªªàª·à«àª થયà«àª² મà«àª³àªà«àª¤ àªà«àª¨àª² મà«àªª પાસૠસà«àªªàª·à«àª થયà«àª² àªà«àª¨àª²à«àª¨à« મà«àª³àªà«àª¤ સàªàªà«àª¯àª¾ àªàª°àª¤àª¾ વિવિધ àªà«àª¨àª²à«àª¨à« સàªàªà«àª¯àª¾ àªà«."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### રà«àªªàª°à«àªàª¾àªàªàª¨ ફાàªàª²àª®àª¾àªàª¥à« વાàªàªà«: %s ###\n"
@@ -779,8 +807,8 @@ msgid "Rear Right"
msgstr "રિàª
ર àªàª®àª£à«"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Low Frequency Emmiter"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1125,191 +1153,191 @@ msgstr "XOpenDisplay() નિષà«àª«àª³"
msgid "Failed to parse cookie data"
msgstr "àªà«àªà«àª¨à« માહિતà«àª¨à« પદàªà«àªà«àª¦àª¨ àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "રà«àªªàª°à«àªàª¾àªàªàª¨ ફાàªàª² '%s' નૠàªà«àª²àªµàª¾àª®àª¾àª નિષà«àª«àª³: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "àªà«àªà« લà«àª¡ થયà«àª² નથà«. તà«àª¨àª¾àª વàªàª° àªà«àª¡àªµàª¾àª¨à« પà«àª°àª¯àª¤à«àª¨ àªàª°à« રહà«àª¯àª¾ àªà«."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "àª
àªà«àªàª¾àª¤ àªàªà«àª¸àªà«àª¨à«àª¶àª¨ '%s' માàªà« મળà«àª² સàªàª¦à«àª¶"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "સà«àªà«àª°à«àª®àª¨à« નિàªàª¾àª² àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "પà«àª²à«àª¬à«àª સà«àªà«àª°à«àª® નૠનિàªàª¾àª² àªàª°à«àª² àªà«."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "સરà«àªµàª°àª®àª¾àª àªà«àª¡àª¾àª£àª¨à« નિàªàª¾àª² àªàª°à« રહà«àª¯àª¾ àªà«."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "સà«àªà«àª°à«àª® સફળતાપà«àª°à«àªµàª બનાવà«àª² àªà«."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "બફર મà«àªà«àª°àª¿àªà«àª¸: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "બફર મà«àªà«àª°àª¿àªà«àª¸: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "નમà«àª¨à« spec '%s' નૠવાપરૠરહà«àª¯àª¾ àªà«, àªà«àª¨àª² મà«àªª '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "àªàªªàªàª°àª£ %s (%u, %ssuspended) સાથૠàªà«àª¡àª¾àª¯à«àª² àªà«."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "સà«àªà«àª°à«àª® àªà«àª²: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "સà«àªà«àª°à«àª® àªàªªàªàª°àª£ નૠથà«àª¡àª¾ સમય માàªà« બàªàª§ રાàªà«àª² àªà«.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "સà«àªà«àª°à«àª® àªàªªàªàª°àª£àª¨à« ફરૠશરૠàªàª°à«àª² àªà«.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "સà«àªà«àª°à«àª® àªàª²àª¾àªµàªµàª¾ હà«àª ળ àªà«.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "સà«àªà«àª°à«àª® àªàªªàª° àªàª¾àª²à« àªà«.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "સà«àªà«àª°à«àª® શરૠથયà«àª² àªà«.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "સà«àªà«àª°à«àª® ઠàªàªªàªàª°àª£ %s (%u, %ssuspended) માઠàªàª¸à«àª¡à«àª² àªà«.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "નથૠ"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "સà«àªà«àª°à«àª® બફર àªà«àª£àª§àª°à«àª®à« બદલાયà«àª² àªà«.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "àªà«àª¡àª¾àª£ સà«àª¥àª¾àªªàª¿àª¤ થયà«àª² àªà«.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "àªà«àª¡àª¾àª£ નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF મળà«àª¯à«."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "સàªàªà«àª¤ મળà«àª¯à«àª, બહાર નà«àªàª³à« રહà«àª¯àª¾ àªà«."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "àªà«àªªà«àª¤àª¤àª¾ મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Time: %0.3f sec; Latency: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1361,10 +1389,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1413,7 +1445,7 @@ msgstr ""
" --file-format=FFORMAT બàªàª§àª¾àª°àª£ થયà«àª² માહિતà«àª¨à« રà«àªà«àª°à«àª¡ àªàª°à«/વàªàª¾àª¡à«.\n"
" --list-file-formats àªàªªàª²à«àª¬àª§ ફાàªàª² બàªàª§àª¾àª°àª£à«àª¨à« યાદà«.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1424,168 +1456,169 @@ msgstr ""
"libpulse %s સાથૠàªàª®à«àªªàª¾àªàª² થયà«àª² àªà«\n"
"libpulse %s સાથૠàªàª¡à« થયà«àª² àªà«\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "àª
યà«àªà«àª¯ àªà«àª²àª¾àªàª¨à«àª નામ '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "àª
યà«àªà«àª¯ સà«àªà«àª°à«àª® નામ '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "àª
યà«àªà«àª¯ àªà«àª¨àª² મà«àªª '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "àª
યà«àªà«àª¯ àªà«àªªà«àª¤àª¤àª¾ સà«àªªàª·à«àªà«àªàª°àª£ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "àª
યà«àªà«àª¯ પà«àª°àªà«àª°àª¿àª¯àª¾ સમય સà«àªªàª·à«àªà«àªàª°àª£ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "àª
યà«àªà«àª¯ àªà«àª£àª§àª°à«àª® '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "àª
àªà«àªàª¾àª¤ ફાàªàª² બàªàª§àª¾àª°àª£ %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "àª
યà«àªà«àª¯ નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "àªàª£à« બધૠદલà«àª²à« àªà«."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ફાàªàª² માàªà« નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£ નૠàªàª¤à«àªªàª¨à«àª¨ àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "સાàªàª¨à«àª¡ ફાàªàª²àª¨à« àªà«àª²àªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "àªà«àª¤àªµàª£à«: સà«àªªàª·à«àª થયà«àª² નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£ ફાàªàª² માàªàª¥à« સà«àªªàª·à«àªà«àªàª°àª£ સાથૠàªàªªàª° લàªàª¾àª¯à«àª² હશà«."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ફાàªàª² માàªàª¥à« નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£àª¨à« નàªà«àªà« àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "àªà«àª¤àªµàª£à«: ફાàªàª²àª®àª¾àªàª¥à« àªà«àª¨àª² મà«àªªàª¨à« નàªà«àªà« àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "àªà«àª¨àª² મà«àªª ઠસà«àªªàª·à«àªà«àªàª°àª£ નમà«àª¨àª¾àª¨à« બàªàª§àª¬à«àª¸àª¤à« નથà«"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "àªà«àª¤àª£à«: ફાàªàª²àª®àª¾àª àªà«àª¨àª² મà«àªªàª¨à« લàªàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£ '%s' àª
નૠàªà«àª¨àª² નàªà«àª·àª¾ '%s' સાથૠ%s સà«àªà«àª°à«àª®àª¨à« àªà«àª²à« રહà«àª¯àª¾ àªà«."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "રà«àªà«àª°à«àª¡ àªàª°à« રહà«àª¯àª¾ àªà«"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "પà«àª²à«àª¬à«àª"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() નિષà«àª«àª³."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() નિષà«àª«àª³."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() નિષà«àª«àª³."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() નિષà«àª«àª³: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_new() નિષà«àª«àª³."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() નિષà«àª«àª³."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "થà«àª¡àª¾ સમય માàªà« બàªàª§ àªàª°àªµàª¾ માàªà« નિષà«àª«àª³àª¤àª¾: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "ફરૠશરૠàªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "àªà«àª¤àªµàª£à«: સાàªàª¨à«àª¡ સરà«àªµàª° ઠસà«àª¥àª¾àª¨àª¿àª નથà«, થà«àª¡àª¾ સમય માàªà« બàªàª§ àªàª°àªµàª¾àª®àª¾àª àªàªµà«àª¯à« નથà«.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "àªà«àª¡àª¾àª£ નિષà«àª«àª³: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT મળà«àª¯à«, બહાર નà«àªàª³à« રહà«àª¯àª¾ àªà«.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "àªà«àª¤àªµàª£à«: બાળ પà«àª°àªà«àª°àª¿àª¯àª¾àª¨à« સàªàªà«àª¤ %u દà«àª¦àª¾àª°àª¾ àª
àªàª¤ àªàªµà«àª² àªà«\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1603,7 +1636,7 @@ msgstr ""
" -s, --server=SERVER àªà«àª¡àª¾àªµàªµàª¾ માàªà« સરà«àªµàª°àª¨à«àª નામ\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1614,50 +1647,61 @@ msgstr ""
"libpulse %s સાથૠàªàª®à«àªªàª¾àªàª² થયà«àª² àªà«\n"
"libpulse %s સાથૠàªàª¡à« થયà«àª² àªà«\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() નિષà«àª«àª³.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() નિષà«àª«àª³.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() નિષà«àª«àª³.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "પરિસà«àª¥àª¿àª¤àª¿àªàª¨à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "હાલમાઠવપરાશમાઠàªà«: %u બà«àª²à«àªà« %s àªà«àª² બાàªàªà«àª¨à« સમાવૠરહà«àª¯àª¾ àªà«.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "àªàªà« àªà«àªàª¦àªà« દરમà«àª¯àª¾àª¨ ફાળવà«àª² àªà«: %u બà«àª²à«àªà« %s àªà«àª² બાàªàªà«àª¨à« સમાવૠરહà«àª¯àª¾ àªà«.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "નમà«àª¨àª¾ àªà«àª¶ માપ: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "સરà«àªµàª° àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1665,7 +1709,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"વપરાશàªàª°à«àª¤àª¾ નામ: %s\n"
"યàªàª®àª¾àª¨ નામ: %s\n"
@@ -1677,12 +1721,12 @@ msgstr ""
"મà«àª³àªà«àª¤ સà«àª¤à«àª°à«àª¤: %s\n"
"àªà«àªà«: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "સિàªàª àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1721,22 +1765,22 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tપà«àª°à«àªà«:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tસàªà«àª°àª¿àª¯ પà«àª°à«àª: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "સà«àª¤à«àª°à«àª¤ àªàª¾àª£àªàª¾àª°à«àª¨à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1775,20 +1819,20 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "મà«àª¡à«àª¯à«àª²àª¨à« àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1805,12 +1849,12 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "àªà«àª²àª¾àªàª¨à«àª àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1825,12 +1869,12 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "àªàª¾àª°à«àª¡ àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1847,22 +1891,22 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tરà«àªªàª°à«àªàª¾àª:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tસàªà«àª°àª¿àª¯ રà«àªªàª°à«àªàª¾: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "સિàªàª àªàª¨àªªà«àª àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1899,12 +1943,12 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "સà«àª¤à«àª°à«àª¤ àªàªàªàªªà«àª àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1933,12 +1977,12 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "નમà«àª¨àª¾ àªàª¾àª£àªàª¾àª°à« મà«àª³àªµàªµàª¾àª®àª¾àª નિષà«àª«àª³: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1969,26 +2013,80 @@ msgstr ""
"\tàªà«àª£àª§àª°à«àª®à«:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "નિષà«àª«àª³àª¤àª¾: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "નમà«àª¨àª¾àª¨à« àª
પલà«àª¡ àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ફાàªàª²àª¨à« નિયત સમય પહà«àª²àª¾ àª
àªàª¤"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "àª
યà«àªà«àª¯ સરà«àªµàª°"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT મળà«àª¯à«, બહાર નà«àªàª³à« રહà«àª¯àª¾ àªà«."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2011,6 +2109,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2050,7 +2149,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2061,103 +2160,106 @@ msgstr ""
"libpulse %s સાથૠàªàª®à«àªªàª¾àªàª² થયà«àª² àªà«\n"
"libpulse %s સાથૠàªàª¡à« થયà«àª² àªà«\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "મહà«àª°àª¬àª¾àª¨à« àªàª°à«àª¨à« લà«àª¡ àªàª°àªµàª¾ માàªà« નમà«àª¨àª¾ ફાàªàª²àª¨à« સà«àªªàª·à«àª àªàª°à«"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "સાàªàª¨à«àª¡ ફાàªàª²àª¨à« àªà«àª²àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "àªà«àª¤àªµàª£à«: ફાàªàª² માàªàª¥à« નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£ àªàª°àªµàª¾àª¨à«àª નàªà«àªà« àªàª°àªµàª¾àª®àª¾àª નિષà«àª«àª³."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "વàªàª¾àª¡àªµàª¾ માàªà« તમારૠનમà«àª¨àª¾ નામનૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "દà«àª° àªàª°àªµàª¾ માàªà« તમારૠનમà«àª¨àª¾ નામનૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "સિàªàª àªàª¨àªªà«àª àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠસિàªàªàª¨à« તમારૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "તમારૠસà«àª¤à«àª°à«àª¤ àªàªàªàªªà«àª àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠસà«àª¤à«àª°à«àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "તમારૠમà«àª¡à«àª¯à«àª² નામ àª
નૠદલà«àª²à«àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "તમારૠમà«àª¡à«àª¯à«àª² àª
નà«àªà«àª°àª®àª£àª¿àªàª¾àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "તમૠàªàª સિàªàª àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"તમૠàªàª સિàªàª àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "તમૠàªàª સà«àª¤à«àª°à«àª¤ àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
+msgstr ""
+"તમૠàªàª સà«àª¤à«àª°à«àª¤ àªàª°àª¤àª¾ વધારૠસà«àªªàª·à«àª àªàª°à« શàªàª¶à« નહિàª. તમારૠબà«àª²àª¿àª¯àª¨ àªàª¿àªàª®àª¤àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "તમારૠàªàª¾àª°à«àª¡ નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠપà«àª°à«àª નામનૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "તમારૠàªàª¾àª°à«àª¡ નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠપà«àª°à«àª નામનૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "તમારૠàªàª¾àª°à«àª¡ નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠપà«àª°à«àª નામનૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "તમારૠàªàª¾àª°à«àª¡ નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠવà«àª²à«àª¯à«àª®àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "àª
યà«àªà«àª¯ નમà«àª¨àª¾ સà«àªªàª·à«àªà«àªàª°àª£"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "તમારૠàªàª¾àª°à«àª¡ નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠવà«àª²à«àª¯à«àª® સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "સિàªàª àªàª¨àªªà«àª àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠવà«àª²à«àª¯à«àª®àª¨à« તમારૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "àª
યà«àªà«àª¯ સિàªàª àªàª¨àªªà«àª àª
નà«àªà«àª°àª®àª£àª¿àªàª¾"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "તમારૠસિàªàª નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠમà«àªàªàª¾ બà«àª²àª¿àª¯àª¨àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "તમારૠસિàªàª નામ/àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠમà«àªàªàª¾ બà«àª²àª¿àª¯àª¨àª¨à« સà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "સિàªàª àªàª¨àªªà«àª àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ àª
નૠમà«àªàªàª¾ બà«àª²àª¿àª¯àª¨àª¨à« તમારૠસà«àªªàª·à«àª àªàª°àªµà« ઠપડશà«"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "àª
યà«àªà«àª¯ àªàª¨àªªà«àª àª
નà«àªà«àª°àª®àª£àª¿àªàª¾ સà«àªªàª·à«àªà«àªàª°àª£"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "યà«àªà«àª¯ àªàª¦à«àª¶ સà«àªªàª·à«àª થયà«àª² નથà«."
@@ -2240,44 +2342,44 @@ msgstr "àªà«àªà« માહિતà«àª¨à« લà«àª¡ àªàª°àªµàª¾àª®àª¾àª
msgid "Not yet implemented.\n"
msgstr "હàªà« àª
મલà«àªàª°àª£ થયà«àª² નથà«.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "PulseAudio ડિમન àªàª¾àª²à« રહà«àª¯à« નથà«, àª
થવા સતà«àª° ડિમન તરà«àªà« àªàª¾àª²à« રહà«àª¯à« નથà«."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio ડિમનનૠમારવામાઠનિષà«àª«àª³."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ડિમન ઠàªàªµàª¾àª¬ àªàªªàª¤à« નથà«."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn તાળાનૠદાàªàª² àªàª°à« શàªàª¾àª¤à« નથà«."
@@ -2316,38 +2418,42 @@ msgstr ""
"àªà« àª
થવા બà«àªà« àªàª¿àªàª®àª¤ < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "બàªàª§"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "High Fidelity Playback (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "High Fidelity Capture (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telephony Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio સાàªàª¨à«àª¡ સરà«àªµàª°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "àªàªàªàªªà«àª àªàªªàªàª°àª£à«"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "àªàª¨àªªà«àª àªàªªàªàª°àª£à«"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ પર àªàª¡àª¿àª¯à«"
@@ -2411,133 +2517,159 @@ msgstr "પરિવરà«àª§àª"
msgid "No Amplifier"
msgstr "પરિવરà«àª§àª નથà«"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "બà«àª¸à«àª"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "બà«àª¸à«àª નથà«"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "àªàª¨àª²à«àª હà«
ડફà«àª¨à«"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "àªàª¨àª²à«àª àªàª¨àªªà«àª"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "àªàª¨àª²à«àª માàªàªà«àª°à«àª«à«àª¨"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "àªàª¨àª²à«àª લાàªàª¨-àªàª¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "àªàª¨àª²à«àª રà«àª¡àª¿àª¯à«"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "àªàª¨àª²à«àª વિડિયà«"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "àªàª¨àª²à«àª àªàªàªàªªà«àª"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "àªàª¨àª²à«àª હà«
ડફà«àª¨à«"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "àªàª¨àª²à«àª àªàªàªàªªà«àª (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "àªàª¨àª²à«àª મà«àª¨à« àªàªàªàªªà«àª"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "àªàª¨àª²à«àª સà«àªà«àª°àª¿àª"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "àªàª¨àª²à«àª મà«àª¨à«"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "àªàª¨àª²à«àª સà«àªà«àª°àª¿àª"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "àªàª¨àª²à«àª સરાàªàª¨à«àª¡ 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ડિàªàª¿àªàª² સà«àªà«àª°àª¿àª (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ડિàªàª¿àªàª² સરાàªàª¨à«àª¡ 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ડિàªàª¿àªàª² સરાàªàª¨à«àª¡ 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ડિàªàª¿àªàª² સરાàªàª¨à«àª¡ 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ડિàªàª¿àªàª² સà«àªà«àª°àª¿àª (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "àªàª¨àª²à«àª મà«àª¨à« ડà«àªªà«àª²à«àªà«àª·"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "àªàª¨àª²à«àª સà«àªà«àª°àª¿àª ડà«àªªà«àª²à«àªà«àª·"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ડિàªàª¿àªàª² સà«àªà«àª°àª¿àª ડà«àªªà«àª²à«àªà«àª· (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Low Frequency Emmiter"
diff --git a/po/he.po b/po/he.po
index e1e3c08..6231bd6 100644
--- a/po/he.po
+++ b/po/he.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-29 12:48+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Elad <el.il at doom.co.il>\n"
"Language-Team: Hebrew <fedora-he-list at redhat.com>\n"
@@ -13,31 +13,36 @@ msgstr ""
"X-Poedit-Language: Hebrew\n"
"X-Poedit-Country: Israel\n"
-#: ../src/modules/alsa/alsa-util.c:858
-#: ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
#: ../src/modules/module-always-sink.c:39
@@ -53,7 +58,12 @@ msgid "Virtual LADSPA sink"
msgstr ""
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
msgstr ""
#: ../src/modules/module-null-sink.c:55
@@ -64,11 +74,11 @@ msgstr ""
msgid "Null Output"
msgstr ""
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "צ××× ×¤× ×××"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "××××"
@@ -84,285 +94,311 @@ msgstr ""
msgid "Failed to add bind-now-loader."
msgstr ""
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr ""
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "××צ×."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr ""
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr ""
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr ""
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr ""
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr ""
-#: ../src/daemon/main.c:208
-#: ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr ""
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr ""
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr ""
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr ""
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr ""
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr ""
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr ""
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
+#: ../src/daemon/main.c:662
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
msgstr ""
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr ""
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:627
+#: ../src/daemon/main.c:726
#, c-format
-msgid "pipe failed: %s"
+msgid "pipe() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:646
-#: ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, c-format
+msgid "setsid() failed: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr ""
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, c-format
+msgid "Running in VM: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr ""
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr ""
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
msgstr ""
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr ""
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+#: ../src/daemon/main.c:922
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
msgstr ""
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr ""
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr ""
@@ -377,37 +413,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"
@@ -418,10 +465,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"
@@ -436,7 +485,9 @@ msgid "--fail expects boolean argument"
msgstr ""
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of 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 ""
#: ../src/daemon/cmdline.c:276
@@ -533,76 +584,83 @@ msgstr ""
msgid "Path: %s\n"
msgstr ""
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr ""
-#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+#: ../src/daemon/daemon-conf.c:602
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
msgstr ""
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@@ -619,8 +677,7 @@ msgstr "×ער×ת ×ק×× PulseAudio"
msgid "Start the PulseAudio Sound System"
msgstr "×ת×× ×ת ×ער×ת ×ק×× PulseAudio"
-#: ../src/pulse/channelmap.c:105
-#: ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
msgstr "××× ×"
@@ -649,7 +706,7 @@ msgid "Rear Right"
msgstr "××× × ×××ר×"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
+msgid "Subwoofer"
msgstr ""
#: ../src/pulse/channelmap.c:117
@@ -824,12 +881,9 @@ msgstr "×¢×××× ×©×××× ×××ר×"
msgid "Top Rear Right"
msgstr "×¢×××× ××× × ×××ר×"
-#: ../src/pulse/channelmap.c:484
-#: ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295
-#: ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341
-#: ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
msgstr "(×× ×ª×§×£)"
@@ -990,8 +1044,7 @@ msgstr ""
msgid "%u B"
msgstr ""
-#: ../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 ""
@@ -999,192 +1052,190 @@ msgstr ""
msgid "Failed to parse cookie data"
msgstr ""
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr ""
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr ""
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr ""
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr ""
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr ""
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr ""
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr ""
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr ""
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr ""
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:237
-#: ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr ""
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr ""
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr ""
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr ""
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr ""
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr ""
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr ""
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr ""
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr ""
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr ""
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr ""
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr ""
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "××"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr ""
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr ""
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:470
-#: ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr ""
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr ""
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr ""
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr ""
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr ""
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:609
+#: ../src/utils/pacat.c:630
#, c-format
msgid ""
"%s [options]\n"
@@ -1197,35 +1248,58 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1233,183 +1307,181 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764
-#: ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr ""
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr ""
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr ""
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr ""
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr ""
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr ""
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr ""
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr ""
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr ""
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr ""
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr ""
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr ""
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr ""
-#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
+#: ../src/utils/pacat.c:1000
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
msgstr ""
-#: ../src/utils/pacat.c:962
-#: ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr ""
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr ""
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr ""
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr ""
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "×ק×××"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "× ××× ×"
-#: ../src/utils/pacat.c:1035
-#: ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1061
-#: ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1069
-#: ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr ""
-#: ../src/utils/pacat.c:1082
-#: ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr ""
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr ""
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
"\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 ""
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1417,50 +1489,61 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr ""
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr ""
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr ""
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
+#, c-format
+msgid ""
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
#, c-format
msgid ""
-"User name: %s\n"
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1468,15 +1551,15 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr ""
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1498,24 +1581,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268
-#: ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274
-#: ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr ""
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1537,28 +1618,20 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345
-#: ../src/utils/pactl.c:401
-#: ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473
-#: ../src/utils/pactl.c:532
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543
-#: ../src/utils/pactl.c:587
-#: ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594
-#: ../src/utils/pactl.c:637
-#: ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "×× ××××"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr ""
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1569,12 +1642,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr ""
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1584,12 +1657,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr ""
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1600,22 +1673,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tפר×פ××××:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr ""
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1636,12 +1709,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr ""
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1658,12 +1731,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr ""
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1681,26 +1754,78 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653
-#: ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "×ש×: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr ""
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr ""
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+msgid "server"
+msgstr ""
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr ""
-#: ../src/utils/pactl.c:869
+#: ../src/utils/pactl.c:961
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1724,15 +1849,18 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\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:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1740,104 +1868,104 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr ""
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr ""
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr ""
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr ""
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr ""
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr ""
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr ""
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr ""
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1196
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
msgstr ""
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr ""
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1154
-#: ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193
-#: ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226
-#: ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr ""
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr ""
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr ""
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr ""
@@ -1848,7 +1976,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 ""
@@ -1912,101 +2041,106 @@ msgstr ""
msgid "Not yet implemented.\n"
msgstr ""
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr ""
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr ""
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr ""
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:171
-#: ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr ""
-#: ../src/utils/pacmd.c:207
-#: ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr ""
-#: ../src/pulsecore/lock-autospawn.c:136
-#: ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr ""
-#: ../src/modules/alsa/alsa-sink.c:530
-#: ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-#: ../src/modules/alsa/alsa-source.c:506
-#: ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "×××××"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "שרת ×ק×× PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "××ª×§× × ×¤××"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "××ª×§× × ×§××"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr ""
@@ -2070,134 +2204,154 @@ msgstr "×××ר"
msgid "No Amplifier"
msgstr "××× ×××ר"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+msgid "Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+msgid "No Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "×××× ××ת ×× ×××××ת"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "ק×× ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "××קר×פ×× ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "×§× × ×× ×¡ ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "ר××× ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "××××× ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "פ×× ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "×××× ××ת ×× ×××××ת"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "פ×× ×× ×××× (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "פ×× ××× × ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "ס×ר×× ×× ××××"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984
-#: ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "××× × ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "ס×ר×× ×× ××××"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "סר××× × ×× ×××× 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "סר××× × ×× ×××× 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "סר××× × ×× ×××× 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "סר××× × ×× ×××× 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "סר××× × ×× ×××× 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "סר××× × ×× ×××× 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "סר××× × ×× ×××× 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "סר××× × ×× ×××× 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "סר××× × ×× ×××× 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "סר××× × ×× ×××× 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "סר××× × ×× ×××× 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ס×ר×× ××××××× (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "סר××× × ××××××× 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "סר××× × ××××××× 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "סר××× × ××××××× 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ס×ר×× ××××××× (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "××× × ×× ×××× ×ש×××"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "ס×ר×× ×× ×××× ×ש×××"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ס×ר×× ××××××× ×ש××× (IEC958)"
-
diff --git a/po/hi.po b/po/hi.po
index 5ebd929..cb2b048 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-13 03:15+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-11-13 15:42+0530\n"
"Last-Translator: Rajesh Ranjan <rajesh672 at gmail.com>\n"
"Language-Team: Hindi <hindi.sf.net>\n"
@@ -15,7 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
"\n"
"\n"
"\n"
@@ -23,12 +24,12 @@ msgstr ""
"\n"
"\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -40,7 +41,7 @@ msgstr ""
"à¤
धिठसà¤à¤à¤µ हॠà¤à¤¿ यह ALSA डà¥à¤°à¤¾à¤à¤µà¤° '%s' मà¥à¤ à¤à¤ बठहà¥. à¤à¤¸ मà¥à¤¦à¥à¤¦à¥ à¤à¥ ALSA डà¥à¤µà¤²à¥à¤ªà¤° à¤à¥ रिपà¥à¤°à¥à¤ "
"à¤à¤°à¥à¤."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -52,7 +53,7 @@ msgstr ""
"à¤
धिठसà¤à¤à¤µ हॠà¤à¤¿ यह ALSA डà¥à¤°à¤¾à¤à¤µà¤° '%s' मà¥à¤ à¤à¤ बठहà¥. à¤à¤¸ मà¥à¤¦à¥à¤¦à¥ à¤à¥ ALSA डà¥à¤µà¤²à¥à¤ªà¤° à¤à¥ रिपà¥à¤°à¥à¤ "
"à¤à¤°à¥à¤."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -99,11 +100,11 @@ msgstr "à¤à¥à¤²à¥à¤à¥à¤¡ रिà¤à¥à¤¤ सिà¤à¤"
msgid "Null Output"
msgstr "रिà¤à¥à¤¤ à¤à¤à¤à¤ªà¥à¤"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à¤à¤à¤¤à¤°à¤¿à¤ à¤à¤¡à¤¿à¤¯à¥"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "मà¥à¤¡à¥à¤®"
@@ -119,246 +120,268 @@ msgstr "नया dl लà¥à¤¡à¤° à¤à¤¬à¤à¤à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ व
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader à¤à¥à¤¡à¤¼à¤¨à¥ मà¥à¤ विफल."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "%s सà¤à¤à¥à¤¤ पाया."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "बाहर हॠरहा हà¥."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "'%s' à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ ढà¥à¤à¤¢à¤¼à¤¨à¥ मà¥à¤ विफल."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "'%s' समà¥à¤¹ ढà¥à¤à¤¢à¤¼à¤¨à¥ मà¥à¤ विफल."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "'%s' (UID %lu) à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ व '%s' (GID %lu) समà¥à¤¹ पाया."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "'%s' à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ à¤à¤° '%s' समà¥à¤¹ à¤à¤¾ GID मà¥à¤² नहà¥à¤ à¤à¤¾à¤¤à¤¾ हà¥"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "'%s' à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ à¤à¥ à¤à¤° निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ '%s' नहà¥à¤ हà¥, à¤
नदà¥à¤à¤¾ à¤à¤° रहा हà¥."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' बनानॠमà¥à¤ विफल: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "समà¥à¤¹ सà¥à¤à¥ पानॠमà¥à¤ विफल: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID बदलनॠमà¥à¤ विफल: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID बदलनॠमà¥à¤ विफल: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "रà¥à¤ à¤
धिà¤à¤¾à¤° सफलतापà¥à¤°à¥à¤µà¤ à¤à¥à¤¡à¤¼à¤¾."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à¤à¤¸ पà¥à¤²à¥à¤à¤«à¥à¤°à¥à¤® पर à¤
समरà¥à¤¥à¤¿à¤¤ तà¤à¤¤à¥à¤° वà¥à¤¯à¤¾à¤ªà¤ विधि."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) विफल: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à¤à¤®à¤¾à¤à¤¡ लाà¤à¤¨ विशà¥à¤²à¥à¤·à¤£ मà¥à¤ विफल."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "डà¥à¤®à¥à¤¨ नहà¥à¤ à¤à¤¾à¤°à¥à¤¯à¤¶à¥à¤²"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "डà¥à¤®à¥à¤¨ बतà¥à¤° PID %u à¤à¤² रहा हà¥"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "डà¥à¤®à¥à¤¨ हà¤à¤¾à¤¨à¥ मà¥à¤ विफल: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
-msgstr "यह पà¥à¤°à¥à¤à¥à¤°à¤¾à¤® बतà¥à¤° रà¥à¤ à¤à¤²à¤¾à¤¨à¥ à¤à¥ लिठà¤à¤à¥à¤à¤¿à¤¤ नहà¥à¤ हॠ(unless --system is specified)."
+msgstr ""
+"यह पà¥à¤°à¥à¤à¥à¤°à¤¾à¤® बतà¥à¤° रà¥à¤ à¤à¤²à¤¾à¤¨à¥ à¤à¥ लिठà¤à¤à¥à¤à¤¿à¤¤ नहà¥à¤ हॠ(unless --system is specified)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "रà¥à¤ à¤
धिà¤à¤¾à¤° à¤à¤°à¥à¤°à¥."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start not supported for system instances."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "तà¤à¤¤à¥à¤° मà¥à¤¡ मà¥à¤ à¤à¤² रहा हà¥, लà¥à¤à¤¿à¤¨ --disallow-exit सà¥à¤ नहà¥à¤!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "तà¤à¤¤à¥à¤° मà¥à¤¡ मà¥à¤ à¤à¤² रहा हà¥, लà¥à¤à¤¿à¤¨ --disallow-module-loading सà¥à¤ नहà¥à¤!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "तà¤à¤¤à¥à¤° मà¥à¤¡ मà¥à¤ à¤à¤² रहा हà¥, SHM मà¥à¤¡ बाधà¥à¤¯ रà¥à¤ª सॠनिषà¥à¤à¥à¤°à¤¿à¤¯!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "तà¤à¤¤à¥à¤° मà¥à¤¡ मà¥à¤ à¤à¤² रहा हà¥, निà¤à¤¾à¤¸ निषà¥à¤à¥à¤°à¤¿à¤¯ समय बाधà¥à¤¯ रà¥à¤ª सॠनिषà¥à¤à¥à¤°à¤¿à¤¯!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio पानॠमà¥à¤ विफल."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "पाà¤à¤ª विफल: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() विफल: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() विफल: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "डà¥à¤®à¥à¤¨ à¤à¤°à¤à¤ विफल."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "डà¥à¤®à¥à¤¨ à¤à¤°à¤à¤ सफल."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() विफल: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "यह पलà¥à¤¸à¤à¤¡à¤¿à¤¯à¥ %s हà¥."
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Compilation host: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilation CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "मà¥à¤à¤¬à¤¾à¤¨ पर à¤à¤² रहा हà¥: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPU पाया."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "पà¥à¤·à¥à¤ à¤à¤à¤¾à¤° %lu बाà¤à¤ हà¥."
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "वà¥à¤²à¤à¥à¤°à¤¿à¤à¤¡ समरà¥à¤¥à¤¨ सॠà¤à¤à¤ªà¤¾à¤à¤²: हाà¤"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "वà¥à¤²à¤à¥à¤°à¤¿à¤à¤¡ समरà¥à¤¥à¤¨ सॠà¤à¤à¤ªà¤¾à¤à¤²: नहà¥à¤"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "वà¥à¤²à¤à¥à¤°à¤¿à¤à¤¡ विधि मà¥à¤ à¤à¤² रहा हà¥: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "मà¥à¤à¤¬à¤¾à¤¨ पर à¤à¤² रहा हà¥: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "à¤
नà¥à¤à¥à¤²à¤¿à¤¤ बिलà¥à¤¡: हाà¤"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à¤
नà¥à¤à¥à¤²à¤¿à¤¤ बिलà¥à¤¡: नहà¥à¤"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG परिà¤à¤¾à¤·à¤¿à¤¤, सà¤à¥ निषà¥à¤à¥à¤°à¤¿à¤¯."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH परिà¤à¤¾à¤·à¤¿à¤¤, à¤à¥à¤µ तà¥à¤ पथ à¤à¤¸à¤°à¥à¤ निषà¥à¤à¥à¤°à¤¿à¤¯."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "सà¤à¥ à¤à¤¸à¤°à¥à¤ सà¤à¥à¤·à¤®."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "मशà¥à¤¨ ID पानॠमà¥à¤ विफल"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "मशà¥à¤¨ ID %s हà¥."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "सतà¥à¤° ID %s हà¥."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "रनà¤à¤¾à¤à¤® निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ %s à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤° रहा हà¥."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "सà¥à¤à¥à¤ निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ %s à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤° रहा हà¥."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "मà¥à¤¡à¥à¤¯à¥à¤² निरà¥à¤¦à¥à¤¶à¤¿à¤à¤¾ %s à¤à¤¾ पà¥à¤°à¤¯à¥à¤ à¤à¤° रहा हà¥."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "तà¤à¤¤à¥à¤° मà¥à¤¡ मà¥à¤ à¤à¤² रहा हà¥: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -372,41 +395,42 @@ msgstr ""
"à¤à¥à¤ªà¤¯à¤¾ http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode à¤à¥ पढ़à¥à¤ à¤à¤¾à¤¨à¤¨à¥ à¤à¥ लिठ"
"à¤à¤¿ à¤à¥à¤¯à¥à¤ तà¤à¤¤à¥à¤° मà¥à¤¡ à¤à¤ बढ़िया विà¤à¤¾à¤° नहà¥à¤ हà¥."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() विफल."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ताà¤à¤¼à¤¾ à¤à¤à¥à¤ विà¤à¥à¤¦à¤¨ à¤à¤¾à¤à¤®à¤° à¤à¤ªà¤²à¤¬à¥à¤§! à¤à¤¨à¤à¤¦ लà¥à¤!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-msgstr "à¤à¤ªà¤à¤¾ à¤à¤°à¥à¤¨à¥à¤² बà¥à¤°à¥ सà¥à¤¥à¤¿à¤¤à¤¿ मà¥à¤ हà¥! सलाह हॠà¤à¤¿ à¤à¤à¥à¤ विà¤à¥à¤¦à¤¨ यà¥à¤à¥à¤¤ लिनà¤à¥à¤¸ सà¤à¥à¤°à¤¿à¤¯ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¿à¤!"
+msgstr ""
+"à¤à¤ªà¤à¤¾ à¤à¤°à¥à¤¨à¥à¤² बà¥à¤°à¥ सà¥à¤¥à¤¿à¤¤à¤¿ मà¥à¤ हà¥! सलाह हॠà¤à¤¿ à¤à¤à¥à¤ विà¤à¥à¤¦à¤¨ यà¥à¤à¥à¤¤ लिनà¤à¥à¤¸ सà¤à¥à¤°à¤¿à¤¯ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¿à¤!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() विफल."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "डà¥à¤®à¥à¤¨ à¤à¤°à¤à¤ à¤à¤°à¤¨à¥ मà¥à¤ विफल."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "बिना लà¥à¤¡ मà¥à¤¡à¥à¤¯à¥à¤² à¤à¥ डà¥à¤®à¥à¤¨ à¤à¤°à¤à¤, à¤à¤¾à¤® à¤à¤°à¤¨à¥ सॠà¤
सà¥à¤µà¥à¤à¤¾à¤° à¤à¤° रहा हà¥."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "डà¥à¤®à¥à¤¨ à¤à¤°à¤à¤à¤¨ पà¥à¤°à¥à¤£."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "डà¥à¤®à¥à¤¨ बनà¥à¤¦ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤°à¤à¤."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "डà¥à¤®à¥à¤¨ à¤
वरà¥à¤§à¤¿à¤¤."
@@ -663,72 +687,77 @@ msgstr "à¤
वमà¥à¤²à¥à¤¯à¤¨ à¤à¥à¤¤à¤¾à¤µà¤¨à¥: %s\n"
msgid "Path: %s\n"
msgstr "पथ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ लà¥à¤ लà¤à¥à¤·à¥à¤¯ '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ लà¥à¤ सà¥à¤¤à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ पà¥à¤¨à¤ नमà¥à¤¨à¤¾ विधि '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit à¤à¤¸ पà¥à¤²à¥à¤à¤«à¥à¤°à¥à¤® पर समरà¥à¤¥à¤¿à¤¤ नहà¥à¤."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ पà¥à¤°à¤¤à¤¿à¤¦à¤°à¥à¤¶ पà¥à¤°à¤¾à¤°à¥à¤ª '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ पà¥à¤°à¤¤à¤¿à¤¦à¤°à¥à¤¶ दर '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ पà¥à¤°à¤¤à¤¿à¤¦à¤°à¥à¤¶ à¤à¥à¤¨à¤² '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ à¤à¥à¤¨à¤² मानà¤à¤¿à¤¤à¥à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à¤à¥à¤à¤¡à¤¼à¥ '%s' à¤à¥ à¤
वà¥à¤§ सà¤à¤à¥à¤¯à¤¾."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ à¤à¤à¤¡ à¤à¤à¤¾à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ नाà¤à¤¸ सà¥à¤¤à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à¤
वà¥à¤§ पà¥à¤°à¤¤à¤¿à¤¦à¤°à¥à¤¶ दर '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "विनà¥à¤¯à¤¾à¤¸ फ़ाà¤à¤² à¤à¥à¤²à¤¨à¥ मà¥à¤ विफल: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -736,7 +765,7 @@ msgstr ""
"निरà¥à¤¦à¤¿à¤·à¥à¤ तयशà¥à¤¦à¤¾ à¤à¥à¤¨à¤² मानà¤à¤¿à¤¤à¥à¤° à¤à¥ पास à¤à¥à¤¨à¤² à¤à¥ à¤à¤¿à¤¨à¥à¤¨ सà¤à¤à¥à¤¯à¤¾ हॠà¤à¥à¤¨à¤² à¤à¥ तयशà¥à¤¦à¤¾ निरà¥à¤¦à¤¿à¤·à¥à¤ सà¤à¤à¥à¤¯à¤¾ "
"à¤à¥ बनिसà¥à¤ªà¤¤."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### विनà¥à¤¯à¤¾à¤¸ फ़ाà¤à¤² सॠपढ़à¥à¤: %s ###\n"
@@ -782,8 +811,8 @@ msgid "Rear Right"
msgstr "पशà¥à¤ दाहिना"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "निमà¥à¤¨ à¤à¤µà¥à¤¤à¥à¤¤à¤¿ निà¤à¤¾à¤¸à¤à¤°à¥à¤¤à¤¾"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1128,191 +1157,191 @@ msgstr "XOpenDisplay() विफल"
msgid "Failed to parse cookie data"
msgstr "à¤à¥à¤à¥ à¤à¤à¤à¤¡à¤¼à¤¾ à¤à¥ विशà¥à¤²à¥à¤·à¤£ मà¥à¤ विफल"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "विनà¥à¤¯à¤¾à¤¸ फ़ाà¤à¤² '%s' à¤à¥à¤²à¤¨à¥ मà¥à¤ विफल: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à¤à¥à¤ à¤à¥à¤à¥ नहà¥à¤ लà¥à¤¡ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾. à¤à¤¸à¤à¥ बिना à¤à¤¨à¥à¤à¥à¤ à¤à¤°à¤¨à¥ à¤à¥ à¤à¥à¤¶à¤¿à¤¶ à¤à¤° रहा हà¥à¤."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à¤
à¤à¥à¤à¤¾à¤¤ विसà¥à¤¤à¤¾à¤° '%s' à¤à¥ लिठसà¤à¤¦à¥à¤¶ पà¥à¤°à¤¾à¤ªà¥à¤¤"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "सà¥à¤à¥à¤°à¥à¤® सॠà¤à¥à¤à¤à¤¨à¥ मà¥à¤ विफल: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "पà¥à¤²à¥à¤¬à¥à¤ सà¥à¤à¥à¤°à¥à¤® à¤à¤¤à¥à¤®."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "सरà¥à¤µà¤° मà¥à¤ à¤à¤¨à¥à¤à¥à¤¶à¤¨ लॠà¤à¤¾ रहा हà¥."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() विफल: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() विफल: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() विफल: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "सà¥à¤à¥à¤°à¥à¤® सफलतापà¥à¤°à¥à¤µà¤ निरà¥à¤®à¤¿à¤¤."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() विफल: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "बफ़र मà¥à¤à¥à¤°à¤¿à¤à¥à¤¸: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "बफ़र मà¥à¤à¥à¤°à¤¿à¤à¥à¤¸: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "नमà¥à¤¨à¤¾ सà¥à¤ªà¥à¤ '%s' à¤à¤¾ पà¥à¤°à¤¯à¥à¤, à¤à¥à¤¨à¤² मà¥à¤ª '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "यà¥à¤à¥à¤¤à¤¿ %s (%u, %ssuspended) सॠà¤à¤¨à¥à¤à¥à¤à¥à¤¡."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "सà¥à¤à¥à¤°à¥à¤® तà¥à¤°à¥à¤à¤¿: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® यà¥à¤à¥à¤¤à¤¿ सà¥à¤¥à¤à¤¿à¤¤.%s "
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® यà¥à¤à¥à¤¤à¤¿ पà¥à¤¨à¤°à¥à¤¬à¤¹à¤¾à¤².%s "
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® à¤
à¤à¤¡à¤°à¤°à¤¨.%s "
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® à¤à¤µà¤°à¤°à¤¨.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® à¤à¤°à¤à¤.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® यà¥à¤à¥à¤¤à¤¿ %s (%u, %ssuspended).%s मà¥à¤ à¤à¤¿à¤¸à¤à¤¾à¤¯à¤¾ à¤à¤¯à¤¾"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "नहà¥à¤ "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® बफ़र à¤à¥à¤£ परिवरà¥à¤¤à¤¿à¤¤.%s "
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "à¤à¤¨à¥à¤à¥à¤¶à¤¨ सà¥à¤¥à¤¾à¤ªà¤¿à¤¤.%s "
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() विफल: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() विफल: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() विफल: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "à¤à¤¨à¥à¤à¥à¤¶à¤¨ विफल.%s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF पाया."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() विफल: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "सà¤à¤à¥à¤¤ पाया, निà¤à¤² रहा हà¥."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "लà¥à¤à¥à¤à¤¸à¥ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "समय: %0.3f सà¥à¤à¥à¤à¤¡; लà¥à¤à¥à¤à¤¸à¥: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() विफल: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1364,10 +1393,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1426,7 +1459,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1437,168 +1470,169 @@ msgstr ""
"लिबपलà¥à¤¸ %s à¤à¥ साथ à¤à¤à¤ªà¤¾à¤à¤²\n"
"लिबपलà¥à¤¸ %s à¤à¥ साथ लिà¤à¤\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à¤
वà¥à¤§ à¤à¥à¤²à¤¾à¤à¤à¤ नाम '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à¤
वà¥à¤§ सà¥à¤à¥à¤°à¥à¤® नाम '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à¤
वà¥à¤§ à¤à¥à¤¨à¤² मानà¤à¤¿à¤¤à¥à¤° '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à¤
वà¥à¤§ लà¥à¤à¥à¤à¤¸à¥ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à¤
वà¥à¤§ पà¥à¤°à¤à¥à¤°à¤¿à¤¯à¤¾ समय विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à¤
वà¥à¤§ à¤à¥à¤£ '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à¤
à¤à¥à¤à¤¾à¤¤ फ़ाà¤à¤² पà¥à¤°à¤¾à¤°à¥à¤ª %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à¤
वà¥à¤§ नमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à¤à¤ वितरà¥à¤."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "फ़ाà¤à¤² à¤à¥ लिठनमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ पानॠमà¥à¤ विफल."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "धà¥à¤µà¤¨à¤¿ फ़ाà¤à¤² à¤à¥à¤²à¤¨à¥ मà¥à¤ विफल."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "à¤à¥à¤¤à¤¾à¤µà¤¨à¥: निरà¥à¤¦à¤¿à¤·à¥à¤ नमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ à¤à¥ फ़ाà¤à¤² à¤à¥ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ सॠलिà¤à¤¾ à¤à¤¾à¤à¤à¤¾."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "फ़ाà¤à¤² सॠनमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ निरà¥à¤§à¤¾à¤°à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ विफल."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à¤à¥à¤¤à¤¾à¤µà¤¨à¥: फ़ाà¤à¤² सॠà¤à¥à¤¨à¤² मà¥à¤ª पानॠमà¥à¤ विफल."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à¤à¥à¤¨à¤² मà¥à¤ª नमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ सॠमà¥à¤² नहà¥à¤ à¤à¤¾à¤¤à¤¾ हà¥"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à¤à¥à¤¤à¤¾à¤µà¤¨à¥: फ़ाà¤à¤² मà¥à¤ à¤à¥à¤¨à¤² मà¥à¤ª लिà¤à¤¨à¥ मà¥à¤ विफल."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "à¤à¤¿à¤¸à¥ %s सà¥à¤à¥à¤°à¥à¤® à¤à¥ à¤à¤¿à¤¸à¥ नमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤¤à¤¾ '%s' à¤à¤° à¤à¥à¤¨à¤² मà¥à¤ª '%s' सॠà¤à¥à¤² रहा हà¥."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "रिà¤à¤¾à¤°à¥à¤¡à¤¿à¤à¤"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "पà¥à¤²à¥à¤¬à¥à¤"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() विफल."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() विफल."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() विफल."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() विफल: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() विफल."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() विफल."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "सà¥à¤¥à¤à¤¨ मà¥à¤ विफल: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "पà¥à¤¨à¤°à¥à¤¬à¤¹à¤¾à¤²à¥ मà¥à¤ विफल: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "à¤à¥à¤¤à¤¾à¤µà¤¨à¥: धà¥à¤µà¤¨à¤¿ सरà¥à¤µà¤° सà¥à¤¥à¤¾à¤¨à¥à¤¯ नहà¥à¤ हà¥, सà¥à¤¥à¤à¤¿à¤¤ नहà¥à¤ à¤à¤° रहा हà¥.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "à¤à¤¨à¥à¤à¥à¤¶à¤¨ विफल.%s \n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT पाया, निà¤à¤² रहा हà¥.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "à¤à¥à¤¤à¤¾à¤µà¤¨à¥: सà¤à¤¤à¤¤à¤¿ पà¥à¤°à¤à¥à¤°à¤¿à¤¯à¤¾ %u सà¤à¤à¥à¤¤ सॠरà¥à¤à¤¾\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1617,7 +1651,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1628,50 +1662,61 @@ msgstr ""
"लिबपलà¥à¤¸ %s सॠà¤à¤à¤ªà¤¾à¤à¤²\n"
"लिबपलà¥à¤¸ %s सॠà¤à¤¡à¤¼à¥à¤¬à¤¦à¥à¤§\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() विफल.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() विफल.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() विफल.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "à¤à¤à¤à¤¡à¤¼à¥ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "पà¥à¤°à¤¯à¥à¤ मà¥à¤ मà¥à¤¦à¥à¤°à¤¾: %u बà¥à¤²à¥à¤ %s बाà¤à¤ à¤à¥à¤² समाहित à¤à¤°à¤¤à¤¾ हà¥.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "सà¤à¤ªà¥à¤°à¥à¤£ à¤à¥à¤µà¤¨à¤à¤à¥à¤° à¤à¥ दà¥à¤°à¤¾à¤¨ à¤à¤¬à¤à¤à¤¿à¤¤: %u बà¥à¤²à¥à¤ %s बाà¤à¤ à¤à¥à¤² à¤à¥ समाहित à¤à¤°à¤¤à¤¾ हà¥.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "नमà¥à¤¨à¤¾ à¤à¥à¤¶ à¤à¤à¤¾à¤°: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "सरà¥à¤µà¤° सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1679,7 +1724,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ नाम: %s\n"
"मà¥à¤à¤¬à¤¾à¤¨ नाम: %s\n"
@@ -1691,12 +1736,12 @@ msgstr ""
"तयशà¥à¤¦à¤¾ सà¥à¤°à¥à¤¤: %s\n"
"à¤à¥à¤à¥: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "सिà¤à¤ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1735,22 +1780,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorts:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tActive Port: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "सà¥à¤°à¥à¤¤ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1789,20 +1834,20 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "मà¥à¤¡à¥à¤¯à¥à¤² सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1819,12 +1864,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à¤à¥à¤²à¤¾à¤à¤à¤ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1839,12 +1884,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à¤à¤¾à¤°à¥à¤¡ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1861,22 +1906,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfiles:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tActive Profile: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "सिà¤à¤ à¤à¤¨à¤ªà¥à¤ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1913,12 +1958,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "सà¥à¤°à¥à¤¤ à¤à¤à¤à¤ªà¥à¤ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1947,12 +1992,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "नमà¥à¤¨à¤¾ सà¥à¤à¤¨à¤¾ पानॠमà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1983,26 +2028,80 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "विफलता: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "नमà¥à¤¨à¤¾ à¤
फलà¥à¤¡ à¤à¤°à¤¨à¥ मà¥à¤ विफल: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "फ़ाà¤à¤² à¤à¤¾ à¤
सामयिठà¤
à¤à¤¤"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à¤
वà¥à¤§ सरà¥à¤µà¤°"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT पाया, निà¤à¤² रहा हà¥."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2025,6 +2124,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2064,7 +2164,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2075,47 +2175,49 @@ msgstr ""
"लिबपलà¥à¤¸ %s सॠà¤à¤à¤ªà¤¾à¤à¤²\n"
"लिबपलà¥à¤¸ %s सॠà¤à¤¡à¤¼à¥à¤¬à¤¦à¥à¤§\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "लà¥à¤¡ à¤à¤°à¤¨à¥ à¤à¥ लिठà¤à¤¿à¤¸à¥ नमà¥à¤¨à¤¾ फ़ाà¤à¤² निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¥à¤"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "धà¥à¤µà¤¨à¤¿ फ़ाà¤à¤² à¤à¥à¤²à¤¨à¥ मà¥à¤ विफल."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "%s सà¥à¤à¥à¤°à¥à¤® à¤à¥ à¤à¤¿à¤¸à¥ नमà¥à¤¨à¤¾ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾ '%s' à¤à¥ साथ à¤à¥à¤² रहा हà¥."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ नमà¥à¤¨à¤¾ नाम à¤à¥ बà¤à¤¾à¤¨à¥ à¤à¥ लिठनिरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ नमà¥à¤¨à¤¾ नाम à¤à¥ हà¤à¤¾à¤¨à¥ à¤à¥ लिठनिरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ सिà¤à¤ à¤à¤¨à¤ªà¥à¤ सà¥à¤à¥ à¤à¤° सिà¤à¤ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ सिà¤à¤ सà¥à¤°à¥à¤¤ à¤à¤à¤à¤ªà¥à¤ à¤à¤° सà¥à¤°à¥à¤¤ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ मà¥à¤¡à¥à¤¯à¥à¤² नाम à¤à¤° वितरà¥à¤ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ मà¥à¤¡à¥à¤¯à¥à¤² सà¥à¤à¥ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "à¤à¤ª à¤à¤ सिà¤à¤ सॠà¤
धिठनिरà¥à¤¦à¤¿à¤·à¥à¤ नहà¥à¤ à¤à¤° सà¤à¤¤à¥ हà¥à¤. à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ बà¥à¤²à¤¿à¤¯à¤¨ मान à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"à¤à¤ª à¤à¤ सिà¤à¤ सॠà¤
धिठनिरà¥à¤¦à¤¿à¤·à¥à¤ नहà¥à¤ à¤à¤° सà¤à¤¤à¥ हà¥à¤. à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ बà¥à¤²à¤¿à¤¯à¤¨ मान à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2123,57 +2225,57 @@ msgstr ""
"à¤à¤ª à¤à¤ सà¥à¤°à¥à¤¤ सॠà¤
धिठनिरà¥à¤¦à¤¿à¤·à¥à¤ नहà¥à¤ à¤à¤° सà¤à¤¤à¥ हà¥à¤. à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ बà¥à¤²à¤¿à¤¯à¤¨ मान à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ "
"हà¥."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ à¤à¤¾à¤°à¥à¤¡ नाम/सà¥à¤à¥ à¤à¤° पà¥à¤°à¥à¤«à¤¼à¤¾à¤à¤² नाम à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ à¤à¤¾à¤°à¥à¤¡ नाम/सà¥à¤à¥ à¤à¤° पà¥à¤°à¥à¤ नाम à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ सà¥à¤°à¥à¤¤ नाम/सà¥à¤à¥ à¤à¤° पà¥à¤°à¥à¤ नाम à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ सिà¤à¤ नाम/सà¥à¤à¥ à¤à¤° वालà¥à¤¯à¥à¤® à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à¤
वà¥à¤§ à¤à¤¯à¤¤à¤¨ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ सà¥à¤°à¥à¤¤ नाम/सà¥à¤à¥ à¤à¤° à¤à¤¯à¤¤à¤¨ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "à¤à¤ªà¤¨à¥ à¤à¤¿à¤¸à¥ सिà¤à¤ à¤à¤¨à¤ªà¥à¤ सà¥à¤à¥ à¤à¤° à¤à¤¯à¤¤à¤¨ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤¿à¤¯à¤¾ हà¥"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à¤
वà¥à¤§ सिà¤à¤ à¤à¤¨à¤ªà¥à¤ सà¥à¤à¥"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ à¤à¤¾à¤°à¥à¤¡ नाम/सà¥à¤à¥ à¤à¤° मà¥à¤ बà¥à¤²à¤¿à¤¯à¤¨ नाम à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à¤à¤ªà¤à¥ à¤à¤¿à¤¸à¥ सà¥à¤°à¥à¤¤ नाम/सà¥à¤à¥ à¤à¤° मà¥à¤² बà¥à¤²à¤¿à¤¯à¤¨ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤°à¤¨à¤¾ हà¥."
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "à¤à¤ªà¤¨à¥ à¤à¤¿à¤¸à¥ सिà¤à¤ à¤à¤¨à¤ªà¥à¤ सà¥à¤à¥ à¤à¤° मà¥à¤² बà¥à¤²à¤¿à¤¯à¤¨ à¤à¥ निरà¥à¤¦à¤¿à¤·à¥à¤ à¤à¤¿à¤¯à¤¾ हà¥"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à¤
वà¥à¤§ सिà¤à¤ à¤à¤¨à¤ªà¥à¤ सà¥à¤à¥ विनिरà¥à¤¦à¤¿à¤·à¥à¤à¤¤à¤¾"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à¤à¥à¤ वà¥à¤§ à¤à¤®à¤¾à¤à¤¡ निरà¥à¤¦à¤¿à¤·à¥à¤ नहà¥à¤."
@@ -2256,44 +2358,44 @@ msgstr "à¤à¥à¤à¥ à¤à¤à¤à¤¡à¤¼à¤¾ लà¥à¤¡ à¤à¤°à¤¨à¥ मà¥à¤ वि
msgid "Not yet implemented.\n"
msgstr "à¤
à¤à¥ तठà¤à¤¾à¤°à¥à¤¯à¤¾à¤¨à¥à¤µà¤¿à¤¤ नहà¥à¤.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "à¤à¥à¤ पलà¥à¤¸à¤à¤¡à¤¿à¤¯à¥ डà¥à¤®à¥à¤¨ à¤à¤² रहा हà¥, या à¤à¤¯à¤¨ डà¥à¤®à¥à¤¨ à¤à¥ तहत à¤à¤² रहा हà¥."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio डà¥à¤®à¥à¤¨ à¤à¥ मारनॠमà¥à¤ विफल."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "डà¥à¤®à¥à¤¨ पà¥à¤°à¤¤à¤¿à¤à¥à¤°à¤¿à¤¯à¤¾ नहà¥à¤ दॠरहा हà¥."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn लà¥à¤ à¤à¥ पहà¥à¤à¤ नहà¥à¤ लॠसà¤à¤¤à¤¾ हà¥."
@@ -2332,38 +2434,42 @@ msgstr ""
"दà¥à¤¸à¤°à¤¾ मान < min_avail दिया."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "बà¤à¤¦"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "à¤à¤à¥à¤ विशà¥à¤µà¤¸à¤¨à¥à¤¯à¤¤à¤¾à¤¯à¥à¤à¥à¤¤à¤¿ पà¥à¤²à¥à¤¬à¥à¤ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "à¤à¤à¥à¤ विशà¥à¤µà¤¸à¤¨à¥à¤¯à¤¤à¤¾ à¤à¥à¤ªà¥à¤à¤° (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à¤à¥à¤²à¤¿à¤«à¥à¤¨à¥ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "पलà¥à¤¸à¤à¤¡à¤¿à¤¯à¥ धà¥à¤µà¤¨à¤¿ सरà¥à¤µà¤°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à¤à¤à¤à¤ªà¥à¤ यà¥à¤à¥à¤¤à¤¿"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à¤à¤¨à¤ªà¥à¤ यà¥à¤à¥à¤¤à¤¿"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ पर à¤à¤¡à¤¿à¤¯à¥"
@@ -2427,133 +2533,159 @@ msgstr "à¤à¤à¤ªà¥à¤²à¥à¤«à¤¾à¤¯à¤°"
msgid "No Amplifier"
msgstr "à¤à¥à¤ à¤à¤à¤ªà¥à¤²à¥à¤«à¤¾à¤¯à¤° नहà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "बà¥à¤¸à¥à¤"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "à¤à¥à¤ बढ़ावा नहà¥à¤"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ हà¥à¤¡à¤«à¥à¤¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤¨à¤ªà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ लाà¤à¤¨ à¤à¤¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ रà¥à¤¡à¤¿à¤¯à¥"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ वà¥à¤¡à¤¿à¤¯à¥"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ हà¥à¤¡à¤«à¥à¤¨"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤² à¤à¤à¤à¤ªà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सà¥à¤à¥à¤°à¤¿à¤¯à¥"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ मà¥à¤¨à¥"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सà¥à¤à¥à¤°à¤¿à¤¯à¥"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "डिà¤à¤¿à¤à¤² सà¥à¤à¥à¤°à¤¿à¤¯à¥ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "डिà¤à¤¿à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "डिà¤à¤¿à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "डिà¤à¤¿à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "डिà¤à¤¿à¤à¤² सà¥à¤à¤
प (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ à¤à¤à¤² डà¥à¤ªà¥à¤²à¥à¤à¥à¤¸"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à¤à¤¨à¤¾à¤²à¥à¤ सà¥à¤à¥à¤°à¤¿à¤¯à¥ डà¥à¤ªà¥à¤²à¥à¤à¥à¤¸"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "डिà¤à¤¿à¤à¤² सà¥à¤à¥à¤°à¤¿à¤¯à¥ डà¥à¤ªà¥à¤²à¥à¤à¥à¤¸ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "निमà¥à¤¨ à¤à¤µà¥à¤¤à¥à¤¤à¤¿ निà¤à¤¾à¤¸à¤à¤°à¥à¤¤à¤¾"
diff --git a/po/hu.po b/po/hu.po
index a6d059e..6dae81e 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-17 04:45+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: KAMI <kami911 at gmail.com>\n"
"Language-Team: \n"
@@ -14,38 +14,49 @@ msgstr ""
"X-Poedit-SourceCharset: utf-8\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858
-#: ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"A âsnd_pcm_avail()â függvény visszatérési értéke váratlanul nagy értékű: %lu bájt (%lu ms).\n"
-"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé."
+"A âsnd_pcm_avail()â függvény visszatérési értéke váratlanul nagy értékű: %lu "
+"bájt (%lu ms).\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a "
+"problémát az ALSA fejlesztÅi felé."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"A âsnd_pcm_delay()â függvény visszatérési értéke váratlanul nagy értékű: %li bájt (%s%lu ms).\n"
-"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé."
+"A âsnd_pcm_delay()â függvény visszatérési értéke váratlanul nagy értékű: %li "
+"bájt (%s%lu ms).\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a "
+"problémát az ALSA fejlesztÅi felé."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"A âsnd_pcm_mmap_begin()â függvény visszatérési értéke váratlanul nagy értékű: %lu bájt (%lu ms).\n"
-"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé."
+"A âsnd_pcm_mmap_begin()â függvény visszatérési értéke váratlanul nagy "
+"értékű: %lu bájt (%lu ms).\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a "
+"problémát az ALSA fejlesztÅi felé."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
@@ -60,8 +71,18 @@ msgid "Virtual LADSPA sink"
msgstr "Látszólagos LADSPA nyelÅ"
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
-msgstr "sink_name=<nyelÅ neve> sink_properties=<nyelÅ tulajdonságai> master=<szűrendÅ nyelÅ neve> format=<sample format> rate=<mintavételezési ráta> channels=<csatornák száma> channel_map=<csatornaleképzés> plugin=<ladspa bÅvÃtmény neve> label=<ladspa bÅvÃtmény cÃmkéje> control=<bemenetszabályzó értékek vesszÅvel elválasztott listája>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+"sink_name=<nyelŠneve> sink_properties=<nyelŠtulajdonságai> "
+"master=<szűrendŠnyelŠneve> format=<sample format> rate=<mintavételezési "
+"ráta> channels=<csatornák száma> channel_map=<csatornaleképzés> "
+"plugin=<ladspa bÅvÃtmény neve> label=<ladspa bÅvÃtmény cÃmkéje> "
+"control=<bemenetszabályzó értékek vesszÅvel elválasztott listája>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -71,11 +92,11 @@ msgstr "Ãrajelezett semmis nyelÅ"
msgid "Null Output"
msgstr "Semmis kimenet"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "BelsŠhangforrás"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -91,288 +112,330 @@ msgstr "Nem foglalható le hely az új dl betöltŠszámára."
msgid "Failed to add bind-now-loader."
msgstr "Nem sikerült hozzáadni az azonnali betöltés csatolást."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Szignál: %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Kilépés."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Nem található a(z) â%sâ felhasználó."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Nem található a(z) â%sâ csoport."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "LétezÅ felhasználó â%sâ (UID: %lu) és csoport â%sâ (GID: %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "A(z) â%sâ felhasználó GID azonosÃtója és â%sâ csoportja nem egyezik meg."
+msgstr ""
+"A(z) â%sâ felhasználó GID azonosÃtója és â%sâ csoportja nem egyezik meg."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "A(z) â%sâ felhasználó Saját mappája nem â%sâ. Kihagyás."
-#: ../src/daemon/main.c:208
-#: ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Nem sikerült létrehozni a(z) â%sâ fájlt: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Nem sikerült megváltoztatni a csoportlistát: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Nem sikerült megváltoztatni az GID azonosÃtót: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Nem sikerült megváltoztatni az UID azonosÃtót: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "A rendszergazdai jogosultságok sikeresen visszaadva."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "A rendszer üzemmód nem támogatott ezen az operációs rendszeren."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) meghiúsult: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Nem sikerült feldolgozni a parancssort."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "A démon nem fut."
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "A démon a következÅ PID azonosÃtóval fut: %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "A démon kilövése nem sikerült: %s"
-#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "Ez a program nincsen felkészÃtve arra, hogy rendszergazdai jogosultságokkal fusson (kivéve, ha a --system paraméter megadásra kerül)."
+#: ../src/daemon/main.c:662
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Ez a program nincsen felkészÃtve arra, hogy rendszergazdai jogosultságokkal "
+"fusson (kivéve, ha a --system paraméter megadásra kerül)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Rendszergazdai jogosultságok szükségesek."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start nem támogatott rendszer üzemmód használata esetén."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "Futtatás rendszer üzemmódban, de a --disallow-exit paraméter nincs beállÃtva."
+msgstr ""
+"Futtatás rendszer üzemmódban, de a --disallow-exit paraméter nincs beállÃtva."
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "Futtatás rendszer üzemmódban, de a --disallow-module-loading paraméter nincs beállÃtva."
+msgstr ""
+"Futtatás rendszer üzemmódban, de a --disallow-module-loading paraméter nincs "
+"beállÃtva."
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Futtatás rendszer üzemmódban, az SHM üzemmód forszÃrozott letiltása."
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "Futtatás rendszer üzemmódban, kilépés üresjárati idÅtúllépés esetén beállÃtás forszÃrozott letiltása."
+msgstr ""
+"Futtatás rendszer üzemmódban, kilépés üresjárati idÅtúllépés esetén "
+"beállÃtás forszÃrozott letiltása."
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
-msgstr "Nem sikerült jogot szerezni az alapértelmezett ki- és bemenetre (stdio)."
+msgstr ""
+"Nem sikerült jogot szerezni az alapértelmezett ki- és bemenetre (stdio)."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "CsŠlétrehozás meghiúsult: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "ProgramindÃtás meghiúsult: %s"
-#: ../src/daemon/main.c:646
-#: ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "Olvasás meghiúsult: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "A démon elindÃtása nem sikerült."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "A démon sikeresen elindult."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "Olvasás meghiúsult: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ÃsszeépÃtÅ számÃtógép: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ÃsszeépÃtési CFLAGS jelzÅk: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Kiszolgáló: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPU található a rendszerben."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Oldalméret: %lu bájt"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "ÃsszeépÃtés Valgrind támogatással: Igen"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "ÃsszeépÃtés Valgrind támogatással: Nem"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Futás Valgrind üzemmódban: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Kiszolgáló: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimalizált összeépÃtés: Igen"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimalizált összeépÃtés: Nem"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG megadva, minden érvényesÃtés letiltva."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH megadva, Ãgy csak a gyors útvonal-érvényesÃtés lesz letiltva."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Minden érvényesÃtés engedélyezve."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Nem sikerült lekérdezni a számÃtógép azonosÃtóját"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "SzámÃtógép-azonosÃtó: %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "Munkamenet-azonosÃtó: %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "A futásidÅben használt mappa: %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Az állapottároló mappa: %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "A modulok mappája: %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Futás rendszer üzemmódban: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
msgstr ""
-"A PulseAudio rendszer üzemmódban fut. Ãltalánosságban ezen üzemmód használata nem ajánlott.\n"
-"Ha mindenképpen ilyen üzemmódban kÃvánja futtatni a PulseAudio rendszert, ne lepÅdjön meg, ha egyes funkciók esetleg nem az elvárások szerint működnek.\n"
-"További tájékoztatás: http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode amelybÅl megtudhatja miért nem tanácsos a rendszer üzemmód használata."
-
-#: ../src/daemon/main.c:809
+"A PulseAudio rendszer üzemmódban fut. Ãltalánosságban ezen üzemmód "
+"használata nem ajánlott.\n"
+"Ha mindenképpen ilyen üzemmódban kÃvánja futtatni a PulseAudio rendszert, ne "
+"lepÅdjön meg, ha egyes funkciók esetleg nem az elvárások szerint működnek.\n"
+"További tájékoztatás: http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode "
+"amelybÅl megtudhatja miért nem tanácsos a rendszer üzemmód használata."
+
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "A âpa_pid_file_create()â függvényhÃvás meghiúsult: %s"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "A nagypontosságú idÅzÃtÅk elérhetÅek."
-#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr "A nagypontosságú idÅzÃtÅk nem érhetÅek el. Napjaink Linux rendszereiben érdemes engedélyezni a nagypontosságú idÅzÃtÅket."
+#: ../src/daemon/main.c:922
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"A nagypontosságú idÅzÃtÅk nem érhetÅek el. Napjaink Linux rendszereiben "
+"érdemes engedélyezni a nagypontosságú idÅzÃtÅket."
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "A âpa_core_new()â függvényhÃvás meghiúsult: %s"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Nem sikerült elÅkészÃteni a démont."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "A démont noha elindult, de nem töltött be modulokat, Ãgy a hangrendszer nem üzemképes."
+msgstr ""
+"A démont noha elindult, de nem töltött be modulokat, Ãgy a hangrendszer nem "
+"üzemképes."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "A démon elindÃtása sikeres."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "A démon leállÃtása kezdeményezve."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "A démon leállÃtva."
@@ -387,37 +450,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"
@@ -428,10 +502,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"
@@ -446,8 +522,13 @@ msgid "--fail expects boolean argument"
msgstr "--fail paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr "--log-level paraméter a naplózás szintjének értékét várja el (Ez lehet a 0..4 számtartomány, vagy a következÅk egyike: 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 paraméter a naplózás szintjének értékét várja el (Ez lehet a "
+"0..4 számtartomány, vagy a következÅk egyike: debug, info, notice, warn, "
+"error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -471,7 +552,9 @@ msgstr "--use-pid-file paraméter logikai értéket vár el"
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr "Ãrvénytelen naplózási cél: használja a âsyslogâ, a âstderrâ vagy az âautoâ értéket."
+msgstr ""
+"Ãrvénytelen naplózási cél: használja a âsyslogâ, a âstderrâ vagy az âautoâ "
+"értéket."
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
@@ -543,76 +626,85 @@ msgstr "VISSZAVONÃSI FIGYELMEZTETÃS: %s\n"
msgid "Path: %s\n"
msgstr "Elérési útvonal: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Ãrvénytelen naplózási cél: â%sâ."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Ãrvénytelen naplózási szint: â%sâ."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Ãrvénytelen újramintavételezési eljárás: â%sâ."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Ãrvénytelen rlimit érték: â%sâ."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] Az rlimit nem támogatott ezen az operációs rendszeren."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Ãrvénytelen mintavételi formátum: â%sâ."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Ãrvénytelen mintavételi ráta: â%sâ."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Ãrvénytelen minta csatornák: â%sâ."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Ãrvénytelen csatornaleképzés: â%sâ."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Ãrvénytelen a részek száma: â%sâ."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Ãrvénytelen a részek mérete: â%sâ."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Ãrvénytelen a prioritási érték: â%sâ."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Ãrvénytelen mintavételi ráta: â%sâ."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Nem sikerült megnyitni a konfigurációs fájlt: %s"
-#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
-msgstr "Az alapértelmezetten megadott mintavételi leÃrás csatornáinak száma eltér az alapértelmezetten megadott csatornaszámtól."
+#: ../src/daemon/daemon-conf.c:602
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+"Az alapértelmezetten megadott mintavételi leÃrás csatornáinak száma eltér az "
+"alapértelmezetten megadott csatornaszámtól."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Olvasás a következŠkonfigurációs fájlból: %s ###\n"
@@ -629,8 +721,7 @@ msgstr "PulseAudio hangrendszer"
msgid "Start the PulseAudio Sound System"
msgstr "A PulseAudio hangrendszer elindÃtása"
-#: ../src/pulse/channelmap.c:105
-#: ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
msgstr "Mono"
@@ -659,8 +750,8 @@ msgid "Rear Right"
msgstr "Hátsó jobb"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Mély-hangszóró (LFE)"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -834,12 +925,9 @@ msgstr "FelsŠhátsó bal"
msgid "Top Rear Right"
msgstr "FelsŠhátsó jobb"
-#: ../src/pulse/channelmap.c:484
-#: ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295
-#: ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341
-#: ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
msgstr "(Ãrvénytelen)"
@@ -1000,8 +1088,7 @@ msgstr "%0.1f KiB"
msgid "%u B"
msgstr "%u B"
-#: ../src/pulse/client-conf-x11.c:55
-#: ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
msgstr "Az XOpenDisplay() függvényhÃvás meghiúsult."
@@ -1009,193 +1096,196 @@ msgstr "Az XOpenDisplay() függvényhÃvás meghiúsult."
msgid "Failed to parse cookie data"
msgstr "Nem sikerült feldolgozni a süti adatokat."
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Nem sikerült megnyitni a(z) â%sâ konfigurációs fájlt: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
-msgstr "Nincs betölthetÅ süti. KÃsérlet a kapcsolat felvételére sütik használata nélkül."
+msgstr ""
+"Nincs betölthetÅ süti. KÃsérlet a kapcsolat felvételére sütik használata "
+"nélkül."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "ProgramindÃtás: %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Ãzenet érkezett az ismeretlen â%sâ kiterjesztéstÅl"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Nem sikerült csatlakozni a következŠadatfolyamhoz: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "A lejátszás adatfolyamához csatlakozva."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Csatlakozás a kiszolgálóhoz kapcsolathoz."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "A âpa_stream_write()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "A âpa_stream_begin_write()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:237
-#: ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "A âpa_stream_peek()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Az adatfolyam sikeresen létrejött."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "A âpa_stream_get_buffer_attr()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "Pufferméretek: maximális nagyság: %u, hossz: %u, elÅpufferelés: %u, minimum: %u"
+msgstr ""
+"Pufferméretek: maximális nagyság: %u, hossz: %u, elÅpufferelés: %u, minimum: "
+"%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Pufferméretek: maximális nagyság: %u, részek mérete: %u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Mintavételi leÃrás: â%sâ és csatornaleképzés: â%sâ használata."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Csatlakozva a következÅ eszközhöz: â%sâ (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Adatfolyam hiba: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Adatfolyam-eszköz készenléti állapotban: %s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Adatfolyam-eszköz visszatért a készenléti állapotból: %s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "%s adatfolyam alulcsordulás."
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "%s adatfolyam túlcsordulás."
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "%s adatfolyam elindÃtva."
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "Az adatfolyam áthelyezve a következÅ eszközre: â%sâ (%u, %ssuspended). %s"
+msgstr ""
+"Az adatfolyam áthelyezve a következÅ eszközre: â%sâ (%u, %ssuspended). %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "nem"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Az adatfolyam-puffer beállÃtásai megváltoztak: %s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Kapcsolat létrehozva. %s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "A âpa_stream_new()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "A âpa_stream_connect_playback()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "A âpa_stream_connect_record()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:470
-#: ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Kapcsolódási hiba: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "A fájl vége elérve."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "Az Ãrás sikertelen: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Kilépés, szignál hatásáraâ¦"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Nem sikerült lekérdezni a késleltetést: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "IdÅ: %0.3f másodperc, késleltetés: %0.0f ezredmásodperc."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "A âpa_stream_update_timing_info()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1207,71 +1297,114 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [KAPCSOLÃ]\n"
"\n"
" -h, --help Ezen súgó megjelenÃtése\n"
-" --version Az alkalmazás verziószámának megjelenÃtése\n"
+" --version Az alkalmazás verziószámának "
+"megjelenÃtése\n"
"\n"
" -r, --record Kapcsolat létrehozása felvételhez\n"
" -p, --playback Kapcsolat létrehozása lejátszáshoz\n"
"\n"
" -v, --verbose Történések részletezése\n"
"\n"
-" -s, --server=KISZOLGÃLà Kapcsolódás a megadott KISZOLGÃLà kiszolgálóhoz\n"
-" -d, --device=ESZKÃZ Kapcsolódás az ESZKÃZ nevű nyelÅhöz vagy forráshoz\n"
+" -s, --server=KISZOLGÃLà Kapcsolódás a megadott "
+"KISZOLGÃLà kiszolgálóhoz\n"
+" -d, --device=ESZKÃZ Kapcsolódás az ESZKÃZ nevű nyelÅhöz "
+"vagy forráshoz\n"
" -n, --client-name=NÃV A kliens neve ezen a szerveren\n"
" --stream-name=NÃV Adatfolyam neve a kiszolgálón\n"
-" --volume=HANGERŠKezdeti (lineáris) hangerŠmegadása a következŠtartományban: 0...65536\n"
-" --rate=MINTAVÃTEL Mintavételezés érzéke Hz-ben (alapértelmezés: 44100)\n"
-" --format=MINTAFORMÃTUM A mintavétel tÃpusa a következÅkbÅl: s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw, s32le, s32be, s24le, s24be,\n"
-" s24-32le, s24-32be (alapértelmezés: s16ne)\n"
-" --channels=CSATORNÃK Csatornák száma: 1 - mono, 2 - sztereó\n"
+" --volume=HANGERŠKezdeti (lineáris) hangerŠmegadása "
+"a következŠtartományban: 0...65536\n"
+" --rate=MINTAVÃTEL Mintavételezés érzéke Hz-ben "
+"(alapértelmezés: 44100)\n"
+" --format=MINTAFORMÃTUM A mintavétel tÃpusa a "
+"következÅkbÅl: s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (alapértelmezés: "
+"s16ne)\n"
+" --channels=CSATORNÃK Csatornák száma: 1 - mono, 2 - "
+"sztereó\n"
" (defaults to 2)\n"
-" --channel-map=CSATORNALEKÃPZÃS Az alapértelmezés helyett használandó csatornaleképzés\n"
-" --fix-format Take the sample format from the sink the stream is\n"
+" --channel-map=CSATORNALEKÃPZÃS Az alapértelmezés helyett "
+"használandó csatornaleképzés\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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\n"
-" --raw Nyers PCM adatok felvétele vagy lejátszása.\n"
-" --file-format=FORMÃTUM FORMÃTUM alakú PCM adatok felvétele vagy lejátszása.\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"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
+" --raw Nyers PCM adatok felvétele vagy "
+"lejátszása.\n"
+" --file-format=FORMÃTUM FORMÃTUM alakú PCM adatok felvétele "
+"vagy lejátszása.\n"
" --list-file-formats ElérhetŠfájlformátumok listája.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1282,188 +1415,194 @@ msgstr ""
"ÃsszeépÃtve a libpulse %s programkönyvtárral\n"
"Csatolva a libpulse %s programkönyvtárhoz\n"
-#: ../src/utils/pacat.c:764
-#: ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Ãrvénytelen kliensnév: â%sâ"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Ãrvénytelen adatfolyam-név: â%sâ"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Ãrvénytelen csatornaleképzés: â%sâ"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Ãrvénytelen késleltetés leÃrás: â%sâ"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Ãrvénytelen műveleti idÅ leÃrás: â%sâ"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Ãrvénytelen tulajdonság: â%sâ"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Ismeretlen fájlformátum: â%sâ"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Ãrvénytelen mintavételi leÃrás."
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "Megnyitás: %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Túl sok paraméter."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Nem sikerült létrehozni a mintavételi leÃrást a fájlhoz."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Nem sikerült megnyitni a hangfájlt."
-#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
-msgstr "Figyelmeztetés: a megadott mintavételi leÃrás felül lesz Ãrva a fájlból származó mintavételi leÃrással."
+#: ../src/utils/pacat.c:1000
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
+msgstr ""
+"Figyelmeztetés: a megadott mintavételi leÃrás felül lesz Ãrva a fájlból "
+"származó mintavételi leÃrással."
-#: ../src/utils/pacat.c:962
-#: ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Nem sikerült meghatározni a mintavételi leÃrást a fájlból."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
-msgstr "Figyelmeztetés: Nem sikerült meghatározni a csatornaleképzést a fájlból."
+msgstr ""
+"Figyelmeztetés: Nem sikerült meghatározni a csatornaleképzést a fájlból."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "A csatornaleképzés nem feleltethetÅ meg a mintavételi leÃrásnak."
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Hiba történt a csatornaleképzés fájlba Ãrása közben."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "A(z) â%sâ adatfolyam megnyitása a következÅ mintavételi leÃrás: â%sâ és csatornaleképzés: â%sâ használatával."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"A(z) â%sâ adatfolyam megnyitása a következÅ mintavételi leÃrás: â%sâ és "
+"csatornaleképzés: â%sâ használatával."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "Felvétel"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "Lejátszás"
-#: ../src/utils/pacat.c:1035
-#: ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "A âpa_mainloop_new()â függvényhÃvás meghiúsult."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "A âio_new()â függvényhÃvás meghiúsult."
-#: ../src/utils/pacat.c:1061
-#: ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "A âpa_context_new()â függvényhÃvás meghiúsult."
-#: ../src/utils/pacat.c:1069
-#: ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "A âpa_context_connect()â függvényhÃvás meghiúsult: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "A âpa_context_rttime_new()â függvényhÃvás meghiúsult."
-#: ../src/utils/pacat.c:1082
-#: ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "A âpa_mainloop_run()â függvényhÃvás meghiúsult."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "ProgramindÃtás: %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Hiba lépett fel a készenléti állapotba térés közben: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Hiba lépett fel a készenléti állapotból visszatérés közben: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "FIGYELMEZTETÃS: A hangkiszolgáló nem helyi és nincs is felfüggesztve.\n"
+msgstr ""
+"FIGYELMEZTETÃS: A hangkiszolgáló nem helyi és nincs is felfüggesztve.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Kapcsolódási hiba: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Kilépés, SIGINT szignál hatásáraâ¦\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr "FIGYELMEZTETÃS: A gyermek folyamat a következÅ szignállal fejezÅdött be: %u\n"
+msgstr ""
+"FIGYELMEZTETÃS: A gyermek folyamat a következÅ szignállal fejezÅdött be: %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
"\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 [KAPCSOLÃ] ... \n"
"\n"
" -h, --help MegjelenÃti ezt a súgót\n"
-" --version Az alkalmazás verziószámának megjelenÃtése\n"
+" --version Az alkalmazás verziószámának "
+"megjelenÃtése\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1474,50 +1613,64 @@ msgstr ""
"ÃsszeépÃtve a libpulse %s programkönyvtárral\n"
"Csatolva a libpulse %s programkönyvtárhoz\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "A âpa_mainloop_new()â függvényhÃvás meghiúsult.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "A âpa_context_new()â függvényhÃvás meghiúsult.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "A âpa_mainloop_run()â függvényhÃvás meghiúsult.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Nem sikerült a statisztika lekérdezése: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
-msgstr "Jelenleg lefoglalt blokkok száma: %u, amely összesen %s bájtot jelent.\n"
+msgstr ""
+"Jelenleg lefoglalt blokkok száma: %u, amely összesen %s bájtot jelent.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "A futás során összesen lefoglalt blokkok száma: %u, amely összesen %s bájtot jelent.\n"
+msgstr ""
+"A futás során összesen lefoglalt blokkok száma: %u, amely összesen %s bájtot "
+"jelent.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Minta-gyorsÃtótár mérete: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Nem sikerült lekérdezni a kiszolgáló adatait: â%sâ"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1525,7 +1678,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Felhasználónév: %s\n"
"SzámÃtógépnév: %s\n"
@@ -1537,12 +1690,12 @@ msgstr ""
"Alapértelmezett forrás: %s\n"
"Süti: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Nem sikerült lekérdezni a nyelÅ adatait: â%sâ"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1581,24 +1734,22 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268
-#: ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPort:\n"
-#: ../src/utils/pactl.c:274
-#: ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktÃv Port: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Nem sikerült lekérdezni a forrás adatait: â%sâ"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1637,28 +1788,20 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345
-#: ../src/utils/pactl.c:401
-#: ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473
-#: ../src/utils/pactl.c:532
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543
-#: ../src/utils/pactl.c:587
-#: ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594
-#: ../src/utils/pactl.c:637
-#: ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "ismeretlen"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Nem sikerült lekérdezni a modul adatait: â%sâ"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1675,12 +1818,12 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Nem sikerült lekérdezni a kliens adatait: â%sâ"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1695,12 +1838,12 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Nem sikerült lekérdezni a kártya adatait: â%sâ"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1717,22 +1860,22 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfil:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktÃv profil: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Nem sikerült lekérdezni a nyelÅ bemeneti adatait: â%sâ"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1769,12 +1912,12 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Nem sikerült lekérdezni a forrás kimeneti adatait: â%sâ"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1803,12 +1946,12 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Nem sikerült lekérdezni a mintavétel adatait: â%sâ"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1839,27 +1982,80 @@ msgstr ""
"\tTulajdonságok:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653
-#: ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Hiba: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Nem sikerült feltölteni a mintát: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "IdÅ elÅtti fájlvége"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Ãrvénytelen kiszolgáló"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Kilépés, SIGINT szignál hatásáraâ¦"
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1882,12 +2078,15 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\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 ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1912,12 +2111,14 @@ msgstr ""
"%s [options] set-sink-input-mute NYELÅBEMENET 1|0\n"
"\n"
" -h, --help MegjelenÃti ezt a súgót\n"
-" --version Az alkalmazás verziószámának megjelenÃtése\n"
+" --version Az alkalmazás verziószámának "
+"megjelenÃtése\n"
"\n"
-" -s, --server=KISZOLGÃLà Kapcsolódás a megadott KISZOLGÃLà kiszolgálóhoz\n"
+" -s, --server=KISZOLGÃLà Kapcsolódás a megadott "
+"KISZOLGÃLà kiszolgálóhoz\n"
" -n, --client-name=NÃV A kliens neve ezen a szerveren\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1928,104 +2129,110 @@ msgstr ""
"ÃsszeépÃtve a libpulse %s programkönyvtárral\n"
"Csatolva a libpulse %s programkönyvtárhoz\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Adja meg a betöltendŠmintafájlt"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Nem sikerült megnyitni az hangfájlt."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
-msgstr "Figyelmeztetés: Nem sikerült meghatározni a mintavételi leÃrást a fájlból."
+msgstr ""
+"Figyelmeztetés: Nem sikerült meghatározni a mintavételi leÃrást a fájlból."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Meg kell adnia lejátszandó minta nevét."
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Meg kell adnia az eltávolÃtandó minta nevét."
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Meg kell adnia a nyelÅ bemeneti azonosÃtóját és a nyelÅt."
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Meg kell adnia a forrás kimeneti azonosÃtóját és a forrást."
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Meg kell adnia a modul nevét és a paramétereit."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Meg kell adnia a modul azonosÃtóját."
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr "Nem adhat meg egynél több nyelÅt. Egy logikai értéket kell megadnia."
-#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1196
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
msgstr "Nem adhat meg egynél több forrást. Egy logikai értéket kell megadnia."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Meg kell adnia a kártya nevét vagy azonosÃtóját és a profil nevét"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a port nevét."
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Meg kell adnia a forrás nevét vagy azonosÃtóját és a port nevét"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a hangerejét."
-#: ../src/utils/pactl.c:1154
-#: ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193
-#: ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226
-#: ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "A hangerŠmegadása érvénytelen."
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Meg kell adnia a forrás nevét vagy azonosÃtóját és a hangerejét"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Meg kell adnia a nyelÅ bemenet azonosÃtóját és a hangerejét"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "A nyelÅ bemeneti azonosÃtója érvénytelen."
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a némÃtás logikai változóját."
+msgstr ""
+"Meg kell adnia a nyelÅ nevét vagy azonosÃtóját és a némÃtás logikai "
+"változóját."
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Meg kell adnia a forrás nevét vagy azonosÃtóját és a némÃtás logikai változóját"
+msgstr ""
+"Meg kell adnia a forrás nevét vagy azonosÃtóját és a némÃtás logikai "
+"változóját"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Meg kell adnia a nyelÅ bemenet azonosÃtóját és a némÃtás logikai változóját"
+msgstr ""
+"Meg kell adnia a nyelÅ bemenet azonosÃtóját és a némÃtás logikai változóját"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "A nyelÅ bemeneti azonosÃtójának megadása érvénytelen."
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Ãrvénytelen parancs lett megadva."
@@ -2036,14 +2243,18 @@ 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 megjelenÃtÅ] [-S kiszolgáló] [-O nyelÅ] [-I forrás] [-c fájl] [-d|-e|-i|-r]\n"
+"%s [-D megjelenÃtÅ] [-S kiszolgáló] [-O nyelÅ] [-I forrás] [-c fájl] [-d|-"
+"e|-i|-r]\n"
"\n"
-" -d MegjelenÃti az aktuális X11 megjelenÃtÅhöz csatlakoztatott PulseAudio adatokat (alapértelmezés)\n"
+" -d MegjelenÃti az aktuális X11 megjelenÃtÅhöz csatlakoztatott PulseAudio "
+"adatokat (alapértelmezés)\n"
" -e Helyi PulseAudio adatok exportálása az X11 megjelenÃtÅre\n"
-" -i Helyi PulseAudio adatok importálása az X11 megjelenÃtÅrÅl helyi környezeti változókba és süti fájlokba\n"
+" -i Helyi PulseAudio adatok importálása az X11 megjelenÃtÅrÅl helyi "
+"környezeti változókba és süti fájlokba\n"
" -r EltávolÃtja a PulseAudio adatokat z X11 megjelenÃtÅrÅl\n"
#: ../src/utils/pax11publish.c:94
@@ -2106,107 +2317,120 @@ msgstr "Nem sikerült betölteni a süti adatokat.\n"
msgid "Not yet implemented.\n"
msgstr "Még nincs elkészÃtve.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "Nem fut a PulseAudio démon vagy nem fut munkamenet démonként sem."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "Kapcsolódás: %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "A PulseAudio démon kilövése nem sikerült."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "A démon nem válaszol."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "Lekérdezés: %s"
-#: ../src/utils/pacmd.c:171
-#: ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "Olvasás: %s"
-#: ../src/utils/pacmd.c:207
-#: ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "Ãrás: %s"
-#: ../src/pulsecore/lock-autospawn.c:136
-#: ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Nem érhetÅ zárolás az automatikus indÃtáshoz."
-#: ../src/modules/alsa/alsa-sink.c:530
-#: ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-"Az ALSA modul értesÃtése nyomán új adatokat kellett volna Ãrni az eszközre, de jelenleg semmilyen Ãrandó adat nincsen.\n"
-"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
-"Az értesÃtés a POLLOUT jelzésen keresztül érkezett â viszont a âsnd_pcm_avail()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, mint a minimum."
+"Az ALSA modul értesÃtése nyomán új adatokat kellett volna Ãrni az eszközre, "
+"de jelenleg semmilyen Ãrandó adat nincsen.\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a "
+"problémát az ALSA fejlesztÅi felé.\n"
+"Az értesÃtés a POLLOUT jelzésen keresztül érkezett â viszont a âsnd_pcm_avail"
+"()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, "
+"mint a minimum."
-#: ../src/modules/alsa/alsa-source.c:506
-#: ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-"Az ALSA modul értesÃtése nyomán új adatokat kellett volna olvasni az eszközrÅl, de jelenleg semmilyen olvasandó adat nincsen.\n"
-"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a problémát az ALSA fejlesztÅi felé.\n"
-"Az értesÃtés a POLLIN jelzésen keresztül érkezett â viszont a âsnd_pcm_avail()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, mint a minimum."
+"Az ALSA modul értesÃtése nyomán új adatokat kellett volna olvasni az "
+"eszközrÅl, de jelenleg semmilyen olvasandó adat nincsen.\n"
+"Ez egy hiba lehet az ALSA â%sâ eszközmeghajtóban. Kérem jelentse ezt a "
+"problémát az ALSA fejlesztÅi felé.\n"
+"Az értesÃtés a POLLIN jelzésen keresztül érkezett â viszont a âsnd_pcm_avail"
+"()â függvény visszatérési értéke 0 volt vagy a második érték kisebb volt, "
+"mint a minimum."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Kikapcsolva"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "HiFi lejátszás (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "HiFi felvétel (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telefon duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio hangkiszolgáló"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Kimeneti eszközök"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Bemeneti eszközök"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Hangforrások a(z) @HOSTNAME@ számÃtógépen"
@@ -2270,134 +2494,159 @@ msgstr "ErÅsÃtÅ"
msgid "No Amplifier"
msgstr "Nincs erÅsÃtÅ"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ErÅsÃtés"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Nincs erÅsÃtés"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analóg fejhallgató"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Analóg bemenet"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Analóg mikrofon"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analóg vonalbemenet"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analóg rádió"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analóg videó"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Analóg kimenet"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Analóg fejhallgató"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analóg kimenet (mély)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analóg mono kimenet"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analóg sztereó"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984
-#: ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analóg mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analóg sztereó"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analóg térhatású 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analóg térhatású 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analóg térhatású 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analóg térhatású 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analóg térhatású 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analóg térhatású 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analóg térhatású 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analóg térhatású 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analóg térhatású 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analóg térhatású 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analóg térhatású 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digitális sztereó (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digitális térhatású 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digitális térhatású 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digitális térhatású 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digitális térhatású (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analóg mono duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analóg sztereó duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Analóg sztereó duplex (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Mély-hangszóró (LFE)"
diff --git a/po/it.po b/po/it.po
index c0c70e4..1e8c4b6 100644
--- a/po/it.po
+++ b/po/it.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-18 05:22+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-18 11:46+0200\n"
"Last-Translator: Milo Casagrande <milo at ubuntu.com>\n"
"Language-Team: Italian <tp at lists.linux.it>\n"
@@ -18,12 +18,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -35,7 +35,7 @@ msgstr ""
"Molto probabilmente si tratta di un bug nel driver ALSA \"%s\". Segnalare "
"questo problema agli sviluppatori ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"Molto probabilmente si tratta di un bug nel driver ALSA \"%s\". Segnalare "
"questo problema agli sviluppatori ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -94,11 +94,11 @@ msgstr "Sink NULL temporizzato"
msgid "Null Output"
msgstr "Output nullo"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Audio interno"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -114,93 +114,99 @@ msgstr "Allocazione del nuovo loader dl non riuscita."
msgid "Failed to add bind-now-loader."
msgstr "Aggiunta di bind-now-loader non riuscita."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Ottenuto il segnale %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Uscita."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Ricerca dell'utente \"%s\" non riuscita."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Ricerca del gruppo \"%s\" non riuscita."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Trovato l'utente \"%s\" (UID %lu) e il gruppo \"%s\" (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "Il GID dell'utente \"%s\" e del gruppo \"%s\" non corrispondono."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "La directory home dell'utente \"%s\" non è \"%s\", ignorato."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Creazione di \"%s\" non riuscita: %s"
# group list ????
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Cambio dell'elenco di gruppo non riuscito: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Cambio di GID non riuscito: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Cambio di UID non riuscito: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Privilegi di root abbandonati con successo."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Modalità di sistema non supportata su questa piattaforma."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) non riuscita: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Analisi della riga di comando non riuscita."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Demone non in esecuzione"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Demone in esecuzione con PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Terminazione del demone non riuscita: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -208,163 +214,178 @@ msgstr ""
"Questo programma non è pensato per essere eseguito come root (a meno di "
"specificare --system)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Richiesti privilegi di root."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start non supportato per le istanze di sistema."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "In esecuzione in modalità sistema, ma --disallow-exit non impostato."
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"In esecuzione in modalità sistema, ma --disallow-module-loading non "
"impostato."
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
"In esecuzione in modalità sistema, disabilitata in modo forzoso la modalità "
"SHM."
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"In esecuzione in modalità sistema, disabilitato in modo forzoso il tempo di "
"uscita per inattività ."
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Acquisizione di STDIO non riuscita."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe non riuscita: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() non riuscita: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() non riuscita: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Avvio del demone non riuscito."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Avvio del demone riuscito."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() non riuscita: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Questo è PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Host di compilazione: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS di compilazione: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "In esecuzione sull'host: %s"
# evviva il rispetto della l10n!!!
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Trovate %u CPU."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "La dimensione di pagina è %lu byte"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Compilato con supporto a Valgrind: sì"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Compilato con supporto a Valgrind: no"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "In esecuzione in modalità valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "In esecuzione sull'host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Build ottimizzata: sì"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Build ottimizzata: no"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definito, tutte le dichiarazioni sono disabilitate."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
"FASTPATH definito, solo le dichiarazioni veloci di path sono disabilitate."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Tutte le dichiarazioni sono abilitate."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Recupero dell'ID della macchina non riuscito"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID della macchina è %s"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "L'ID della sessione è %s"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "In uso directory di runtime %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "In uso directory di stato %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "In uso directory dei moduli %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "In esecuzione in modalità sistema: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -380,17 +401,17 @@ msgstr ""
"Consultare http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode per maggiori "
"informazioni sul perché la modalità sistema è una pessima idea."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() non riuscita."
# io mi domando e dico..... mah!
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Disponibili timer high-resolution freschi freschi! Buon appetito!"
# $REPEAT_PREVIOUS_COMMENT_HERE
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -398,27 +419,27 @@ msgstr ""
"Hey, questo kernel è andato a male! Lo chef oggi raccomanda Linux con i "
"timer high-resolution abilitati!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() non riuscita."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Inizializzazione del demone non riuscita."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Avvio del demone senza alcun modulo caricato, rifiuta di lavorare."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Completato l'avvio del demone."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Iniziato l'arresto del demone."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Demone terminato."
@@ -709,73 +730,78 @@ msgstr "ATTENZIONE, DEPRECATI: %s\n"
msgid "Path: %s\n"
msgstr "Percorso: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destinazione di registro \"%s\" non valida."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Livello di registro \"%s\" non valido."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Metodo di ricampionamento \"%s\" non valido."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit \"%s\" non valido."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit non supportato su questa piattaforma."
# o campionamento?? ma campionamento non è sampling?
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato di campionamento \"%s\" non valido."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Frequenza di campionamento '%s' non valida."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canali di campionamento \"%s\" non validi."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mappa del canale \"%s\" non valida."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Numero di frammenti \"%s\" non valido."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Dimensione dei frammenti \"%s\" non valida."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Livello di nice \"%s\" non valido."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Frequenza di campionamento '%s' non valida."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Apertura del file di configurazione non riuscita: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -783,7 +809,7 @@ msgstr ""
"La mappa del canale predefinita specificata presenta un numero diverso di "
"canali rispetto a quello predefinito specificato."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lettura dal file di configurazione: %s ###\n"
@@ -831,8 +857,8 @@ msgid "Rear Right"
msgstr "Posteriore destro"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Emettitore basse frequenze"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1177,194 +1203,194 @@ msgstr "XOpenDisplay() non riuscita"
msgid "Failed to parse cookie data"
msgstr "Analisi dei dati cookie non riuscita"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Apertura del file di configurazione \"%s\" non riuscita: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Nessun cookie caricato. Tentativo di connettersi senza."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Ricevuto messaggio per l'estensione sconosciuta \"%s\""
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Svuotamento dello stream non riuscito: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Stream di riproduzione svuotato."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Svuotamento della connessione sul server."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() non riuscita: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() non riuscita: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() non riuscita: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Creazione dello stream riuscita."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() non riuscita: %s"
# maxlength, fragsize e gli altri non so se vanno tradotti...
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Metriche del buffer: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
# maxlength e fragsize non so se vanno tradotti...
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Metriche del buffer: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "In uso specifica di campionamento \"%s\", mappa dei canali \"%s\"."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Connesso al device %s (%u, %ssospeso)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Errore di stream: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Device stream sospeso.%s "
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Device stream ripristinato.%s "
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Underrun dello stream.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Overrun dello stream.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Stream avviato.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Stream spostato sul device %s (%u, %ssospeso).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "non "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Attributi del buffer di stream cambiati.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Connessione stabilita.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() non riuscita: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() non riuscita: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() non riuscita: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Connessione non riuscita: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Ricevuto EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() non riuscita: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Ricevuto il segnale, uscita."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Recupero della latenza non riuscito: %s"
# dubbio: tempo o durata??
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Tempo: %0.3f sec; Latenza: %0.0f microsec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() non riuscita: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1416,10 +1442,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [OPZIONI]\n"
@@ -1489,7 +1519,7 @@ msgstr ""
"formattati\n"
" --list-file-FORMATI Elenca i formati disponibili.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1500,69 +1530,69 @@ msgstr ""
"Compilato con libpulse %s\n"
"Link eseguito con libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nome del client \"%s\" non valido"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nome dello stream \"%s\" non valido"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Mappa dei canali \"%s\" non valida"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Specifica di latenza \"%s\" non valida"
# esecuzione???
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Specifica di tempo di elaborazione \"%s\" non valida"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Proprietà \"%s\" non valida"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Formato file %s sconosciuto."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Specifica di campionamento non valida"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Troppi argomenti."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Generazione della specifica di campionamento per il file non riuscita."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Apertura del file audio non riuscita."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1570,24 +1600,24 @@ msgstr ""
"Attenzione: la specifica di campionamento indicata verrà soprascritta con "
"quella dal file."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Determinazione della specifica di campionamento dal file non riuscita."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr ""
"Attenzione: determinazione della mappa dei canali dal file non riuscita."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "La mappa dei canali non corrisponde alla specifica di campionamento"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Attenzione: scrittura della mappa dei canali su file non riuscita."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -1595,81 +1625,81 @@ msgstr ""
"Apertura di uno stream %s con specifica di campionamento \"%s\" e mappa dei "
"canali \"%s\"."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "registrazione"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "riproduzione"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() non riuscita."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() non riuscita."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() non riuscita."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() non riuscita: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() non riuscita."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() non riuscita."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Sospensione non riuscita: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Ripristino non riuscito: %s\n"
# cambiato un po' la parte finale...
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "ATTENZIONE: server audio non locale, impossibile sospendere.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Connessione non riuscita: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Ricevuto SIGINT, in uscita.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "ATTENZIONE: processo figlio terminato dal segnale %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1688,7 +1718,7 @@ msgstr ""
"connettersi\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1699,52 +1729,63 @@ msgstr ""
"Compilato con libpulse %s\n"
"Link eseguito con libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() non riuscita.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() non riuscita.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() non riuscita.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Recupero delle statistiche non riuscito: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Attualmente in uso: %u blocchi contenenti %s byte in totale.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"Allocati durante l'intera esecuzione: %u blocchi contenenti %s byte in "
"totale.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Dimensione della cache dei campioni: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Recupero delle informazioni del server non riuscito: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1752,7 +1793,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nome utente: %s\n"
"Nome host: %s\n"
@@ -1764,7 +1805,7 @@ msgstr ""
"Sorgente predefinita: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Recupero delle informazioni del sink non riuscito: %s"
@@ -1772,7 +1813,7 @@ msgstr "Recupero delle informazioni del sink non riuscito: %s"
# nel relativo messaggio per il source
# c'è "monitor of sink", quindi assumo che
# qui dovesse essere "monitor of source"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1811,22 +1852,22 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorte:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPorta attiva: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Recupero delle informazioni della sorgente non riuscito: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1865,20 +1906,20 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "N/D"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Recupero delle informazioni del modulo non riuscito: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1895,12 +1936,12 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Recupero delle informazioni del client non riuscito: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1915,12 +1956,12 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Recupero delle informazioni della scheda non riuscito: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1937,12 +1978,12 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfili:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tProfilo attivo: %s\n"
@@ -1951,12 +1992,12 @@ msgstr "\tProfilo attivo: %s\n"
# A stream that is connected to an output device, i.e. an input for a sink.
#
# from http://pulseaudio.org/wiki/WritingVolumeControlUIs
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Recupero delle informazioni dell'ingresso per il sink non riuscito: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1997,13 +2038,13 @@ msgstr ""
# A stream that is connected to an input device, i.e. an output of a source.
#
# from http://pulseaudio.org/wiki/WritingVolumeControlUIs
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr ""
"Recupero delle informazioni dell'uscita per la sorgente non riuscito: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -2032,13 +2073,13 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Recupero delle informazioni del campione non riuscito: %s"
# campiona lazy??
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2069,26 +2110,80 @@ msgstr ""
"\tProprietà :\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Fallimento: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Caricamento del campione non riuscito: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Fine del file prematura"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Server non valido"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Ricevuto SIGINT, uscita."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2111,6 +2206,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2148,7 +2244,7 @@ msgstr ""
" -s, --server=SERVER Il nome del server a cui connettersi\n"
" -n, --client-name=NOME Come chiamare questo client sul server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2159,53 +2255,53 @@ msgstr ""
"Compilato con libpulse %s\n"
"Link eseguito con libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Specificare un file campione da caricare"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Apertura del file audio non riuscita."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
"Attenzione: determinazione della specifica di campionamento dal file non "
"riuscita."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Ã necessario specificare un nome di campione da riprodurre"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Ã necessario specificare un nome di campione da rimuovere"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Ã necessario specificare un indice di ingresso per sink e un sink"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr ""
"Ã necessario specificare una indice di uscita per sorgente e una sorgente"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Ã necessario specificare un nome di modulo e gli argomenti."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Ã necessario specificare un indice di modulo"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Non è possibile specificare più di un sink. à necessario specificare un "
"valore booleano."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2213,58 +2309,58 @@ msgstr ""
"Non è possibile specificare più di una sorgente. à necessario specificare un "
"valore booleano."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr ""
"Ã necessario specificare un nome/indice di scheda e un nome di profilo."
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Ã necessario specificare un nome/indice di sorgente e un nome di porta"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Specifica di volume non valida"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Ã necessario specificare un nome/indice di sorgente e un nome di porta"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Ã necessario specificare un indice di ingresso per sink e un sink"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Indice dell'input del sink non valido"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Ã necessario specificare un nome/indice di sink e un nome di porta"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Ã necessario specificare un nome/indice di sorgente e un nome di porta"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "Ã necessario specificare un indice di ingresso per sink e un sink"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Specifica dell'indice di input del sink non valida"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Nessun comando valido specificato."
@@ -2349,46 +2445,46 @@ msgstr "Caricamento dei dati cookie non riuscito\n"
msgid "Not yet implemented.\n"
msgstr "Non ancora implementato.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Nessun demone PulseAudio in esecuzione o non in esecuzione come demone di "
"sessione."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Uccisione del demone PulseAudio non riuscita."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Il demone non sta rispondendo."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Impossibile accedere al lock di autospawn."
@@ -2427,38 +2523,42 @@ msgstr ""
"snd_pcm_avail() ha ritornato 0 o un altro valore < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Spento"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Riproduzione ad alta fedeltà (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Cattura ad alta fedeltà (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Doppino telefonico (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Server sonoro PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Dispositivi di uscita"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Dispositivi di ingresso"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Audio su @HOSTNAME@"
@@ -2522,132 +2622,159 @@ msgstr "Amplificatore"
msgid "No Amplifier"
msgstr "Nessun amplificatore"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Boost"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Nessun boost"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Cuffie analogiche"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Ingresso analogico"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Microfono analogico"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Line-in analogico"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Radio analogica"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Video analogico"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Uscita analogica"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Cuffie analogiche"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Uscita analogica (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Uscita mono analogica"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Stereo analogico"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Mono analogico"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Stereo analogico"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Surround analogico 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Surround analogico 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Surround analogico 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Surround analogico 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Surround analogico 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Surround analogico 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Surround analogico 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Surround analogico 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Surround analogico 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Surround analogico 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Surround analogico 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Stereo digitale (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Surround digitale 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Surround digitale 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Surround digitale 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Stereo digitale (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Duplex mono analogico"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Duplex stereo analogico"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Duplex stereo digitale (IEC958)"
+
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Emettitore basse frequenze"
diff --git a/po/ja.po b/po/ja.po
index 8e85a48..b23297b 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ja\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-08 02:51+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-10 11:49+0900\n"
"Last-Translator: Kiyoto Hashida <khashida at redhat.com>\n"
"Language-Team: Japanese <jp at li.org>\n"
@@ -17,14 +17,15 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n\n"
+"Plural-Forms: Plural-Forms: nplurals=1; plural=0;\n"
+"\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -32,12 +33,11 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
-"snd_pcm_avail() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %lu ãã¤ãï¼%lu "
-"msï¼ã\n"
-"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« "
-"å ±åãæåºãã¦ä¸ããã"
+"snd_pcm_avail() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %lu ãã¤ãï¼%lu msï¼ã\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« å ±"
+"åãæåºãã¦ä¸ããã"
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -45,12 +45,11 @@ msgid ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr ""
-"snd_pcm_delay() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %li ãã¤ãï¼%s%lu"
-" msï¼ã\n"
-"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« "
-"å ±åãæåºãã¦ä¸ããã"
+"snd_pcm_delay() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %li ãã¤ãï¼%s%lu msï¼ã\n"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« å ±"
+"åãæåºãã¦ä¸ããã"
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -60,12 +59,13 @@ msgid ""
msgstr ""
"snd_pcm_mmap_begin() 㯠ä¾å¤çã«å¤§ããªå¤ãè¿ãã¾ãã: %lu ãã¤ãï¼%lu "
"msï¼ã\n"
-"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« "
-"å ±åãæåºãã¦ä¸ããã"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã¯ ALSA éçºè
å®ã« å ±"
+"åãæåºãã¦ä¸ããã"
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "null ã§ããå ´åã§ãã常ã«æä½ã§ãã·ã³ã¯ãï¼ã¤ãã¼ããããããã«ç¶æãã¾ã"
+msgstr ""
+"null ã§ããå ´åã§ãã常ã«æä½ã§ãã·ã³ã¯ãï¼ã¤ãã¼ããããããã«ç¶æãã¾ã"
#: ../src/modules/module-always-sink.c:83
msgid "Dummy Output"
@@ -83,11 +83,10 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
-"sink_name=<ã·ã³ã¯ã®åå> sink_properties=<ã·ã³ã¯ã®ããããã£> "
-"master=<ãã£ã«ã¿ããã·ã³ã¯å> format=<ãµã³ãã«å½¢å¼> rate=<ãµã³ãã«ã¬ã¼ã> "
-"channels=<ãã£ã³ãã«æ°> channel_map=<ãã£ã³ãã«ããã> plugin=<ladspa "
-"plugin ã®åå> label=<ladspa plugin ã®ã©ãã«> control=<ã³ã³ãã§éé¢ããå
¥åå¶å¾¡å¤ã® "
-"ä¸è¦§>"
+"sink_name=<ã·ã³ã¯ã®åå> sink_properties=<ã·ã³ã¯ã®ããããã£> master=<ãã£ã«"
+"ã¿ããã·ã³ã¯å> format=<ãµã³ãã«å½¢å¼> rate=<ãµã³ãã«ã¬ã¼ã> channels=<ãã£ã³"
+"ãã«æ°> channel_map=<ãã£ã³ãã«ããã> plugin=<ladspa plugin ã®åå> "
+"label=<ladspa plugin ã®ã©ãã«> control=<ã³ã³ãã§éé¢ããå
¥åå¶å¾¡å¤ã® ä¸è¦§>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -97,11 +96,11 @@ msgstr "ã¯ããã¯ä»ã NULL ã·ã³ã¯"
msgid "Null Output"
msgstr "Null åºå"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "å
é¨ãªã¼ãã£ãª"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "ã¢ãã "
@@ -117,92 +116,98 @@ msgstr "æ°è¦ã® dl ãã¼ãã¼ã®å²ãå½ã¦ã«å¤±æãã¾ããã"
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader ã®è¿½å ã«å¤±æãã¾ããã"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "ä¿¡å· %s ãå¾ã¾ããã"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "çµäºãã¦ãã¾ãã"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "ã¦ã¼ã¶ã¼ '%s' ãè¦ä»ããã¾ããã§ããã"
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "ã°ã«ã¼ã '%s' ãè¦ä»ããã¾ããã§ããã"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "ã¦ã¼ã¶ã¼'%s' (UID %lu) ã¨ã°ã«ã¼ã '%s' (GID %lu) ãè¦ã¤ãã¾ããã"
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "ã¦ã¼ã¶ã¼'%s' 㨠ã°ã«ã¼ã '%s' ã® GID ãä¸è´ãã¾ããã"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ã¦ã¼ã¶ã¼ '%s' ã®ãã¼ã ãã£ã¬ã¯ããªã¯ '%s' ã§ã¯ããã¾ãããç¡è¦ãã¾ãã"
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' ã®ä½æã«å¤±æãã¾ãã: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "ã°ã«ã¼ãä¸è¦§ã®å¤æ´ã«å¤±æãã¾ãã: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID ã®å¤æ´ã«å¤±æãã¾ãã: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID ã®å¤æ´ã«å¤±æãã¾ãã: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "root ã®æ¨©éãæ£ããç ´æ£ãã¾ããã"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "ãã®ãã©ãããã©ã¼ã ã§ã¯ã·ã¹ãã å
¨åã®ã¢ã¼ãã¯ãµãã¼ããããã¾ããã"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) ã¯å¤±æ: %s "
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "ã³ãã³ãã©ã¤ã³ã®æ§æ解æã«å¤±æãã¾ããã"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ãã¼ã¢ã³ã¯ç¨¼åãã¦ãã¾ãã"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "ãã¼ã¢ã³ã¯ PID %u ã¨ãã¦ç¨¼åãã¦ãã¾ãã"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ãã¼ã¢ã³ã®ãã«ã«å¤±æãã¾ãã: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -210,155 +215,174 @@ msgstr ""
"ãã®ããã°ã©ã 㯠root ã¨ãã¦å®è¡ãããããã«æå³ããã¦ãã¾ããï¼--system ã "
"æå®ãã¦ããªãéãï¼ã"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Root ã®æ¨©éãå¿
è¦ã§ãã"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start ã¯ã·ã¹ãã ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ãµãã¼ããããã¾ããã"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããããã --disallow-exit ãã»ããããã¦ãã¾ãã!"
+msgstr ""
+"ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããããã --disallow-exit ãã»ããããã¦ãã¾ãã!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããããã --disallow-module-loading ãã»ããããã¦ãã¾ãã!"
+msgstr ""
+"ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããããã --disallow-module-loading ãã»ããããã¦ã"
+"ã¾ãã!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããå¼·å¶çã« SHM ã¢ã¼ããç¡å¹ã«ãã¦ãã¾ã!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããå¼·å¶çã« exit ã®éã³æéãç¡å¹ã«ãã¦ãã¾ã!"
+msgstr ""
+"ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸ã§ããå¼·å¶çã« exit ã®éã³æéãç¡å¹ã«ãã¦ãã¾ã!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio ã®åå¾ã«å¤±æãã¾ããã"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "ãã¤ãã¯å¤±æ: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() ã¯å¤±æ: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() ã¯å¤±æ: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ãã¼ã¢ã³éå§ã«å¤±æãã¾ããã"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "ãã¼ã¢ã³ãæ£å¸¸ã«éå§ãã¾ããã"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() ã¯å¤±æ: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "ãã㯠PulseAudio %s ã§ãã"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ã³ã³ãã¤ã«ãã¹ã: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ã³ã³ãã¤ã« CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "ãã¹ãä¸ã§å®è¡ä¸: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPU ãè¦ã¤ãã¾ããã"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "ãã¼ã¸ãµã¤ãºã¯ %lu ãã¤ãã§ã"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind ãµãã¼ãã§ã®ã³ã³ãã¤ã«: ã¯ã"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind ãµãã¼ãã§ã®ã³ã³ãã¤ã«: ããã"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind ã¢ã¼ãã§å®è¡ä¸: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "ãã¹ãä¸ã§å®è¡ä¸: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "æé©åãããã«ã: ã¯ã"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "æé©åãããã«ã: ããã"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG ã¯å®ç¾©æ¸ã¿ã§ããã¢ãµã¼ã·ã§ã³ã¯å
¨ã¦ç¡å¹ã§ãã"
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH ã¯å®ç¾©æ¸ã¿ã§ãããã¡ã¼ã¹ããã¹ã¢ãµã¼ã·ã§ã³ã®ã¿ãç¡å¹ã§ãã"
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "ã¢ãµã¼ã·ã§ã³ã¯å
¨ã¦æå¹ã§ãã"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "ãã·ã³ ID ã®åå¾ã«å¤±æ"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ãã·ã³ ID 㯠%s"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ã»ãã·ã§ã³ ID 㯠%s"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ã©ã³ã¿ã¤ã ãã£ã¬ã¯ã㪠%s ãä½¿ç¨ "
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ç¶æ
ãã£ã¬ã¯ã㪠%s ã使ç¨"
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "ã¢ã¸ã¥ã¼ã«ãã£ã¬ã¯ã㪠%s ã使ç¨"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ã·ã¹ãã ã¢ã¼ãã§å®è¡ä¸: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -367,50 +391,51 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
-"ããããã¨ãã¦ã¼ã¶ã¼ã¯ã·ã¹ãã ã¢ã¼ã㧠PA ãå®è¡ãã¦ãã訳ã§ãããã®å ´åã "
-"å®éã«ã¯ãããã¹ãã§ãªããã¨ã«æ³¨æãã¦ä¸ããã\n"
-"ããã§ãå®è¡ããã®ã§ããããæå¾
ã©ããã«æ©è½ããªãã¦ã責任ã¯ã¦ã¼ã¶ã¼èªèº«ã« "
-"ããã¾ãã\n"
-"ã·ã¹ãã ã¢ã¼ãã®ä½¿ç¨ãé常ã¯è¯ããªãæ¹éã§ãããã¨ã®èª¬æã«ã¤ãã¦ã¯ã "
-"http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode ããèªã¿ä¸ããã"
-
-#: ../src/daemon/main.c:809
+"ããããã¨ãã¦ã¼ã¶ã¼ã¯ã·ã¹ãã ã¢ã¼ã㧠PA ãå®è¡ãã¦ãã訳ã§ãããã®å ´åã å®"
+"éã«ã¯ãããã¹ãã§ãªããã¨ã«æ³¨æãã¦ä¸ããã\n"
+"ããã§ãå®è¡ããã®ã§ããããæå¾
ã©ããã«æ©è½ããªãã¦ã責任ã¯ã¦ã¼ã¶ã¼èªèº«ã« ã"
+"ãã¾ãã\n"
+"ã·ã¹ãã ã¢ã¼ãã®ä½¿ç¨ãé常ã¯è¯ããªãæ¹éã§ãããã¨ã®èª¬æã«ã¤ãã¦ã¯ã http://"
+"pulseaudio.org/wiki/WhatIsWrongWithSystemMode ããèªã¿ä¸ããã"
+
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ã¯å¤±æ"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ææ°ã®é«è§£å度ã¿ã¤ãã¼ã使ç¨ã§ãã¾ã! 楽ããã§ä¸ãã!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
-"ãããããã¦ã¼ã¶ã¼ã®ã«ã¼ãã«ã¯ãã¡ã§ãã! ä»æ¥ã®ã·ã§ãã®ãè¦ãã¯é«è§£å度ã¿ã¤ãã¼ã "
-"æå¹ã«ãªã£ã¦ãã Linux ã§ã!"
+"ãããããã¦ã¼ã¶ã¼ã®ã«ã¼ãã«ã¯ãã¡ã§ãã! ä»æ¥ã®ã·ã§ãã®ãè¦ãã¯é«è§£å度ã¿ã¤"
+"ãã¼ã æå¹ã«ãªã£ã¦ãã Linux ã§ã!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() ã¯å¤±æ"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ãã¼ã¢ã³ã®åæåã«å¤±æãã¾ããã"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "ãã¼ã¢ã³ã¯ã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ãªãã§éå§ãã¦ãããåä½ãæå¦ãã¦ãã¾ãã"
+msgstr ""
+"ãã¼ã¢ã³ã¯ã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ãªãã§éå§ãã¦ãããåä½ãæå¦ãã¦ãã¾ãã"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ãã¼ã¢ã³ã®éå§ãå®äºã§ãã"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ãã¼ã¢ã³ã®ã·ã£ãããã¦ã³ãå§ã¾ãã¾ããã"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ãã¼ã¢ã³ã¯åãæ¶ããã¾ããã"
@@ -495,22 +520,25 @@ msgstr ""
" --dump-conf ããã©ã«ãè¨å®ããã³ã\n"
" --dump-modules 使ç¨å¯è½ãªã¢ã¸ã¥ã¼ã«ä¸è¦§ããã³ã\n"
" --dump-resample-methods 使ç¨å¯è½ãªåãµã³ãã«æ¹æ³ããã³ã\n"
-" --cleanup-shm å¤ãå
±æã¡ã¢ãªã¼ã»ã°ã¡ã³ããã¯ãªã¼ã³ã¢ãã \n"
+" --cleanup-shm å¤ãå
±æã¡ã¢ãªã¼ã»ã°ã¡ã³ããã¯ãªã¼ã³"
+"ã¢ãã \n"
" --start å®è¡ãã¦ããªãå ´åããã¼ã¢ã³ãéå§ \n"
" -k --kill å®è¡ä¸ã®ãã¼ã¢ã³ããã«\n"
-" --check å®è¡ä¸ã®ãã¼ã¢ã³ããã§ã㯠(éåºã³ã¼ããè¿ãã®ã¿)\n"
+" --check å®è¡ä¸ã®ãã¼ã¢ã³ããã§ã㯠(éåºã³ã¼"
+"ããè¿ãã®ã¿)\n"
"\n"
"ãªãã·ã§ã³:\n"
" --system[=BOOL] ã·ã¹ãã å
¨åã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦å®è¡\n"
" -D, --daemonize[=BOOL] éå§å¾ãã¼ã¢ã³å\n"
" --fail[=BOOL] éå§å¤±æãªãçµäº\n"
" --high-priority[=BOOL] é«åº¦ãªãã¤ã¹ã¬ãã«ã®è¨å®ã試è¡\n"
-" (root ã¨ãã¦ã®ã¿å¯è½, SUID ã®æã"
-"åã¯\n"
+" (root ã¨ãã¦ã®ã¿å¯è½, SUID ã®æãå"
+"ã¯\n"
" ææ ¼ãã RLIMIT_NICE ã§)\n"
-" --realtime[=BOOL] ãªã¢ã«ã¿ã¤ã ã¹ã±ã¸ã¥ã¼ã«ãæå¹ã«ãã試è¡\n"
-" (root ã¨ãã¦ã®ã¿å¯è½, SUID ã®æã"
-"åã¯\n"
+" --realtime[=BOOL] ãªã¢ã«ã¿ã¤ã ã¹ã±ã¸ã¥ã¼ã«ãæå¹ã«ãã"
+"試è¡\n"
+" (root ã¨ãã¦ã®ã¿å¯è½, SUID ã®æãå"
+"ã¯\n"
" ææ ¼ãã RLIMIT_RTPRIO ã§)\n"
" --disallow-module-loading[=BOOL] èµ·åå¾ã®ã¦ã¼ã¶ã¼è¦æ±ã®ã¢ã¸ã¥ã¼ã«ã® "
"ãã¼ã/ã¢ã³ãã¼ãã 許å¯ããªã\n"
@@ -518,36 +546,43 @@ msgstr ""
" --disallow-exit[=BOOL] ã¦ã¼ã¶ã¼è¦æ±ã®éåºã許å¯ããªã\n"
" --exit-idle-time=SECS éä¼æã¨æå®æéå¾ã«ãã¼ã¢ã³ãçµäº \n"
"\n"
-" --module-idle-time=SECS éä¼æã¨æå®æéå¾ã«èªåãã¼ãã¢ã¸ã¥ã¼ã«ãã¢ã³ãã¼ã \n"
+" --module-idle-time=SECS éä¼æã¨æå®æéå¾ã«èªåãã¼ãã¢"
+"ã¸ã¥ã¼ã«ãã¢ã³ãã¼ã \n"
"\n"
-" --scache-idle-time=SECS éä¼æã¨æå®æéå¾ã«èªåãã¼ããµã³ãã«ãã¢ã³ãã¼ã \n"
+" --scache-idle-time=SECS éä¼æã¨æå®æéå¾ã«èªåãã¼ããµã³ã"
+"ã«ãã¢ã³ãã¼ã \n"
"\n"
" --log-level[=LEVEL] 詳細ã¬ãã«ãä¸ããããåã¯ã»ãã\n"
" -v 詳細ã¬ãã«ãä¸ãã \n"
"--log-target={auto,syslog,stderr} ãã°ã¿ã¼ã²ãããæå® \n"
-"--log-meta[=BOOL] ãã°ã¡ãã»ã¼ã¸å
ã«ã³ã¼ãã®å ´æãå«ã "
-"\n"
-" --log-time[=BOOL] ãã°ã¡ãã»ã¼ã¸å
ã«ã¿ã¤ã ã¹ã¿ã³ããå«ã\n "
-" --log-backtrace=FRAMES ãã°ã¡ãã»ã¼ã¸å
ã«ããã¯ãã¬ã¼ã¹ãå«ã\n"
-" -p, --dl-search-path=PATH åçå
±æãªãã¸ã§ã¯ã(plugins)ç¨ã«æ¤ç´¢ãã¹ãã»ãã\n"
+"--log-meta[=BOOL] ãã°ã¡ãã»ã¼ã¸å
ã«ã³ã¼ãã®å ´æãå«ã \n"
+" --log-time[=BOOL] ãã°ã¡ãã»ã¼ã¸å
ã«ã¿ã¤ã ã¹ã¿ã³ããå«"
+"ã\n"
+" --log-backtrace=FRAMES ãã°ã¡ãã»ã¼ã¸å
ã«ããã¯ãã¬ã¼ã¹ãå«"
+"ã\n"
+" -p, --dl-search-path=PATH åçå
±æãªãã¸ã§ã¯ã(plugins)ç¨ã«æ¤ç´¢"
+"ãã¹ãã»ãã\n"
"\n"
" --resample-method=METHOD æå®ããåãµã³ããªã³ã°æ¹æ³ã使ç¨\n"
-" (使ç¨å¯è½ãªå¤ã¯ --dump-resample-methods ã§\n"
+" (使ç¨å¯è½ãªå¤ã¯ --dump-resample-"
+"methods ã§\n"
" åç
§)\n"
" --use-pid-file[=BOOL] PID ãã¡ã¤ã«ãä½æ\n"
" --no-cpu-limit[=BOOL] ãµãã¼ãå
ã®ãã©ãããã©ã¼ã ã« CPU\n"
-" ãã¼ããªããã¿ã¼ãã¤ã³ã¹ãã¼ã«ããªã\n"
+" ãã¼ããªããã¿ã¼ãã¤ã³ã¹ãã¼ã«ããª"
+"ã\n"
" --disable-shm[=BOOL] å
±æã¡ã¢ãªã¼ãµãã¼ããç¡å¹ã«ãã\n"
"\n"
"ã¹ã¿ã¼ãã¢ããã¹ã¯ãªãã:\n"
-" -L, --load=\"MODULE ARGUMENTS\" æå®ããå¼æ°ã§æå®ãããã©ã°ã¤ã³ã¢ã¸ã¥ã¼ã«ã "
-"ãã¼ã\n"
+" -L, --load=\"MODULE ARGUMENTS\" æå®ããå¼æ°ã§æå®ãããã©ã°ã¤ã³ã¢"
+"ã¸ã¥ã¼ã«ã ãã¼ã\n"
"\n"
" -F, --file=FILENAME æå®ããã¹ã¯ãªãããå®è¡\n"
-" -C ã¹ã¿ã¼ãã¢ããå¾ã«å®è¡ä¸ã® TTY ä¸ã§ã³ãã³ãã©ã¤ã³ã "
-"éã\n"
+" -C ã¹ã¿ã¼ãã¢ããå¾ã«å®è¡ä¸ã® TTY ä¸ã§ã³"
+"ãã³ãã©ã¤ã³ã éã\n"
"\n"
-" -n ããã©ã«ãã®ã¹ã¯ãªãããã¡ã¤ã«ããã¼ãããªã\n"
+" -n ããã©ã«ãã®ã¹ã¯ãªãããã¡ã¤ã«ããã¼"
+"ãããªã\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
@@ -562,8 +597,8 @@ msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of debug, info, notice, warn, error)."
msgstr ""
-"--log-level ã¯ãã°ã¬ãã«å¼æ°ãäºæãã¾ãï¼æ°å¤å¹
ï¼ãï¼ãåã¯ããã°ãæ
å ±ã注è¨ãè¦åãã¨ã©ã¼ã® "
-"ä¸ã®ï¼ã¤ï¼"
+"--log-level ã¯ãã°ã¬ãã«å¼æ°ãäºæãã¾ãï¼æ°å¤å¹
ï¼ãï¼ãåã¯ããã°ãæ
å ±ã注"
+"è¨ãè¦åãã¨ã©ã¼ã® ä¸ã®ï¼ã¤ï¼"
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -587,7 +622,8 @@ msgstr "--use-pid-file ã¯ãã¼ãªã¢ã³å¼æ°ãäºæãã¾ã "
#: ../src/daemon/cmdline.c:321
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr "ç¡å¹ãªãã°ã¿ã¼ã²ãã: 'syslog' ãã 'stderr' ãã'auto' ã使ç¨ãã¦ä¸ããã"
+msgstr ""
+"ç¡å¹ãªãã°ã¿ã¼ã²ãã: 'syslog' ãã 'stderr' ãã'auto' ã使ç¨ãã¦ä¸ããã"
#: ../src/daemon/cmdline.c:328
msgid "--log-time expects boolean argument"
@@ -659,80 +695,85 @@ msgstr "ç ´æ£ã®è¦å: %s\n"
msgid "Path: %s\n"
msgstr "ãã¹: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ç¡å¹ãªãã°ã¿ã¼ã²ãã '%s'"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ç¡å¹ãªãã°ã¬ãã« '%s'"
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ç¡å¹ãªåãµã³ãã«æ¹æ³ '%s'"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ç¡å¹ãª rlimit '%s'"
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ã¯ãã®ãã©ãããã©ã¼ã ã§ã¯ãµãã¼ããããã¾ããã"
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«å½¢å¼ '%s'"
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«ã¬ã¼ã '%s'"
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«ãã£ã³ãã« '%s'"
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ç¡å¹ãªãã£ã³ãã«ããã '%s'"
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ç¡å¹ãªãã©ã°ã¡ã³ãã®æ° '%s'"
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ç¡å¹ãªãã©ã°ã¡ã³ããµã¤ãº '%s'"
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ç¡å¹ãªãã¤ã¹ã¬ãã« '%s'"
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] ç¡å¹ãªãµã³ãã«ã¬ã¼ã '%s'"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "è¨å®ãã¡ã¤ã«ãéãã®ã«å¤±æ: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr ""
-"æå®ãããããã©ã«ãã®ãã£ã³ãã«ãããã¯ãæå®ãããããã©ã«ãã® "
-"ãã£ã³ãã«æ°ã¨ã¯ç°ãªã ãã£ã³ãã«æ°ãæã£ã¦ãã¾ãã"
+"æå®ãããããã©ã«ãã®ãã£ã³ãã«ãããã¯ãæå®ãããããã©ã«ãã® ãã£ã³ãã«æ°"
+"ã¨ã¯ç°ãªã ãã£ã³ãã«æ°ãæã£ã¦ãã¾ãã"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### è¨å®ãã¡ã¤ã«ããèªã¿è¾¼ã¿: %s ###\n"
@@ -778,8 +819,8 @@ msgid "Rear Right"
msgstr "å³å¾ã"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ä½å¨æ³¢ã¨ããã¿"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1124,191 +1165,191 @@ msgstr "XOpenDisplay() ã¯å¤±æ"
msgid "Failed to parse cookie data"
msgstr "ã¯ããã¼ãã¼ã¿ã®æ§æ解æã«å¤±æ"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "è¨å®ãã¡ã¤ã«'%s' ãéãã®ã«å¤±æ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "ã¯ããã¼ããã¼ãããã¦ãã¾ãããç¡ãç¶æ
ã§æ¥ç¶ã試è¡"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "ä¸æãªæ¡å¼µå '%s' ã®ã¡ãã»ã¼ã¸ãåä¿¡"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "ã¹ããªã¼ã ã®æåºã«å¤±æ: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "æåºããã¹ããªã¼ã ãåç"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "ãµã¼ãã¼ã¸ã®æåºæ¥ç¶"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ã¹ããªã¼ã ã¯æ£å¸¸ã«ä½æå®äº"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ãããã¡ã¡ããªãã¯ã¹: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ãããã¡ã¡ããªãã¯ã¹: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ãµã³ãã«ä»æ§ '%s' ããã£ã³ãã«ããã '%s' ã使ç¨ã"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "ããã¤ã¹ %s ã«æ¥ç¶ (%u, %ssuspended)"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ã¹ããªã¼ã ã¨ã©ã¼: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ã¹ããªã¼ã ããã¤ã¹ä¼æ¢ %s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ã¹ããªã¼ã ããã¤ã¹å¾©å¸° %s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ã¹ããªã¼ã ã¢ã³ãã¼ã©ã³ %s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ã¹ããªã¼ã ãªã¼ãã¼ã©ã³ %s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ã¹ããªã¼ã éå§ %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ã¹ããªã¼ã ã¯ããã¤ã¹ %s ã¸ç§»å (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "not "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ã¹ããªã¼ã ãããã¡ã®å±æ§å¤æ´ %s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "æ¥ç¶ãç¢ºç« %s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "æ¥ç¶å¤±æ: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF åå¾"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ä¿¡å·åå¾ãéåºä¸"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "ã¬ã¤ãã³ã·ã¼åå¾ã«å¤±æ: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "æé: %0.3f sec ; ã¬ã¤ãã³ã·ã¼: %0.0f usec"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1360,10 +1401,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1376,52 +1421,50 @@ msgstr ""
"\n"
" -v, --verbose 詳細æä½ãæå¹ã«ãã\n"
"\n"
-" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå "
-"\n"
-" -d, --device=DEVICE æ¥ç¶å
ã·ã³ã¯/ã½ã¼ã¹ã®åå "
-"\n"
-" -n, --client-name=NAME ãµã¼ãã¼ã§ãã®ã¯ã©ã¤ã¢ã³ãã¸ã®ã³ã¼ã«æ¹æ³ "
-"\n"
-" --stream-name=NAME ãµã¼ãã¼ä¸ã§ãã®ã¹ããªã¼ã ã¸ã®ã³ã¼ã«æ¹æ³"
-"\n"
-" --volume=VOLUME åæ (ãªãã¢) ããªã¥ã¼ã å¹
ãæå® "
-" 0...65536\n"
-" --rate=SAMPLERATE ãµã³ãã«ã¬ã¼ãã Hz ã§è¡¨ç¤º (ããã©ã«ã㯠"
-"44100)\n"
+" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå \n"
+" -d, --device=DEVICE æ¥ç¶å
ã·ã³ã¯/ã½ã¼ã¹ã®åå \n"
+" -n, --client-name=NAME ãµã¼ãã¼ã§ãã®ã¯ã©ã¤ã¢ã³ãã¸ã®ã³ã¼ã«"
+"æ¹æ³ \n"
+" --stream-name=NAME ãµã¼ãã¼ä¸ã§ãã®ã¹ããªã¼ã ã¸ã®ã³ã¼ã«"
+"æ¹æ³\n"
+" --volume=VOLUME åæ (ãªãã¢) ããªã¥ã¼ã å¹
ãæå® "
+"0...65536\n"
+" --rate=SAMPLERATE ãµã³ãã«ã¬ã¼ãã Hz ã§è¡¨ç¤º (ããã©ã«"
+"ã㯠44100)\n"
" --format=SAMPLEFORMAT ãµã³ãã«ã¿ã¤ã, 次ã®ï¼ã¤ s16le, "
"s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
"s24le, s24be,\n"
" s24-32le, s24-32be (ããã©ã«ã㯠"
"s16ne)\n"
-" --channels=CHANNELS ãã£ã³ãã«ã®æ°, ã¢ãç¨ã«ï¼, "
-"ã¹ãã¬ãªç¨ã«ï¼\n"
+" --channels=CHANNELS ãã£ã³ãã«ã®æ°, ã¢ãç¨ã«ï¼, ã¹ãã¬ãª"
+"ç¨ã«ï¼\n"
" (ããã©ã«ã㯠2)\n"
-" --channel-map=CHANNELMAP ããã©ã«ãã®ä»£ããã«ä½¿ç¨ãããã£ã³ãã«ããã "
-"\n"
-" --fix-format ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããµã³ãã«å½¢å¼ãåã "
-"\n"
-"\n"
-" --fix-rate ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããµã³ãã«ã¬ã¼ããåã "
-"\n"
+" --channel-map=CHANNELMAP ããã©ã«ãã®ä»£ããã«ä½¿ç¨ãããã£ã³ã"
+"ã«ããã \n"
+" --fix-format ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããµ"
+"ã³ãã«å½¢å¼ãåã \n"
"\n"
-" --fix-channels ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããã£ã³ãã«æ°ã¨ "
-"ãã£ã³ãã«ããããåã\n"
+" --fix-rate ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãããµ"
+"ã³ãã«ã¬ã¼ããåã \n"
"\n"
-" --no-remix ãã£ã³ãã«ã®ã¢ããããã¯ã¹ããã¦ã³ããã¯ã¹ãããªã\n"
-" --no-remap ååã®ä»£ããã«ã¤ã³ããã¯ã¹ã§ãã£ã³ãã«ãããããã"
-"\n"
-" --latency=BYTES æå®ã¬ã¤ãã³ã·ã¼ããã¤ãã§è¦æ± "
-"\n"
-" --process-time=BYTES è¦æ±æ¯ã®æå®ããã»ã¹ã¿ã¤ã ããã¤ãã§è¦æ± "
-"\n"
-" --property=PROPERTY=VALUE æå®ããããã£ãæå®å¤ã«ã»ãã"
+" --fix-channels ã¹ããªã¼ã ã®æ¥ç¶å
ã§ããã·ã³ã¯ãã"
+"ãã£ã³ãã«æ°ã¨ ãã£ã³ãã«ããããåã\n"
"\n"
+" --no-remix ãã£ã³ãã«ã®ã¢ããããã¯ã¹ããã¦ã³"
+"ããã¯ã¹ãããªã\n"
+" --no-remap ååã®ä»£ããã«ã¤ã³ããã¯ã¹ã§ãã£ã³ã"
+"ã«ãããããã\n"
+" --latency=BYTES æå®ã¬ã¤ãã³ã·ã¼ããã¤ãã§è¦æ± \n"
+" --process-time=BYTES è¦æ±æ¯ã®æå®ããã»ã¹ã¿ã¤ã ããã¤ãã§"
+"è¦æ± \n"
+" --property=PROPERTY=VALUE æå®ããããã£ãæå®å¤ã«ã»ãã\n"
" --raw é²é³/åçã®çã® PCM ãã¼ã¿\n"
-" --file-format=FFORMAT é²é³/åçã®ãã©ã¼ããããã PCM ãã¼ã¿\n"
+" --file-format=FFORMAT é²é³/åçã®ãã©ã¼ããããã PCM ãã¼"
+"ã¿\n"
" --list-file-formats å©ç¨å¯è½ãªãã¡ã¤ã«å½¢å¼ãä¸è¦§è¡¨ç¤º\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1432,168 +1475,170 @@ msgstr ""
"libpulse %s ã§ã³ã³ãã¤ã« \n"
"libpulse %s ã§æ¥ç¶\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "ç¡å¹ãªã¯ã©ã¤ã¢ã³ãå '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "ç¡å¹ãªã¹ããªã¼ã å '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "ç¡å¹ãªãã£ã³ãã«ããã '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "ç¡å¹ãªã¬ã¤ãã³ã·ã¼ä»æ§ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "ç¡å¹ãªããã»ã¹ã¿ã¤ã ä»æ§ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "ç¡å¹ãªãããã㣠'%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "ä¸æãªãã¡ã¤ã«å½¢å¼ '%s'"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "ç¡å¹ãªãµã³ãã«ä»æ§"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "å¼æ°ãå¤éãã¾ãã"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ãã¡ã¤ã«ç¨ã®ãµã³ãã«ä»æ§ã®çæã«å¤±æãã¾ããã"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "ãªã¼ãã£ãªãã¡ã¤ã«ãéãã®ã«å¤±æãã¾ããã"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "è¦å: æå®ããããµã³ãã«ã®ä»æ§ã¯ãã¡ã¤ã«ããã®ä»æ§ã§ä¸æ¸ãããã¾ãã"
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ãã¡ã¤ã«ããã®ãµã³ãã«ä»æ§ã®æ±ºå®ã«å¤±æãã¾ããã"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "è¦å: ãã¡ã¤ã«ããã®ãã£ã³ãã«ãããã®æ±ºå®ã«å¤±æãã¾ããã"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "ãã£ã³ãã«ãããã¯ãµã³ãã«ä»æ§ã«ä¸è´ãã¾ããã"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "è¦å: ãã¡ã¤ã«ã¸ã®ãã£ã³ãã«ãããæ¸ãè¾¼ã¿ã«å¤±æãã¾ããã"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "ãµã³ãã«ä»æ§ '%s' 㨠ãã£ã³ãã«ããã '%s' 㧠%s ã¹ããªã¼ã ãéãã¦ãã¾ãã"
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"ãµã³ãã«ä»æ§ '%s' 㨠ãã£ã³ãã«ããã '%s' 㧠%s ã¹ããªã¼ã ãéãã¦ãã¾ãã"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "é²é³"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "åç"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() ã¯å¤±æ"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() ã¯å¤±æ"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() ã¯å¤±æ"
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() ã¯å¤±æ: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() ã¯å¤±æ"
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() ã¯å¤±æ"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "ä¼æ¢ã®å¤±æ: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "復帰ã®å¤±æ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "è¦å: ãµã¦ã³ããµã¼ãã¼ã¯ãã¼ã«ã«ã§ã¯ããã¾ãããä¼æ¢ãã¾ããã\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "æ¥ç¶å¤±æ : %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT åå¾ãéåºä¸ \n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "è¦å: åããã»ã¹ã¯ä¿¡å· %u ã§çµäºãã¾ãã\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1608,11 +1653,10 @@ msgstr ""
"\n"
" -h, --help ãã®ãã«ãã表示\n"
" --version ãã¼ã¸ã§ã³ã表示\n"
-" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå "
-"\n"
+" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå \n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1623,50 +1667,61 @@ msgstr ""
"libpulse %s ã§ã³ã³ãã¤ã«\n"
"libpulse %s ã§ãªã³ã¯\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() ã¯å¤±æ\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() ã¯å¤±æ\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() ã¯å¤±æ\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "çµ±è¨ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "ç¾å¨ä½¿ç¨ä¸: %u ãããã¯ã¯åè¨ %s ãã¤ããå«ã \n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "ç·å¯¿å½ã®æéä¸ã«å²ãå½ã¦: %u ãããã¯ã¯åè¨ %s ãã¤ããå«ã\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "ãµã³ãã«ã®ãã£ãã·ã¥ãµã¤ãº: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "ãµã¼ãã¼æ
å ±ã®åå¾ã«å¤±æ : %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1674,7 +1729,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"ã¦ã¼ã¶ã¼å: %s\n"
"ãã¹ãå: %s\n"
@@ -1686,12 +1741,12 @@ msgstr ""
"ããã©ã«ãã½ã¼ã¹: %s\n"
"ã¯ããã¼: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "ã·ã³ã¯æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1730,22 +1785,22 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tãã¼ã:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tæ´»åä¸ãã¼ã: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "ã½ã¼ã¹æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1784,20 +1839,20 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "ã¢ã¸ã¥ã¼ã«æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1814,12 +1869,12 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "ã¯ã©ã¤ã¢ã³ãæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1834,12 +1889,12 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "ã«ã¼ãæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1856,22 +1911,22 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tãããã£ã¼ã«:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tæå¹ãªãããã£ã¼ã«: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "ã·ã³ã¯å
¥åæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1908,12 +1963,12 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "ã½ã¼ã¹åºåæ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1942,12 +1997,12 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "ãµã³ãã«æ
å ±ã®åå¾ã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1978,26 +2033,80 @@ msgstr ""
"\tããããã£:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "失æ: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "ãµã³ãã«ã®ã¢ãããã¼ãã«å¤±æãã¾ãã: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ãã¡ã¤ã«ã®æ©æçµäº"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "ç¡å¹ãªãµã¼ãã¼"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT ãåå¾ãéåºä¸"
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2020,6 +2129,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2054,12 +2164,11 @@ msgstr ""
" -h, --help ãã®ãã«ãã表示\n"
" --version ãã¼ã¸ã§ã³ã表示\n"
"\n"
-" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå "
-"\n"
-" -n, --client-name=NAME ãµã¼ãã¼ã§ãã®ã¯ã©ã¤ã¢ã³ãã¸ã®ã³ã¼ã«æ¹æ³ "
-"\n"
+" -s, --server=SERVER æ¥ç¶å
ãµã¼ãã¼ã®åå \n"
+" -n, --client-name=NAME ãµã¼ãã¼ã§ãã®ã¯ã©ã¤ã¢ã³ãã¸ã®ã³ã¼ã«"
+"æ¹æ³ \n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2070,103 +2179,106 @@ msgstr ""
"libpulse %s ã§ã³ã³ãã¤ã«\n"
"libpulse %s ã§ãªã³ã¯\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ãã¼ããããµã³ãã«ãã¡ã¤ã«ãæå®ãã¦ä¸ãã"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ãµã¦ã³ããã¡ã¤ã«ãéãã®ã«å¤±æãã¾ããã"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "è¦å: ãã¡ã¤ã«ãããµã³ãã«ä»æ§ã決å®ããã®ã«å¤±æãã¾ããã"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "åçãããµã³ãã«åãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "åé¤ãããµã³ãã«åãæå®ããå¿
è¦ãããã¾ãã"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "ã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ã¨ã·ã³ã¯ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "ã½ã¼ã¹åºåã¤ã³ããã¯ã¹ã¨ã½ã¼ã¹ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "ã¢ã¸ã¥ã¼ã«åã¨å¼æ°ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "ã¢ã¸ã¥ã¼ã«ã¤ã³ããã¯ã¹ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "ã·ã³ã¯ã¯ï¼ã¤ä»¥ä¸ã¯æå®ã§ãã¾ããããã¼ãªã¢ã³å¤ãï¼ã¤æå®ããå¿
è¦ãããã¾ãã"
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"ã·ã³ã¯ã¯ï¼ã¤ä»¥ä¸ã¯æå®ã§ãã¾ããããã¼ãªã¢ã³å¤ãï¼ã¤æå®ããå¿
è¦ãããã¾ãã"
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "ã½ã¼ã¹ã¯ï¼ã¤ä»¥ä¸ã¯æå®ã§ãã¾ããããã¼ãªã¢ã³å¤ãï¼ã¤æå®ããå¿
è¦ãããã¾ãã"
+msgstr ""
+"ã½ã¼ã¹ã¯ï¼ã¤ä»¥ä¸ã¯æå®ã§ãã¾ããããã¼ãªã¢ã³å¤ãï¼ã¤æå®ããå¿
è¦ãããã¾ãã"
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "ã«ã¼ãã®åå/ã¤ã³ããã¯ã¹ã¨ãããã£ã¼ã«åãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "ã·ã³ã¯ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¼ãåãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "ã½ã¼ã¹ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¼ãåãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "ã·ã³ã¯ã®åå/ã¤ã³ããã¯ã¹ã¨ããªã¥ã¼ã ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "ç¡å¹ãªããªã¥ã¼ã ä»æ§"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "ã½ã¼ã¹ã®åå/ã¤ã³ããã¯ã¹ã¨ããªã¥ã¼ã ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "ã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ã¨ããªã¥ã¼ã ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "ç¡å¹ãªã·ã³ã¯å
¥åã¤ã³ããã¯ã¹"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "ã·ã³ã¯ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¥ã¼ããã¼ãªã¢ã³ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "ã½ã¼ã¹ã®åå/ã¤ã³ããã¯ã¹ã¨ãã¥ã¼ããã¼ãªã¢ã³ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "ã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ã¨ãã¥ã¼ããã¼ãªã¢ã³ãæå®ããå¿
è¦ãããã¾ã"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "ç¡å¹ãªã·ã³ã¯å
¥åã¤ã³ããã¯ã¹ä»æ§"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "æå¹ãªã³ãã³ããæå®ããã¦ãã¾ãã"
@@ -2183,10 +2295,11 @@ msgid ""
msgstr ""
"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
"\n"
-" -d X11 ãã£ã¹ãã¬ã¤ã«æ¥ç¶ããç¾å¨ã® PulseAudio ã®ãã¼ã¿ã表示 (ããã©ã«ã)\n"
+" -d X11 ãã£ã¹ãã¬ã¤ã«æ¥ç¶ããç¾å¨ã® PulseAudio ã®ãã¼ã¿ã表示 (ããã©ã«"
+"ã)\n"
" -e X11 ãã£ã¹ãã¬ã¤ã«ãã¼ã«ã« PulseAudio ãã¼ã¿ãã¨ãã¹ãã¼ã\n"
-" -i X11 ãã£ã¹ãã¬ã¤ãããã¼ã«ã«ç°å¢å¤æ°ã¨ã¯ããã¼ã« PulseAudio ãã¼ã¿ãã¤ã³ãã¼ã "
-"\n"
+" -i X11 ãã£ã¹ãã¬ã¤ãããã¼ã«ã«ç°å¢å¤æ°ã¨ã¯ããã¼ã« PulseAudio ãã¼ã¿ãã¤"
+"ã³ãã¼ã \n"
" -r X11 ãã£ã¹ãã¬ã¤ãã PulseAudio ãã¼ã¿ãåé¤\n"
#: ../src/utils/pax11publish.c:94
@@ -2249,44 +2362,46 @@ msgstr "ã¯ããã¼ãã¼ã¿ã®ãã¼ãã«å¤±æ\n"
msgid "Not yet implemented.\n"
msgstr "ã¾ã å®è£
ããã¦ãã¾ãã\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr "PulseAudio ãã¼ã¢ã³èªèº«ã稼åãã¦ããªãããåã¯ã»ãã·ã§ã³ãã¼ã¢ã³ã¨ãã¦ç¨¼åãã¦ãã¾ããã"
+msgstr ""
+"PulseAudio ãã¼ã¢ã³èªèº«ã稼åãã¦ããªãããåã¯ã»ãã·ã§ã³ãã¼ã¢ã³ã¨ãã¦ç¨¼åã"
+"ã¦ãã¾ããã"
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "ã½ã±ãã (PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio ã®ãã«ã«å¤±æ"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ãã¼ã¢ã³ãå¿çãã¾ãã"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn ããã¯ã«ã¢ã¯ã»ã¹ã§ãã¾ãã"
@@ -2302,10 +2417,10 @@ msgid ""
msgstr ""
"ALSA ãæ°è¦ã®ãã¼ã¿ãããã¤ã¹ã«æ¸ãè¾¼ãããã«å¬ä¿ãã¾ããããæ¸ãè¾¼ããã¨ã "
"ããã¾ãã!\n"
-"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã ALSA éçºè
ã« "
-"å ±åãã¦ä¸ããã\n"
-"POLLOUT ã»ããã§å¼ã³èµ·ãããã¾ãããããã®çµæã¨ãã¦ã® snd_pcm_avail() 㯠"
-"0 å㯠ä»ã®å¤ < min_avail ãè¿ãã¾ããã"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼ '%s' å
ã®ãã°ã§ãããã®åé¡ã ALSA éçºè
ã« å ±å"
+"ãã¦ä¸ããã\n"
+"POLLOUT ã»ããã§å¼ã³èµ·ãããã¾ãããããã®çµæã¨ãã¦ã® snd_pcm_avail() 㯠0 "
+"å㯠ä»ã®å¤ < min_avail ãè¿ãã¾ããã"
#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
@@ -2319,44 +2434,48 @@ msgid ""
msgstr ""
"ALSA ã¯ããã¤ã¹ããæ°è¦ãã¼ã¿ãèªã¿è¾¼ãããã«å¬ä¿ãã¾ããããèªã¿è¾¼ããã®ã "
"ããã¾ãã!\n"
-"ããã¯å¤åãALSA ãã©ã¤ãã¼'%s' å
ã®ãã°ã§ãããã®åé¡ã ALSA éçºè
ã« "
-"å ±åãã¦ä¸ããã\n"
-"POLLIN ã»ããã§å¼ã³èµ·ãããã¾ãããããã®çµæã¨ãã¦ã® snd_pcm_avail() 㯠"
-"0 å㯠ä»ã®å¤ < min_avail ãè¿ãã¾ããã"
+"ããã¯å¤åãALSA ãã©ã¤ãã¼'%s' å
ã®ãã°ã§ãããã®åé¡ã ALSA éçºè
ã« å ±åã"
+"ã¦ä¸ããã\n"
+"POLLIN ã»ããã§å¼ã³èµ·ãããã¾ãããããã®çµæã¨ãã¦ã® snd_pcm_avail() 㯠0 å"
+"㯠ä»ã®å¤ < min_avail ãè¿ãã¾ããã"
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "ãªã"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "ãã¤ãã¡ã¤åç (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "ãã¤ãã¡ã¤ãã£ãã㣠(A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "ãã¬ãã©ãã¼ãã¥ãã¬ãã¯ã¹ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio ãµã¦ã³ããµã¼ãã¼"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "åºåããã¤ã¹"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "å
¥åããã¤ã¹"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ ä¸ã®ãªã¼ãã£ãª"
@@ -2420,133 +2539,159 @@ msgstr "ã¢ã³ã"
msgid "No Amplifier"
msgstr "ã¢ã³ããªã"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ãã¼ã¹ã"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "ãã¼ã¹ããªã"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "ã¢ããã°ããããã©ã³"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "ã¢ããã°å
¥å"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "ã¢ããã°ãã¤ã¯ããã©ã³"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "ã¢ããã°ã©ã¤ã³ã¤ã³"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "ã¢ããã°ã©ã¸ãª"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "ã¢ããã°ãããª"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "ã¢ããã°åºå"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "ã¢ããã°ããããã©ã³"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "ã¢ããã°åºå (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "ã¢ããã°ã¢ãåºå"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "ã¢ããã°ã¹ãã¬ãª"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "ã¢ããã°ã¢ã"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "ã¢ããã°ã¹ãã¬ãª"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "ã¢ããã°ãµã©ã¦ã³ã 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ãã¸ã¿ã«ã¹ãã¬ãª (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ãã¸ã¿ã«ãµã©ã¦ã³ã 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ãã¸ã¿ã«ãµã©ã¦ã³ã 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ãã¸ã¿ã«ãµã©ã¦ã³ã 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ãã¸ã¿ã«ã¹ãã¬ãª (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "ã¢ããã°ã¢ããã¥ãã¬ãã¯ã¹"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "ã¢ããã°ã¹ãã¬ãªãã¥ãã¬ãã¯ã¹"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ãã¸ã¿ã«ã¹ãã¬ãªãã¥ãã¬ãã¯ã¹ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ä½å¨æ³¢ã¨ããã¿"
diff --git a/po/kn.po b/po/kn.po
index f11ef80..96afa31 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.kn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 02:45+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-08 11:50+0530\n"
"Last-Translator: Shankar Prasad <svenkate at redhat.com>\n"
"Language-Team: Kannada <kde-l10n-kn at kde.org>\n"
@@ -17,12 +17,12 @@ msgstr ""
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -34,7 +34,7 @@ msgstr ""
"à²à²¦à²à³à²à³ ALSA à²à²¾à²²à² '%s' ದಲà³à²²à²¿à²¨ à²à²à²¦à³ ದà³à²·à²¦ à²à²¾à²°à²£à²µà²¿à²°à²¬à²¹à³à²¦à³. ದಯವಿà²à³à²à³à² ತà³à²à²¦à²°à³à²¯à²¨à³à²¨à³ ALSA "
"ವಿà²à²¸à²¨à²à²¾à²°à²° à²à²®à²¨à²à³à²à³ ತನà³à²¨à²¿."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -46,7 +46,7 @@ msgstr ""
"à²à²¦à²à³à²à³ ALSA à²à²¾à²²à² '%s' ದಲà³à²²à²¿à²¨ à²à²à²¦à³ ದà³à²·à²¦ à²à²¾à²°à²£à²µà²¿à²°à²¬à²¹à³à²¦à³. ದಯವಿà²à³à²à³à² ತà³à²à²¦à²°à³à²¯à²¨à³à²¨à³ ALSA "
"ವಿà²à²¸à²¨à²à²¾à²°à²° à²à²®à²¨à²à³à²à³ ತನà³à²¨à²¿."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -92,11 +92,11 @@ msgstr "à²à³à²²à²¾à²à³â ಮಾಡಲಾದ NULL ಸಿà²à²à³"
msgid "Null Output"
msgstr "ಶà³à²¨à³à²¯ à²à²à³âಪà³à²à³"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à²à²à²¤à²°à²¿à² à²à²¡à²¿à²¯à³"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "ಮಾಡà³à²®à³"
@@ -112,92 +112,98 @@ msgstr "ಹà³à²¸ dl ಲà³à²¡à²°à³ à²
ನà³à²¨à³ ನಿಯà³à²à²¿à²¸à³à²µ
msgid "Failed to add bind-now-loader."
msgstr "bind-now-ಲà³à²¡à²°à³ à²
ನà³à²¨à³ ಸà³à²°à²¿à²¸à²²à²¾à²à²¿à²²à³à²²."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "%s ನಿà²à²¦ ಸà²à²à³à²¤à²µà³ ದà³à²°à³à²¤à²¿à²¦à³."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "ನಿರà³à²à²®à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "ಬಳà²à³à²¦à²¾à²° '%s' à²
ನà³à²¨à³ ಪತà³à²¤à³ ಮಾಡಲೠವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "à²à³à²à²ªà³ '%s' à²
ನà³à²¨à³ ಪತà³à²¤à³ ಮಾಡಲೠವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "ಬಳà²à³à²¦à²¾à²° '%s' (UID %lu) ಹಾà²à³ à²à³à²à²ªà³ '%s' (GID %lu) à²à²à²¡à³à²¬à²à²¦à²¿à²¦à³."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "ಬಳà²à³à²¦à²¾à²° '%s' ರ GID ಹಾà²à³ à²à³à²à²ªà³ '%s' ತಾಳà³à²¯à²¾à²à³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ಬಳà²à³à²¦à²¾à²° '%s' ರ ನà³à²²à³ à²à³à²¶à²µà³ '%s' à²à²à²¿à²²à³à²², à²à²²à²à³à²·à²¿à²¸à²²à²¾à²à³à²¤à³à²¤à²¿à²¦à³."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' à²
ನà³à²¨à³ ರà²à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "à²à³à²à²ªà²¿à²¨ ಪà²à³à²à²¿à²¯à²¨à³à²¨à³ ಬದಲಾಯಿಸಲೠವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID à²
ನà³à²¨à³ ಬದಲಾಯಿಸಲೠವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID à²
ನà³à²¨à³ ಬದಲಾಯಿಸಲೠವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "ರà³à²à³ ಸವಲತà³à²¤à³à²à²³à²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²à²¿ ಬಿಡಲಾà²à²¿à²¦à³."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "ವà³à²¯à²µà²¸à³à²¥à³à²¯à²¾à²¦à³à²¯à²à²¤à²¦ à²à³à²°à²®à²à³à²à³ ಠಪà³à²²à²¾à²à³âಫಾರà³à²®à²¿à²¨à²²à³à²²à²¿ ಬà³à²à²¬à²²à²µà²¿à²²à³à²²."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à²à²à³à²à²¾ ಸಾಲನà³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ಡà³à²®à²¨à³ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "ಡà³à²®à²¨à³ PID %u ಯಾà²à²¿ à²à²²à²¾à²¯à²¿à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ಡà³à²®à²¨à³ à²
ನà³à²¨à³ à²à³à²²à³à²²à²²à³ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -205,162 +211,178 @@ msgstr ""
"ಠಪà³à²°à³à²à³à²°à²¾à²®à²¨à³à²¨à³ ರà³à²à³â à²à²à²¿ à²à²²à²¾à²¯à²¿à²¸à³à²µ à²à²¦à³à²§à³à²¶à²µà²¨à³à²¨à³ ಹà³à²à²¦à²¿à²²à³à²² (--system à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²¦à³ "
"à²à²¦à³à²¦à²²à³à²²à²¿ ಮಾತà³à²°)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "ನಿರà³à²µà²¾à²¹à² ಸವಲತà³à²¤à³à²à²³ à²
à²à²¤à³à²¯à²µà²¿à²¦à³."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "ವà³à²¯à²µà²¸à³à²¥à³à²¯ ಸನà³à²¨à²¿à²µà³à²¶à²¦à²¿à²à²¦ --start ಬà³à²à²¬à²²à²¿à²¤à²µà²¾à²à²¿à²²à³à²²."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
"ವà³à²¯à²µà²¸à³à²¥à³à²¯ à²à³à²°à²®à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³, à²à²¦à²°à³ --disallow-exit à²
ನà³à²¨à³ ಹà³à²à²¦à²¿à²¸à²²à²¾à²à²¿à²²à³à²²!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"ವà³à²¯à²µà²¸à³à²¥à³à²¯ à²à³à²°à²®à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³, à²à²¦à²°à³ --disallow-module-loading à²
ನà³à²¨à³ "
"ಹà³à²à²¦à²¿à²¸à²²à²¾à²à²¿à²²à³à²²!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
"ವà³à²¯à²µà²¸à³à²¥à³à²¯ à²à³à²°à²®à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³à²¦à³, SHM à²à³à²°à²®à²µà²¨à³à²¨à³ à²à²¤à³à²¤à²¾à²¯à²ªà³à²°à³à²µà²à²µà²¾à²à²¿ "
"à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"ವà³à²¯à²µà²¸à³à²¥à³à²¯ à²à³à²°à²®à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³à²¦à³, ನಿರà³à²à²®à²¿à²¸à³à²µ à²à²¡ ಸಮಯವನà³à²¨à³ à²à²¤à³à²¤à²¾à²¯à²ªà³à²°à³à²µà²à²µà²¾à²à²¿ "
"à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio à²
ನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "ಪà³à²ªà³â ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ಡà³à²®à²¨à³ à²à²°à²à²à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "ಡà³à²®à²¨à³ à²
ನà³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²à²¿ à²à²°à²à²à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à²à²¦à³ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "à²à²à²ªà³à²²à³ ಮಾಡà³à²µ à²
ತಿಥà³à²¯: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "à²à²à²ªà³à²²à³ ಮಾಡà³à²µ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "à²
ತಿಥà³à²¯à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUà²à²³à³ à²à²à²¡à³à²¬à²à²¦à²¿à²µà³."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "ಪà³à²à²¦ à²à²¾à²¤à³à²°à²µà³ %lu ಬà³à²à³âà²à²³à²¾à²à²¿à²µà³"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind ಬà³à²à²¬à²²à²¦à³à²à²¦à²¿à²à³ à²à²à²ªà³à²²à³ ಮಾಡಲಾà²à²¿à²¦à³: ಹà³à²¦à³"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind ಬà³à²à²¬à²²à²¦à³à²à²¦à²¿à²à³ à²à²à²ªà³à²²à³ ಮಾಡಲಾà²à²¿à²¦à³: à²à²²à³à²²"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind à²à³à²°à²®à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¸à²²à²¾à²à³à²¤à³à²¤à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "à²
ತಿಥà³à²¯à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²¦à³: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "ಪà³à²°à²¶à²¸à³à²¤à²µà²¾à²¦ ನಿರà³à²®à²¾à²£: ಹà³à²¦à³"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "ಪà³à²°à²¶à²¸à³à²¤à²µà²¾à²¦ ನಿರà³à²®à²¾à²£: à²à²²à³à²²"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³, à²à²²à³à²²à²¾ ಪà³à²°à²¤à²¿à²ªà²¾à²¦à²¨à³à²à²³à²¨à³à²¨à³ à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr "FASTPATH à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³, à²à³à²µà²² ವà³à² ಮಾರà³à²à²¦ ಪà³à²°à²¤à²¿à²ªà²¾à²¦à²¨à³à²à²³à²¨à³à²¨à³ à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
+msgstr ""
+"FASTPATH à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³, à²à³à²µà²² ವà³à² ಮಾರà³à²à²¦ ಪà³à²°à²¤à²¿à²ªà²¾à²¦à²¨à³à²à²³à²¨à³à²¨à³ à²
ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "à²à²²à³à²²à²¾ ಪà³à²°à²¤à²¿à²ªà²¾à²¦à²¨à³à²à²³à²¨à³à²¨à³ ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "ಮà³à²¶à³à²¨à³ ID ಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ಮà³à²¶à³à²¨à³ ID ಯೠ%s à²à²à²¿à²¦à³."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "à²
ಧಿವà³à²¶à²¨ ID ಯೠ%s à²à²à²¿à²¦à³."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "à²à²²à²¾à²µà²£à²¾à²¸à²®à²¯(ರನà³âà²à³à²®à³) à²à³à²¶ %s à²
ನà³à²¨à³ ಬಳಸಿà²à³à²à²¡à³."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ಸà³à²¥à²¿à²¤à²¿ à²à³à²¶ %s à²
ನà³à²¨à³ ಬಳಸಿà²à³à²à²¡à³."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "à²à²à²à²à²³ à²à³à²¶ %s à²
ನà³à²¨à³ ಬಳಸಿà²à³à²à²¡à³."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ವà³à²¯à²µà²¸à³à²¥à³à²¯ à²à³à²°à²®à²¦à²²à³à²²à²¿ à²à²²à²¾à²¯à²¿à²¸à²²à²¾à²à³à²¤à³à²¤à²¿à²¦à³: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -376,15 +398,15 @@ msgstr ""
"ವà³à²¯à²µà²¸à³à²¥à³à²¯ à²à³à²°à²®à²µà³ (ಸಿಸà³à²à²®à³ ಮà³à²¡à³) à²à²à³ à²à²à²¦à³ ಸರಿಯಲà³à²²à²¦ ಬಳà²à³ à²à²à²¦à³ à²
ರಿಯಲೠದಯವಿà²à³à²à³ http://"
"pulseaudio.org/wiki/WhatIsWrongWithSystemMode à²
ನà³à²¨à³ ನà³à²¡à²¿."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ತಾà²à²¾ ರà³à²¸à²²à³à²¯à³à²¶à²¨à³ à²à³à²®à²°à³ ಲà²à³à²¯à²µà²¿à²¦à³! Bon appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -392,27 +414,27 @@ msgstr ""
"ಮಹಾಶಯರà³, ನಿಮà³à²® à²à²°à³à²¨à²²à³ à²à³à²³à³à²¤à³à²¹à³à²à²¿à²¦à³! à²
ತà³à²¯à³à²¤à³à²¤à²® ರà³à²¸à²²à³à²¯à³à²¶à²¨à³ à²à³à²®à²°à³ à²
ನà³à²¨à³ ಶà²à³à²¤à²à³à²³à²¿à²¸à²²à²¾à²¦ "
"ಲಿನà²à³à²¸à²¨à³à²¨à³ ಬಳಸà³à²µà²à²¤à³ à²
ಡà³à²à³à²¯à²µà²°à³ ಸಲಹೠಮಾಡà³à²¤à³à²¤à²¿à²¦à³à²¦à²¾à²°à³!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ಡà³à²®à²¨à³ à²
ನà³à²¨à³ à²à²°à²à²à²¿à²¸à²²à³ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ಲà³à²¡à³ ಮಾಡಲಾದ ಯಾವà³à²¦à³ ಡà³à²®à²¨à³ à²à²²à³à²²à²¦à³ à²à²°à²à²à²à³à²à²¡à²¿à²¦à³, à²à³à²²à²¸ ಮಾಡಲೠನಿರಾà²à²°à²¿à²¸à²¿à²¦à³."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ಡà³à²®à²¨à³ à²à²°à²à²à²à³à²³à²¿à²à³ ಪà³à²°à³à²£à²à³à²à²¡à²¿à²¦à³."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ಡà³à²®à²¨à³ ಸà³à²¥à²à²¿à²¤à²à³à²³à²¿à²à³à²¯à²¨à³à²¨à³ à²à²°à²à²à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ಡà³à²®à²¨à³ à²
ನà³à²¨à³ à²
à²à²¤à³à²¯à²à³à²³à²¿à²¸à²²à²¾à²à²¿à²¦à³."
@@ -674,72 +696,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "ಮಾರà³à²: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ದಾà²à²²à³ à²à³à²°à²¿ '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ದಾà²à²²à³ ಮà²à³à² '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ಮರà³à²¨à²®à³à²¨à³ ವಿಧಾನ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit à²à³ ಠಪà³à²²à²¾à²à³âಫಾರà³à²®à²¿à²¨à²²à³à²²à²¿ ಬà³à²à²¬à²²à²µà²¿à²²à³à²²."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ನಮà³à²¨à³ ರà²à²¨à³ '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ನಮà³à²¨à³ ದರ '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ನಮà³à²¨à³ à²à²¾à²¨à²²à³âà²à²³à³ '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ à²à²¾à²¨à²²à³ ನà²à³à²·à³ '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¤à²µà²¾à²¦ ಫà³à²°à²¾à²à³à²®à³à²à²à³à²à²³ ಸà²à²à³à²¯à³ '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ಫà³à²°à²¾à²à³à²®à³à²à²à³ à²à²¾à²¤à³à²° '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ನà³à²¸à³â ಹà²à²¤ '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à²
ಮಾನà³à²¯à²µà²¾à²¦ ನಮà³à²¨à³ ದರ '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ಸà²à²°à²à²¨à²¾ à²à²¡à²¤à²µà²¨à³à²¨à³ ತà³à²°à³à²¯à²²à³ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -747,7 +774,7 @@ msgstr ""
"ಸà³à²à²¿à²¸à²²à²¾à²¦ ಪà³à²°à³à²µà²¨à²¿à²¯à³à²à²¿à²¤ à²à²¾à²¨à²²à³ ನà²à³à²·à³à²¯à³ ಪà³à²°à³à²µà²¨à²¿à²¯à³à²à²¿à²¤ à²à²¾à²¨à²²à³âà²à²³ ಸà²à²à³à²¯à³à²à²³à²¿à²à²¿à²à²¤ ವಿà²à²¿à²¨à³à²¨à²µà²¾à²¦ "
"ಮಾರà³à²à²à²³ ಸà²à²à³à²¯à³à²¯à²¨à³à²¨à³ ಹà³à²à²¦à²¿à²¦à³."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ಸà²à²°à²à²¨à²¾ à²à²¡à²¤à²¦à²¿à²à²¦ à²à²¦à³: %s ###\n"
@@ -793,8 +820,8 @@ msgid "Rear Right"
msgstr "ಹಿà²à²¬à²¦à²¿à²¯ ಬಲà²à²¾à²"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "à²à³à²³à²®à²à³à²à²¦ ಫà³à²°à³à²à³à²µà³à²¨à³à²¸à²¿ à²à²¤à³à²ªà²¾à²¦à²"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1139,192 +1166,192 @@ msgstr "XOpenDisplay() ವಿಫಲà²à³à²à²¡à²¿à²¦à³"
msgid "Failed to parse cookie data"
msgstr "à²à³à²à²¿ ದತà³à²¤à²¾à²à²¶à²µà²¨à³à²¨à³ ಪಾರà³à²¸à³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "ಸà²à²°à²à²¨à²¾ à²à²¡à²¤ '%s' à²
ನà³à²¨à³ ಲà³à²¡à³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr ""
"ಯಾವà³à²¦à³ à²à³à²à²¿à²¯à²¨à³à²¨à³ ಲà³à²¡à³ ಮಾಡಲಾà²à²¿à²²à³à²². à²à³à²à²¿ à²à²²à³à²²à²¦à³ ಸà²à²ªà²°à³à²à²¸à²¾à²§à²¿à²¸à²²à³ ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²²à²¾à²à³à²¤à³à²¤à²¿à²¦à³."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "ಫà³à²°à³à²à³(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à²
à²à³à²à²¾à²¤ ವಿಸà³à²¤à²°à²£à³ '%s' à²à²à²¦ ಸà²à²¦à³à²¶à²µà²¨à³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à²²à²¾à²à²¿à²¦à³"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "ಸà³à²à³à²°à³à²®à²¨à³à²¨à³ ಬರಿದಾà²à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "ಪà³à²²à³à²¬à³à²¯à²¾à²à³ ಸà³à²à³à²°à³à²®à²¨à³à²¨à³ ಬರಿದಾà²à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "ಪರಿà²à²¾à²°à²à²à³à²à³ ಬರಿದಾà²à²¿à²¸à³à²µ ಸà²à²ªà²°à³à²."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ಸà³à²à³à²°à³à²®à²¨à³à²¨à³ ಯಶಸà³à²µà²¿à²¯à²¾à²à²¿ ನಿರà³à²®à²¿à²¸à²²à²¾à²à²¿à²¦à³."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ಬಫರೠಮà³à²à³à²°à²¿à²à³âà²à²³à³: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ಬಫರೠಮà³à²à³à²°à²¿à²à³âà²à²³à³: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ನಮà³à²¨à³à²¯ ವಿವರ '%s' à²
ನà³à²¨à³, à²à²¾à²¨à²²à³â ನà²à³à²·à³ '%s' à²
ನà³à²¨à³ ಬಳಸಿà²à³à²à²¡à³."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "ಸಾಧನ %s à²à³à²à³ ಸà²à²ªà²°à³à² à²à³à²¡à²¿à²¸à²²à²¾à²à²¿à²¦à³ (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ಸà³à²à³à²°à³à²®à³ ದà³à²·: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ಸà³à²à³à²°à³à²®à³ ಸಾಧನವನà³à²¨à³ ತಾತà³à²à²¾à²²à²¿à²à²µà²¾à²à²¿ ತಡà³à²¹à²¿à²¡à²¿à²¯à²²à²¾à²à²¿à²¦à³.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ಸà³à²à³à²°à³à²®à³ ಸಾಧನವನà³à²¨à³ ಮರಳಿ à²à²°à²à²à²¿à²¸à²²à²¾à²à²¿à²¦à³.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ಸà³à²à³à²°à³à²®à³ à²
ನà³à²¨à³ à²à²¡à²¿à²®à³ à²à²²à²¾à²¯à²¿à²¸à²²à²¾à²à²¿à²¦à³.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ಸà³à²à³à²°à³à²®à³ à²
ನà³à²¨à³ ಹà³à²à³à²à³ à²à²²à²¾à²¯à²¿à²¸à²²à²¾à²à²¿à²¦à³.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ಸà³à²à³à²°à³à²®à³ à²
ನà³à²¨à³ à²à²°à²à²à²¿à²¸à²²à²¾à²à²¿à²¦à³.%s "
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ಸಾಧನ %s à²à³à²à³ ಸà³à²à³à²°à³à²®à³â à²
ನà³à²¨à³ ಸà³à²¥à²³à²¾à²à²¤à²°à²¿à²¸à²²à²¾à²à²¿à²¦à³ (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "à²à²²à³à²² "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ಸà³à²à³à²°à³à²®à³ ಬಫರೠà²à³à²£à²µà²¿à²¶à³à²·à²¤à³à²à²³à²¨à³à²¨à³ ಬದಲಾಯಿಸಲಾà²à²¿à²¦à³.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "ಸà²à²ªà²°à³à²à²µà²¨à³à²¨à³ ಸಾಧಿಸಲಾà²à²¿à²¦à³.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "ಸà²à²ªà²°à³à²à²¦ ವಿಫಲತà³: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF à²
ನà³à²¨à³ ಪಡà³à²¯à²²à²¾à²à²¿à²¦à³."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ಸà²à²à³à²¤ ದà³à²°à³à²¤à²¿à²¦à³, ನಿರà³à²à²®à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "à²
à²à³à²à²°à²¤à³à²¯à²¨à³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "ಸಮಯ: %0.3f sec; à²
à²à³à²à²°à²¤à³: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1376,10 +1403,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [à²à²¯à³à²à³à²à²³à³]\n"
@@ -1435,7 +1466,7 @@ msgstr ""
"ಮಾಡà³/à²à²²à²¾à²¯à²¿à²¸à³.\n"
" --list-file-formats ಲà²à³à²¯à²µà²¿à²°à³à²µ à²à²¡à²¤ ವಿನà³à²¯à²¾à²¸à²à²³ ಪà²à³à²à²¿.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1446,170 +1477,172 @@ msgstr ""
"libpulse %s ನà³à²à²¦à²¿à²à³ à²à²à²ªà³à²²à³ ಮಾಡಲಾà²à²¿à²¦à³\n"
"libpulse %s ನà³à²à²¦à²¿à²à³ à²à³à²¡à²¿à²¸à²²à²¾à²à²¿à²¦à³\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ à²à³à²²à³à²à²à²¿à²¨ ಹà³à²¸à²°à³ '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ಸà³à²à³à²°à³à²®à³âನ ಹà³à²¸à²°à³ '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ à²à²¾à²¨à²²à³ ನà²à³à²·à³ '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ à²
à²à³à²à²°à²¤à³ ವಿವರಣೠ'%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à²à³à²°à²¿à²¯à³ ಸಮಯದ ವಿವರಣೠ'%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ à²à³à²£à²²à²à³à²·à²£ '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ à²à²¡à²¤ ವಿನà³à²¯à²¾à²¸ %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ನಮà³à²¨à³ ವಿವರ"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "ಬಹಳಷà³à²à³ à²à²°à³à²à³à²®à³à²à²à³âà²à²³à³."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ನಮà³à²¨à³à²¯ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "ಧà³à²µà²¨à²¿ à²à²¡à²¤à²µà²¨à³à²¨à³ ತà³à²°à³à²¯à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr "à²à²à³à²à²°à²¿à²à³: ಸà³à²à²¿à²¸à²²à²¾à²¦ ನಮà³à²¨à³ ವಿವರಣà³à²¯à²¨à³à²¨à³ à²à²¡à²¤à²¦à²²à³à²²à²¿à²¨ ವಿವರಣà³à²¯à²¿à²à²¦ ತಿದà³à²¦à²¿à²¬à²°à³à²¯à²²à²¾à²à³à²¤à³à²¤à²¦à³."
+msgstr ""
+"à²à²à³à²à²°à²¿à²à³: ಸà³à²à²¿à²¸à²²à²¾à²¦ ನಮà³à²¨à³ ವಿವರಣà³à²¯à²¨à³à²¨à³ à²à²¡à²¤à²¦à²²à³à²²à²¿à²¨ ವಿವರಣà³à²¯à²¿à²à²¦ ತಿದà³à²¦à²¿à²¬à²°à³à²¯à²²à²¾à²à³à²¤à³à²¤à²¦à³."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "à²à²¡à²¤à²¦à²¿à²à²¦ ನಮà³à²¨à³à²¯ ವಿವರಣà³à²¯à²¨à³à²¨à³ ನಿರà³à²§à²°à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à²à²à³à²à²°à²¿à²à³: à²à²¡à²¤à²¦à²¿à²à²¦ à²à²¾à²¨à²²à³ ನà²à³à²·à³à²¯à²¨à³à²¨à³ ನಿರà³à²§à²°à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à²à²¾à²¨à²²à³ ನà²à³à²·à³à²¯à³ ನಮà³à²¨à³à²¯ ವಿವರಣà³à²¯à³à²à²¦à²¿à²à³ ತಾಳà³à²¯à²¾à²à³à²¤à³à²¤à²¿à²²à³à²²"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à²à²à³à²à²°à²¿à²à³: à²à²¡à²¤à²à³à²à³ à²à²¾à²¨à²²à³ ನà²à³à²·à³à²¯à²¨à³à²¨à³ ಬರà³à²¯à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"à²à²à²¦à³ %s ಸà³à²à³à²°à³à²®à³â à²
ನà³à²¨à³ ನಮà³à²¨à³ ವಿವರಣೠ'%s' ಯà³à²à²¦à²¿à²à³ ಹಾà²à³ à²à²¾à²¨à²²à³ ನà²à³à²·à³ '%s' ಯà³à²à²¦à²¿à²à³ "
"ತà³à²°à³à²¯à²²à²¾à²à³à²¤à³à²¤à²¿à²¦à³."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "ರà³à²à²¾à²°à³à²¡à²¿à²à²à³"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "ಪà³à²²à³à²¬à³à²¯à²¾à²à³â"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "ಫà³à²°à³à²à³(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "ಸà³à²¥à²à²¿à²¤à²à³à²³à²¿à²¸à²²à³ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "ಮರಳಿ à²à²°à²à²à²¿à²¸à²²à³ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "à²à²à³à²à²°à²¿à²à³: ಧà³à²µà²¨à²¿ ಪರಿà²à²¾à²°à²à²µà³ ಸà³à²¥à²³à³à²¯à²µà²¾à²à²¿à²²à³à²², ತಾತà³à²à²¾à²²à²¿à²à²µà²¾à²à²¿ ತಡà³à²¹à²¿à²¡à²¿à²¯à²²à²¾à²à³à²¤à³à²¤à²¿à²²à³à²².\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "ಸà²à²ªà²°à³à²à²¦ ವಿಫಲತà³: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT ದà³à²°à³à²¤à²¿à²¦à³, ನಿರà³à²à²®à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "à²à²à³à²à²°à²¿à²à³: à²à²ª ಪà³à²°à²à³à²°à²¿à²¯à³à²¯à³ %u ಸà²à²à³à²¤à²¦à³à²à²¦à²¿à²à³ à²
à²à²¤à³à²¯à²à³à²à²¡à²¿à²¦à³\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1627,7 +1660,7 @@ msgstr ""
" -s, --server=SERVER ಸà²à²ªà²°à³à²à²¸à²¾à²§à²¿à²¸à²¬à³à²à²¿à²°à³à²µ ಪರಿà²à²¾à²°à²à²¦ ಹà³à²¸à²°à³\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1638,52 +1671,63 @@ msgstr ""
"libpulse %s ನà³à²à²¦à²¿à²à³ à²à²à²ªà³à²²à³ ಮಾಡಲಾà²à²¿à²¦à³\n"
"libpulse %s ನà³à²à²¦à²¿à²à³ à²à³à²¡à²¿à²¸à²²à²¾à²à²¿à²¦à³\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() ವಿಫಲà²à³à²à²¡à²¿à²¦à³.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() ವಿಫಲà²à³à²à²¡à²¿à²¦à³.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "à²
à²à²à²¿à²
à²à²¶à²à²³à²¨à³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "ಪà³à²°à²¸à²à³à²¤ ಬಳà²à³à²¯à²²à³à²²à²¿à²°à³à²µà³à²¦à³: %u à²à²à²¡à²à²³à³ à²à²à³à²à³ %s ಬà³à²à³âà²à²³à²¨à³à²¨à³ ಹà³à²à²¦à²¿à²¦à³.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"ಸà²à²ªà³à²°à³à²£ à²à³à²µà²¿à²¤à²¾à²µà²§à²¿à²¯ ಸಮಯದಲà³à²²à²¿ ನಿಯà³à²à²¿à²¸à²²à²¾à²à²¿à²¦à³à²¦à³: %u à²à²à²¡à²à²³à³ à²à²à³à²à³ %s ಬà³à²à³âà²à²³à²¨à³à²¨à³ "
"ಹà³à²à²¦à²¿à²¦à³.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "ನಮà³à²¨à³à²¯ à²à³à²¯à²¾à²¶à³ à²à²¾à²¤à³à²°: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "ಪರಿà²à²¾à²°à²à²¦ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1691,7 +1735,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"ಬಳà²à³à²¦à²¾à²° ಹà³à²¸à²°à³: %s\n"
"à²
ತಿಥà³à²¯à²¦ ಹà³à²¸à²°à³: %s\n"
@@ -1703,12 +1747,12 @@ msgstr ""
"ಪà³à²°à³à²µà²¨à²¿à²¯à³à²à²¿à²¤ à²à²à²°: %s\n"
"à²à³à²à²¿: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "ಸಿà²à²à³â ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1747,22 +1791,22 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²à²³à³:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tಸà²à³à²°à²¿à²¯ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à²à²à²°à²¦ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1801,20 +1845,20 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "à²
ನà³à²µà²¯à²¿à²¸à³à²µà³à²¦à²¿à²²à³à²²"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "à²à²à²à²¦ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1831,12 +1875,12 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à²à³à²²à³à²à²à²¿à²¨ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1851,12 +1895,12 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à²à²¾à²°à³à²¡à²¿à²¨ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1873,22 +1917,22 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tಪà³à²°à³à²«à³à²²à³à²à²³à³:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tಸà²à³à²°à²¿à²¯ ಪà³à²°à³à²«à³à²²à³à²à²³à³: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "ಸಿà²à²à³â à²à²¨à³âಪà³à²à³ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1925,12 +1969,12 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à²à²à²°à²¦ à²à²à³âಪà³à²à³ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1959,12 +2003,12 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "ನಮà³à²¨à³à²¯ ಮಾಹಿತಿಯನà³à²¨à³ ಪಡà³à²¦à³à²à³à²³à³à²³à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1995,26 +2039,80 @@ msgstr ""
"\tà²à³à²£à²à²³à³:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "ವಿಫಲತà³: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "ನಮà³à²¨à³à²¯à²¨à³à²¨à³ à²
ಪà³âಲà³à²¡à³ ಮಾಡà³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "à²à²¡à²¤à²¦ à²
ಪà³à²°à²¾à²ªà³à²¤ ಸಮಯದಲà³à²²à²¿ à²
à²à²¤à³à²¯"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ಪರಿà²à²¾à²°à²"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT ದà³à²°à³à²¤à²¿à²¦à³, ನಿರà³à²à²®à²¿à²¸à³à²¤à³à²¤à²¿à²¦à³."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2037,6 +2135,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2075,7 +2174,7 @@ msgstr ""
" -n, --client-name=NAME ಪರಿà²à²¾à²°à²à²¦à²²à³à²²à²¿ ಠà²à³à²²à³à²à²à²¿à²¨à²²à³à²²à²¿ à²à²¨à³à²à²¦à³ "
"à²à²°à³à²¯à²¬à³à²à³\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2086,49 +2185,50 @@ msgstr ""
"libpulse %s ನà³à²à²¦à²¿à²à³ à²à²à²ªà³à²²à³ ಮಾಡಲಾà²à²¿à²¦à³\n"
"libpulse %s ನà³à²à²¦à²¿à²à³ à²à³à²¡à²¿à²¸à²²à²¾à²à²¿à²¦à³\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ಲà³à²¡à³ ಮಾಡಬà³à²à²¿à²°à³à²µ à²à²à²¦à³ à²à²¡à²¤à²¦ ನಮà³à²¨à³à²¯à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¿"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ಧà³à²µà²¨à²¿ à²à²¡à²¤à²µà²¨à³à²¨à³ ತà³à²°à³à²¯à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "à²à²à³à²à²°à²¿à²à³: à²à²¡à²¤à²¦à²¿à²à²¦ ನಮà³à²¨à³à²¯ ವಿವರವನà³à²¨à³ ನಿರà³à²§à²°à²¿à²¸à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à²à²²à²¾à²¯à²¿à²¸à²²à³ ನà³à²µà³ à²à²à²¦à³ ನಮà³à²¨à³à²¯ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à²¾à²à³à²¤à³à²¤à²¦à³"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "ತà³à²à³à²¦à³ ಹಾà²à²²à³ ನà³à²µà³ à²à²à²¦à³ ನಮà³à²¨à³à²¯ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "ನà³à²µà³ à²à²à²¦à³ ಸಿà²à²à³ à²à²¨à³âಪà³à²à³ ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ à²à²à²¦à³ ಸಿà²à²à³â à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³."
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à²° à²à²à³âಪà³à²à³ ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ à²à²à²¦à³ à²à²à²°à²µà²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³."
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à²à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಹಾà²à³ à²à²°à³à²à³à²®à³à²à²à³à²à²³à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à² ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"ನà³à²µà³ à²à²à²¦à²à³à²à²¿à²à²¤ ಹà³à²à³à²à²¿à²¨ ಸಿà²à²à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à³à²µà³à²¦à²¿à²²à³à²². ನà³à²µà³ à²à²à²¦à³ ಬà³à²²à²¿à²¯à²¨à³â ಮà³à²²à³à²¯à²µà²¨à³à²¨à³ "
"ಸà³à²à²¿à²¸à²¬à³à²à²¾à²à³à²¤à³à²¤à²¦à³."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2136,57 +2236,57 @@ msgstr ""
"ನà³à²µà³ à²à²à²¦à²à³à²à²¿à²à²¤ ಹà³à²à³à²à²¿à²¨ à²à²à²°à²µà²¨à³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à³à²µà³à²¦à²¿à²²à³à²². ನà³à²µà³ à²à²à²¦à³ ಬà³à²²à²¿à²¯à²¨à³â ಮà³à²²à³à²¯à²µà²¨à³à²¨à³ "
"ಸà³à²à²¿à²¸à²¬à³à²à²¾à²à³à²¤à³à²¤à²¦à³."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à²à²à²¦à³ à²à²¾à²°à³à²¡à²¿à²¨ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಪà³à²°à³à²«à³à²²à³â ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "ನà³à²µà³ à²à²à²¦à³ ಸಿà²à²à²¿à²¨ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à²°à²¦ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "ನà³à²µà³ à²à²à²¦à³ ಸಿà²à²à²¿à²¨ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ಧà³à²µà²¨à²¿ ಪà³à²°à²®à²¾à²£à²¦ ವಿವರ"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à²°à²¦ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "ನà³à²µà³ à²à²à²¦à³ ಸಿà²à²à³ à²à²¨à³âಪà³à²à³ ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ à²à²à²¦à³ ಸಿà²à²à³â à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ಸಿà²à²à³ à²à²¨à³âಪà³à²à³ ಸà³à²à²¿"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "ನà³à²µà³ à²à²à²¦à³ ಸಿà²à²à²¿à²¨ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "ನà³à²µà³ à²à²à²¦à³ à²à²à²°à²¦ ಹà³à²¸à²°à³/ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ ಸà²à²ªà²°à³à²à²¸à³à²¥à²¾à²¨à²¦ ಹà³à²¸à²°à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "ನà³à²µà³ à²à²à²¦à³ ಸಿà²à²à³ à²à²¨à³âಪà³à²à³ ಸà³à²à²¿à²¯à²¨à³à²¨à³ ಹಾà²à³ à²à²à²¦à³ ಸಿà²à²à³â à²
ನà³à²¨à³ ಸà³à²à²¿à²¸à²¬à³à²à³"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à²
ಮಾನà³à²¯à²µà²¾à²¦ ಸಿà²à²à³ à²à²¨à³âಪà³à²à³ ಸà³à²à²¿ ವಿವರ"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "ಮಾನà³à²¯à²µà²¾à²¦ ಯಾವà³à²¦à³ à²à²à³à²à³à²¯à²¨à³à²¨à³ ಸà³à²à²¿à²¸à²²à²¾à²à²¿à²²à³à²²."
@@ -2270,45 +2370,45 @@ msgstr "à²à³à²à²¿ ದತà³à²¤à²¾à²à²¶à²µà²¨à³à²¨à³ ಲà³à²¡à³ ಮಾಡ
msgid "Not yet implemented.\n"
msgstr "à²à²¨à³à²¨à³ ಸಹ à²
ನà³à²µà²¯à²¿à²¸à²²à²¾à²à²¿à²²à³à²².\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"ಯಾವà³à²¦à³ PulseAudio ಡà³à²®à²¨à³ à²à²¾à²²à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²²à³à²², à²
ಥವ à²
ಧಿವà³à²¶à²¨ ಡà³à²®à²¨à³ à²à²à²¿ à²à²¾à²²à²¿à²¤à²à³à²³à³à²³à³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "ಸಾà²à³à²à³(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "ಸà²à²ªà²°à³à²à²¿à²¸à³(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio ಡà³à²®à²¨à³ à²
ನà³à²¨à³ à²à³à²²à³à²²à³à²µà²²à³à²²à²¿ ವಿಫಲà²à³à²à²¡à²¿à²¦à³."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ಡà³à²®à²¨à³ ಪà³à²°à²¤à²¿à²à³à²°à²¿à²¯à²¿à²¸à³à²¤à³à²¤à²¿à²²à³à²²."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "ಪà³à²²à³(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "à²à²¦à³(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "ಬರà³(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "ಸà³à²µà²¯à²à²¹à³à²à³à²à²¿à²¸à³à²µà²¿à²à³à²¯ ಲಾà²à³ à²
ನà³à²¨à³ ನಿಲà³à²à²¿à²¸à²¿à²à³à²³à³à²³à²²à³ ಸಾಧà³à²¯à²µà²¿à²²à³à²²."
@@ -2343,38 +2443,42 @@ msgstr ""
"snd_pcm_avail() 0 à²
ಥವ min_avail à²à³à²à²¿à²à²¤ à²à²¿à²à³à²à²¦à²¾à²¦ à²à²¨à³à²¨à³à²à²¦à³ ಮà³à²²à³à²¯à²µà²¨à³à²¨à³ ಮರಳಿಸಿದà³."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "à²à²¡"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "ಹೠಫಿಡಿಲಿà²à²¿ ಪà³à²²à³à²¬à³à²¯à²¾à²à³ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "ಹೠಫಿಡಿಲಿà²à²¿ à²à³à²¯à²¾à²ªà³à²à²°à³ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à²à³à²²à²¿à²«à³à²¨à²¿ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³â (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio ಧà³à²µà²¨à²¿ ಪರಿà²à²¾à²°à²"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à²à²à³âಪà³à²à³ ಸಾಧನà²à²³à³"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à²à²¨à³âಪà³à²à³â ಸಾಧನà²à²³à³"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ ನಲà³à²²à²¿à²¨ à²à²¡à²¿à²¯à³"
@@ -2438,131 +2542,159 @@ msgstr "à²à²à²ªà³à²²à²¿à²«à²¯à²°à³"
msgid "No Amplifier"
msgstr "ಯಾವà³à²¦à³ à²à²à²ªà³à²²à²¿à²«à²¯à²°à³ à²à²²à³à²²"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ಬà³à²¸à³à²à³"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "ಯಾವà³à²¦à³ ಬà³à²¸à³à²à³ à²à²²à³à²²"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à²
ನಲಾà²à³ ಹà³à²¡à³âಫà³à²¨à³âà²à²³à³"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à²
ನಲಾà²à³ à²à²¨à³âಪà³à²à³"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à²
ನಲಾà²à³ ಮà³à²à³à²°à³à²«à³à²¨à³"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à²
ನಲಾà²à³ ಲà³à²¨à³-à²à²¨à³"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à²
ನಲಾà²à³ ರà³à²¡à²¿à²¯à³"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à²
ನಲಾà²à³ ವà³à²¡à²¿à²¯à³"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à²
ನಲಾà²à³ à²à²à³âಪà³à²à³"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à²
ನಲಾà²à³ ಹà³à²¡à³âಫà³à²¨à³âà²à²³à³"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à²
ನಲಾà²à³ à²à²à³âಪà³à²à³ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à²
ನಲಾà²à³ ಮà³à²¨à³ à²à²à³âಪà³à²à³"
-#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
+#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
+#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à²
ನಲಾà²à³ ಮà³à²¨à³"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à²
ನಲಾà²à³ ಸರà³à²à²¡à³â 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ಡಿà²à²¿à²à²²à³ ಸà³à²à³à²°à²¿à²¯à³ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ಡಿà²à²¿à²à²²à³ ಸರà³à²à²¡à³ 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ಡಿà²à²¿à²à²²à³ ಸರà³à²à²¡à³ 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ಡಿà²à²¿à²à²²à³ ಸರà³à²à²¡à³ 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ಡಿà²à²¿à²à²²à³ ಸà³à²à³à²°à²¿à²¯à³ (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à²
ನಲಾà²à³ ಮà³à²¨à³ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "à²
ನಲಾà²à³ ಸà³à²à³à²°à²¿à²¯à³ ಡà³à²¯à³à²ªà³à²²à³à²à³à²¸à³ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "à²à³à²³à²®à²à³à²à²¦ ಫà³à²°à³à²à³à²µà³à²¨à³à²¸à²¿ à²à²¤à³à²ªà²¾à²¦à²"
diff --git a/po/ml.po b/po/ml.po
index c8c557d..492070f 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.ml\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-08 08:37+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-09 12:18+0530\n"
"Last-Translator: \n"
"Language-Team: <en at li.org>\n"
@@ -17,12 +17,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -33,7 +33,7 @@ msgstr ""
"snd_pcm_avail() നലàµâà´à´¿à´¯ à´®àµà´²àµà´²àµà´¯à´ വളരൠവലàµà´¤à´¾à´£àµàµ: %lu à´¬àµà´±àµà´±àµà´à´³àµâ (%lu ms).\n"
"à´à´¤àµàµ ALSA à´¡àµà´°àµà´µà´°àµâ '%s'-à´²àµà´³àµà´³ à´à´°àµ à´¬à´à´¾à´µà´¾à´. ദയവായി à´ à´ªàµà´°à´¶àµà´¨à´ ALSA ഡവലപàµà´ªà´°àµâസിനൠà´
റിയിà´àµà´àµà´."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -44,7 +44,7 @@ msgstr ""
"snd_pcm_delay() നലàµâà´à´¿à´¯ à´®àµà´²àµà´²àµà´¯à´ വളരൠവലàµà´¤à´¾à´£àµàµ: %li à´¬àµà´±àµà´±àµà´à´³àµâ (%s%lu ms).\n"
"à´à´¤àµàµ ALSA à´¡àµà´°àµà´µà´°àµâ '%s'-à´²àµà´³àµà´³ à´à´°àµ à´¬à´à´¾à´µà´¾à´. ദയവായി à´ à´ªàµà´°à´¶àµà´¨à´ ALSA ഡവലപàµà´ªà´°àµâസിനൠà´
റിയിà´àµà´àµà´."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -89,11 +89,11 @@ msgstr "à´àµà´²àµà´àµà´à´¡àµ NULL സിà´àµà´àµ"
msgid "Null Output"
msgstr "നളàµâ à´à´àµà´àµà´ªàµà´àµà´àµ"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à´à´¨àµà´±àµà´°àµâണലàµâ à´à´¡à´¿à´¯àµ"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "à´®àµà´¡à´"
@@ -109,92 +109,98 @@ msgstr "à´ªàµà´¤à´¿à´¯ dl à´²àµà´¡à´°àµâ à´
à´¨àµà´µà´¦à´¿à´àµà´àµà´¨
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader à´àµà´°àµâà´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "%s സിà´àµà´¨à´²àµâ à´²à´àµà´¯à´®à´¾à´¯à´¿."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "à´ªàµà´±à´¤àµà´¤àµàµ à´à´à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "'%s' à´à´¨àµà´¨ à´à´ªà´¯àµà´àµà´¤à´¾à´µàµàµ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "'%s' à´à´¨àµà´¨ à´àµà´°àµà´ªàµà´ªàµ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "à´à´ªà´¯àµà´àµà´¤à´¾à´µàµàµ '%s' (UID %lu) , à´àµà´°àµà´ªàµà´ªàµ '%s' (GID %lu) à´²à´àµà´¯à´®à´¾à´¯à´¿."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "à´à´ªà´¯àµà´àµà´¤à´¾à´µàµàµ '%s'-à´¨àµà´±àµà´¯àµà´ à´àµà´°àµà´ªàµà´ªàµ '%s'-à´¨àµà´±àµà´¯àµà´ GID à´àµà´°àµà´¨àµà´¨à´¿à´²àµà´²."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "à´à´ªà´¯àµà´àµà´¤à´¾à´µàµàµ '%s'-à´¨àµà´±àµ à´¹àµà´ ഡയറà´àµà´à´±à´¿ '%s' à´
à´²àµà´², à´à´ªàµà´àµà´·à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' à´à´£àµà´à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "à´àµà´°àµà´ªàµà´ªàµ ലിസàµà´±àµà´±àµ മാറàµà´±àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID മാറàµà´±àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID മാറàµà´±àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "à´±àµà´àµà´àµ à´à´¨àµà´àµà´²àµà´¯à´àµà´à´³àµâ വിà´à´¯à´à´°à´®à´¾à´¯à´¿ à´à´ªàµà´àµà´·à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à´ à´ªàµà´²à´¾à´±àµà´±àµà´«àµà´®à´¿à´²àµâ സിസàµà´±àµà´±à´ à´µàµà´¡àµ à´®àµà´¡àµ പിനàµà´¤àµà´£à´¯àµà´àµà´àµà´¨àµà´¨à´¿à´²àµà´²."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à´à´®à´¾à´¨àµâഡൠലàµà´¨àµâ പാഴàµà´¸àµ à´àµà´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "à´¡àµà´®à´£àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¨à´¤àµà´¤à´¿à´²à´¿à´²àµà´²"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "à´¡àµà´®à´£àµâ PID %u à´à´¯à´¿ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "à´¡àµà´®à´£àµâ നശിപàµà´ªà´¿à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -202,155 +208,172 @@ msgstr ""
"à´ à´ªàµà´°àµà´àµà´°à´¾à´ à´±àµà´àµà´à´¾à´¯à´¿ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´ªàµà´ªà´¿à´àµà´àµà´£àµà´à´¤à´²àµà´² (--system à´à´¨àµà´¨àµàµ പറà´àµà´à´¿à´àµà´àµà´£àµà´àµà´àµà´à´¿à´²àµâ മാതàµà´°à´ à´±àµà´àµà´àµ "
"à´à´µà´¶àµà´¯à´®àµà´£àµà´àµàµ)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "à´±àµà´àµà´àµ à´à´¨àµà´àµà´²àµà´¯à´àµà´à´³àµâ à´à´µà´¶àµà´¯à´®àµà´£àµà´àµàµ."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "സിസàµà´±àµà´±à´ à´à´¨àµâà´¸àµà´±àµà´±à´¨àµâà´¸àµà´à´³àµâà´àµà´àµ --start പിനàµà´¤àµà´£à´¯àµà´àµà´àµà´¨àµà´¨à´¿à´²àµà´²."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, à´ªà´àµà´·àµ --disallow-exit à´¸à´àµà´à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, à´ªà´àµà´·àµ --disallow-module-loading à´¸à´àµà´à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²!"
+msgstr ""
+"സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, à´ªà´àµà´·àµ --disallow-module-loading à´¸à´àµà´à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, നിരàµâബനàµà´§à´®à´¾à´¯àµà´ SHM à´®àµà´¡àµ à´ªàµà´°à´µà´°àµâà´¤àµà´¤ രഹിതമാà´àµà´àµà´¨àµà´¨àµ!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, നിരàµâബനàµà´§à´®à´¾à´¯àµà´ à´à´àµà´¸à´¿à´±àµà´±àµ à´à´¡à´¿à´²àµâ സമയഠപàµà´°à´µà´°àµâà´¤àµà´¤ രഹിതമാà´àµà´àµà´¨àµà´¨àµ!"
+msgstr ""
+"സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ, നിരàµâബനàµà´§à´®à´¾à´¯àµà´ à´à´àµà´¸à´¿à´±àµà´±àµ à´à´¡à´¿à´²àµâ സമയഠപàµà´°à´µà´°àµâà´¤àµà´¤ രഹിതമാà´àµà´àµà´¨àµà´¨àµ!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio à´²à´à´¿à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "à´¡àµà´®à´£à´¿à´¨àµà´±àµ à´¤àµà´à´àµà´à´ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "à´¡àµà´®à´£à´¿à´¨àµà´±àµ à´¤àµà´à´àµà´à´ വിà´à´¯à´¿à´àµà´àµ."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à´à´¤àµàµ PulseAudio %s à´à´£àµàµ"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "à´à´à´ªàµà´²àµà´·à´¨àµâ à´¹àµà´¸àµà´±àµà´±àµ: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "à´à´à´ªàµà´²àµà´·à´¨àµâ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "à´¹àµà´¸àµà´±àµà´±à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u സിപിയൠലà´àµà´¯à´®à´¾à´¯à´¿."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "താളിനàµà´±àµ à´µàµà´¯à´¾à´ªàµà´¤à´¿ %lu à´¬àµà´±àµà´±àµà´à´³à´¾à´£àµàµ"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind പിനàµà´¤àµà´£à´¯àµà´àµ à´à´à´ªàµà´²àµâ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ: à´à´µàµà´µàµàµ"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind പിനàµà´¤àµà´£à´¯àµà´àµ à´à´à´ªàµà´²àµâ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ: à´à´²àµà´²"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´ªàµà´ªà´¿à´àµà´àµà´¨àµà´¨àµ: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "à´¹àµà´¸àµà´±àµà´±à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "à´à´ªàµà´à´¿à´®àµà´¸àµà´¡àµ ബിളàµâà´¡àµ: à´à´µàµà´µàµàµ"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à´à´ªàµà´à´¿à´®àµà´¸àµà´¡àµ ബിളàµâà´¡àµ: à´à´²àµà´²"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG നിഷàµà´à´°àµâà´·à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ, à´à´²àµà´²à´¾ asserts-à´à´ à´ªàµà´°à´µà´°àµââà´¤àµà´¤ രഹിതà´."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH നിഷàµà´à´°àµâà´·à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ, fast path asserts മാതàµà´°à´ à´ªàµà´°à´µà´°àµââà´¤àµà´¤ രഹിതà´."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "à´à´²àµà´²à´¾ asserts-à´à´ à´ªàµà´°à´µà´°àµââà´¤àµà´¤ à´¸à´àµà´à´"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "മഷàµà´¨àµâ ID à´²à´àµà´¯à´®à´¾à´àµà´àµà´µà´¾à´¨àµâ സാധàµà´¯à´®à´¾à´¯à´¿à´²àµà´²"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "മഷàµà´¨àµâ ID %s à´à´£àµàµ."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "à´¸àµà´·à´¨àµâ ID %s à´à´£àµàµ."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "റണàµâà´àµà´ ഡയറà´àµà´à´±à´¿ %s à´à´ªà´¯àµà´à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "à´¸àµà´±àµà´±àµà´±àµà´±àµ ഡയറà´àµà´à´±à´¿ %s à´à´ªà´¯àµà´à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "à´®àµà´¡àµà´¯àµà´³àµâസൠഡയറà´àµà´à´±à´¿ %s à´à´ªà´¯àµà´à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨àµ: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -364,15 +387,15 @@ msgstr ""
"സിസàµà´±àµà´±à´ à´®àµà´¡à´¿à´²àµà´³àµà´³ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¨à´ à´à´¤àµà´¤à´®à´®à´²àµà´²à´¾à´¤àµà´¤à´¤à´¿à´¨àµà´±àµ à´à´¾à´°à´£à´àµà´à´³àµâà´àµà´à´¾à´¯à´¿http://pulseaudio.org/"
"wiki/WhatIsWrongWithSystemMode à´à´¾à´£àµà´."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Fresh high-resolution timers available! Bon appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -380,27 +403,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "à´¡àµà´®à´£àµâ à´à´°à´à´à´¿à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "à´à´°àµ à´à´à´à´àµà´à´³àµà´ à´²à´àµà´¯à´®à´¾à´à´¾à´¤àµ à´¡àµà´®à´£àµâ à´à´°à´à´à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ, à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¨à´ നിഷàµà´§à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "à´¡àµà´®à´£à´¿à´¨àµà´±àµ à´¤àµà´à´àµà´à´ à´ªàµà´°àµâà´£àµà´£à´®à´¾à´¯à´¿."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "à´¡àµà´®à´£àµâ à´
à´à´àµà´àµà´ªàµà´àµà´àµà´¨àµà´¨à´¤àµàµ à´à´°à´à´à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "à´¡àµà´®à´£àµâ നിരàµâà´¤àµà´¤à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ."
@@ -657,72 +680,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "പാഥàµ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ à´²àµà´àµ à´à´¾à´°àµâà´à´±àµà´±àµ '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ à´²àµà´àµ ലവലàµâ '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ à´±àµà´¸à´¾à´à´ªà´¿à´³àµâ മാരàµâà´àµà´à´ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à´
സാധàµà´µà´¾à´¯ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] à´ à´ªàµà´²à´¾à´±àµà´±àµà´«àµà´®à´¿à´²àµâ rlimit-à´¨àµà´³àµà´³ പിനàµà´¤àµà´£ à´²à´àµà´¯à´®à´²àµà´²."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ സാà´à´ªà´¿à´³àµâ മാതàµà´ '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ സാà´à´ªà´¿à´³àµâ à´±àµà´±àµà´±àµ '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ സാà´à´ªà´¿à´³àµâ à´à´¾à´¨à´²àµà´à´³àµâ '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à´
സാധàµà´µà´¾à´¯ à´à´¾à´¨à´²àµâ മാപàµà´ªàµ '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] '%s' à´«àµà´°à´¾à´àµà´®àµà´¨àµà´±àµà´à´³àµà´àµ à´¤àµà´±àµà´±à´¾à´¯ à´à´£àµà´£à´."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ à´«àµà´°à´¾à´àµà´®àµà´¨àµà´±àµ à´µàµà´¯à´¾à´ªàµà´¤à´¿ '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à´
സാധàµà´µà´¾à´¯ nice à´¸àµà´¥à´¾à´¨à´ '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à´¤àµà´±àµà´±à´¾à´¯ സാà´à´ªà´¿à´³àµâ à´±àµà´±àµà´±àµ '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "à´àµà´°à´®àµà´à´°à´£ ഫയലàµâ à´¤àµà´±à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -730,7 +758,7 @@ msgstr ""
"à´µàµà´¯à´àµà´¤à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´àµà´³àµà´³ à´¸àµà´µà´¤à´µàµà´¯àµà´³àµà´³ à´à´¾à´¨à´²àµâ മാപàµà´ªà´¿à´¨àµà´³àµà´³ à´à´¾à´¨à´²àµà´à´³àµà´àµ à´à´£àµà´£à´ നലàµâà´à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨ à´¸àµà´µà´¤à´µàµà´¯àµà´³àµà´³ "
"à´à´¾à´¨à´²àµà´à´³àµà´àµ à´à´£àµà´£à´¤àµà´¤àµà´àµà´à´¾à´³àµâ à´µàµà´¯à´¤àµà´¯à´¸àµà´¥à´®à´¾à´£àµàµ."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### à´àµà´°à´®àµà´à´°à´£ ഫയലിലàµâ നിനàµà´¨àµà´ à´²à´àµà´¯à´®à´¾à´àµà´àµà´: %s ###\n"
@@ -776,8 +804,8 @@ msgid "Rear Right"
msgstr "വലതàµàµ à´
വസാനà´"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ലൠഫàµà´°àµà´àµà´µà´¨àµâസി à´à´®àµà´®à´¿à´±àµà´±à´°àµâ"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1122,191 +1150,191 @@ msgstr "XOpenDisplay() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ"
msgid "Failed to parse cookie data"
msgstr "à´àµà´àµà´à´¿ à´¡àµà´±àµà´±à´¾ പാഴàµà´¸àµ à´àµà´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "à´àµà´°à´®àµà´à´°à´£ ഫയലàµâ '%s' à´¤àµà´±à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à´à´°àµ à´àµà´àµà´à´¿à´¯àµà´ à´²à´àµà´¯à´®à´²àµà´². à´
തിലàµà´²à´¾à´¤àµ à´à´£à´àµà´àµ à´àµà´¯àµà´¯àµà´µà´¾à´¨àµââ à´¶àµà´°à´®à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à´
പരിà´à´¿à´¤à´®à´¾à´¯ à´à´àµà´¸àµà´±àµà´±àµà´¨àµâà´·à´¨àµâ '%s'-à´¨àµà´³àµà´³ സനàµà´¦àµà´¶à´ à´²à´à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "à´¸àµà´àµà´°àµà´ à´¡àµà´°àµà´¯à´¿à´¨àµâ à´àµà´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "à´ªàµà´²àµà´¬à´¾à´àµà´àµ à´¸àµà´àµà´°àµà´ à´¡àµà´°àµà´¯à´¿à´¨àµâ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "സരàµâവറിലàµà´àµà´àµà´³àµà´³ à´à´£à´àµà´·à´¨àµâ à´¡àµà´°àµà´¯à´¿à´¨àµâ à´àµà´¯àµà´¯àµà´¨àµà´¨àµ."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "à´¸àµà´àµà´°àµà´ വിà´à´¯à´à´°à´®à´¾à´¯à´¿ à´à´£àµà´à´¾à´àµà´à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ബഫരàµâ à´®àµà´àµà´°à´¿à´àµà´¸àµ: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ബഫരàµâ à´®àµà´àµà´°à´¿à´àµà´¸àµ: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "സാà´à´ªà´¿à´³àµâ à´¸àµà´ªàµà´àµ '%s', à´à´¾à´¨à´²àµâ മാപàµà´ªàµ '%s' à´à´ªà´¯àµà´à´¿à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "à´¡à´¿à´µàµà´¸àµ %s-à´²àµà´àµà´àµ à´à´£à´àµà´àµ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "à´¸àµà´àµà´°àµà´ പിശà´àµ: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "à´¸àµà´àµà´°àµà´ à´¡à´¿à´µàµà´¸àµ സസàµà´ªàµà´¨àµâഡൠà´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "à´¸àµà´àµà´°àµà´ à´¡à´¿à´µàµà´¸àµ à´µàµà´£àµà´àµà´ à´à´°à´à´à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "à´¸àµà´àµà´°àµà´ à´
à´£àµà´à´°àµâറണàµâ.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "à´¸àµà´àµà´°àµ à´à´µà´°àµâറണàµâ.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "à´¸àµà´àµà´°àµà´ à´à´°à´à´à´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "à´¡à´¿à´µàµà´¸àµ %s-à´²àµà´àµà´àµ à´¸àµà´àµà´°àµà´ à´¨àµà´àµà´à´ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "à´
à´²àµà´²"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "à´¸àµà´àµà´°àµà´ ബഫരàµâ വിശàµà´·à´¤à´à´³àµâ മാറàµà´±à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "à´à´£à´àµà´·à´¨àµâ à´¸àµà´¥à´¾à´ªà´¿à´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "à´à´£à´àµà´·à´¨à´¿à´²àµâ à´¤à´à´°à´¾à´°àµâ: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF à´²à´àµà´¯à´®à´¾à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "സിà´àµà´¨à´²àµâ à´²à´àµà´¯à´®à´¾à´¯à´¿, à´ªàµà´±à´¤àµà´¤àµàµ à´à´à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "ലാറàµà´±à´¨àµâസി à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "സമയà´: %0.3f sec; ലാറàµà´±à´¨àµâസി: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1358,10 +1386,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1420,7 +1452,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1431,168 +1463,170 @@ msgstr ""
"libpulse %s-à´¨àµà´ªàµà´ªà´ à´à´à´ªàµà´²àµâ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
"libpulse %s-à´¨àµà´ªàµà´ªà´ ലിà´àµà´àµ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ à´àµà´²àµà´¨àµà´±àµ നാമഠ'%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ à´¸àµà´àµà´°àµà´ നാമഠ'%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ à´à´¾à´¨à´²àµâ മാപàµà´ªàµ '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ ലാറàµà´±à´¨àµâസി വിവരണഠ'%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ à´ªàµà´°à´àµà´°à´¿à´¯ സമയ വിവരണഠ'%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ വിശàµà´·à´¤ '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à´
പരിà´à´¿à´¤à´®à´¾à´¯ ഫയലàµâ à´°àµà´¤à´¿ %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ മാതàµà´ വിവരണà´"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à´
നവധി à´à´°àµâà´àµà´¯àµà´®àµà´¨àµà´±àµà´à´³àµâ."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ഫയലിനàµà´³àµà´³ സാà´à´ªà´¿à´³àµâ വിവരണഠലà´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "à´âഡിയൠഫയലàµâ à´¤àµà´±à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµâ നിനàµà´¨àµà´³àµà´³ വിവരണഠവàµà´¯à´àµà´¤à´®à´¾à´àµà´à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨ സാà´à´ªà´¿à´³àµâ വിവരണഠമാറàµà´±à´¿à´¯àµà´´àµà´¤àµà´¨àµà´¨àµ."
+msgstr ""
+"à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµâ നിനàµà´¨àµà´³àµà´³ വിവരണഠവàµà´¯à´àµà´¤à´®à´¾à´àµà´à´¿à´¯à´¿à´°à´¿à´àµà´àµà´¨àµà´¨ സാà´à´ªà´¿à´³àµâ വിവരണഠമാറàµà´±à´¿à´¯àµà´´àµà´¤àµà´¨àµà´¨àµ."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ഫയലിലàµâ നിനàµà´¨àµà´ സാà´à´ªà´¿à´³àµâ വിവരണഠലà´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµâ നിനàµà´¨àµà´ à´à´¾à´¨à´²àµâ മാപàµà´ªàµ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à´à´¾à´¨à´²àµâ മാപàµà´ªàµ സാà´à´ªà´¿à´³àµâ വിവരണവàµà´®à´¾à´¯à´¿ à´àµà´°àµà´¨àµà´¨à´¿à´²àµà´²"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµà´àµà´àµ à´à´¾à´¨à´²àµâ മാപàµà´ªàµ à´¸àµà´àµà´·à´¿à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "%s à´¸àµà´àµà´°àµà´ à´¤àµà´±à´àµà´àµà´¨àµà´¨àµ. à´à´¤à´¿à´¨àµà´±àµ സാà´à´ªà´¿à´³àµâ വിവരണഠ'%s'-à´à´ à´à´¾à´¨à´²àµâ മാപàµà´ªàµ '%s'-à´à´ à´à´£àµàµ."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "റിà´àµà´àµà´°àµâഡൠà´àµà´¯àµà´¯àµà´¨àµà´¨àµ"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "à´ªàµà´²àµà´¬à´¾à´àµà´àµ"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "സസàµà´ªàµà´¨àµâഡൠà´àµà´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "à´µàµà´£àµà´àµà´ à´à´°à´à´à´¿à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ശബàµà´¦ സരàµâവരàµâ à´²àµà´àµà´à´²à´²àµà´², സസàµà´ªàµà´¨àµâഡൠà´àµà´¯àµà´¯àµà´¨àµà´¨à´¿à´²àµà´².\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "à´à´£à´àµà´·à´¨à´¿à´²àµâ à´¤à´à´°à´¾à´°àµâ: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT à´²à´à´¿à´àµà´àµ, à´ªàµà´±à´¤àµà´¤àµàµ à´à´à´àµà´àµà´¨àµà´¨àµ.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: %u സിà´àµà´¨à´²àµâ വഴി à´àµà´³àµâ à´ªàµà´°à´àµà´°à´¿à´¯ à´
വസാനിà´àµà´à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1611,7 +1645,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1622,50 +1656,61 @@ msgstr ""
"libpulse %s-à´¨àµà´ªàµà´ªà´ à´à´à´ªàµà´²àµâ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
"libpulse %s-à´¨àµà´ªàµà´ªà´ ലിà´àµà´àµ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ..\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "à´¸àµà´¥à´¿à´¤à´¿à´µà´¿à´µà´°à´àµà´à´£à´àµà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "നിലവിലàµâ à´à´ªà´¯àµà´à´¤àµà´¤à´¿à´²àµâ: %u à´¬àµà´²àµà´àµà´àµà´à´³àµâ, à´®àµà´¤àµà´¤à´ %s à´¬àµà´±àµà´±àµà´à´³àµâ à´
à´à´àµà´àµà´¨àµà´¨àµ.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "à´à´¾à´²à´¾à´µà´§à´¿à´¯àµà´àµà´àµà´³àµà´³à´¿à´²àµâ à´
à´¨àµà´µà´¦à´¿à´àµà´àµà´¨àµà´¨àµ: %u à´¬àµà´²àµà´àµà´àµà´à´³àµâ, à´®àµà´¤àµà´¤à´ %s à´¬àµà´±àµà´±àµà´à´³àµâ à´
à´à´àµà´àµà´¨àµà´¨àµ.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "സാà´à´ªà´¿à´³àµâ à´à´¾à´·àµ à´µàµà´¯à´ªàµà´¤à´¿: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "സരàµâവരàµâ വിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1673,7 +1718,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"User name: %s\n"
"Host Name: %s\n"
@@ -1685,12 +1730,12 @@ msgstr ""
"Default Source: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "സിà´àµà´àµ വിവരഠലà´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1729,22 +1774,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tà´ªàµà´°àµâà´àµà´àµà´à´³àµâ:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tà´¸à´àµà´µà´®à´¾à´¯ à´ªàµà´°àµâà´àµà´àµ: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à´¸àµà´´àµà´¸àµ വിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1783,20 +1828,20 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "à´à´à´ വിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1813,12 +1858,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à´àµà´²àµà´¨àµà´±àµ വിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1833,12 +1878,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à´à´¾à´°àµâഡൠവിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1855,22 +1900,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tà´ªàµà´°àµà´«àµà´²àµà´à´³àµâ:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tà´¸à´àµà´µà´®à´¾à´¯ à´ªàµà´°àµà´«àµà´²àµâ: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "സിà´àµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ വിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1907,12 +1952,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à´¸àµà´´àµà´¸àµ à´à´àµà´àµà´ªàµà´àµà´àµ വിവരഠലà´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1941,12 +1986,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "മാതàµà´à´¯àµà´àµ വിവരà´àµà´à´³àµâ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1977,26 +2022,80 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "പരാà´à´¯à´: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "മാതàµà´ à´
à´ªàµà´²àµà´¡àµ à´àµà´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ഫയലàµâ à´
à´¨àµà´à´¿à´¤à´®à´¾à´¯ à´
വസാനà´"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à´¤àµà´±àµà´±à´¾à´¯ സരàµâവരàµâ"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT à´²à´àµà´¯à´®à´¾à´¯à´¿, à´ªàµà´±à´¤àµà´¤àµàµ à´à´à´àµà´àµà´¨àµà´¨àµ."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2019,6 +2118,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2058,7 +2158,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2069,103 +2169,106 @@ msgstr ""
"libpulse %s-à´¨àµà´ªàµà´ªà´ à´à´à´ªàµà´²àµâ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
"libpulse %s-à´¨àµà´ªàµà´ªà´ ലിà´àµà´àµ à´àµà´¯àµà´¤à´¿à´°à´¿à´àµà´àµà´¨àµà´¨àµ\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµà´³àµà´³ മാതàµà´à´¾ ഫയലàµâ ദയവായി à´µàµà´¯à´àµà´¤à´®à´¾à´àµà´àµà´"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ശബàµà´¦ ഫയലàµâ à´¤àµà´±à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "à´®àµà´¨àµà´¨à´±à´¿à´¯à´¿à´ªàµà´ªàµàµ: ഫയലിലàµâ നിനàµà´¨àµà´ മാതàµà´à´¯àµà´àµ വിവരണഠà´à´£àµà´àµà´ªà´¿à´à´¿à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´ªàµà´ªà´¿à´àµà´àµà´µà´¾à´¨àµà´³àµà´³ മാതàµà´à´¯àµà´àµ à´ªàµà´°àµàµ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à´¨àµà´àµà´à´ à´àµà´¯àµà´¯àµà´¨àµà´¨à´¤à´¿à´¨àµà´³àµà´³ മാതàµà´à´¯àµà´àµ à´ªàµà´°àµàµ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "à´à´°àµ സിà´àµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ à´à´¨àµâà´¡à´àµà´¸àµà´ സിà´àµà´àµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "à´à´°àµ à´¸àµà´´àµà´¸àµ à´à´àµà´àµà´ªàµà´àµà´àµ à´à´¨àµâà´¡à´àµà´¸àµà´ à´¸àµà´´àµà´¸àµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "à´à´°àµ à´®àµà´¡àµà´¯àµà´³àµâ നാമവàµà´ à´à´°àµâà´àµà´¯àµà´®àµà´¨àµà´±àµà´à´³àµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "à´à´°àµ à´®àµà´¡àµà´¯àµà´³àµâ à´à´¨àµâà´¡à´àµà´¸àµ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "à´à´°àµ സിà´àµà´à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"à´à´°àµ സിà´àµà´à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "à´à´°àµ à´¸àµà´´àµà´¸à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
+msgstr ""
+"à´à´°àµ à´¸àµà´´àµà´¸à´¿à´²àµâ à´àµà´àµà´¤à´²àµâ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¿à´²àµà´². à´àµà´à´¾à´¤àµ, à´à´°àµ à´¬àµà´³à´¿à´¯à´¨àµâ à´®àµà´²àµà´²àµà´¯à´µàµà´ നിà´àµà´à´³àµâ നലàµâà´àµà´£àµà´à´¤à´¾à´£àµàµ."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à´à´°àµ à´à´¾à´°àµâഡൠനാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´ªàµà´°àµà´«àµà´²àµâ നാമവàµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "à´à´°àµ സിà´àµà´àµ നാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´ªàµà´°àµâà´àµà´àµ നാമവàµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à´à´°àµ à´¸àµà´´àµà´¸àµ നാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´ªàµà´°àµâà´àµà´àµ നാമവàµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "à´à´°àµ സിà´àµà´àµ നാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´µàµà´³àµà´¯à´µàµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ à´µàµà´³àµà´¯à´ വിവരണà´àµà´à´³àµâ"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à´à´°àµ à´¸àµà´´àµà´¸àµ നാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´µàµà´³àµà´¯à´µàµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "à´à´°àµ സിà´àµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ à´à´¨àµâà´¡à´àµà´¸àµà´ à´µàµà´³àµà´¯à´µàµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ സിà´àµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ à´à´¨àµâà´¡à´àµà´¸àµ"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "à´à´°àµ സിà´àµà´àµ നാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´®àµà´¯àµà´àµà´àµ à´¬àµà´³à´¿à´¯à´¨àµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à´à´°àµ à´¸àµà´´àµà´¸àµ നാമà´/à´à´¨àµâà´¡à´àµà´¸àµà´ à´®àµà´¯àµà´àµà´àµ à´¬àµà´³à´¿à´¯à´¨àµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "à´à´°àµ സിà´àµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ à´à´¨àµâà´¡à´àµà´¸àµà´ à´®àµà´¯àµà´àµà´àµ à´¬àµà´³à´¿à´¯à´¨àµà´ നലàµâà´àµà´£àµà´à´¤àµà´£àµà´àµàµ"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à´¤àµà´±àµà´±à´¾à´¯ സിà´àµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ à´à´¨àµâà´¡à´àµà´¸àµ à´¸àµà´ªàµà´¸à´¿à´«à´¿à´àµà´àµà´·à´¨àµâ"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "ശരിയായ à´à´®à´¾à´¨àµâà´¡àµà´à´³àµâ നലàµâà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´²."
@@ -2248,44 +2351,44 @@ msgstr "à´àµà´àµà´àµ à´¡àµà´±àµà´±à´¾ à´²à´àµà´¯à´®à´¾à´àµà´àµà´¨
msgid "Not yet implemented.\n"
msgstr "à´à´¤àµà´µà´°àµ à´²à´àµà´¯à´®à´¾à´àµà´à´¿à´¯à´¿à´àµà´à´¿à´²àµà´².\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "പളàµâà´¸àµà´à´¡à´¿à´¯àµ à´¡àµà´®à´£àµâ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¨à´¤à´¿à´²à´¿à´²àµà´², à´¸àµà´·à´¨àµâ à´¡àµà´®à´£à´¾à´¯àµà´ à´ªàµà´°à´µà´°àµâà´¤àµà´¤à´¿à´àµà´àµà´¨àµà´¨à´¿à´²àµà´²."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "പളàµâà´¸àµà´à´¡à´¿à´¯àµ à´¡àµà´®à´£àµâ à´à´²àµà´²à´¾à´¤à´¾à´àµà´àµà´¨àµà´¨à´¤à´¿à´²àµâ പരാà´à´¯à´ªàµà´ªàµà´àµà´àµ."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "à´¡àµà´®à´£àµâ മറàµà´ªà´à´¿ നലàµâà´àµà´¨àµà´¨à´¿à´²àµà´²."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "à´à´àµà´àµà´¸àµà´ªàµà´£àµâ à´²àµà´àµà´àµ à´²à´àµà´¯à´®à´¾à´àµà´àµà´µà´¾à´¨àµâ സാധàµà´¯à´®à´²àµà´²."
@@ -2322,38 +2425,42 @@ msgstr ""
"à´
à´²àµà´²àµà´àµà´à´¿à´²àµâ മറàµà´±àµà´°àµ à´®àµà´²àµà´²àµà´¯à´ < min_avail à´à´£àµàµ."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "à´à´«àµ"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "ഹൠഫിഡലിറàµà´±à´¿ à´ªàµà´²àµà´¬à´¾à´àµà´àµ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "ഹൠഫിഡലിറàµà´±à´¿ à´à´¾à´ªàµà´à´°àµâ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à´àµà´²à´¿à´«àµà´£à´¿ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "പളàµâà´¸àµà´à´¡à´¿à´¯àµ à´¸àµà´£àµà´àµ സരàµâവരàµâ"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à´à´àµà´àµà´ªàµà´àµà´àµ à´¡à´¿à´µàµà´¸àµà´à´³àµâ"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à´à´¨àµâà´ªàµà´àµà´àµ à´¡à´¿à´µàµà´¸àµà´à´³àµâ"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME at -à´²àµà´³àµà´³ à´à´¡à´¿à´¯àµ"
@@ -2417,133 +2524,159 @@ msgstr "à´à´à´ªàµà´²à´¿à´«à´¯à´°àµâ"
msgid "No Amplifier"
msgstr "à´à´à´ªàµà´²à´¿à´«à´¯à´°àµâ à´²à´àµà´¯à´®à´²àµà´²"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "à´¬àµà´¸àµà´±àµà´±àµ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "à´¬àµà´¸àµà´±àµà´±àµ à´²à´àµà´¯à´®à´²àµà´²"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à´
നലàµà´àµ à´¹àµà´¡àµà´«àµà´£àµà´à´³àµâ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à´
നലàµà´àµ à´à´¨àµâà´ªàµà´àµà´àµ"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à´
നലàµà´àµ à´®àµà´àµà´°àµà´«àµà´£àµâ"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à´
നലàµà´àµ à´²àµà´¨àµâ-à´à´¨àµâ"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à´
നലàµà´àµ à´±àµà´¡à´¿à´¯àµ"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à´
നലàµà´àµ à´µàµà´¡à´¿à´¯àµ"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à´
നലàµà´àµ à´à´àµà´àµà´ªàµà´àµà´àµ"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à´
നലàµà´àµ à´¹àµà´¡àµà´«àµà´£àµà´à´³àµâ"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à´
നലàµà´àµ à´à´àµà´àµà´ªàµà´àµà´àµ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à´
നലàµà´àµ à´®àµà´£àµ à´à´àµà´àµà´ªàµà´àµà´àµ"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à´
നലàµà´àµ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à´
നലàµà´àµ à´®àµà´£àµ"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à´
നലàµà´àµ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à´
നലàµà´àµ സറàµà´£àµà´àµ 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ (IEC958) "
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ സറàµà´£àµà´àµ 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ സറàµà´£àµà´àµ 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ സറàµà´£àµà´àµ 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à´
നലàµà´àµ à´®àµà´£àµ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à´
നലàµà´àµ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "à´¡à´¿à´à´¿à´±àµà´±à´²àµâ à´¸àµà´±àµà´±àµà´°à´¿à´¯àµ à´¡àµà´¯àµà´ªàµà´²àµà´àµà´¸àµ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ലൠഫàµà´°àµà´àµà´µà´¨àµâസി à´à´®àµà´®à´¿à´±àµà´±à´°àµâ"
diff --git a/po/mr.po b/po/mr.po
index 5c05cc5..329b271 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 08:36+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-09 18:30+0530\n"
"Last-Translator: Sandeep Shedmake <sshedmak at redhat.com>\n"
"Language-Team: Marathi <fedora-trans-mr at redhat.com>\n"
@@ -18,12 +18,12 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -35,7 +35,7 @@ msgstr ""
"हॠसहसा ALSA डà¥à¤°à¤¾à¤à¤µà¤° '%s' à¤
à¤à¤¤à¤°à¥à¤à¤¤ बठà¤
शॠशà¤à¤¤à¥. à¤à¥à¤ªà¤¯à¤¾ या à¤
डà¤à¤£à¥à¤¸ ALSA डà¥à¤µà¥à¤¹à¤²à¤ªà¤° à¤à¤°à¥à¤¤à¤¾ "
"à¤à¤³à¤µà¤¾."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"हॠसहसा ALSA डà¥à¤°à¤¾à¤à¤µà¤° '%s' à¤
à¤à¤¤à¤°à¥à¤à¤¤ बठà¤
शॠशà¤à¤¤à¥. à¤à¥à¤ªà¤¯à¤¾ या à¤
डà¤à¤£à¥à¤¸ ALSA डà¥à¤µà¥à¤¹à¤²à¤ªà¤° à¤à¤°à¥à¤¤à¤¾ "
"à¤à¤³à¤µà¤¾."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -93,11 +93,11 @@ msgstr "à¤à¥à¤²à¥à¤à¥à¤¡à¥ NULL सà¥à¤à¤"
msgid "Null Output"
msgstr "Null à¤à¤à¤à¤ªà¥à¤"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à¤à¤à¤¤à¤°à¥à¤ à¤à¤¡à¤¿à¤"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "मà¥à¤¡à¥à¤®"
@@ -113,246 +113,268 @@ msgstr "नवà¥à¤¨ dl दाà¤à¤²à¤à¤°à¥à¤¤à¤¾ वाà¤à¤ª à¤à¤°à¤£à¥à¤¯
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader समावà¥à¤· à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "सà¤à¤à¥à¤¤ %s पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "बाहà¥à¤° पडत à¤à¤¹à¥."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "वापरà¤à¤°à¥à¤¤à¤¾ '%s' शà¥à¤§à¤£à¥ à¤
शà¤à¥à¤¯."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "à¤à¤ '%s' शà¥à¤§à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "वापरà¤à¤°à¥à¤¤à¤¾ '%s' (UID %lu) व à¤à¤ '%s' (GID %lu) à¤à¤¢à¤³à¤²à¥."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "वापरà¤à¤°à¥à¤¤à¤¾ '%s' व à¤à¤ '%s' à¤à¥ GID à¤à¥à¤³à¤¤ नाहà¥."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "वापरà¤à¤°à¥à¤¤à¤¾ '%s' à¤à¥ मà¥à¤à¥à¤¯ डिरà¥à¤à¥à¤à¥à¤°à¥ '%s' नाहà¥, दà¥à¤°à¥à¤²à¤à¥à¤· à¤à¤°à¤¤ à¤à¤¹à¥."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' बनवणà¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "à¤à¤ यादॠबदलवणà¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID बदलवणà¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID बदलवणà¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "रà¥à¤ परवानà¤à¥ यशसà¥à¤µà¥à¤°à¤¿à¤¤à¥à¤¯à¤¾ वà¤à¤³à¤²à¥."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ à¤à¤° पदà¥à¤§à¤¤ या पà¥à¤²à¥
à¤à¤«à¥à¤°à¥à¤® à¤à¤°à¥à¤¤à¤¾ समरà¥à¤¥à¥à¤¤ नाहà¥."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à¤à¤¦à¥à¤¶ à¤à¤³ वाà¤à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "डिमन à¤à¤¾à¤°à¥à¤¯à¤°à¤¤ नाहà¥"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "डिमन PID %u नà¥à¤°à¥à¤ª à¤à¤¾à¤°à¥à¤¯à¤°à¤¤ à¤à¤¹à¥"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "डिमन नषà¥à¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "हा à¤à¤¾à¤°à¥à¤¯à¤à¥à¤°à¤® रà¥à¤ नà¥à¤°à¥à¤ª à¤à¤¾à¤²à¤µà¤¿à¤£à¥à¤¯à¤¾à¤à¤°à¥à¤¤à¤¾ नाहॠ(à¤à¥à¤ªà¤°à¥à¤¯à¤à¤¤ --system निशà¥à¤à¤¿à¤¤ नाहà¥)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "रà¥à¤ परवानà¤à¥ à¤à¤µà¤¶à¥à¤¯à¤."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ à¤à¤à¤¨à¤¾à¤à¤à¤°à¥à¤¤à¤¾ --start समरà¥à¤¥à¥à¤¤ नाहà¥."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, परà¤à¤¤à¥ --disallow-exit निशà¥à¤à¤¿à¤¤ à¤à¥à¤²à¥ नाहà¥!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, परà¤à¤¤à¥ --disallow-module-loading निशà¥à¤à¤¿à¤¤ à¤à¥à¤²à¥ नाहà¥!"
+msgstr ""
+"पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, परà¤à¤¤à¥ --disallow-module-loading निशà¥à¤à¤¿à¤¤ à¤à¥à¤²à¥ नाहà¥!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, SHM पदà¥à¤§à¤¤ à¤à¤¬à¤°à¤¨à¤°à¤¿à¤¤à¥à¤¯à¤¾ à¤
à¤à¤¾à¤°à¥à¤¯à¤¾à¤¨à¥à¤µà¥à¤¤ à¤à¤°à¤¤ à¤à¤¹à¥!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥ à¤
à¤à¤¤à¤°à¥à¤à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤, रिà¤à¤¾à¤®à¥ वà¥à¤³ à¤à¤¬à¤°à¤¨à¤°à¤¿à¤¤à¥à¤¯à¤¾ à¤
à¤à¤¾à¤°à¥à¤¯à¤¾à¤¨à¥à¤µà¥à¤¤ à¤à¤°à¤¤ à¤à¤¹à¥!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "पाà¤à¤ª à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() à¤
पयशà¥: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "डिमन सà¥à¤à¤¾à¤°à¥à¤à¤
प à¤
पयशà¥."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "डिमन सà¥à¤à¤¾à¤°à¥à¤à¤
प यशसà¥à¤µà¥."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() à¤
पयशà¥: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "हॠPulseAudio %s à¤à¤¹à¥"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "à¤à¤à¤ªà¤¾à¤à¤²à¥à¤¶à¤¨ यà¤à¤®à¤¾à¤¨: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "à¤à¤à¤ªà¤¾à¤à¤²à¥à¤¶à¤¨ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "यà¤à¤®à¤¾à¤¨ वर à¤à¤¾à¤°à¥à¤¯à¤°à¤¤: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs à¤à¤¢à¤³à¤²à¥."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "पान à¤à¤à¤¾à¤° %lu बाà¤à¤à¤¸à¥ à¤à¤¹à¥"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind समरà¥à¤¥à¤¨à¤¶à¥ à¤à¤à¤ªà¤¾à¤à¤² à¤à¥à¤²à¥: हà¥à¤¯"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind समरà¥à¤¥à¤¨à¤¶à¥ à¤à¤à¤ªà¤¾à¤à¤² à¤à¥à¤²à¥: नाहà¥"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind पदà¥à¤§à¤¤à¥à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "यà¤à¤®à¤¾à¤¨ वर à¤à¤¾à¤°à¥à¤¯à¤°à¤¤: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "à¤
नà¥à¤à¥à¤² बिलà¥à¤¡: हà¥à¤¯"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à¤
नà¥à¤à¥à¤² बिलà¥à¤¡: नाहà¥"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG वरà¥à¤£à¥à¤à¥à¤¤, सरà¥à¤µ asserts à¤
à¤à¤¾à¤°à¥à¤¯à¤¾à¤¨à¥à¤µà¥à¤¤."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH वरà¥à¤£à¥à¤à¥à¤¤, फà¤à¥à¤¤ à¤à¤²à¤¦ मारà¥à¤à¥à¤¯ asserts à¤
à¤à¤¾à¤°à¥à¤¯à¤¾à¤¨à¥à¤µà¥à¤¤ à¤à¥à¤²à¥."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "सरà¥à¤µ asserts à¤à¤¾à¤°à¥à¤¯à¤¾à¤¨à¥à¤µà¥à¤¤ à¤à¥à¤²à¥."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "मशà¥à¤¨ ID पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "मशà¥à¤¨ ID %s à¤à¤¹à¥."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "सतà¥à¤° ID %s à¤à¤¹à¥."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "रनà¤à¤¾à¤à¤® डिरà¥à¤à¥à¤à¥à¤°à¥ %s वापरत à¤à¤¹à¥."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "सà¥à¤¥à¤¿à¤¤à¥ डिरà¥à¤à¥à¤à¥à¤°à¥ %s वापरत à¤à¤¹à¥."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "à¤à¤à¤ डिरà¥à¤à¥à¤à¥à¤°à¥ %s वापरत à¤à¤¹à¥."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "पà¥à¤°à¤£à¤¾à¤²à¥ पदà¥à¤§à¤¤à¥à¤¤ à¤à¤¾à¤°à¥à¤¯à¤°à¤¤: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -368,15 +390,15 @@ msgstr ""
"पà¥à¤°à¤£à¤¾à¤²à¥ मà¥à¤¡ दà¥à¤à¤¾à¤¦à¤¾à¤¯à¤ à¤à¤¹à¥ यासाठॠà¤à¥à¤ªà¤¯à¤¾ http://pulseaudio.org/wiki/"
"WhatIsWrongWithSystemMode वाà¤à¤¾."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() à¤
पयशà¥."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "नवà¥à¤¨ à¤à¤à¥à¤-बिà¤à¤¦à¥à¤¤à¤¾ à¤à¤¾à¤à¤®à¤° à¤à¤ªà¤²à¤¬à¥à¤§! Bon appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -384,27 +406,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() à¤
पयशà¥."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "डिमन पà¥à¤°à¤¾à¤°à¤à¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "विना विà¤à¤¾à¤ दाà¤à¤² à¤à¥à¤²à¥à¤¯à¤¾à¤¸ डिमन पà¥à¤°à¤¾à¤°à¤à¤ à¤à¤¾à¤²à¥, à¤à¤¾à¤°à¥à¤¯ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ नà¤à¤¾à¤°."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "डिमन सà¥à¤à¤¾à¤°à¥à¤à¤
प पà¥à¤°à¥à¤£ à¤à¤¾à¤²à¥."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "डिमन पà¥à¤°à¥à¤£à¤ªà¤£à¥ बà¤à¤¦ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ पà¥à¤°à¤¾à¤°à¤à¤ à¤à¥à¤²à¥."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "डिमन नषà¥à¤ à¤à¥à¤²à¥."
@@ -661,72 +683,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "मारà¥à¤: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ लà¥à¤ लà¤à¥à¤·à¥à¤¯ '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ लà¥à¤ सà¥à¤¤à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ पà¥à¤¨à¥à¤¹ सà¥
मà¥à¤ªà¤² पदà¥à¤§à¤¤ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit या पà¥à¤²à¥
à¤à¤«à¥à¤°à¥à¤® वर समरà¥à¤¥à¥à¤¤ नाहà¥."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ सà¥
मà¥à¤ªà¤² सà¥à¤µà¤°à¥à¤ª '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ सà¥
मà¥à¤ªà¤² दर '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ सà¥
मà¥à¤ªà¤² मारà¥à¤ '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ मारà¥à¤ मà¥
प '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ तà¥à¤à¤¡à¥ '%s' याà¤à¤à¥ à¤à¤à¥à¤£ सà¤à¤à¥à¤¯à¤¾."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ तà¥à¤à¤¡à¥à¤¯à¤¾à¤à¥ à¤à¤à¤¾à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à¤
वà¥à¤§ nice सà¥à¤¤à¤° '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à¤
वà¥à¤§ सà¥
मà¥à¤ªà¤² दर '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "सà¤à¤¯à¥à¤à¤¨à¤¾ फाà¤à¤² à¤à¤à¤¡à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -734,7 +761,7 @@ msgstr ""
"निशà¥à¤à¤¿à¤¤ मà¥à¤²à¤à¥à¤¤ वाहिनॠमà¥
पà¤à¤¡à¥ निशà¥à¤à¤¿à¤¤ à¤à¤à¥à¤£ मà¥à¤²à¤à¥à¤¤ वाहिनॠपà¥à¤à¥à¤·à¤¾ वà¥à¤à¤³à¥ वाहिनॠसà¤à¤à¥à¤¯à¤¾ "
"समाविषà¥à¤à¥à¤¤ à¤à¤¹à¥."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### सà¤à¤¯à¥à¤à¤¨à¤¾ फाà¤à¤²: %s पासà¥à¤¨ वाà¤à¤¾ ###\n"
@@ -780,8 +807,8 @@ msgid "Rear Right"
msgstr "पाठà¥à¤®à¤¾à¤à¥ à¤à¤à¤µà¥à¤à¤¡à¥"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "à¤à¤®à¥ à¤à¥à¤°à¤¿à¤à¥à¤µà¥à¤¨à¥à¤¸à¥ सà¥à¤°à¥à¤¤"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1126,191 +1153,191 @@ msgstr "XOpenDisplay() à¤
पयशà¥"
msgid "Failed to parse cookie data"
msgstr "à¤à¥à¤à¥ डà¥à¤à¤¾ वाà¤à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "सà¤à¤¯à¥à¤à¤¨à¤¾ फाà¤à¤² '%s' à¤à¤à¤¡à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à¤à¥à¤à¥ दाà¤à¤² à¤à¥à¤²à¥ नाहà¥. à¤à¥à¤³à¤µà¤£à¥à¤à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ à¤à¤°à¤¤ à¤à¤¹à¥."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à¤
परिà¤à¥à¤¤ वाढ '%s' à¤à¤°à¥à¤¤à¤¾ सà¤à¤¦à¥à¤¶ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "सà¥à¤à¥à¤°à¥à¤® रिà¤à¤¾à¤®à¥ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "पà¥à¤²à¥à¤¬à¥
ठसà¥à¤à¥à¤°à¥à¤® रिà¤à¤¾à¤®à¥ à¤à¤¾à¤²à¥."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "सरà¥à¤µà¥à¤¹à¤° à¤à¤°à¥à¤¤à¤¾ à¤à¥à¤³à¤µà¤£à¥ डà¥à¤°à¥à¤¨ à¤à¥à¤²à¥."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "सà¥à¤à¥à¤°à¥à¤® यशसà¥à¤µà¥à¤°à¤¿à¤¤à¥à¤¯à¤¾ निरà¥à¤®à¤¾à¤£ à¤à¥à¤²à¥."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "बफर मà¥à¤à¥à¤°à¥à¤à¥à¤¸à¥: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "बफर मà¥à¤à¥à¤°à¥à¤à¥à¤¸à¥: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "à¤à¤¦à¤¾à¤¹à¤°à¤£à¤¾à¤°à¥à¤¥ spec '%s', वाहिनॠनà¤à¤¾à¤¶à¤¾ '%s' वापरत à¤à¤¹à¥."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "साधन %s शॠà¤à¥à¤³à¤²à¥ (%u, %s ससà¥à¤ªà¥à¤à¤¡ à¤à¥à¤²à¥)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "सà¥à¤à¥à¤°à¥à¤® तà¥à¤°à¥à¤à¥: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® साधन ससà¥à¤ªà¥à¤à¤¡ à¤à¥à¤²à¥.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® साधन पà¥à¤¨à¤ सà¥à¤°à¥ à¤à¥à¤²à¥.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® underrun.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® overrun.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® started.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® साधन %s à¤à¤¡à¥ सà¥à¤¥à¤¾à¤¨à¤¾à¤à¤¤à¤°à¥à¤¤ à¤à¥à¤²à¥ (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "नाहॠ"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "सà¥à¤à¥à¤°à¥à¤® बफर à¤à¥à¤£à¤§à¤°à¥à¤® बदललà¥.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "à¤à¥à¤³à¤µà¤£à¥ सà¥à¤¥à¤¾à¤ªà¥à¤¤ à¤à¥à¤²à¥.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "à¤à¥à¤³à¤µà¤£à¥ à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "सà¤à¤à¥à¤¤ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥, बाहà¥à¤° पडत à¤à¤¹à¥."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "विलà¤à¤¬ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "वà¥à¤³: %0.3f sec; विलà¤à¤¬: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1362,10 +1389,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1424,7 +1455,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1435,168 +1466,169 @@ msgstr ""
"libpulse %s शॠà¤à¤à¤ªà¤¾à¤ à¤à¥à¤²à¥\n"
"libpulse %s शॠलिà¤à¤ à¤à¥à¤²à¥\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à¤
वà¥à¤§ à¤à¥à¤²à¤¾à¤à¤à¤à¤à¥ नाव '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à¤
वà¥à¤§ सà¥à¤à¥à¤°à¥à¤®à¤à¥ नाव '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à¤
वà¥à¤§ वाहिनॠनà¤à¤¾à¤¶à¤¾ '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à¤
वà¥à¤§ विलà¤à¤¬ सà¤à¤¯à¥à¤à¤¨à¤¾ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à¤
वà¥à¤§ à¤à¤¾à¤°à¥à¤¯ वà¥à¤³ सà¤à¤¯à¥à¤à¤¨à¤¾ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à¤
वà¥à¤§ à¤à¥à¤£à¤§à¤°à¥à¤® '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à¤
परिà¤à¥à¤¤ फाà¤à¤² रà¥à¤ªà¤£ %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à¤
वà¥à¤§ सà¥
मà¥à¤ªà¤² सà¤à¤¯à¥à¤à¤¨à¤¾"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à¤à¥à¤ª à¤à¤¾à¤¸à¥à¤¤ बाब."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "फाà¤à¤²à¤¸à¤¾à¤ ॠसà¥
मà¥à¤ªà¤² माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "à¤à¤µà¤¾à¤ फाà¤à¤² à¤à¤à¤¡à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "सावधानता: निरà¥à¤¦à¥à¤¶à¥à¤¤ à¤à¤¾à¤à¤£à¥ सà¤à¤¯à¥à¤à¤¨à¤¾ फाà¤à¤²à¤®à¤§à¥à¤² सà¤à¤¯à¥à¤à¤¨à¤¾à¤¶à¥ à¤à¥à¤¡à¥à¤¨ पà¥à¤¨à¤ लिहà¥à¤²à¥ à¤à¤¾à¤à¤²."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "फाà¤à¤²à¤ªà¤¾à¤¸à¥à¤¨ à¤à¤¾à¤à¤£à¥ सà¤à¤¯à¥à¤à¤¨à¤¾ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "सावधानता: फाà¤à¤²à¤ªà¤¾à¤¸à¥à¤¨ वाहिनॠनà¤à¤¾à¤¶à¤¾ à¤à¤³à¤à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "वाहिनॠनà¤à¤¾à¤¶à¤¾ à¤à¤¾à¤à¤£à¥ सà¤à¤¯à¥à¤à¤¨à¤¾à¤¶à¥ à¤à¥à¤³à¤¤ नाहà¥"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "सावधानता: वाहिनॠनà¤à¤¾à¤¶à¤¾ फाà¤à¤²à¤®à¤§à¥à¤¯à¥ लिहणà¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "%s सà¥à¤à¥à¤°à¥à¤® à¤à¤¾à¤à¤£à¥ सà¤à¤¯à¥à¤à¤¨à¤¾ '%s' व वाहिनॠनà¤à¤¾à¤¶à¤¾ '%s' सह à¤à¤à¤¡à¤¤ à¤à¤¹à¥."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "रà¥à¤à¥à¤°à¥à¤¡à¥à¤à¤"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "पà¥à¤²à¥à¤¬à¥
à¤"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() à¤
पयशà¥."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() à¤
पयशà¥."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() à¤
पयशà¥."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() à¤
पयशà¥: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rrttime_new() à¤
पयशà¥."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() à¤
पयशà¥."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "ससà¥à¤ªà¥à¤à¤¡ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "पà¥à¤¨à¥à¤¹à¤¾ à¤à¤¾à¤²à¥ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "सावधानता: à¤à¤µà¤¾à¤ सरà¥à¤µà¤° सà¥à¤¥à¤¾à¤¨à¥à¤¯ नाहà¥, ससà¥à¤ªà¥à¤à¤¡ à¤à¤°à¤¤ नाहà¥.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "à¤à¥à¤³à¤µà¤£à¥ à¤
पयशà¥: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥, बाहà¥à¤° पडत à¤à¤¹à¥.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "सावधानता: à¤à¤ª à¤à¤¾à¤°à¥à¤¯ सà¤à¤à¥à¤¤ %u दà¥à¤µà¤¾à¤°à¥ नषà¥à¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¤ à¤à¤²à¥\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1615,7 +1647,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1626,50 +1658,61 @@ msgstr ""
"libpulse %s शॠà¤à¤à¤ªà¤¾à¤ à¤à¥à¤²à¥\n"
"libpulse %s शॠलिà¤à¤ à¤à¥à¤²à¥\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() à¤
पयशà¥.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() à¤
पयशà¥.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() à¤
पयशà¥.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "à¤à¤à¤¡à¥à¤µà¤¾à¤°à¥ पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "वरà¥à¤¤à¤®à¤¾à¤¨à¤à¥à¤·à¤£à¥ वापरणà¥à¤¤ à¤à¤¹à¥: %2$s बाà¤à¤à¤¸à¥ समाविषà¥à¤à¥à¤¤ à¤à¤à¥à¤£ %1$u बà¥à¤²à¥à¤à¥à¤¸à¥ .\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "सà¤à¤ªà¥à¤°à¥à¤£ à¤à¤¾à¤°à¥à¤¯à¤à¤¾à¤³à¤µà¥à¤³à¥ लाà¤à¥ à¤à¥à¤²à¥: %2$s बाà¤à¤à¤¸à¥ समाविषà¥à¤à¥à¤¤ à¤à¤à¥à¤£ %1$u बà¥à¤²à¥à¤à¥à¤¸à¥ .\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "सà¥
पल à¤à¥
शॠà¤à¤à¤¾à¤°: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "सरà¥à¤µà¤° माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1677,7 +1720,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"वापरà¤à¤°à¥à¤¤à¤¾ नाव: %s\n"
"à¤à¤¯à¥à¤à¤ नाव: %s\n"
@@ -1689,12 +1732,12 @@ msgstr ""
"मà¥à¤²à¤à¥à¤¤ सà¥à¤°à¥à¤¤: %s\n"
"à¤à¥à¤à¥à¤: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "sink माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1733,22 +1776,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tपà¥à¤°à¥à¤à¤¸à¥:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tसà¤à¥à¤°à¥à¤¯ पà¥à¤°à¥à¤: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "सà¥à¤°à¥à¤¤ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1787,20 +1830,20 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "विà¤à¤¾à¤ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1817,12 +1860,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à¤à¥à¤²à¤¾à¤à¤à¤ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1837,12 +1880,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à¤à¤¾à¤°à¥à¤¡ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1859,22 +1902,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tसà¤à¤à¥à¤·à¤¿à¤ªà¥à¤¤ माहितà¥:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tसà¤à¥à¤°à¥à¤¯ सà¤à¤à¥à¤·à¤¿à¤ªà¥à¤¤ माहितà¥: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "सà¥à¤à¤ à¤à¤à¤ªà¥à¤ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1911,12 +1954,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "सà¥à¤°à¥à¤¤ à¤à¤à¤à¤ªà¥à¤ माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1945,12 +1988,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "सà¥
मà¥à¤ªà¤² माहितॠपà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1981,26 +2024,80 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "सà¥
मà¥à¤ªà¤² à¤
पलà¥à¤¡ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "फाà¤à¤²à¤à¥ à¤
यà¥à¤à¥à¤¯ समापà¥à¤¤à¥"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à¤
वà¥à¤§ सरà¥à¤µà¤°"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤¾à¤²à¥, बाहà¥à¤° पडत à¤à¤¹à¥."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2023,6 +2120,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2062,7 +2160,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2073,103 +2171,106 @@ msgstr ""
"libpulse %s सह à¤à¤à¤ªà¤¾à¤à¤² à¤à¥à¤²à¥\n"
"libpulse %s सह à¤à¥à¤³à¤²à¥\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "à¤à¥à¤ªà¤¯à¤¾ दाà¤à¤² à¤à¤°à¤£à¥à¤¯à¤¾à¤à¥à¤à¥ तातà¥à¤ªà¥à¤°à¥à¤¤à¥ फाà¤à¤² निरà¥à¤¦à¥à¤¶à¥à¤¤ à¤à¤°à¤¾"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "à¤à¤µà¤¾à¤ फाà¤à¤² à¤à¤à¤¡à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "सावधानता: फाà¤à¤²à¤ªà¤¾à¤¸à¥à¤¨ à¤à¤¾à¤à¤£à¥ सà¤à¤¯à¥à¤à¤¨à¤¾ à¤à¤³à¤à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à¤à¤¾à¤²à¤µà¤£à¥à¤¯à¤¾à¤à¤°à¥à¤¤à¤¾ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तातà¥à¤ªà¥à¤°à¥à¤¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à¤à¤¾à¤¢à¥à¤¨ à¤à¤¾à¤à¤£à¥à¤¯à¤¾à¤à¤°à¥à¤¤à¤¾ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तातà¥à¤ªà¥à¤°à¥à¤¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤à¤ à¤à¤à¤ªà¥à¤ निरà¥à¤¦à¥à¤¶à¤¾à¤à¤ व सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ à¤à¤à¤à¤ªà¥à¤ à¤à¤à¤¡à¥à¤à¥à¤¸ सà¥à¤°à¥à¤¤ व सà¥à¤°à¥à¤¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ विà¤à¤¾à¤à¤¾à¤à¥ नाव व बाब निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ विà¤à¤¾à¤ à¤à¤à¤¡à¥à¤à¥à¤¸à¥ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤°à¥à¤¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
+msgstr ""
+"तà¥à¤®à¥à¤¹à¥ à¤à¤à¤¾à¤ªà¥à¤à¥à¤·à¤¾ à¤à¤¾à¤¸à¥à¤¤ सà¥à¤°à¥à¤¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¥ शà¤à¤¤ नाहà¥. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बà¥à¤²à¥à¤¯à¤¨ मà¥à¤²à¥à¤¯ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ à¤à¤¾à¤°à¥à¤¡à¤à¥ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व पà¥à¤°à¥à¤«à¤¾à¤à¤² नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤à¤ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व पà¥à¤°à¥à¤à¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤°à¥à¤¤ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व पà¥à¤°à¥à¤à¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤à¤ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व पà¥à¤°à¥à¤à¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à¤
वà¥à¤§ à¤à¤à¤¡à¤¾à¤à¥ सà¤à¤¯à¥à¤à¤¨à¤¾"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤°à¥à¤¤ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व à¤à¤à¤¡à¤¾à¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤à¤ à¤à¤à¤ªà¥à¤ à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à¤
वà¥à¤§ सà¥à¤à¤ à¤à¤à¤ªà¥à¤ à¤à¤à¤¡à¥à¤à¥à¤¸à¥"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤à¤ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व पà¥à¤°à¥à¤à¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤°à¥à¤¤ नाव/à¤à¤à¤¡à¥à¤à¥à¤¸à¥ व पà¥à¤°à¥à¤à¤à¥ नाव निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सà¥à¤à¤ à¤à¤à¤ªà¥à¤ निरà¥à¤¦à¥à¤¶à¤¾à¤à¤ व सà¥à¤à¤ निशà¥à¤à¤¿à¤¤ à¤à¤°à¤¾à¤µà¥ लाà¤à¥à¤²"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à¤
वà¥à¤§ सà¥à¤à¤ à¤à¤à¤ªà¥à¤ à¤à¤à¤¡à¥à¤à¥à¤¸à¥ सà¤à¤¯à¥à¤à¤¨à¤¾"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "वà¥à¤§ à¤à¤¦à¥à¤¶ निशà¥à¤à¤¿à¤¤ à¤à¥à¤²à¥ नाहà¥."
@@ -2252,44 +2353,44 @@ msgstr "à¤à¥à¤à¥ डà¥à¤à¤¾ दाà¤à¤² à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पय
msgid "Not yet implemented.\n"
msgstr "à¤
à¤à¥à¤¨à¤¹à¥ लाà¤à¥ à¤à¥à¤²à¥ नाहà¥.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "PulseAudio डिमन à¤à¤¾à¤°à¥à¤¯à¤°à¤¤ नाहà¥, à¤à¤¿à¤à¤µà¤¾ सतà¥à¤° डिमन नà¥à¤°à¥à¤ª à¤à¤¾à¤°à¥à¤¯à¤°à¤¤ नाहà¥."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio डिमन पà¥à¤°à¥à¤£à¤ªà¤£à¥ नषà¥à¤ à¤à¤°à¤£à¥à¤¯à¤¾à¤¸ à¤
पयशà¥."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "डिमन पà¥à¤°à¤¤à¤¿à¤¸à¤¾à¤¦ दà¥à¤¤ नाहà¥."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn à¤à¥à¤²à¥à¤ª à¤à¤°à¥à¤¤à¤¾ पà¥à¤°à¤µà¥à¤¶ पà¥à¤°à¤¾à¤ªà¥à¤¯ à¤
शà¤à¥à¤¯."
@@ -2324,38 +2425,42 @@ msgstr ""
"मà¥à¤²à¥à¤¯ < min_avail à¤
सावà¥."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "बà¤à¤¦ à¤à¤°à¤¾"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "हाय फिडà¥à¤²à¤¿à¤à¥ पà¥à¤²à¥à¤¬à¥
ठ(A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "हाय फिडà¥à¤²à¥à¤à¥ à¤à¥
पà¤à¤° (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à¤à¥à¤²à¤¿à¤«à¥à¤¨à¥ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio à¤à¤µà¤¾à¤ सरà¥à¤µà¤°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à¤à¤à¤ साधणà¥"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à¤à¤à¤ªà¥à¤ साधणà¥"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ वरà¥à¤² à¤à¤¡à¤¿à¤"
@@ -2419,133 +2524,159 @@ msgstr "à¤à¤®à¤ªà¥à¤²à¤¿à¤«à¤¾à¤¯à¤°"
msgid "No Amplifier"
msgstr "à¤à¤®à¤ªà¥à¤²à¤¿à¤«à¤¾à¤¯à¤° à¤
शà¤à¥à¤¯"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "बà¥à¤¸à¥à¤"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "बà¥à¤¸à¥à¤ à¤
शà¤à¥à¤¯"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à¤à¤¨à¤²à¥à¤ हà¥à¤¡à¤«à¥à¤¨à¥à¤¸à¥"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à¤à¤¨à¤²à¥à¤ à¤à¤à¤ªà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à¤à¤¨à¤²à¥à¤ माà¤à¤à¥à¤°à¥à¤«à¥à¤¨"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à¤à¤¨à¤²à¥à¤ लाà¤à¤¨-à¤à¤¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à¤à¤¨à¤²à¥à¤ रà¥à¤¡à¤¿à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à¤à¤¨à¤²à¥à¤ विडà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à¤à¤¨à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à¤à¤¨à¤²à¥à¤ हà¥à¤¡à¤«à¥à¤¨à¥à¤¸à¥"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à¤à¤¨à¤²à¥à¤ à¤à¤à¤à¤ªà¥à¤ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à¤à¤¨à¤²à¥à¤ मà¥à¤¨à¥ à¤à¤à¤à¤ªà¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à¤à¤¨à¤²à¥à¤ सà¥à¤à¤¿à¤°à¥à¤"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à¤à¤¨à¤²à¥à¤ मà¥à¤¨à¥"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à¤à¤¨à¤²à¥à¤ सà¥à¤à¤¿à¤°à¥à¤"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à¤à¤¨à¤²à¥à¤ सरà¥à¤°à¤¾à¤à¤à¤¡ 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "डिà¤à¥à¤à¤² सà¥à¤à¤¿à¤°à¥à¤ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "डिà¤à¥à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "डिà¤à¥à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "डिà¤à¥à¤à¤² सरà¥à¤°à¤¾à¤à¤à¤¡ 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "डिà¤à¥à¤à¤² सà¥à¤à¤¿à¤°à¥à¤ (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à¤à¤¨à¤²à¥à¤ मà¥à¤¨à¥ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à¤à¤¨à¤²à¥à¤ सà¥à¤à¤¿à¤°à¥à¤ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "डिà¤à¥à¤à¤² सà¥à¤à¤¿à¤°à¥à¤ डà¥à¤¯à¥à¤ªà¥à¤²à¥à¤à¥à¤¸à¥ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "à¤à¤®à¥ à¤à¥à¤°à¤¿à¤à¥à¤µà¥à¤¨à¥à¤¸à¥ सà¥à¤°à¥à¤¤"
diff --git a/po/nl.po b/po/nl.po
index a1c127e..bb44e54 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-14 04:44+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-14 11:00+0100\n"
"Last-Translator: Reinout van Schouwen <reinout at gmail.com>\n"
"Language-Team: Dutch <vertaling at vrijschrift.org>\n"
@@ -17,12 +17,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -35,7 +35,7 @@ msgstr ""
"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
"probleem alstublieft aan de ALSA-ontwikkelaars."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -48,7 +48,7 @@ msgstr ""
"Waarschijnlijk is dit een fout in het ALSA-stuurprogramma â%sâ. Meld dit "
"probleem alstublieft aan de ALSA-ontwikkelaars."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -82,11 +82,11 @@ msgid ""
"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
"input control values>"
msgstr ""
-"sink_name=<naam voor de afvoer> sink_properties=<eigenschappen van de afvoer> "
-"master=<naam van de te filteren afvoer> format=<sampleformaat> rate=<sample "
-"snelheid> channels=<aantal kanalen> channel_map=<kanaalkaart> plugin=<ladspa "
-"pluginnaam> label=<ladspa pluginlabel> control=<kommagescheiden "
-"lijst van invoercontrolewaarden>"
+"sink_name=<naam voor de afvoer> sink_properties=<eigenschappen van de "
+"afvoer> master=<naam van de te filteren afvoer> format=<sampleformaat> "
+"rate=<sample snelheid> channels=<aantal kanalen> channel_map=<kanaalkaart> "
+"plugin=<ladspa pluginnaam> label=<ladspa pluginlabel> "
+"control=<kommagescheiden lijst van invoercontrolewaarden>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -96,11 +96,11 @@ msgstr "Geklokte NULL afvoer"
msgid "Null Output"
msgstr "Null-uitvoer"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Intern geluid"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -116,92 +116,98 @@ msgstr "Kon die nieuwe dl lader niet toekennen."
msgid "Failed to add bind-now-loader."
msgstr "Kon bind-now-loader niet toevoegen."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Signaal %s ontvangen."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Afsluiten."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Kon gebruiker '%s' niet vinden."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Kon groep â%sâ niet vinden."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Gebruiker â%sâ (UID %lu) en groep â%sâ (GID %lu) gevonden."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID van gebruiker â%sâ en van groep â%sâ passen niet bij elkaar."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Persoonlijke map van gebruiker â%sâ is niet â%sâ, negeer het."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Aanmaken van â%sâ mislukt: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Veranderen van groepslijst mislukt: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Veranderen van GID mislukt: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Veranderen van UID mislukt: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Beheerdersrechten met succes laten vervallen."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Systeembrede modus wordt op dit platform niet ondersteund."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) mislukte: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Analyseren van de opdrachtregel mislukte."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Voorziening draait niet"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Voorziening draait met PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Elimineren van voorziening mislukt: â%sâ"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -209,156 +215,171 @@ msgstr ""
"Dit programma is niet bedoeld om als root gedraaid te worden (behalve als --"
"system is opgegeven)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Beheerdersrechten vereist."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start wordt niet ondersteund voor systeeminstanties"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "Draaiend in systeemmodus, maar --disallow-exit is niet ingesteld!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"Draaiend in systeemmodus, maar --disallow-module-loading is niet gezet!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Draaiend in systeemmodus, geforceerd uitzetten van SHM-modus!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "Draaiend in systeemmodus, geforceerd uitzetten van exit idle time!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Verkrijgen van stdio mislukte."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe mislukte: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() mislukte: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() mislukte: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Voorziening opstarten mislukt."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Voorziening met succes opgestart."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() mislukte: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Dit is PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Compilatiehost: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilatie-CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Draaiend op host: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPU's gevonden."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Pagina grootte is %lu bytes"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Gecompileerd met Valgrind ondersteuning: ja"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Gecompileerd met Valgrind ondersteuning: nee"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Draaiend in valgrind-modus: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Draaiend op host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Geoptimaliseerd gebouwd: ja"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Geoptimaliseerd gebouwd: nee"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG gedefinieerd, alle asserts uitgezet."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH gedefinieerd, alleen fast path-asserts uitgezet."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Alle asserts aangezet."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Machine-ID verkrijgen mislukt"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "Machine-ID is: %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "Sessie-ID is: %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Gebruik van runtime-map %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Verbruik van state-map %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Gebruik van module-map %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Draaiend in systeemmodus: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -367,22 +388,22 @@ msgid ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
msgstr ""
-"OK, dus u draait PA in systeemmodus. Merk op dat u dit "
-"waarschijnlijk beter niet kunt doen.\n"
+"OK, dus u draait PA in systeemmodus. Merk op dat u dit waarschijnlijk beter "
+"niet kunt doen.\n"
"Als u het toch doet dan is het uw eigen schuld als dingen niet werken zoals "
"verwacht.\n"
-"Lees http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode voor een "
-"uitleg waarom systeemmodus gewoonlijk een slecht idee is."
+"Lees http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode voor een uitleg "
+"waarom systeemmodus gewoonlijk een slecht idee is."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() mislukte."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Verse high-resolution timers beschikbaar! Smakelijk eten!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -390,27 +411,27 @@ msgstr ""
"Kerel, je kernel stinkt! De aanbeveling van de chef is vandaag Linux met "
"aangezette high-resolution timers!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() mislukte."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Initialiseren van de voorziening mislukt."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Voorziening opgestart zonder geladen modules, dat werkt niet."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Voorziening opstarten is klaar."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Voorziening afsluiten is begonnen."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Voorziening is afgesloten."
@@ -677,72 +698,77 @@ msgstr "ACHTERHAALDHEIDSWAARSCHUWING: %s\n"
msgid "Path: %s\n"
msgstr "Pad: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Ongeldig logdoel '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Ongeldig logniveau '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Ongeldige resample-methode â%sâ."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Ongeldige rlimit â%sâ."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit wordt niet ondersteund op dit platform."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Ongeldig sampleformaat â%sâ."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Ongeldige samlperate â%sâ."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Ongeldige sample-kanalen â%sâ."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Ongeldige kanalenkaart â%sâ."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Ongeldig aantal fragmenten '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Ongeldige fragmentgrootte â%sâ."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Ongeldig nice niveau â%sâ."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Ongeldige samlperate â%sâ."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Openen van configuratiebestand %s mislukt."
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -750,7 +776,7 @@ msgstr ""
"De opgegeven standaard kanalenkaart heeft een ander aantal kanalen dan de "
"opgegeven standaard aantal kanalen."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lees uit het configuratiebestand: %s ###\n"
@@ -796,8 +822,8 @@ msgid "Rear Right"
msgstr "Achter rechts"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Lage-frequentiezender"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1142,191 +1168,191 @@ msgstr "XOpenDisplay() mislukte"
msgid "Failed to parse cookie data"
msgstr "Analyseren van cookie-data mislukt"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Open van configuratiebestand â%sâ mislukte: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Geen cookie geladen. Probeer zonder cookie te verbinden."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Ontving boodschap voor onbekende extensie â%sâ"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Afvoeren stroom %s mislukte"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Afspelen van afgevoerde stroom."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Vervinding naar server afvoeren."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() mislukte: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() mislukte: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() mislukte: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Stroom met succes aangemaakt."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() mislukte: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Buffermetriek: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Buffermetriek: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Gebruik sample-spec '%s', kanaal map '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Verbonden met apparaat %s (%u, %sopgeschort)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Stroomfout: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Stroomapparaat opgeschort.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Stroomapparaat hervat.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Te weinig data voor stroom.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Data-overschrijding voor stroom.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Stroom gestart.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Stroom verplaatst naar apparaat %s (%u, %sopgeschort).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "niet "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Stroom buffer attributen veranderden.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Verbinding bereikt.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() mislukte: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() mislukte: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() mislukte: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Verbindingsfout: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Kreeg EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() mislukte: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Ontving signaal, afsluiten."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Latentie krijgen mislukte: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Tijd: %0.3f sec; Latentie: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() mislukte: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1378,10 +1404,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opties]\n"
@@ -1404,8 +1434,8 @@ msgstr ""
"genoemd\n"
" --volume=VOLUME Geef het begins (lineare) volume in "
"reeks 0...65536\n"
-" --rate=SAMPLERATE De samplerate in Hz "
-"(standaard 44100)\n"
+" --rate=SAMPLERATE De samplerate in Hz (standaard "
+"44100)\n"
" --format=SAMPLEFORMAT Het sampletype, een van s16le, "
"s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
@@ -1417,11 +1447,11 @@ msgstr ""
" (standaard 2)\n"
" --channel-map=CHANNELMAP Kanaalkaart te gebruiken in plaats "
"van de standaard\n"
-" --fix-format Neem het sampleformaat over "
-"van de afvoer waar de stroom\n"
+" --fix-format Neem het sampleformaat over van de "
+"afvoer waar de stroom\n"
" mee verbonden is.\n"
-" --fix-rate Neem de samplerate over "
-"van de afvoer waar de stroom\n"
+" --fix-rate Neem de samplerate over van de "
+"afvoer waar de stroom\n"
" mee verbonden is.\n"
" --fix-channels Neem het aantal kanalen en de kanaal "
"map over\n"
@@ -1443,7 +1473,7 @@ msgstr ""
" --list-file-formats Laat beschikbare bestandsformaten "
"zien.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1454,68 +1484,68 @@ msgstr ""
"Gecompileerd met libpulse %s\n"
"Gelinkt met libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Ongeldige clientnaam â%sâ."
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Ongeldige stroomnaam â%sâ."
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Ongeldige kanaalkaart â%sâ."
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Ongeldige latentie-specificatie â%sâ."
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Ongeldige procestijdspecificatie â%sâ."
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Ongeldige eigenschap â%sâ."
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Ongeldig bestandsformaat %s"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Ongeldige samplespecificatie"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Te veel argumenten."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Aanmaken van samplespecificatie voor bestand mislukt."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Openen van geluidsbestand mislukte."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1523,103 +1553,103 @@ msgstr ""
"Waarschuwing: opgegeven bemonster specificatie zal overschreven worden met "
"de specificatie van het bestand."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Bepalen van samplespecificatie van het bestand mislukte."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Waarschuwing: Bepalen van kanaalkaart van bestand mislukte."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Kanaal map komt niet overeen met bemonster specificatie."
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Waarschuwing: schrijven van kanaalkaart naar bestand mislukte."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"Openen van een %s stroom met samplespecificatie â%sâ en kanaalkaart â%sâ."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "opnemen"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "afspelen"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() mislukte."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() mislukte."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_cotext_new() mislukte."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() mislukte: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() mislukte."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() mislukte."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Opschorten mislukte: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Vervolgen mislukte: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "WAARSCHUWING: Geluidsserver is niet lokaal, geen opschorten.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Verbonding mislukte: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Kreeg SIGINT, verlaten.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "WAARSCHUWING: kind proces afgesloten door signaal %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1638,7 +1668,7 @@ msgstr ""
"verbonden wordt\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1649,52 +1679,63 @@ msgstr ""
"Gecompileerd met libpulse %s\n"
"Gelinkt met libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() mislukte.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() mislukte.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() mislukte.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Verkrijgen van statistiek %s mislukte"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Op dit moment in gebruik: %u blokken bevattende in totaal %s bytes.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"Toegewezen tijdens de gehele levensduur: %u blokken bevattende in totaal %s "
"butes.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Sample-buffergrootte: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Server informatie verkrijgen mislukte: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1702,7 +1743,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Gebruikersnaam: %s\n"
"Hostnaam: %s\n"
@@ -1714,12 +1755,12 @@ msgstr ""
"Standaard bron: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Verkrijgen afvoerinformatie mislukte: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1758,22 +1799,22 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPoorten:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tActieve poort: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Verkrijgen van broninformatie mislukt: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1812,20 +1853,20 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n.v.t."
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Verkrijgen van module informatie mislukte: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1842,12 +1883,12 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Verkrijgen van clientinformatie mislukt: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1862,12 +1903,12 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Verkrijgen van kaartinformatie mislukt: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1884,22 +1925,22 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfielen:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tActieve profiel: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Verkrijgen van afvoer-invoerinformatie mislukt: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1936,12 +1977,12 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Verkrijgen van bron-uitvoerinformatie mislukt: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1970,12 +2011,12 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Verkrijgen van sample-informatie mislukt: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2006,26 +2047,80 @@ msgstr ""
"\tEigenschappen:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Mislukt: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Uploaden van monster mislukte: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Voortijdig einde van bestand"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Ongeldige server"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Ontving SIGINT, afsluiten."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2048,6 +2143,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2087,7 +2183,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2098,107 +2194,108 @@ msgstr ""
"Gecompileerd met libpulse %s\n"
"Gelinkt met libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Geef een te laden samplebestand op"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Openen geluidsbestand mislukt."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
-msgstr ""
-"Waarschuwing: Bepalen van samplespecificatie van bestand mislukte."
+msgstr "Waarschuwing: Bepalen van samplespecificatie van bestand mislukte."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "U dient een samplenaam op te geven om af te spelen"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "U dient een samplenaam op te geven om te verwijderen"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "U dient een afvoer-invoerindex en een afvoer op te geven"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "U dient een bron-uitvoerindex en een bron op te geven"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "U dient een modulenaam en argumenten op te geven."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "U dient een module index op te geven"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-"U kunt niet meer dan een afvoer opgeven. U dient een boolean waarde op te geven."
+"U kunt niet meer dan een afvoer opgeven. U dient een boolean waarde op te "
+"geven."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
-"U kunt niet meer dan één bron opgeven. u dient een boolean waarde op te geven."
+"U kunt niet meer dan één bron opgeven. u dient een boolean waarde op te "
+"geven."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "U dient een kaartnaam/index en een profielnaam op te geven"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "U dient een afvoernaam/index en een poortnaam op te geven"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "U dient een bronnaam/index en een poortnaam op te geven"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "U dient een afvoernaam/index en een volume op te geven"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Ongeldige volume-opgave"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "U dient een bronnaam/index en een volume op te geven"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "U dient een afvoer-invoerindex en een volume op te geven"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Ongeldige afvoer-invoerindex"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "U dient een afvoernaam/index en een dempingsboolean op te geven"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "U dient een bronnaam/index en een dempingsboolean op te geven"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "U dient een afvoer-invoerindex en een dempingsboolean op te geven"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Ongeldige afvoer-invoerindex opgave"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Geen geldige opdracht opgegeven."
@@ -2282,45 +2379,46 @@ msgstr "Cookiedata laden mislukt\n"
msgid "Not yet implemented.\n"
msgstr "Nog niet geïmplementeerd.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
-"Er draait geen PulseAudio-voorziening, of het draait niet als sessievoorziening."
+"Er draait geen PulseAudio-voorziening, of het draait niet als "
+"sessievoorziening."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio-voorziening uitzetten mislukt."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Voorziening reageert niet."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Kan geen toegang krijgen tot autospawn blokkade."
@@ -2359,38 +2457,42 @@ msgstr ""
"() gaf 0 terug of een andere waarde < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Uit"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "High Fidelity Playback (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "High Fidelity afvangen (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telefonie duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio-geluidsserver"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Uitvoerapparaten"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Invoerapparaten"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Geluid op @HOSTNAME@"
@@ -2454,136 +2556,163 @@ msgstr "Versterker"
msgid "No Amplifier"
msgstr "Geen versterker"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Boostversterking"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Geen boostversterking"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analoge koptelefoon"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Analoge invoer"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Analoge microfoon"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analoge lijn-in"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analoge radio"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analoge video"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Analoge output"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Analoge koptelefoon"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analoge output (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analoge mono-uitvoer"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analoog stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s/%s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analoog mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analoog stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analoog surround 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analoog surround 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analoog surround 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analoog surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analoog surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analoog surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analoog surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analoog surround 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analoog surround 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analoog surround 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analoog surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digitaal stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digitaal surround 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digitaal surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digitaal surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digitaal stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analoog mono duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analoog stereo duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digitaal stereo duplex (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Lage-frequentiezender"
+
#, fuzzy
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Ongeldige resample methode '%s'."
diff --git a/po/or.po b/po/or.po
index 4efdc1f..47337a0 100644
--- a/po/or.po
+++ b/po/or.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.or\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-14 08:57+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-11-14 15:33+0530\n"
"Last-Translator: Manoj Kumar Giri <mgiri at redhat.com>\n"
"Language-Team: Oriya <oriya-it at googlegroups.com>\n"
@@ -15,7 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
"\n"
"\n"
"\n"
@@ -32,12 +33,12 @@ msgstr ""
"\n"
"\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -50,7 +51,7 @@ msgstr ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -63,7 +64,7 @@ msgstr ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -109,11 +110,11 @@ msgstr "ସମàାନàବରàତàତି ଶàନàà ସିà¬àà¬"
msgid "Null Output"
msgstr "ଶàନàà ଫଳାଫଳ"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à¬à¬ààନàତରàଣ ଧàà±à¬¨à¬¿"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "ମଡàମ"
@@ -129,92 +130,98 @@ msgstr "ନàତନ dl ଧାରà¬à¬à ବଣàà¬à¬¨ à¬à¬°à¬¿à¬¬à¬¾à¬°à
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loaderà¬à ଯàଠà¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "ସà¬à¬àତ %s ପାà¬à¬²à¬¾à¥¤"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "à¬à¬¤àତàà¬à¬¿à¬¤ à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "à¬à¬¾à¬³à¬ '%s' à¬à à¬àà¬à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "ସମàହ '%s' à¬à à¬àà¬à¬¿ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "à¬à¬¾à¬³à¬ '%s' (UID %lu) à¬à¬¬à¬ ସମàହ '%s' (GID %lu) ମିଳିଲା।"
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "à¬à¬¾à¬³à¬ '%s' à¬à¬¬à¬ ସମàହ '%s' ର GID ମàଳà¬à¬¾à¬à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "à¬à¬¾à¬³à¬ '%s' ର ମàà¬àà ଡିରàà¬àà¬àରàà¬à¬¿ '%s' ନàହà¬, à¬
à¬àରାହàà à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' ନିରàମାଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "ସମàହ ତାଲିà¬à¬¾à¬à ପରିବରàତàତନ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID à¬à ପରିବରàତàତନ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID à¬à ପରିବରàତàତନ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "ମàà¬àà à¬à¬¾à¬³à¬ à¬
ଧିà¬à¬¾à¬°à¬à ସଫଳତାର ସହିତ ପà¬à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "ତନàତàରମà ଧାରା à¬à¬¹à¬¿ ପàଲାà¬à¬«à¬°àମରà à¬
ସମରàଥିତ।"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "ପାଠàà ନିରàଦàଦàଶà¬à ବିଶàଳàଷଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ଡàମନ à¬à¬¾à¬²àନାହିà¬"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "ଡàମନ PID %u ପରି à¬à¬¾à¬²àà¬
à¬à¬¿"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ଡàମନà¬à ବନàଦ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -222,155 +229,170 @@ msgstr ""
"à¬à¬¹à¬¿ ପàରà¬àରାମà¬à¬¿ ମàà¬àà à¬à¬¾à¬³à¬ à¬à¬¾à¬¬à¬°à à¬à¬²à¬¾à¬à¬¬à¬¾ ପାà¬à¬ ନିରàଦàଦିଷàଠହàà¬à¬¨à¬¾à¬¹à¬¿à¬ (unless --system is "
"specified)।"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "ମàà¬àà à¬à¬¾à¬³à¬ à¬
ଧିà¬à¬¾à¬° à¬à¬¬à¬¶ààà¬à¥¤"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start ତନàତàର ସàଥିତି ପାà¬à¬ ସମରàଥିତ ନàହà¬à¥¤"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "ତନàତàର ଧାରାରà à¬à¬¾à¬²àà¬
à¬à¬¿, à¬à¬¿à¬¨àତà --disallow-exit à¬à ସàଠà¬à¬°à¬¾à¬¯à¬¾à¬à¬¨à¬¾à¬¹à¬¿à¬!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "ତନàତàର ଧାରାରà à¬à¬¾à¬²àà¬
à¬à¬¿, à¬à¬¿à¬¨àତà --disallow-module-loading à¬à ସàଠà¬à¬°à¬¾à¬¯à¬¾à¬à¬¨à¬¾à¬¹à¬¿à¬!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "ତନàତàର ଧାରାରà à¬à¬¾à¬²àà¬
à¬à¬¿, SHM ଧାରାà¬à ବାଧàଯତାମàଳଠà¬à¬¾à¬¬à¬°à ନିଷàà¬àରିà à¬à¬°à¬¿à¬¥à¬¾à¬!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "ତନàତàର ଧାରାରà à¬à¬¾à¬²àà¬
à¬à¬¿, ପàରସàଥାନ ସàଥିର ସମàà¬à ବାଧàଯତାମàଳଠà¬à¬¾à¬¬à¬°à ନିଷàà¬àରିà à¬à¬°à¬¿à¬¥à¬¾à¬!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio à¬à à¬
ଧିà¬à¬¾à¬° à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "ପାà¬à¬ª ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ଡàମନ à¬à¬°à¬®àଠବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "ଡàମନ à¬à¬°à¬®àଠସଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() ବିଫଳ ହàà¬à¬à¬¿: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à¬à¬¹à¬¾ ହàà¬à¬à¬¿ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ସà¬à¬à¬³à¬¨ à¬à¬§à¬¾à¬°: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ସà¬à¬à¬³à¬¨ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "à¬à¬§à¬¾à¬°à¬°à à¬à¬¾à¬²àà¬
à¬à¬¿: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs ମିଳିà¬à¬¿à¥¤"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "ପàଷàଠା à¬à¬à¬¾à¬°à¬à¬¿ ହàà¬à¬à¬¿ %lu ବାà¬à¬"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind ସମରàଥନ ସହିତ ସà¬à¬à¬³à¬¨ ହàà¬à¬à¬¿: yes"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind ସମରàଥନ ସହିତ ସà¬à¬à¬³à¬¨ ହàà¬à¬à¬¿: no"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind ଧାରାରà à¬à¬¾à¬²àà¬
à¬à¬¿: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "à¬à¬§à¬¾à¬°à¬°à à¬à¬¾à¬²àà¬
à¬à¬¿: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "à¬à¬ªà¬¯àà¬àତ ନିରàମାଣ: yes"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à¬à¬ªà¬¯àà¬àତ ନିରàମାଣ: no"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG à¬à ବààାà¬ààା à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿, ସମସàତ ନିଶàà¬àà¬à ନିଷàà¬àରିà à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH à¬à ବààାà¬ààା à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿, à¬àବଳ ତàବàର ପଥ ନିଶàà¬àà¬à ନିଷàà¬àରିà à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "ସମସàତ ନିଶàà¬àà¬à ସà¬àରିà à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "ଯନàତàର ID ପାà¬à¬¬à¬¾à¬°à ବିଫଳ"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ଯନàତàର ID à¬à¬¿ ହàà¬à¬à¬¿ %s।"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "à¬
ଧିବàଶନ ID à¬à¬¿ ହàà¬à¬à¬¿ %s।"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ପàରà¬à¬³à¬¿à¬¤ ଡିରàà¬àà¬àରà %s à¬à ବààବହାର à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ସàଥିତି ଡିରàà¬àà¬àରà %s à¬à ବààବହାର à¬à¬°à¬¿à¥¤"
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "à¬à¬à¬à¬¾à¬à¬¶ ଡିରàà¬àà¬àରà %s à¬à ବààବହାର à¬à¬°à¬¿à¥¤"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ତନàତàର ଧାରାରà à¬à¬¾à¬²àà¬
à¬à¬¿: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -385,15 +407,15 @@ msgstr ""
"ତନàତàର ଧାରାà¬à¬¿ ସାଧାରଣତଠà¬à¬¾à¬¹à¬¿à¬à¬à¬¿ à¬à¬°à¬¾à¬ª ତାହା ବିଷàରà à¬à¬¾à¬£à¬¿à¬¬à¬¾ ପାà¬à¬ ଦàାà¬à¬°à¬¿ http://pulseaudio."
"org/wiki/WhatIsWrongWithSystemMode à¬à ପଢ଼ନàତà।"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ସତàଠà¬à¬àà¬-ବିà¬àଦନ ସମà ମାପଠà¬à¬ªà¬²à¬¬àଧ! Bon appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -401,27 +423,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ଡàମନà¬à à¬à¬°à¬®àଠà¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ଧାରଣ ହàà¬à¬¥à¬¿à¬¬à¬¾ à¬à¬à¬à¬¾à¬à¬¶à¬àଡ଼ିଠବିନା ଡàମନ à¬à¬°à¬®àଠହàà¬à¬à¬¿, à¬à¬¾à¬°àଯàà à¬à¬°à¬¿à¬¬à¬¾à¬à ବାରଣ à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ଡàମନ à¬à¬°à¬®àଠସମàପàରàଣàଣ ହàà¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ଡàମନ ବନàଦà¬à à¬à¬°à¬®àଠà¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ଡàମନà¬à ସମାପàତ à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
@@ -677,72 +699,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "ପଥ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à¬
ବàଧ ଲଠଲà¬àଷàଯସàଥଳ '%s'।"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à¬
ବàଧ ଲଠସàତର%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à¬
ବàଧ ପàନଠମିଶàରଣ ଧାରା '%s'।"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à¬
ବàଧ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit à¬à¬¹à¬¿ ପàଲାà¬à¬«à¬°àମରà ସମରàଥିତ ନàହà¬à¥¤"
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à¬
ବàଧ ନମàନା ଶàଳà '%s'।"
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à¬
ବàଧ ନମàନା ହାର '%s'।"
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à¬
ବàଧ ନମàନା à¬ààାନàଲ '%s'।"
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à¬
ବàଧ à¬ààାନàଲ ମààାପ '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à¬
ବàଧ ସà¬à¬ààଠà¬à¬£àଡà¬àଡ଼ିଠ'%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à¬
ବàଧ à¬à¬£àଡ à¬à¬à¬¾à¬° '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à¬
ବàଧ ସàନàଦର ସàତର '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à¬
ବàଧ ନମàନା ହାର '%s'।"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ବିନààାସ ଫାà¬à¬² à¬àଲିବାରà ବିଫଳ: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -750,7 +777,7 @@ msgstr ""
"ନିରàଦàଦିଷàà¬à¬¿à¬¤ ପàରàବନିରàଦàଧାରିତ à¬ààାନàଲ ମààାପରà ପàରàବନିରàଦàଧାରିତ ସà¬à¬ààଠà¬ààାନàଲ ବààତିତ à¬à¬¿à¬¨àନ ସà¬à¬ààଠ"
"à¬ààାନàଲ à¬à¬²àଲàଠà¬
à¬à¬¿à¥¤"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ବିନààାସ ଫାà¬à¬²à¬°à ପଢ଼ନàତà: %s ###\n"
@@ -796,8 +823,8 @@ msgid "Rear Right"
msgstr "ପଠଡ଼ାହାଣ ପାà¬"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ନିମàନ à¬à¬¬àତàତି ପରିତààାଠà¬à¬¾à¬°à"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1142,191 +1169,191 @@ msgstr "XOpenDisplay() ବିଫଳ ହàà¬à¬à¬¿"
msgid "Failed to parse cookie data"
msgstr "à¬àà¬à¬¿ ତଥààà¬à ବିଶàଳàଷଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "ବିନààାସ ଫାà¬à¬² '%s' à¬à à¬àଲିବାରà ବିଫଳ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à¬àଣସି à¬àà¬à¬¿ ଧାରଣ à¬à¬°à¬¾à¬¯à¬¾à¬à¬¨à¬¾à¬¹à¬¿à¬à¥¤ ତାହା ବିନା ସà¬à¬¯àଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପàରà¬àଷàà¬à¬¾ à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à¬
à¬à¬£à¬¾ à¬
ନàଲà¬àନ '%s' ପାà¬à¬ ସନàଦàଶ à¬àରହଣ à¬à¬°à¬¿à¬
à¬à¬¿"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "ଧାରାà¬à ବାହାର à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "ପà¬à¬à¬²à¬¾ ଧାରାà¬à ବାହାର à¬à¬°à¬¾à¬¯à¬¾à¬à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "ସରàà¬à¬° ପàରତି ଡàରàନିà¬àଠସà¬à¬¯àà¬à¥¤"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ଧାରା ସଫଳତାର ସହିତ ନିରàମାଣ ହàà¬à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ବଫର ମàà¬àରିà¬à¬¸: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ବଫର ମàà¬àରିà¬à¬¸: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ନମàନା spec '%s' ବààବହାର à¬à¬°à¬¿, à¬ààାନàଲ ମààାପ '%s'।"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "à¬à¬ªà¬à¬°à¬£ %s ସହିତ ସà¬à¬¯àà¬àତ ହàà¬à¬à¬¿ (%u, %ssuspended)।"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ଧାରା ତàରàà¬à¬¿: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ଧାରା à¬à¬ªà¬à¬°à¬£ ନିଲମàବିତ ହàà¬à¬à¬¿à¥¤%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ଧାରା à¬à¬ªà¬à¬°à¬£ ପàନଠà¬à¬³à¬¨ ହàà¬à¬à¬¿à¥¤%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ଧାରା underrun.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ଧାରା overrun.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ଧାରା à¬à¬°à¬®àଠହàà¬à¬à¬¿à¥¤%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ଧାରା à¬à¬ªà¬à¬°à¬£ %sà¬à à¬à¬¤à¬¿ à¬à¬°à¬¿à¬à¬¿ (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "not "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ଧାରା ବଫର à¬àଣà¬àଡ଼ିଠପରିବରàତàତନ ହàà¬à¬à¬¿à¥¤%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "ସà¬à¬¯àଠସàଥାପିତ ହàà¬à¬à¬¿à¥¤%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "ସà¬à¬¯àଠବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF ପାà¬à¬
à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ସà¬à¬àତ ପାà¬à¬²à¬¾, ପàରସàଥାନ à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "ବିଳମàବତା ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "ସମà: %0.3f ସàà¬à¬£àଡ; ବିଳମàବତା: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1378,10 +1405,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [ବିà¬à¬³àପà¬àଡ଼ିà¬]\n"
@@ -1434,7 +1465,7 @@ msgstr ""
" --file-format=FFORMAT ସà¬àà¬à¬¿à¬àତ PCM ତଥààà¬à ଲିପିବଦàଧ à¬à¬°à¬¨àତà/à¬à¬²à¬¾à¬¨àତà।\n"
" --list-file-formats ତାଲିà¬à¬¾ à¬à¬ªà¬²à¬¬àଧ ଫାà¬à¬² ସà¬àà¬à¬¿à¬à¬°à¬£ ଶàଳà।\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1445,168 +1476,169 @@ msgstr ""
"libpulse %s ସହିତ ସà¬à¬à¬³à¬¿à¬¤\n"
"libpulse %s ସହିତ ସà¬à¬¯àà¬àତ\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à¬
ବàଧ à¬àଲାà¬à¬£àଠନାମ '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à¬
ବàଧ ଧାରା ନାମ '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à¬
ବàଧ à¬ààାନàଲ ମààାପ '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à¬
ବàଧ ବିଳମàବତା ବିଶàଷ ଲà¬àଷଣ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à¬
ବàଧ ପଦàଧତି ସମà ବିଶàଷ ଲà¬àଷଣ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à¬
ବàଧ à¬àଣଧରàମ '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à¬
à¬à¬£à¬¾ ଫାà¬à¬² ସà¬àà¬à¬¿à¬à¬°à¬£ ଶàଳà %s।"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à¬
ବàଧ ନମàନା ବିଶàଷ ଲà¬àଷଣ"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à¬
ତààଧିଠସàà±à¬¤à¬¨àତàରà¬à¬°à¥¤"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ଫାà¬à¬² ପାà¬à¬ ନମàନା ସàà¬à¬¨à¬¾ ସàଷàà¬à¬¿ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "ଧàà±à¬¨à¬¿ ଫାà¬à¬² à¬àଲିବାରà ବିଫଳ।"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "à¬àତାବନà: à¬à¬²àଲିà¬à¬¿à¬¤ ନମàନା ବିଶàଷ ଲà¬àଷଣà¬à ଫାà¬à¬²à¬°à ବିଶàଷ ଲà¬àଷଣ ସହିତ ନବଲିà¬à¬¨ à¬à¬°à¬¾à¬¯à¬¿à¬¬à¥¤"
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ଫାà¬à¬²à¬°à ନମàନା ସàà¬à¬¨à¬¾ ନିରàଦàଧାରଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à¬àତାବନà: ଫାà¬à¬²à¬°à à¬ààାନàଲ ମààାପ ନିରàଦàଧାରଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "ନମàନା ବିଶàଷ ଲà¬àଷଣ ସହିତ à¬ààାନàଲ ମààାପ ମàଳ à¬à¬¾à¬à¬¨à¬¾à¬¹à¬¿à¬"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à¬àତାବନà: à¬ààାନàଲ ମààାପà¬à ଫାà¬à¬²à¬°à ଲàà¬à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "ନମàନା ବିଶàଷ ଲà¬àଷଣ '%s' à¬à¬¬à¬ à¬ààାନàଲ ମààାପ '%s' ସହିତ à¬àà¬à¬¿à¬ %s ଧାରାà¬à à¬àଲàà¬
à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "à¬
ନàଲିପି à¬à¬°àà¬
à¬à¬¿"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "ପà¬à¬à¬²à¬¾"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() ବିଫଳ ହàà¬à¬à¬¿: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() ବିଫଳ ହàà¬à¬à¬¿à¥¤"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "ନିଲମàବନ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "ପàନଠà¬à¬³à¬¨ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "WARNING: ଧàà±à¬¨à¬¿ ସରàà¬à¬°à¬à¬¿ ସàଥାନàà ନàହà¬, ନିଲମàବିତ à¬à¬°àନାହିà¬à¥¤\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "ସà¬à¬¯àଠବିଫଳ ହàà¬à¬à¬¿: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT ପାà¬à¬à¬¿, à¬à¬¤àସାହିତ à¬à¬°àà¬
à¬à¬¿à¥¤\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "WARNING: ନିମàନ ସàତରର ପàରà¬àରିàାà¬à¬¿ ସà¬à¬àତ %u ଦàà±à¬¾à¬°à¬¾ ସମାପàତ\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1624,7 +1656,7 @@ msgstr ""
" -s, --server=SERVER ସà¬à¬¯àଠà¬à¬°à¬¿à¬¬à¬¾ ପାà¬à¬ ସରàà¬à¬°à¬° ନାମ\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1635,50 +1667,61 @@ msgstr ""
"libpulse %s ସହିତ ସà¬à¬à¬³à¬¿à¬¤\n"
"libpulse %s ସହିତ ସà¬à¬¯àà¬àତ\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() ବିଫଳ ହàà¬à¬à¬¿à¥¤\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() ବିଫଳ ହàà¬à¬à¬¿à¥¤\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "ପରିସà¬à¬ààାନ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "ବରàତàତମାନ ବààବହାରରà à¬
à¬à¬¿: %u ବàଲଠସମàଦାà %s ବାà¬à¬ ଧାରଣ à¬à¬°à¬¿à¬¥à¬¾à¬à¥¤\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "ସମà¬àର à¬àବନରà ବଣàà¬à¬¿à¬¤ ହàà¬à¬¥à¬¾à¬: %u ବàଲଠସମàଦାà %s ବାà¬à¬ ଧାରଣ à¬à¬°à¬¿à¬¥à¬¾à¬à¥¤\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "ନମàନା à¬ààାଶà à¬à¬à¬¾à¬°: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "ସରàà¬à¬° ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1686,7 +1729,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"à¬à¬¾à¬³à¬ ନାମ: %s\n"
"à¬à¬§à¬¾à¬° ନାମ: %s\n"
@@ -1698,12 +1741,12 @@ msgstr ""
"ପàରàବନିରàଦàଧାରିତ à¬à¬¤àସ: %s\n"
"à¬àà¬à¬¿: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "ସିà¬àଠସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1742,22 +1785,22 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tସà¬à¬¯àà¬à¬¿à¬àà¬àଡ଼ିà¬:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tସà¬àରିà ସà¬à¬¯àà¬à¬¿à¬à: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à¬à¬¤àସ ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1796,20 +1839,20 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "à¬à¬à¬à¬¾à¬à¬¶ ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1826,12 +1869,12 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à¬àରାହଠସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1846,12 +1889,12 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à¬à¬¾à¬°àଡ ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1868,22 +1911,22 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tରàପରàà¬à¬àଡ଼ିà¬:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tସà¬àରିà ରàପରàà¬à¬¾: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "ସିà¬àଠନିବàଶ ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1920,12 +1963,12 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à¬à¬¤àସ ଫଳାଫଳ ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1954,12 +1997,12 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "ନମàନା ସàà¬à¬¨à¬¾ ପାà¬à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1990,26 +2033,80 @@ msgstr ""
"\tà¬àଣଧରàମ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "ବିଫଳତା: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "ନମàନାà¬à ଧାରଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ଫାà¬à¬²à¬° ସମà ପàରàବ ସମାପàତି"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à¬
ବàଧ ସରàà¬à¬°"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT ପାà¬à¬à¬¿, à¬à¬¤àସାହିତ à¬à¬°àà¬
à¬à¬¿à¥¤"
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2032,6 +2129,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2069,7 +2167,7 @@ msgstr ""
" -s, --server=SERVER ସà¬à¬¯àଠà¬à¬°à¬¿à¬¬à¬¾ ପାà¬à¬ ସରàà¬à¬°à¬° ନାମ\n"
" -n, --client-name=NAME ସରàà¬à¬°à¬°à à¬à¬¹à¬¿ à¬àଲାà¬à¬£àà¬à¬à à¬à¬¿à¬ªà¬°à¬¿ ଡାà¬à¬¿à¬¬à\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2080,103 +2178,106 @@ msgstr ""
"libpulse %s ସହିତ ସà¬à¬à¬³à¬¿à¬¤\n"
"libpulse %s ସହିତ ସà¬à¬¯àà¬àତ\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ଧାରଣ à¬à¬°à¬¿à¬¬à¬¾ ପାà¬à¬ à¬àà¬à¬¿à¬ ନàମନା ଫାà¬à¬² à¬à¬²àଲàଠà¬à¬°à¬¨àତà"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ଧàà±à¬¨à¬¿ ଫାà¬à¬² à¬àଲିବାରà ବିଫଳ।"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "à¬àତାବନà: ଫାà¬à¬²à¬°à ନମàନା ବିଶàଷ ଲà¬àଷଣà¬à ନିରàଦàଧାରଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à¬à¬²à¬¾à¬à¬¬à¬¾ ପାà¬à¬ à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ନମàନା ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à¬à¬¾à¬¢à¬¼à¬¿à¬¬à¬¾ ପାà¬à¬ à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ନମàନା ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ସିà¬àଠନିବàଶ à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ à¬àà¬à¬¿à¬ ସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬¤àସ ନିରàà¬à¬® à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ à¬àà¬à¬¿à¬ à¬à¬¤àସ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬à¬à¬¾à¬à¬¶ ନାମ à¬à¬¬à¬ ସàà±à¬¤à¬¨àତàରà¬à¬°à¬àଡ଼ିà¬à à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾ à¬à¬à¬¿à¬¤à¥¤"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬à¬à¬¾à¬à¬¶ à¬
ନàà¬àରମଣିà¬à¬¾à¬à à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾ à¬à¬à¬¿à¬¤ ନàହà¬"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠà¬à¬¤àସ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
+msgstr ""
+"à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬à¬°à à¬
ଧିଠà¬à¬¤àସ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ପଡ଼ିନପାରà। à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ବàଲିà¬à¬¨ ମàଲàà à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ।"
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬¾à¬°àଡ ନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ରàପରàà¬à¬¾ ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ସିà¬àଠନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ସà¬à¬¯àà¬à¬¿à¬à ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬¤àସ ନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ସà¬à¬¯àà¬à¬¿à¬à ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ସିà¬àଠନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ସà¬à¬¯àà¬à¬¿à¬à ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à¬
ବàଧ ନମàନା ବିଶàଷ ଲà¬àଷଣ"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬¤àସ ନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ସà¬à¬¯àà¬à¬¿à¬à ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ସିà¬àଠନିବàଶ à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ à¬àà¬à¬¿à¬ ସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à¬
ବàଧ ସିà¬àଠନିବàଶ à¬
ନàà¬àରମଣିà¬à¬¾"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ସିà¬àଠନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ସà¬à¬¯àà¬à¬¿à¬à ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ à¬à¬¤àସ ନାମ/à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ ସà¬à¬¯àà¬à¬¿à¬à ନାମ à¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "à¬à¬ªà¬£à¬àà¬à à¬àà¬à¬¿à¬ ସିà¬àଠନିବàଶ à¬
ନàà¬àରମଣିà¬à¬¾ à¬à¬¬à¬ à¬àà¬à¬¿à¬ ସିà¬àଠà¬à¬²àଲàଠà¬à¬°à¬¿à¬¬à¬¾à¬à ହàବ"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à¬
ବàଧ ସିà¬àଠନିବàଶ à¬
ନàà¬àରମଣିà¬à¬¾ ବିଶàଷ ଲà¬àଷଣ"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à¬àଣସି ବàଧ ନିରàଦàଦàଶ à¬à¬²àଲàଠà¬à¬°à¬¾à¬¯à¬¾à¬à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
@@ -2258,44 +2359,44 @@ msgstr "à¬àà¬à¬¿ ତଥàà ଧାରଣ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫ
msgid "Not yet implemented.\n"
msgstr "à¬
ପରàଯààନàତ à¬à¬¾à¬°àଯààà¬à¬¾à¬°à ହàà¬à¬¨à¬¾à¬¹à¬¿à¬à¥¤\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "à¬àଣସି PulseAudio ଡàମନ à¬à¬¾à¬²àନାହିà¬, à¬à¬¿à¬®àବା à¬
ଧିବàଶନ ଡàମନ ପରି à¬à¬¾à¬²àନାହିà¬à¥¤"
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "ସà¬àà¬(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "ସà¬à¬¯àଠà¬à¬°à¬¨àତà(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio ଡàମନà¬à ବନàଦ à¬à¬°à¬¿à¬¬à¬¾à¬°à ବିଫଳ।"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ଡàମନ à¬à¬¤àତର ଦàà¬à¬¨à¬¾à¬¹à¬¿à¬à¥¤"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "ପଢ଼ନàତà(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "ଲàà¬à¬¨àତà(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn à¬
ପରିବରàତàତନààତାà¬à à¬
à¬à¬¿à¬à¬®àà à¬à¬°à¬¿à¬¹àଠନାହିà¬"
@@ -2334,38 +2435,42 @@ msgstr ""
"returned 0 or another value < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "à¬
ଫ"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "à¬à¬àଠଫିଡିଲିà¬à¬¿ ପà¬à¬à¬²à¬¾ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "à¬à¬àଠଫିଡିଲିà¬à¬¿ ପà¬à¬à¬²à¬¾ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à¬àଲିଫàନି ଡàààପàଲàà¬àସ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio ଧàà±à¬¨à¬¿ ସରàà¬à¬°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "ଫଳାଫଳ à¬à¬ªà¬à¬°à¬£"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "ନିବàଶ à¬à¬ªà¬à¬°à¬£"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ ରà ଧàà±à¬¨à¬¿"
@@ -2429,133 +2534,159 @@ msgstr "à¬à¬®àପàଲିଫାàର"
msgid "No Amplifier"
msgstr "à¬à¬®àପàଲିଫାàର ନାହିà¬"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ବàଦàଧି"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "ବàଦàଧି ନାହିà¬"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à¬à¬¨à¬¾à¬²àଠହàଡ଼ଫàନà¬àଡ଼ିà¬"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à¬à¬¨à¬¾à¬²àଠନିବàଶ"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à¬à¬¨à¬¾à¬²àଠମାà¬à¬àରàଫàନ"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à¬à¬¨à¬¾à¬²àଠଲାà¬à¬¨-à¬à¬¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à¬à¬¨à¬¾à¬²àଠରàଡ଼ିà¬"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¿à¬¡à¬¼à¬¿à¬"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à¬à¬¨à¬¾à¬²àଠଫଳାଫଳ"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à¬à¬¨à¬¾à¬²àଠହàଡ଼ଫàନà¬àଡ଼ିà¬"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à¬à¬¨à¬¾à¬²àଠଫଳାଫଳ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à¬à¬¨à¬¾à¬²àଠମàନà ଫଳାଫଳ"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à¬à¬¨à¬¾à¬²àଠଷàà¬àରିà¬"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à¬à¬¨à¬¾à¬²àଠମàନà"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à¬à¬¨à¬¾à¬²àଠଷàà¬àରିà¬"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à¬à¬¨à¬¾à¬²àଠà¬à¬¤àଠପାରàଶàà± 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ଡିà¬à¬¿à¬à¬¾à¬² ଷàà¬àରିଠ(IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ଡିà¬à¬¿à¬à¬¾à¬² à¬à¬¤àଠପାରàଶàà± 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ଡିà¬à¬¿à¬à¬¾à¬² à¬à¬¤àଠପାରàଶàà± 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ଡିà¬à¬¿à¬à¬¾à¬² à¬à¬¤àଠପାରàଶàà± 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ଡିà¬à¬¿à¬à¬¾à¬² ଷàà¬àରିଠ(HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à¬à¬¨à¬¾à¬²àଠମàନà ଡ଼àପàଲàà¬àସ"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à¬à¬¨à¬¾à¬²àଠଷàà¬àରିଠଡ଼àପàଲàà¬àସ"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ଡିà¬à¬¿à¬à¬¾à¬² ଷàà¬àରିଠଡ଼àପàଲàà¬àସ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ନିମàନ à¬à¬¬àତàତି ପରିତààାଠà¬à¬¾à¬°à"
diff --git a/po/pa.po b/po/pa.po
index ab97ac0..1cc19e7 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pa\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-08 08:37+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-08 15:04+0530\n"
"Last-Translator: Jaswinder Singh <jsingh at redhat.com>\n"
"Language-Team: Punjabi/Panjabi <kde-i18n-doc at kde.org>\n"
@@ -19,12 +19,12 @@ msgstr ""
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -35,7 +35,7 @@ msgstr ""
"snd_pcm_avail() ਤà©à¨ à¨à©±à¨ ਮà©à©±à¨² ਮਿਲਿਠਹà©, à¨à© ਬਹà©à¨¤ ਵੱਡਾ ਹà©: %lu ਬਾà¨à¨ (%lu ms)।\n"
"à¨à¨¹ ALSA ਡਰਾà¨à¨µà¨° '%s' ਵਿà¨à¨²à¨¾ ਬੱਠਲੱà¨à¨¦à¨¾ ਹà©à¥¤ à¨à¨¸ ਮà©à©±à¨¦à© ਦ੠ALSA ਡਿਵà©à¨²à¨ªà¨°à¨¾à¨ ਨà©à©° ਰਿਪà©à¨°à¨ ਦਿਠà¨à©à¥¤"
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -46,7 +46,7 @@ msgstr ""
"snd_pcm_delay() ਤà©à¨ à¨à©±à¨ ਮà©à©±à¨² ਮਿਲਿਠਹà©, à¨à© ਬਹà©à¨¤ ਵੱਡਾ ਹà©: %li ਬਾà¨à¨ (%s%lu ms)।\n"
"à¨à¨¹ ALSA ਡਰਾà¨à¨µà¨° '%s' ਵਿà¨à¨²à¨¾ ਬੱਠਲੱà¨à¨¦à¨¾ ਹà©à¥¤ à¨à¨¸ ਮà©à©±à¨¦à© ਦ੠ALSA ਡਿਵà©à¨²à¨ªà¨°à¨¾à¨ ਨà©à©° ਰਿਪà©à¨°à¨ ਦਿਠà¨à©à¥¤"
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -91,11 +91,11 @@ msgstr "à¨à¨²à¨¾à¨à¨¡ NULL ਸਿੰà¨"
msgid "Null Output"
msgstr "à©à©à¨°à© (Null) à¨à¨à¨à¨ªà©à©±à¨"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à¨
ੰਦਰà©à¨¨à© à¨à¨¡à©à¨"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "ਮਾਡਮ"
@@ -111,246 +111,267 @@ msgstr "ਨਵਾਠdl ਲà©à¨¡à¨° ਦà©à¨£ ਲਠਫà©à¨²à©à¨¹à¥¤"
msgid "Failed to add bind-now-loader."
msgstr "ਬਾà¨à¨à¨¡-ਨਾà¨-ਲà©à¨¡à¨° à¨à©à©à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹ ਹà©à¨à¨à¥¤"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "%s ਸਿà¨à¨¨à¨² ਮਿਲਿਠਹà©à¥¤"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "ਬੰਦ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "'%s' ਯà©à¨à¨¼à¨° ਲੱà¨à¨£ ਵਿੱਠਫà©à¨²à©à¨¹ ਹà©à¨à¨ ਹà©à¥¤"
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "'%s' à¨à¨°à©à©±à¨ª ਲੱà¨à¨£ ਵਿੱਠਫà©à¨² ਹà©à¨à¨ ਹà©à¥¤"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "ਯà©à¨à¨¼à¨° '%s' (UID %lu) à¨
ਤ੠à¨à¨°à©à©±à¨ª '%s' (GID %lu) ਲੱà¨à© ਹਨ।"
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "ਯà©à¨à¨¼à© '%s' à¨
ਤ੠à¨à¨°à©à©±à¨ª '%s' ਦਾ GID ਮà©à¨² ਨਹà©à¨ à¨à¨¾à¨à¨¦à©à¥¤"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ਯà©à¨à¨¼à© '%s' ਦ੠à¨à¨° ਡਾà¨à¨°à©à¨à¨à¨°à© '%s' ਨਹà©à¨, à¨
ਣਡਿੱਠਾ à¨à¨° ਰਿਹਾ।"
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' ਬਣਾà¨à¨£ ਵਿੱਠਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "à¨à¨°à©à©±à¨ª ਲਿਸਠਬਦਲਣ ਲਠਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID ਬਦਲਣ ਲਠਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID ਬਦਲਣ ਲਠਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "ਰà©à¨ à¨
ਧਿà¨à¨¾à¨° ਸਫਲਤਾਪà©à¨°à¨ ਹà¨à¨¾à¨ à¨à¨à¥¤"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à¨à¨¸ ਪਲà©à¨à¨«à¨¾à¨°à¨® ਤ੠ਸਿਸà¨à¨® ਸੰਬੰਧ੠ਮà©à¨¡ ਨà©à©° ਸਹਿਯà©à¨ ਨਹà©à¨ ਹà©à¥¤"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) ਫà©à¨²à©à¨¹ ਹà©à¨à¨: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à¨à¨®à¨¾à¨à¨¡ ਲਾà¨à¨¨ ਪਾਰਸ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹à¥¤"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "ਡà©à¨®à¨¨ à¨à©±à¨² ਨਹà©à¨ ਰਿਹਾ"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "ਡà©à¨®à¨¨ PID %u ਤà©à¨° ਤ੠à¨à©±à¨² ਰਿਹਾ ਹà©"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ਡà©à¨®à¨¨ à¨à¨¤à¨® à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "à¨à¨¹ ਪਰà©à¨à¨°à¨¾à¨® ਰà©à¨ ਦ੠ਤà©à¨° ਤ੠à¨à¨²à¨¾à¨à¨£ ਲਠਨਹà©à¨ ਹ੠(à¨à¨¦à©à¨ ਤੱਠ--system ਦਿੱਤਾ ਨਹà©à¨ à¨à¨¾à¨à¨¦à¨¾)।"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "ਰà©à¨ à¨
ਧਿà¨à¨¾à¨°à¨¾à¨ ਦ੠ਲà©à© ਹà©à¥¤"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start ਨà©à©° ਸਿਸà¨à¨® ਮà©à¨à¨¿à¨à¨ ਲਠਸਹਿਯà©à¨ ਨਹà©à¨ ਹà©à¥¤"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "ਸਿਸà¨à¨® ਮà©à¨¡ ਵਿੱਠà¨à©±à¨² ਰਿਹਾ ਹà©, ਪਰ --disallow-exit ਸà©à©±à¨ ਨਹà©à¨ à¨à©à¨¤à¨¾!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "ਸਿਸà¨à¨® ਮà©à¨¡ ਵਿੱਠà¨à©±à¨² ਰਿਹਾ ਹà©, ਪਰ --disallow-module-loading ਸà©à©±à¨ ਨਹà©à¨ à¨à©à¨¤à¨¾!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "ਸਿਸà¨à¨® ਮà©à¨¡ ਵਿੱਠà¨à©±à¨² ਰਿਹਾ ਹà©, à¨à¨¼à¨¬à¨°à¨¦à¨¸à¨¤à© SHM ਮà©à¨¡ ਨà©à©° à¨
ਯà©à¨ à¨à¨° ਰਿਹਾ ਹà©!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "ਸਿਸà¨à¨® ਮà©à¨¡ ਵਿੱਠà¨à©±à¨² ਰਿਹਾ ਹà©, à¨à¨¼à¨¬à¨°à¨¦à¨¸à¨¤à© idle à¨à¨¾à¨à¨² ਬੰਦ ਨà©à©° à¨
ਯà©à¨ à¨à¨° ਰਿਹਾ ਹà©!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "ਸà¨à©à¨¡à©à¨ ਪà©à¨°à¨¾à¨ªà¨¤ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹à¥¤"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe ਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ਡà©à¨®à¨¨ ਸ਼à©à¨°à©à¨à¨¤à© ਫà©à¨²à©à¨¹ ਹà©à¨à¥¤"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "ਡà©à¨®à¨¨ ਸ਼à©à¨°à©à¨à¨¤à© ਸਫ਼ਲ ਹà©à¨à¥¤"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() ਫà©à¨²à©à¨¹ ਹà©: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à¨à¨¹ ਪਲਸà¨à¨¡à©à¨ %s ਹà©"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "à¨à©°à¨ªà¨¾à¨à¨²à©à¨¶à¨¨ ਹà©à¨¸à¨: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "à¨à©°à¨ªà¨¾à¨à¨²à©à¨¶à¨¨ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "ਹà©à¨¸à¨ ਤ੠à¨à©±à¨² ਰਿਹਾ ਹà©: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs ਲੱà¨à©à¥¤"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "ਪà©à¨à¨¼ ਸਾà¨à¨à¨¼ %lu ਬਾà¨à¨ ਹà©"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind ਸਹਿਯà©à¨ ਨਾਲ à¨à©°à¨ªà¨¾à¨à¨²: ਹਾà¨"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind ਸਹਿਯà©à¨ ਨਾਲ à¨à©°à¨ªà¨¾à¨à¨²: ਨਹà©à¨"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Valgrind ਮà©à¨¡ ਵਿੱਠà¨à©±à¨² ਰਿਹਾ ਹà©: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "ਹà©à¨¸à¨ ਤ੠à¨à©±à¨² ਰਿਹਾ ਹà©: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "à¨à¨ªà¨à©à¨®à¨¾à¨à©à¨¡ ਬਿਲਡ: ਹਾà¨"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à¨à¨ªà¨à©à¨®à¨¾à¨à©à¨¡ ਬਿਲਡ: ਨਹà©à¨"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG ਪਰਿà¨à¨¾à¨¶à¨¤, ਸਠasserts à¨
ਯà©à¨ ਹਨ।"
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH ਪਰਿà¨à¨¾à¨¶à¨¤, ਸਿਰਫ ਫਾਸਠਪਾਥ asserts à¨
ਯà©à¨ ਹਨ।"
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "ਸਠasserts ਯà©à¨ à¨à©à¨¤à© ਹਨ।"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "ਮਸ਼à©à¨¨ ID ਪà©à¨°à¨¾à¨ªà¨¤ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ਮਸ਼à©à¨¨ ID %s ਹà©à¥¤"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ਸ਼à©à¨¶à¨¨ ID %s ਹà©à¥¤"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ਰਨà¨à¨¾à¨à¨® ਡਾà¨à¨°à©à¨à¨à¨°à© %s ਦ੠ਵਰਤà©à¨à¥¤"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ਸà¨à©à¨ ਡਾà¨à¨°à©à¨à¨à¨°à© %s ਦ੠ਵਰਤà©à¨à¥¤"
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "ਮà©à¨¡à¨¿à¨à¨² ਡਾà¨à¨°à©à¨à¨à¨°à© %s ਦ੠ਵਰਤà©à¨à¥¤"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ਸਿਸà¨à¨® ਮà©à¨¡ ਵਿੱਠà¨à©±à¨² ਰਿਹਾ ਹà©: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -365,42 +386,42 @@ msgstr ""
"à¨à¨¿à¨°à¨ªà¨¾ à¨à¨°à¨à© ਸਿਸà¨à¨® ਮà©à¨¡ ਦ੠à¨à¨²à¨¤ ਹà©à¨£ ਬਾਰ੠ਵਧà©à¨°à© à¨à¨¾à¨£à¨à¨¾à¨°à© ਲਠhttp://pulseaudio.org/wiki/"
"WhatIsWrongWithSystemMode ਵà©à¨à©à¥¤"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ਤਾà©à© ਹਾà¨-ਰà©à©à©à¨²à©à¨¶à¨¨ à¨à¨¾à¨à¨®à¨° à¨à¨ªà¨²à©±à¨¬à¨§ ਹà©! Bon appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
"ਮਿੱਤਰਾ, ਤà©à¨°à¨¾ à¨à¨°à¨¨à¨² ਪà©à¨°à¨¾à¨£à¨¾ ਹà©! à¨à©à¨« ਦ੠à¨
ੱਠਦ੠ਸਿਫਾਰਸ਼ ਹਾà¨-ਰà©à©à©à¨²à©à¨¶à¨¨ à¨à¨¾à¨à¨®à¨° ਯà©à¨ ਨਾਲ ਲà©à¨¨à¨à¨¸ ਹà©!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ਡà©à¨®à¨¨ ਸ਼à©à¨°à© à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹à¥¤"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ਡà©à¨®à¨¨ ਸ਼à©à¨°à©à¨à¨¤à© ਬਿਨਾਠà¨à¨¿à¨¸à© ਲà©à¨¡ à¨à©à¨¤à© ਮà©à¨¡à¨¿à¨à¨², à¨à©°à¨® à¨à¨°à¨¨ ਤà©à¨ ਰà©à¨ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ਡà©à¨®à¨¨ ਸ਼à©à¨°à©à¨à¨¤à© ਮà©à¨à©°à¨®à¨²à¥¤"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ਡà©à¨®à¨¨ ਬੰਦ à¨à¨°à¨¨à¨¾ ਸ਼à©à¨°à© ਹ੠à¨à¨¿à¨à¥¤"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ਡà©à¨®à¨¨ ਬੰਦ ਹ੠à¨à¨¿à¨à¥¤"
@@ -657,78 +678,83 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "ਪਾਥ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à¨à¨²à¨¤ ਲਾਠà¨à¨¾à¨°à¨à©à¨ '%s'।"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à¨à¨²à¨¤à© ਲਾਠਲà©à¨µà¨² '%s'।"
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà©à¨ ਰà©à¨¸à©à¨à¨ªà¨² ਢੰਠ'%s'।"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà©à¨ rlimit '%s'।"
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ਨà©à©° à¨à¨¸ ਪਲà©à¨à¨«à¨¾à¨°à¨® ਤ੠ਸਹਿਯà©à¨ ਨਹà©à¨ ਹà©à¥¤"
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² ਫਾਰਮà©à¨ '%s'।"
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² ਰà©à¨ '%s'।"
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² à¨à©à¨¨à¨² '%s'।"
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ à¨à©à¨¨à¨² ਮà©à¨ª '%s'।"
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ਫਰà©à¨à¨®à©à¨à¨à¨¾à¨ ਦਾ à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਨੰਬਰ '%s'।"
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਫਰà©à¨à¨®à©à¨à¨ à¨
à¨à¨¾à¨° '%s'।"
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ nice ਲà©à¨µà¨² '%s'।"
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² ਰà©à¨ '%s'।"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ਸੰਰà¨à¨¨à¨¾ ਫਾà¨à¨² à¨à©à¨²à©à¨¹à¨£ ਵਿੱਠਫà©à¨²à©à¨¹: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr "ਦਿੱਤ੠ਡਿਫਾਲਠà¨à©à¨¨à¨² ਮà©à¨ª ਦ੠ਦਿੱਤà©à¨¤ à¨à©à¨¨à¨² à¨à¨¿à¨£à¨¤à© ਨਾਲà©à¨ à¨à©±à¨ ਵੱà¨à¨°à© à¨à©à¨¨à¨² à¨à¨¿à¨£à¨¤à© ਹà©à¥¤"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ਸੰਰà¨à¨¨à¨¾ ਫਾà¨à¨² ਵਿੱà¨à©à¨ ਪà©à¨¿à¨: %s ###\n"
@@ -774,8 +800,8 @@ msgid "Rear Right"
msgstr "ਪਿੱà¨à© ਸੱà¨à¨¾"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "à¨à©±à¨ ਫਰà©à¨à¨¿à¨à¨à¨¸à© à¨à©±à¨®à¨à¨°"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1120,191 +1146,191 @@ msgstr "XOpenDisplay() ਫà©à¨²à©à¨¹ ਹà©"
msgid "Failed to parse cookie data"
msgstr "à¨à©à¨à© ਡਾà¨à¨¾ ਪਾਰਸ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à©à¨¹"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "ਸੰਰà¨à¨¨à¨¾ ਫਾà¨à¨² '%s' ਨà©à©° à¨à©à¨²à©à¨¹à¨£ ਵਿੱਠਫà©à¨²à©à¨¹: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à¨à©à¨ à¨à©à¨à© ਲà©à¨¡ ਨਹà©à¨ à¨à©à¨¤à©à¥¤ à¨à¨¸ ਤà©à¨ ਬਿਨਾਠà¨à©à¨¨à©à¨à¨ à¨à©à¨¤à¨¾ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à¨
ਣà¨à¨¾à¨£à© à¨à¨à¨¸à¨à©à¨à¨¶à¨¨ '%s' ਲਠਸà©à¨¨à©à¨¹à¨¾ ਮਿਲਿਠਹà©"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "ਸà¨à¨°à©à¨® ਡਰà©à¨¨ ਫà©à¨²à©à¨¹ ਹà©à¨à¨: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "ਪਲà©à¨¬à©à¨ ਸà¨à¨°à©à¨® ਡਰà©à¨¨ à¨à©à¨¤à©à¥¤"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "ਸਰਵਰ ਨਾਲ à¨à©à¨¨à©à¨à¨¶à¨¨ ਡਰà©à¨¨ ਹ੠ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ਸà¨à¨°à©à¨® ਸਫਲਤਾਪà©à¨°à¨ ਬਣ à¨à¨ ਹà©à¥¤"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Buffer metrics: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ਸਧਾਰਨ spec '%s', à¨à©à¨¨à¨² ਮà©à¨ª '%s' ਦ੠ਵਰਤà©à¨à¥¤"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "%s à¨à©°à¨¤à¨° ਨਾਲ à¨à©à¨¨à¨à©à¨ à¨à©à¨¤à¨¾ (%u, %ssuspended)।"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ਸà¨à¨°à©à¨® à¨à¨²à¨¤à©: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ਸà¨à¨°à©à¨® à¨à©°à¨¤à¨° ਸਸਪà©à¨à¨¡ à¨à©à¨¤à¨¾ ਹà©à¥¤%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ਸà¨à¨°à©à¨® à¨à©°à¨¤à¨° ਮà©à©-ਪà©à¨°à¨¾à¨ªà¨¤ à¨à©à¨¤à¨¾à¥¤%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ਸà¨à¨°à©à¨® à¨
ੰਡਰਰਨ।%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ਸà¨à¨°à©à¨® à¨à¨µà¨°à¨°à¨¨à¥¤%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ਸà¨à¨°à©à¨® ਸ਼à©à¨°à© à¨à©à¨¤à©à¥¤ %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ਸà¨à¨°à©à¨® ਨà©à©° à¨à©°à¨¤à¨° %s ਤà©à¨ ਤਬਦà©à¨² à¨à©à¨¤à¨¾ à¨à¨¿à¨ ਹ੠(%u, %ssuspended)।%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "ਨਹà©à¨ "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ਸà¨à¨°à©à¨® ਬਫਰ à¨à¨à¨°à©à¨¬à¨¿à¨à¨ ਤਬਦà©à¨² à¨à©à¨¤à© à¨à¨à¥¤%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "à¨à©à¨¨à©à¨à¨¶à¨¨ ਬਣ à¨à¨¿à¨à¥¤%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "à¨à©à¨¨à©à¨à¨¶à¨¨ ਫà©à¨²: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF ਮਿਲਿà¨à¥¤"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ਸਿà¨à¨¨à¨² ਮਿਲਿà¨, ਬੰਦ ਹ੠ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "ਵà¨à¨«à¨¾ ਪà©à¨°à¨¾à¨ªà¨¤à© ਫà©à¨² ਹà©à¨: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "à¨à¨¾à¨à¨®: %0.3f ਸà¨à¨¿à©°à¨; ਵà¨à¨«à¨¾: %0.0f usec।"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1356,10 +1382,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1418,7 +1448,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1429,168 +1459,169 @@ msgstr ""
"libpulse %s ਦ੠à¨à©°à¨ªà¨¾à¨à¨²\n"
"libpulse %s ਨਾਲ ਲਿੰਠà¨à©à¨¤à¨¾\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ à¨à©à¨¨à¨² ਮà©à¨ª '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਰà©à¨¸à©à¨à¨ªà¨² ਢੰਠ'%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ à¨à©à¨¨à¨² ਮà©à¨ª '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਵà¨à¨«à¨¾ ਹਦਾà¨à¨¤ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਪਰà©à¨¸à©à©±à¨¸ à¨à¨¾à¨à¨® ਹਦਾà¨à¨¤ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਰà©à¨¸à©à¨à¨ªà¨² ਢੰਠ'%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à¨
ਣà¨à¨¾à¨£ ਫਾà¨à¨² ਫਾਰਮà©à¨ %s"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "ਬਹà©à¨¤ ਵੱਧ à¨à¨°à¨à©à¨®à©à¨à¨à¥¤"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ਸà©à¨à¨ªà¨² à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "ਸਾà¨à¨à¨¡ ਫਾà¨à¨² à¨à©à¨²à©à¨¹à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '%s' ਨਾਲ à¨à©à¨²à©à¨¹à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ਸà©à¨à¨ªà¨² à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '%s' ਨਾਲ à¨à©à¨²à©à¨¹à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à¨à©à¨¨à¨² ਮà©à¨ª ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ ਨਾਲ ਨਹà©à¨ ਮਿਲਦਾ"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '%s' ਨਾਲ à¨à©à¨²à©à¨¹à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '%s' à¨
ਤ੠à¨à©à¨¨à¨² ਮà©à¨ª '%s' ਨਾਲ à¨à©à¨²à©à¨¹à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "ਰਿà¨à¨¾à¨°à¨¡à¨¿à©°à¨"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "ਪਲà©à¨
ਬà©à¨"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "ਸਸਪà©à¨à¨¡ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "ਮà©à©-ਪà©à¨°à¨¾à¨ªà¨¤à© ਫà©à¨²: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "à¨à©à¨¤à¨¾à¨µà¨¨à©: ਸਾà¨à¨à¨¡ ਸਰਵਰ ਲà©à¨à¨² ਨਹà©à¨ ਹà©, ਸਸਪà©à¨à¨¡ ਨਹà©à¨ ਹ੠ਰਿਹਾ।\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "à¨à©à¨¨à©à¨à¨¶à¨¨ ਫà©à¨²: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT ਮਿਲਿà¨, ਬੰਦ ਹ੠ਰਿਹਾ ਹà©à¥¤\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "à¨à©à¨¤à¨¾à¨µà¨¨à©: à¨à¨²à¨¾à¨à¨¡ ਪਰà©à¨¸à©à©±à¨¸ ਨà©à©° ਸਿà¨à¨¨à¨² %u ਵਲà©à¨ ਬੰਦ à¨à©à¨¤à¨¾ à¨à¨¿à¨ ਹà©\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1609,7 +1640,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1620,50 +1651,61 @@ msgstr ""
"libpulse %s ਨਾਲ à¨à©°à¨ªà¨¾à¨à¨²\n"
"libpulse %s ਨਾਲ ਲਿੰà¨\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() ਫà©à¨²à©à¨¹ ਹà©à¥¤\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "à¨
à©°à¨à©à© ਪà©à¨°à¨¾à¨ªà¨¤à© ਫà©à¨²à©à¨¹: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "ਹà©à¨£ ਵਰਤà©à¨ ਵਿੱਠਹà©: %u ਬਲਾਠਵਿੱਠà¨à©à©±à¨² %s ਬਾà¨à¨ ਹਨ।\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "ਪà©à¨°à© ਲਾà¨à¨«à¨à¨¾à¨à¨® ਵਿੱਠà¨à¨¾à¨°à© à¨à©à¨¤à¨¾ à¨à¨¿à¨: %u ਬਲਾਠਵਿੱਠà¨à©à©±à¨² %s ਬਾà¨à¨ ਹਨ।\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "ਸà©à¨à¨ªà¨² à¨à©à¨¸à¨¼ ਸਾà¨à¨à¨¼: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "ਸਰਵਰ à¨à¨¾à¨£à¨à¨¾à¨°à© ਪà©à¨°à¨¾à¨ªà¨¤ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨² ਹà©à¨à¨: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1671,7 +1713,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"User name: %s\n"
"Host Name: %s\n"
@@ -1683,12 +1725,12 @@ msgstr ""
"Default Source: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "ਸਿੰਠà¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²à©à¨¹: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1727,22 +1769,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tਪà©à¨°à¨:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tਸਰà¨à¨°à¨® ਪà©à¨°à¨: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "ਸਰà©à¨¤ à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1781,20 +1823,20 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "à¨à¨ªà¨²à©±à¨¬à¨§ ਨਹà©à¨"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "ਮà©à¨¡à©à¨à¨² à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1811,12 +1853,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à¨à¨²à¨¾à¨à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1831,12 +1873,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à¨à¨¾à¨°à¨¡ à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1853,22 +1895,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tਪਰà©à¨«à¨¾à¨à¨²:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tਸਰà¨à¨°à¨® ਪਰà©à¨«à¨¾à¨à¨²: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "à¨à©°à¨ªà©à©±à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²à©à¨¹: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1905,12 +1947,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "ਸਰà©à¨¤ à¨à¨à¨à¨ªà©à©±à¨ à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1939,12 +1981,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "ਸà©à¨à¨ªà¨² à¨à¨¾à¨£à¨à¨¾à¨°à© ਲà©à¨£ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1975,26 +2017,80 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "ਫà©à¨²à©à¨¹: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "ਸà©à¨à¨ªà¨² à¨
ੱਪਲà©à¨¡ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ਫਾà¨à¨² ਦਾ ਸਮà©à¨ ਤà©à¨ ਪਹਿਲਾਠà¨
ੰਤ"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸਰਵਰ"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT ਮਿਲਿà¨, ਬੰਦ ਹ੠ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2017,6 +2113,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2056,7 +2153,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2067,103 +2164,104 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ਲà©à¨¡ à¨à¨°à¨¨ ਲਠਸà©à¨à¨ªà¨² ਫਾà¨à¨² ਦਿà¨"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ਸਾà¨à¨à¨¡ ਫਾà¨à¨² à¨à©à¨²à©à¨¹à¨£ ਲਠਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "à¨à©±à¨ %s ਸà¨à¨°à©à¨® ਨà©à©° ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤ '%s' ਨਾਲ à¨à©à¨²à©à¨¹à¨¿à¨ à¨à¨¾ ਰਿਹਾ ਹà©à¥¤"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à¨à©à¨¡à¨£ ਲਠਤà©à¨¹à¨¾à¨¨à©à©° ਸà©à¨à¨ªà¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "ਹà¨à¨¾à¨à¨£ ਲਠਤà©à¨¹à¨¾à¨¨à©à©° ਸà©à¨à¨ªà¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©°à¨ªà©à©±à¨ ਲਿਸਠà¨
ਤ੠à¨à©±à¨ ਸਿੰਠਨà©à©° ਸਿੰਠà¨à¨°à¨¨à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ ਸਰà©à¨¤ à¨à¨à¨à¨ªà©à©±à¨ ਲਿਸਠà¨
ਤ੠à¨à©±à¨ ਸਰà©à¨¤ ਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ ਮà©à¨¡à©à¨à¨² ਨਾਠà¨
ਤ੠à¨à¨°à¨à©à¨®à©à¨à¨ ਦà©à¨£à¨¾ ਪਵà©à¨à¨¾à¥¤"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ ਮà©à¨¡à©à¨à¨² ਲਿਸਠਦà©à¨£à© ਪਵà©à¨à©"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr "ਤà©à¨¸à©à¨ à¨à©±à¨ ਤà©à¨ ਵੱਧ ਸਿੰਠਨਹà©à¨ ਦ੠ਸà¨à¨¦à©à¥¤ ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ ਬà©à¨²à©à¨
ਨ ਮà©à©±à¨² ਦà©à¨£à¨¾ ਪਵà©à¨à¨¾à¥¤"
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr "ਤà©à¨¸à©à¨ à¨à©±à¨ ਤà©à¨ ਵੱਧ ਸਰà©à¨¤ ਨਹà©à¨ ਦ੠ਸà¨à¨¦à©à¥¤ ਤà©à¨¹à¨¾à¨¨à©à©° ਬà©à¨²à©à¨
ਨ ਮà©à©±à¨² ਦà©à¨£à¨¾ ਪਵà©à¨à¨¾à¥¤"
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©°à¨ªà©à©±à¨ ਲਿਸਠà¨
ਤ੠à¨à©±à¨ ਸਿੰਠਨà©à©° ਸਿੰਠà¨à¨°à¨¨à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à¨
ਢà©à©±à¨à¨µà©à¨ ਸਿੰਠà¨à©°à¨ªà©à©±à¨ ਸà©à¨à©"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©±à¨ à¨à¨¾à¨°à¨¡ ਨਾà¨/ਲਿਸਠà¨
ਤ੠ਪਰà©à¨«à¨¾à¨à¨² ਨਾਠਦà©à¨£à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "ਤà©à¨¹à¨¾à¨¨à©à©° à¨à©°à¨ªà©à©±à¨ ਲਿਸਠà¨
ਤ੠à¨à©±à¨ ਸਿੰਠਨà©à©° ਸਿੰਠà¨à¨°à¨¨à¨¾ ਪਵà©à¨à¨¾"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à¨
ਢà©à©±à¨à¨µà¨¾à¨ ਸà©à¨à¨ªà¨² ਹਦਾà¨à¨¤"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à¨à©à¨ ਯà©à¨ à¨à¨®à¨¾à¨à¨¡ ਨਹà©à¨ ਦਿੱਤà©à¥¤"
@@ -2246,44 +2344,44 @@ msgstr "à¨à©à¨à© ਡਾà¨à¨¾ ਲà©à¨¡ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²\n"
msgid "Not yet implemented.\n"
msgstr "ਹਾਲ੠ਬਣਾà¨à¨ ਨਹà©à¨à¥¤\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "à¨à©à¨ ਪਲਸ-à¨à¨¡à©à¨ ਡà©à¨®à¨¨ ਨਹà©à¨ à¨à©±à¨² ਰਿਹਾ, à¨à¨¾à¨ ਸ਼à©à¨¶à¨¨ ਡà©à¨®à¨¨ ਤà©à¨° ਤ੠ਨਹà©à¨ à¨à©±à¨² ਰਿਹਾ।"
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "ਪਲਸà¨à¨¡à©à¨ ਡà©à¨®à¨¨ ਬੰਦ à¨à¨°à¨¨ ਵਿੱਠਫà©à¨²à¥¤"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "ਡà©à¨®à¨¨ à¨à¨µà¨¾à¨¬ ਨਹà©à¨ ਦ੠ਰਹà©à¥¤"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn ਲਾਠਵਰਤ ਨਹà©à¨ ਸà¨à¨¦à¨¾à¥¤"
@@ -2322,38 +2420,42 @@ msgstr ""
"returned 0 or another value < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "ਬੰਦ"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "ਹਾਠਫਡà©à¨²à¨¿à¨à© ਪਲà©à¨
ਬà©à¨ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "ਹਾਠਫਡà©à¨²à¨¿à¨à© ਪਲà©à¨
ਬà©à¨ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à¨à©à¨²à©à¨«à©à¨¨à© ਡà©à¨ªà¨²à©à¨à¨¸ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "ਪਲਸà¨à¨¡à©à¨ ਸਾà¨à¨à¨¡ ਡਰਾà¨à¨µà¨°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à¨à¨à¨à¨ªà©à©±à¨ à¨à©°à¨¤à¨°"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à¨à©°à¨ªà©à©±à¨ à¨à©°à¨¤à¨°"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ à¨à©±à¨ªà¨° à¨à¨¡à©à¨"
@@ -2417,131 +2519,159 @@ msgstr "à¨à¨à¨ªà¨²à©à¨«à¨¾à¨à¨°"
msgid "No Amplifier"
msgstr "à¨à©à¨ à¨à¨à¨ªà¨²à©à¨«à¨¾à¨à¨° ਨਹà©à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ਬà©à¨¸à¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "à¨à©à¨ ਬà©à¨¸à¨ ਨਹà©à¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਹà©à©±à¨¡à¨«à©à¨¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ à¨à©°à¨ªà©à©±à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮਾà¨à¨à¨°à©à¨«à©à¨¨"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਲਾà¨à¨¨-à¨à¨¨"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਰà©à¨¡à©à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਵà©à¨¡à©à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ à¨à¨à¨à¨ªà©à©±à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਹà©à©±à¨¡à¨«à©à¨¨"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ à¨à¨à¨à¨ªà©à©±à¨ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮà©à¨¨à© à¨à¨à¨à¨ªà©à©±à¨"
-#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸà¨à©à¨°à©à¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
+#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
+#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮà©à¨¨à©"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸà¨à©à¨°à©à¨"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸਰਾà¨à¨à¨¡ 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ਡਿà©à©à¨à¨² ਸà¨à©à¨°à©à¨ (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ਡਿà©à©à¨à¨² ਸਰਾà¨à¨à¨¡ 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ਡਿà©à©à¨à¨² ਸਰਾà¨à¨à¨¡ 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ਡਿà©à©à¨à¨² ਸਰਾà¨à¨à¨¡ 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ਡਿà©à©à¨à¨² ਸà¨à©à¨°à©à¨ (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਮà©à¨¨à© ਡà©à¨ªà¨²à©à¨à¨¸"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à¨à¨¨à¨¾à¨²à¨¾à¨ ਸà¨à©à¨°à©à¨ ਡà©à¨ªà¨²à©à¨à¨¸"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ਡਿà©à©à¨à¨² ਸà¨à©à¨°à©à¨ ਡà©à¨ªà¨²à©à¨à¨¸ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "à¨à©±à¨ ਫਰà©à¨à¨¿à¨à¨à¨¸à© à¨à©±à¨®à¨à¨°"
diff --git a/po/pl.po b/po/pl.po
index 5d7f3a0..b241a1c 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-09-30 09:44+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-09-30 17:04+0200\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <fedora-trans-pl at redhat.com>\n"
@@ -13,12 +13,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -30,7 +30,7 @@ msgstr ""
"Prawdopodobnie jest to bÅÄ
d sterownika ALSA \"%s\". ProszÄ zgÅosiÄ ten "
"problem programistom ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -42,7 +42,7 @@ msgstr ""
"Prawdopodobnie jest to bÅÄ
d sterownika ALSA \"%s\". ProszÄ zgÅosiÄ ten "
"problem programistom ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -90,11 +90,11 @@ msgstr "Zegarowy PUSTY odpÅyw"
msgid "Null Output"
msgstr "Puste wyjÅcie"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "WewnÄtrzny dźwiÄk"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -111,92 +111,98 @@ msgstr "Przydzielenie nowego programu wczytujÄ
cego dl nie powiodÅo siÄ."
msgid "Failed to add bind-now-loader."
msgstr "Dodanie bind-now-loader nie powiodÅo siÄ."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Otrzymano sygnaÅ %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "KoÅczenie pracy."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Odnalezienie użytkownika \"%s\" nie powiodÅo siÄ."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Odnalezienie grupy \"%s\" nie powiodÅo siÄ."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Odnaleziono użytkownika \"%s\" (UID %lu) i grupÄ \"%s\" (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID użytkownika \"%s\" i grupy \"%s\" nie zgadzajÄ
siÄ."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Katalog domowy użytkownika \"%s\" nie jest \"%s\", ignorowanie."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Utworzenie \"%s\" nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Zmiana listy grup nie powiodÅa siÄ: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Zmiana GID nie powiodÅa siÄ: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Zmiana UID nie powiodÅa siÄ: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "PomyÅlnie porzucono uprawnienia roota."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Tryb systemowy nie jest obsÅugiwany na tej platformie."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Przetworzenie wiersza poleceÅ nie powiodÅa siÄ."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Demon nie jest uruchomiony"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Demon jest uruchomiony jako PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Zniszczenie demona nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -204,160 +210,175 @@ msgstr ""
"Ten program nie powinien byÄ uruchomiany jako root (chyba, że podano --"
"system)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Wymagane sÄ
uprawnienia roota."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start nie jest obsÅugiwane przy uruchamianiu systemowym."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
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:586
+#: ../src/daemon/main.c:686
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:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Uruchamianie w trybie systemowym, wymuszanie wyÅÄ
czenia trybu SHM."
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
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:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Uzyskanie standardowego wejÅcia/wyjÅcia nie powiodÅo siÄ."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "potok nie powiódÅ siÄ: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Uruchomienie demona nie powiodÅo siÄ."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "PomyÅlnie uruchomiono demona."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() nie powiodÅo siÄ: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "To jest PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Komputer kompilacji: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS kompilacji: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Uruchamianie na komputerze: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Odnaleziono %u procesorów."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Rozmiar strony to %lu bajtów"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Skompilowano z obsÅugÄ
Valgrind: tak"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Skompilowano z obsÅugÄ
Valgrind: nie"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Uruchamianie w trybie Valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Uruchamianie na komputerze: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Budowanie optymalizowane: tak"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Budowanie optymalizowane: nie"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "Podano NDEBUG, wszystkie asercje zostaÅy wyÅÄ
czone."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "Podano FASTPATH, tylko szybkie asercje Åcieżek zostaÅy wyÅÄ
czone."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Wszystkie asercje sÄ
wÅÄ
czone."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Uzyskanie identyfikatora komputera nie powiodÅo siÄ"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "Identyfikator komputera to %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "Identyfikator sesji to %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Używanie katalogu wykonywania %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Używanie katalogu stanu %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Używanie katalogu moduÅów %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Uruchamianie w trybie systemowym: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -373,15 +394,15 @@ msgstr ""
"ProszÄ przeczytaÄ http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode, "
"gdzie wyjaÅniono, dlaczego tryb systemowy jest zwykle zÅym pomysÅem."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() nie powiodÅo siÄ."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Åwieże zegary o wysokiej rozdzielczoÅci! Smacznego!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -389,27 +410,27 @@ msgstr ""
"KoleÅ, twoje jÄ
dro Åmierdzi! Szef kuchni poleca dzisiaj Linuksa z wÅÄ
czonymi "
"zegarami o wysokiej rozdzielczoÅci!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() nie powiodÅo siÄ."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Zainicjowanie demona nie powiodÅo siÄ."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Uruchamianie demona bez żadnych wczytanych moduÅów, odmawianie pracy."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "UkoÅczono uruchamianie demona."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Zainicjowano wyÅÄ
czenie demona."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Demon zostaÅ zniszczony."
@@ -675,72 +696,77 @@ msgstr "OSTRZEÅ»ENIE O PRZESTARZAÅOÅCI: %s\n"
msgid "Path: %s\n"
msgstr "Åcieżka: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] NieprawidÅowy dziennik docelowy \"%s\"."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] NieprawidÅowy poziom dziennika \"%s\"."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] NieprawidÅowa metoda resamplingu \"%s\"."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] NieprawidÅowy rlimit \"%s\"."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit nie jest obsÅugiwany na tej platformie."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] NieprawidÅowy format próbki \"%s\"."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] NieprawidÅowa czÄstotliwoÅÄ próbki \"%s\"."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] NieprawidÅowe kanaÅy próbki \"%s\"."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] NieprawidÅowa mapa kanaÅów \"%s\"."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] NieprawidÅowa liczba fragmentów \"%s\"."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] NieprawidÅowy rozmiar fragmentu \"%s\"."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] NieprawidÅowy poziom nice \"%s\"."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] NieprawidÅowa czÄstotliwoÅÄ próbki \"%s\"."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Otwarcie pliku konfiguracji nie powiodÅo siÄ: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -748,7 +774,7 @@ msgstr ""
"Podana domyÅlna mapa kanaÅów ma innÄ
liczbÄ kanaÅów niż podana domyÅlna "
"liczba kanaÅów."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Odczytano z pliku konfiguracji: %s ###\n"
@@ -794,8 +820,8 @@ msgid "Rear Right"
msgstr "Tylny prawy"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Subwoofer"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1140,191 +1166,191 @@ msgstr "XOpenDisplay() nie powiodÅo siÄ"
msgid "Failed to parse cookie data"
msgstr "Przetworzenie danych ciasteczka nie powiodÅo siÄ"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Otwarcie pliku konfiguracji \"%s\" nie powiodÅo siÄ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Nie wczytano ciasteczka. Próba poÅÄ
czenia siÄ bez niego."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Otrzymano komunikat z nieznanego powodu \"%s\""
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Opróżnienie strumienia nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Opróżniono strumieŠodtwarzania."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Opróżnianie poÅÄ
czenia z serwerem."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "PomyÅlnie utworzono strumieÅ."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Metryka bufora: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Metryka bufora: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Używanie przykÅadowej specyfikacji \"%s\", mapa kanaÅów \"%s\"."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "PoÅÄ
czono siÄ z urzÄ
dzeniem %s (%u, %swstrzymane)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "BÅÄ
d strumienia: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Wstrzymano urzÄ
dzenie strumienia.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Wznowiono urzÄ
dzenie strumienia.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "NiedopeÅniono strumieÅ.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "PrzepeÅniono strumieÅ.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Utworzono strumieÅ.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "StrumieÅ zostaÅ przeniesiony do urzÄ
dzenia %s (%u, %swstrzymane).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "nie "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Zmieniono atrybuty bufora strumienia.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Ustanowiono poÅÄ
czenie.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "PoÅÄ
czenie nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Otrzymano EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Otrzymano sygnaÅ, koÅczenie pracy."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Uzyskanie opóźnienia nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Czas: %0.3f sekundy; opóźnienie: %0.0f usekundy."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1376,10 +1402,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opcje]\n"
@@ -1438,7 +1468,7 @@ msgstr ""
" --list-file-formats WyÅwietla listÄ dostÄpnych formatów\n"
" plików.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1449,68 +1479,68 @@ msgstr ""
"Skompilowane za pomocÄ
libpulse %s\n"
"Skonsolidowane za pomocÄ
libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "NieprawidÅowa nazwa klienta \"%s\""
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "NieprawidÅowa nazwa strumienia \"%s\""
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "NieprawidÅowa mapa kanaÅów \"%s\""
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "NieprawidÅowe okreÅlenie opóźnienia \"%s\""
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "NieprawidÅowe okreÅlenie czasu procesu \"%s\""
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "NieprawidÅowa wÅasnoÅÄ \"%s\""
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Nieznany format pliku %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "NieprawidÅowe okreÅlenie próbki"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Za dużo parametrów."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Utworzenie okreÅlenia próbki dla pliku nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Otwarcie pliku dźwiÄkowego nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1518,23 +1548,23 @@ msgstr ""
"Ostrzeżenie: podane okreÅlenie próbki zostanie zastÄ
pione przez okreÅlenie z "
"pliku."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Ustalenie okreÅlenia próbki z pliku nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Ostrzeżenie: ustalenie mapy kanaÅów z pliku nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Mapa kanaÅów nie zgadza siÄ z okreÅleniem próbki"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Ostrzeżenie: zapisanie mapy kanaÅów do pliku nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -1542,81 +1572,81 @@ msgstr ""
"Otwieranie strumienia %s za pomocÄ
okreÅlenie próbki \"%s\" i mapy kanaÅów "
"\"%s\"."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "nagrywanie"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "odtwarzanie"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() nie powiodÅo siÄ."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() nie powiodÅo siÄ."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Wstrzymanie nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Wznowienie nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
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:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "PoÅÄ
czenie nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Otrzymano SIGINT, koÅczenie pracy.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "OSTRZEŻENIE: proces potomny zostaŠzniszczony przez sygnaŠ%u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1634,7 +1664,7 @@ msgstr ""
" -s, --server=SERWER Nazwa serwera do poÅÄ
czenia siÄ\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1645,52 +1675,63 @@ msgstr ""
"Skompilowane za pomocÄ
libpulse %s\n"
"Skonsolidowane za pomocÄ
libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() nie powiodÅo siÄ.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() nie powiodÅo siÄ.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() nie powiodÅo siÄ.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Uzyskanie statystyk nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Obecnie używane: %u bloków zawierajÄ
cych razem %s bajtów.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"Przydzielono podczas caÅego czasu uruchomienia: %u bloków zawierajÄ
cych "
"razem %s bajtów.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Rozmiar pamiÄci podrÄcznej próbek: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Uzyskanie informacji o serwerze nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1698,7 +1739,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nazwa użytkownika: %s\n"
"Nazwa komputera: %s\n"
@@ -1710,12 +1751,12 @@ msgstr ""
"DomyÅlne źródÅo: %s\n"
"Ciasteczko: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Uzyskanie informacji o odpÅywie nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1754,22 +1795,22 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorty:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktywny port: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Uzyskanie informacji o źródle nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1808,20 +1849,20 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "nie dotyczy"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Uzyskanie informacji o module nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1838,12 +1879,12 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Uzyskanie informacji o kliencie nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1858,12 +1899,12 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Uzyskanie informacji o karcie nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1880,22 +1921,22 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfile:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktywny profil: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Uzyskanie informacji o wejÅciu odpÅywu nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1932,12 +1973,12 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Uzyskanie informacji o wyjÅciu źródÅa nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1966,12 +2007,12 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Uzyskanie informacji o próbce nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2002,26 +2043,80 @@ msgstr ""
"\tWÅaÅciwoÅci:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Niepowodzenie: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "WysÅanie próbki nie powiodÅo siÄ: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Przedwczesny koniec pliku"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "NieprawidÅowy serwer"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Otrzymano SIGINT, koÅczenie pracy."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2044,6 +2139,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2082,7 +2178,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:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2093,106 +2189,106 @@ msgstr ""
"Skompilowane za pomocÄ
libpulse %s\n"
"Skonsolidowane za pomocÄ
libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ProszÄ podaÄ plik próbki do wczytania"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Otwarcie pliku dźwiÄkowego nie powiodÅo siÄ."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "Ostrzeżenie: ustalenie okreÅlenia próbki z pliku nie powiodÅo siÄ."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Należy podaÄ nazwÄ próbki do odtworzenia"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Należy podaÄ nazwÄ próbki do usuniÄcia"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Należy podaÄ indeks odpÅywu wejÅcia i odpÅyw"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Należy podaÄ indeks źródÅa wyjÅcia i źródÅo"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Należy podaÄ nazwÄ moduÅu i parametry."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Należy podaÄ indeks moduÅu"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Nie można podaÄ wiÄcej niż jednego odpÅywu. Należy podaÄ wartoÅÄ logicznÄ
."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
"Nie można podaÄ wiÄcej niż jednego źródÅa. Należy podaÄ wartoÅÄ logicznÄ
."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Należy podaÄ nazwÄ karty/indeks i nazwÄ profilu"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Należy podaÄ nazwÄ odpÅywu/indeks i nazwÄ portu"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Należy podaÄ nazwÄ ÅºródÅa/indeks i nazwÄ portu"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Należy podaÄ nazwÄ odpÅywu/indeks i gÅoÅnoÅÄ"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "NieprawidÅowe okreÅlenie gÅoÅnoÅci"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Należy podaÄ nazwÄ ÅºródÅa/indeks i gÅoÅnoÅÄ"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Należy podaÄ indeks odpÅywu wejÅcia i gÅoÅnoÅÄ"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "NieprawidÅowy indeks wejÅcia odpÅywu"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Należy podaÄ nazwÄ odpÅywu/indeks i zmiennÄ
logicznÄ
wyciszenia"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Należy podaÄ nazwÄ ÅºródÅa/indeks i zmiennÄ
logicznÄ
wyciszenia"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "Należy podaÄ indeks odpÅywu wejÅcia i zmiennÄ
logicznÄ
wyciszenia"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "NieprawidÅowe okreÅlenie indeksu wejÅcia odpÅywu"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Nie podano prawidÅowego polecenia."
@@ -2275,46 +2371,46 @@ msgstr "Wczytanie danych ciasteczka nie powiodÅo siÄ\n"
msgid "Not yet implemented.\n"
msgstr "Niezaimplementowane.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Demon PulseAudio nie jest uruchomiony, lub nie jest uruchomiony jako demon "
"sesji."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "gniazdo(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Zniszczenie demona PulseAudio nie powiodÅo siÄ."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Demon nie odpowiada."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Nie można uzyskaÄ dostÄpu do blokady automatycznego wznawiania."
@@ -2353,38 +2449,42 @@ msgstr ""
"snd_pcm_avail() zwróciÅo zero lub innÄ
wartoÅÄ < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "WyÅÄ
cz"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Odtwarzanie o wysokiej dokÅadnoÅci (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Przechwytywanie o wysokiej dokÅadnoÅci (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Duplex telefoniczny (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Serwer dźwiÄku PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "UrzÄ
dzenia wyjÅciowe"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "UrzÄ
dzenia wejÅciowe"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "DźwiÄk na @HOSTNAME@"
@@ -2448,132 +2548,159 @@ msgstr "Amplituner"
msgid "No Amplifier"
msgstr "Brak amplitunera"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Podbicie"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Brak podbicia"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "SÅuchawki analogowe"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "WejÅcie analogowe"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Mikrofon analogowy"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analogowe wejÅcie liniowe"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Radio analogowe"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Wideo analogowe"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "WyjÅcie analogowe"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "SÅuchawki analogowe"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "WyjÅcie analogowe (subwoofer)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analogowe wyjÅcie mono"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analogowe stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s/%s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analogowe mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analogowe stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analogowe surround 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analogowe surround 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analogowe surround 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analogowe surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analogowe surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analogowe surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analogowe surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analogowe surround 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analogowe surround 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analogowe surround 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analogowe surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Cyfrowe stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Cyfrowe surround 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Cyfrowe surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Cyfrowe surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Cyfrowe stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analogowy dupleks mono"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analogowy dupleks stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Cyfrowy dupleks stereo (IEC958)"
+
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Subwoofer"
diff --git a/po/pt.po b/po/pt.po
index bca8d93..b24abfa 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-29 23:47+0200\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Rui Gouveia <rui.gouveia at globaltek.pt>\n"
"Language-Team: pt <fedora-trans-pt at redhat.com>\n"
@@ -12,12 +12,12 @@ msgstr ""
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: PORTUGAL\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -30,7 +30,7 @@ msgstr ""
"Provavelmente isto é um erro no driver ALSA '%s'. Por favor, reporte este "
"problema aos programadores do ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -43,7 +43,7 @@ msgstr ""
"Provavelmente isto é um erro no driver ALSA '%s'. Por favor, reporte este "
"problema aos programadores do ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -91,11 +91,11 @@ msgstr ""
msgid "Null Output"
msgstr "SaÃda nula"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Ãudio Interno"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -111,92 +111,98 @@ msgstr "Não foi possÃvel alocar o novo carregador \"dl\"."
msgid "Failed to add bind-now-loader."
msgstr "Não foi possÃvel adicionar \"bind-now-loader\"."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Foi obtido o sinal %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "A sair."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Falha ao procurar o utilizador '%s'."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Falha ao procurar o grupo '%s'."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Foi encontrado utilizador '%s' (UID %lu) e grupo '%s' (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID do utilizador '%s' e do grupo '%s' não coincidem."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Directório pessoal do utilizador '%s' não é '%s'. A ignorar."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Falha ao criar o '%s': %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Falhou a alteração da lista de grupos: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Não foi possÃvel mudar o GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Não foi possÃvel mudar o UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Privilégios de root cedidos com sucesso."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Modo de sistema não suportado nesta plataforma."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) falhou: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Não foi possÃvel processar linha de comando."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Serviço não está a executar"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Serviço a executar como PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Tentativa de matar serviço falhou: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -204,159 +210,174 @@ msgstr ""
"Este programa não pretende ser executado como root (a não ser que a opção --"
"system seja especificada)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "São necessários privilégios de root."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start não é suportado para instâncias do sistema."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "A executar em modo de sistema, mas --disallow-exit não está definido!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"A executar em modo de sistema, mas --disallow-module-loading não está "
"definido!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "A executar em modo de sistema, a forçar a desactivação do modo SHM!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"A executar em modo de sistema, a forçar a desactivação da saÃda por "
"inactividade!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Não foi possÃvel adquirir o stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe falhou: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() falhou: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() falhou: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Arranque do serviço falhou."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Arranque do serviço sucedeu."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() falhou: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Isto é PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Máquina de compilação: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS utilizadas na compilação: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "A executar na máquina: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Foram encontrados %u CPUs."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Tamanho da página é %lu bytes"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Compilado com suporte para Valgrind: sim"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Compilado com suporte para Valgrind: não"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "A executar em modo \"valgrind\": %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "A executar na máquina: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimizado: sim"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Compilação optimizada: não"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definido, todas as declarações desactivadas."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH definido, apenas as declarações \"fast path\" desactivadas."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Todas as declarações desactivadas."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "A tentativa de ler o ID da máquina falhou"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "O ID da máquina é %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "O ID da sessão é %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Execução a utilizar o directório %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "A manter o estado no directório %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "A utilizar o directório de módulos %s"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Execução em modo de sistema: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -372,15 +393,15 @@ msgstr ""
"Por favor leia http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode para uma "
"explicação de como o modo de sistema é usualmente uma má ideia."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() falhou."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timer \"frescos\" de alta resolução disponÃveis. Bom apetite!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -388,27 +409,27 @@ msgstr ""
"Oh pá, o teu kernel não presta! O prato do dia recomendado é Linux com "
"timers de alta resolução activos!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() falhou."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Falha ao inicializar serviço."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Serviço arrancou sem módulos carregados. A recusar trabalhar."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Arranque do serviço completo."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Encerramento do serviço iniciado."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Serviço terminado."
@@ -678,72 +699,77 @@ msgstr "AVISO DE DESCONTINUIDADE: %s\n"
msgid "Path: %s\n"
msgstr "Caminho: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ficheiro registo de destino inválido '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] NÃvel do ficheiro de registo inválido '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Método de reamostragem inválido '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit inválido '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit não é suportado nesta plataforma."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato da amostra inválido '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Taxa de amostragem '%s' inválida."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canais de amostragem inválidos '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canais inválido '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Número inválido de fragmentos '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Tamanho do fragmento inválido '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] nÃvel nice inválido '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Taxa de amostragem '%s' inválida."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Falha ao abrir ficheiro de configuração: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -751,7 +777,7 @@ msgstr ""
"O mapa de canais especificado tem um número de canais diferente do número de "
"canais definido por omissão."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Ler configuração a partir do ficheiro: %s ###\n"
@@ -797,8 +823,8 @@ msgid "Rear Right"
msgstr "Traseira Direita"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Emissor de Baixa Frequência"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1143,191 +1169,191 @@ msgstr "XOpenDisplay() falhou"
msgid "Failed to parse cookie data"
msgstr "Não foi possÃvel processar dados da cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Falha ao abrir ficheiro de configuração '%s': %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Nenhuma cookie carregada. A tentar ligar sem cookie."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Recebida mensagem para extensão desconhecida '%s'"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Falha ao esvaziar fluxo: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Fluxo de leitura drenado."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "A drenar ligação ao servidor."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() falhou: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() falhou: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() falhou: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Fluxo criado com sucesso."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() falhou: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Métricas do Buffer: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Métricas do Buffer: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Utilizando especificação da amostra '%s', mapa de canal '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Ligado ao dispositivo %s (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Erro de fluxo: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Dispositivo de fluxo suspenso.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "Dispositivo de fluxo retomado.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Fluxo com falta de dados.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Fluxo com excesso de dados.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Fluxo iniciado.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Fluxo movido para o dispositivo %s (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "negação"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Atributos do buffer de fluxo alterados.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Ligação estabelecida.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() falhou: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() falhou: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() falhou: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Ligação falhou: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Obtive EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() falhou: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Recebido sinal, a sair."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Falhou a obtenção da cadência: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Tempo: %0.3f sec; Cadência: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() falhou: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1379,10 +1405,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opções]\n"
@@ -1440,7 +1470,7 @@ msgstr ""
" --list-file-formats Lista o formato de ficheiros "
"disponÃveis.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1451,68 +1481,68 @@ msgstr ""
"Compilado com libpulse %s\n"
"Ligado com libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nome de cliente inválido '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nome de fluxo inválido '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Mapa de canais inválido '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Especificação da cadência inválida '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Especificação de tempo de processamento inválido '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Propriedade inválida '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Formato de ficheiro desconhecido %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Especificação de amostra inválida"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Demasiados argumentos."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Falha ao gerar especificação de amostra para o ficheiro."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Falha ao abrir ficheiro de audio"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1520,103 +1550,103 @@ msgstr ""
"Aviso: a especificação da amostra será sobrescrita com a especificação do "
"ficheiro."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Falha ao determinar a especificação da amostra a partir do ficheiro."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Aviso: Falha a determinar o mapa de canal do ficheiro."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Mapa de canais não corresponde à especificação da amostra"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Aviso: falha na escrita do mapa de canais no ficheiro."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"Abrindo um %s fluxo com especificação da amostra '%s' e mapa de canais '%s'."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "a gravar"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "reprodução"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() falhou."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() falhou."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() falhou."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() falhou: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() falhou."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() falhou."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Falhou ao suspender: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Falhou ao restaurar: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "Atenção: Servidor de Som não local, suspender ignorado.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Ligação falhou: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Obtido SIGINT, a sair.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "Atenção: Processo filho terminado por sinal %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1634,7 +1664,7 @@ msgstr ""
" -s, --server=SERVER Nome do servidor ao qual ligar\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1645,51 +1675,62 @@ msgstr ""
"Compilado com libpulse %s\n"
"Ligado com libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() falhou.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() falhou.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() falhou.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Falhou a obtenção de estatÃsticas: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Correntemente em uso: %u blocos contendo %s bytes no total.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
"Alocado durante todo o tempo de vida: %u blocos contendo %s bytes no total.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Tamanho cache da amostra: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Falha ao obter informações do servidor: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1697,7 +1738,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nome de utilizador: %s\n"
"Nome da máquina: %s\n"
@@ -1709,12 +1750,12 @@ msgstr ""
"Fonte por omissão: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Falha ao obter informações do depósito: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1753,22 +1794,22 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorto:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPorto Activo: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Falha ao obter informações da fonte: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1807,20 +1848,20 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/d"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Falha ao obter informações do módulo: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1837,12 +1878,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Falha ao obter informações do cliente: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1857,12 +1898,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Falha ao obter informações da carta: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1879,22 +1920,22 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tPrefis:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tPerfil Activo: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Falha ao obter informação de entrada do depósito: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1931,12 +1972,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Falha ao obter informações da fonte: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1965,12 +2006,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Falha ao obter informações da amostra: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2001,26 +2042,80 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Falha: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Falha ao enviar amostra: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Fim prematuro do ficheiro"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Servidor Inválido"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Obtido SIGINT, a sair."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2043,6 +2138,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2081,7 +2177,7 @@ msgstr ""
" -n, --client-name=NAME Como chamar este cliente no "
"servidor\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2092,50 +2188,50 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Por favor, especifique um ficheiro de amostra para carregar"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Falha ao abrir ficheiro de som."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "Aviso: Falha ao determinar a especificação da amostra do ficheiro."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Tem de especificar um nome de amostra para reproduzir"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Tem de especificar um nome de amostra para remover"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Tem de especificar um Ãndice de entrada de depósito e um depósito"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Tem de especificar um Ãndice de saÃda de fonte e uma fonte"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Tem de especificar um nome de módulo e argumentos."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Tem de especificar um Ãndice de módulo"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Não pode especificar mais do que um depósito. Tem de especificar um valor "
"booleano."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2143,57 +2239,57 @@ msgstr ""
"Não pode especificar mais do que uma fonte. Tem de especificar um valor "
"booleano."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Tem de especificar um nome/Ãndice de placa e um nome de perfil"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Tem de especificar um nome/Ãndice de depósito e nome de um porto"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Tem de especificar um nome/Ãndice de fonte e nome de um porto"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Tem de especificar um nome/Ãndice de depósito e um volume"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Especificação de volume inválida"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Tem de especificar um nome/Ãndice de fonte e um volume"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Tem de especificar um Ãndice de entrada de depósito e um volume"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Ãndice de depósito de entrada inválido"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Tem de especificar um nome/Ãndice de depósito e um booleano mudo"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Tem de especificar um nome/Ãndice de fonte e um booleano mudo"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "Tem de especificar um Ãndice de entrada de depósito e um booleano mudo"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Ãndice de entrada de depósito inválida"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "O comando especificado é inválido."
@@ -2278,45 +2374,45 @@ msgstr "Não foi possÃvel carregar os dados da cookie\n"
msgid "Not yet implemented.\n"
msgstr "Ainda não implementado.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Não existe um daemon PulseAudio a correr, ou não corre como daemon de sessão."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Não foi possÃvel terminar o serviço PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Serviço não responde."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "ImpossÃvel aceder ao lock \"autospawn\"."
@@ -2355,39 +2451,43 @@ msgstr ""
"snd_pcm_avail() retornou 0 ou outro valor < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Desligado"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Reprodução Alta Fidelidade (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Captação de Alta Fidelidade (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telefonia Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Servidor de Som PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
#, fuzzy
msgid "Input Devices"
msgstr "Entrada %s"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr ""
@@ -2453,154 +2553,179 @@ msgstr ""
msgid "No Amplifier"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+msgid "Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+msgid "No Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Mono Analógico"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
#, fuzzy
msgid "Analog Input"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
#, fuzzy
msgid "Analog Microphone"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
#, fuzzy
msgid "Analog Line-In"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
#, fuzzy
msgid "Analog Radio"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
#, fuzzy
msgid "Analog Video"
msgstr "Estéreo Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
#, fuzzy
msgid "Analog Output"
msgstr "SaÃda nula"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
#, fuzzy
msgid "Analog Headphones"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
#, fuzzy
msgid "Analog Mono Output"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Estéreo Analógico"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, fuzzy, c-format
msgid "%s+%s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, fuzzy, c-format
msgid "%s / %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Estéreo Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
#, fuzzy
msgid "Analog Surround 2.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
#, fuzzy
msgid "Analog Surround 3.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
#, fuzzy
msgid "Analog Surround 3.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analog Surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analog Surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
#, fuzzy
msgid "Analog Surround 6.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
#, fuzzy
msgid "Analog Surround 6.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
#, fuzzy
msgid "Analog Surround 7.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analog Surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Estéreo Digital (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
#, fuzzy
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Surround Digital 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Surround Digital 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Surround Digital 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Estéreo Digital (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
#, fuzzy
msgid "Analog Mono Duplex"
msgstr "Mono Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
#, fuzzy
msgid "Analog Stereo Duplex"
msgstr "Estéreo Analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
#, fuzzy
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Estéreo Digital (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Emissor de Baixa Frequência"
+
#, fuzzy
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Nome de máquina inválido"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 257aa36..d91484d 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-23 09:53+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-23 14:42-0300\n"
"Last-Translator: Igor Pires Soares <igor at projetofedora.org>\n"
"Language-Team: Brazilian-Portuguese <fedora-trans-pt_br at redhat.com>\n"
@@ -19,38 +19,49 @@ msgstr ""
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: Brazil\n"
-#: ../src/modules/alsa/alsa-util.c:858
-#: ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"O snd_pcm_avail() retornou um valor que é excepcionalmente grande: %lu bytes (%lu ms).\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema aos desenvolvedores do ALSA."
+"O snd_pcm_avail() retornou um valor que é excepcionalmente grande: %lu bytes "
+"(%lu ms).\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"relate esse problema aos desenvolvedores do ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"O snd_pcm_delay() retornou um valor que é excepcionalmente grande: %li bytes (%s%lu ms).\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema aos desenvolvedores do ALSA."
+"O snd_pcm_delay() retornou um valor que é excepcionalmente grande: %li bytes "
+"(%s%lu ms).\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"relate esse problema aos desenvolvedores do ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-"O snd_pcm_mmap_begin() retornou um valor que é excepcionalmente grande: %lu bytes (%lu ms).\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema aos desenvolvedores do ALSA."
+"O snd_pcm_mmap_begin() retornou um valor que é excepcionalmente grande: %lu "
+"bytes (%lu ms).\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"relate esse problema aos desenvolvedores do ALSA."
#: ../src/modules/module-always-sink.c:39
msgid "Always keeps at least one sink loaded even if it's a null one"
@@ -65,8 +76,18 @@ msgid "Virtual LADSPA sink"
msgstr "Destino Virtual LADSPA"
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
-msgstr "sink_name=<nome do destino> sink_properties=<propriedades do destino> master=<nome do destino a ser filtrado> format=<formato de amostragem> rate=<taxa da amostragem> channels=<número de canais> channel_map=<mapa dos canais> plugin=<nome do plugin ladspa> label=<rótulo do plugin ladspa> control=<lista separada por vÃrgulas dos valores de controle da entrada>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
+msgstr ""
+"sink_name=<nome do destino> sink_properties=<propriedades do destino> "
+"master=<nome do destino a ser filtrado> format=<formato de amostragem> "
+"rate=<taxa da amostragem> channels=<número de canais> channel_map=<mapa dos "
+"canais> plugin=<nome do plugin ladspa> label=<rótulo do plugin ladspa> "
+"control=<lista separada por vÃrgulas dos valores de controle da entrada>"
#: ../src/modules/module-null-sink.c:55
msgid "Clocked NULL sink"
@@ -76,11 +97,11 @@ msgstr "Destino nulo temporizado"
msgid "Null Output"
msgstr "SaÃda nula"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Ãudio interno"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -96,288 +117,326 @@ msgstr "Falha ao alocar o novo carregador dl."
msgid "Failed to add bind-now-loader."
msgstr "Falha em adicionar o bind-now-loader."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Sinal %s recebido."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Saindo."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Falha ao localizar o usuário \"%s\"."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Falha ao localizar o grupo \"%s\"."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Usuário \"%s\" (UID %lu) e grupo \"%s\" (GID %lu) localizados."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "O GID do usuário'%s' e do grupo '%s' não combinam."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "O diretório pessoal do usuário \"%s\" não é \"%s\", ignorando."
-#: ../src/daemon/main.c:208
-#: ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Falha ao criar \"%s\": %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Falha ao alterar a lista de grupos: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Falha ao alterar o GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Falha ao alterar o UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "Os privilégios do root foram retirados com sucesso."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "O modo ampliado do sistema não tem suporte nessa plataforma."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) falhou: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Falha em interpretar a linha de comando."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "O daemon não está em execução"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon executando como PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Falha em encerrar o daemon: %s"
-#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "Este programa não é para ser executado como root (a não ser que --system seja especificado)."
+#: ../src/daemon/main.c:662
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Este programa não é para ser executado como root (a não ser que --system "
+"seja especificado)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Privilégios de root requeridos."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start não tem suporte para instâncias de sistemas."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
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:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "Executando no modo system, mas --disallow-module-loading não foi configurado!"
+msgstr ""
+"Executando no modo system, mas --disallow-module-loading não foi configurado!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Executando no modo system, desabilitando forçadamente o modo SHM!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "Executando no modo system, desabilitando forçadamente o exit idle time!"
+msgstr ""
+"Executando no modo system, desabilitando forçadamente o exit idle time!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Falha em adquirir o stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "O pipe falhou: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "O fork() falhou: %s"
-#: ../src/daemon/main.c:646
-#: ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "A operação read() falhou: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Falha na partida do daemon."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Os daemons foram iniciados com sucesso."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "A operação read() falhou: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Este é o PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilação: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilação CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Executando no host: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs localizadas."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "O tamanho da página é %lu bytes"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Compilado com suporte do Valgrind: sim"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Compilado com suporte do Valgrind: não"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Executando em modo valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Executando no host: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Build otimizado: sim"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Build otimizado: não"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definido, todas as declarações desabilitadas."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr "FASTPATH definido, somente as declarações do \"fast path\" foram desabilitadas."
+msgstr ""
+"FASTPATH definido, somente as declarações do \"fast path\" foram "
+"desabilitadas."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Todas as declarações habilitadas."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Falha em obter o ID da máquina"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "A ID da máquina é %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "O ID da sessão é %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Usando o diretório de runtime %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Usando o diretório de estado %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Usando o diretório de módulos %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Executando em modo do sistema: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
msgstr ""
-"OK, então você está executando o PA no modo de sistema. Por favor, note que é mais provável que você não deveria estar fazendo isso.\n"
-"Todavia, se você o fizer, então a culpa será sua se as coisas não funcionarem como esperado.\n"
-"Por favor, leia o http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode para obter um explicação sobre porque o modo de sistema é uma má idéia."
-
-#: ../src/daemon/main.c:809
+"OK, então você está executando o PA no modo de sistema. Por favor, note que "
+"é mais provável que você não deveria estar fazendo isso.\n"
+"Todavia, se você o fizer, então a culpa será sua se as coisas não "
+"funcionarem como esperado.\n"
+"Por favor, leia o http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode para "
+"obter um explicação sobre porque o modo de sistema é uma má idéia."
+
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() falhou."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timers de alta resolução frequinhos disponÃveis! Bon appetit!"
-#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr "Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de alta resolução habilitados!"
+#: ../src/daemon/main.c:922
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de "
+"alta resolução habilitados!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() falhou."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Falha em iniciar o daemon."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
+msgstr ""
+"O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "A partida dos Daemon está completa."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "O encerramento do Daemon foi iniciado."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Daemon terminado."
@@ -392,37 +451,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"
@@ -433,10 +503,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"
@@ -447,56 +519,79 @@ msgstr ""
" -h, --help Mostra esta ajuda\n"
" --version Mostra a versão\n"
" --dump-conf Descarrega a configuração padrão\n"
-" --dump-modules Descarrega a lista de módulos disponÃveis\n"
-" --dump-resample-methods Descarrega os métodos de reamostragem\n"
-" --cleanup-shm Limpa os segmentos de memória compartilhados\n"
-" --start Inicia o daemon se ele não estiver em execução\n"
+" --dump-modules Descarrega a lista de módulos "
+"disponÃveis\n"
+" --dump-resample-methods Descarrega os métodos de "
+"reamostragem\n"
+" --cleanup-shm Limpa os segmentos de memória "
+"compartilhados\n"
+" --start Inicia o daemon se ele não estiver "
+"em execução\n"
" -k --kill Encerra um daemon em execução\n"
-" --check Verifica se há um daemon em execução (somente retorna o código de saÃda)\n"
+" --check Verifica se há um daemon em execução "
+"(somente retorna o código de saÃda)\n"
"\n"
"OPÃÃES:\n"
-" --system[=BOOL] Executa como uma instância do sistema em escala ampla\n"
+" --system[=BOOL] Executa como uma instância do "
+"sistema em escala ampla\n"
" -D, --daemonize[=BOOL] Torna-se um daemom após o inÃcio\n"
" --fail[=BOOL] Sai quando a partida falha\n"
" --high-priority[=BOOL] Tenta definir um nÃvel alto de nice\n"
" (disponÃvel apenas, quando SUID ou\n"
" com RLIMIT_NICE) elevado\n"
-" --realtime[=BOOL] Tenta habilitar o escalonamento em tempo real\n"
-" (disponÃvel apenas como root, quando SUID ou\n"
+" --realtime[=BOOL] Tenta habilitar o escalonamento em "
+"tempo real\n"
+" (disponÃvel apenas como root, quando "
+"SUID ou\n"
" com RLIMIT_RTPRIO) elevado\n"
-" --disallow-module-loading[=BOOL] Não permite carga/descarga de módulo requerido pelo usuário\n"
+" --disallow-module-loading[=BOOL] Não permite carga/descarga de módulo "
+"requerido pelo usuário\n"
" depois da partida\n"
-" --disallow-exit[=BOOL] Não permite saÃda requisitada pelo usuário\n"
-" --exit-idle-time=SECS Termina um daemon quando ocioso e este\n"
+" --disallow-exit[=BOOL] Não permite saÃda requisitada pelo "
+"usuário\n"
+" --exit-idle-time=SECS Termina um daemon quando ocioso e "
+"este\n"
" tempo foi decorrido\n"
-" --module-idle-time=SECS Descarrega os módulos autocarregáveis quando ociosos e\n"
+" --module-idle-time=SECS Descarrega os módulos "
+"autocarregáveis quando ociosos e\n"
" este tempo foi decorrido\n"
-" --scache-idle-time=SECS Descarrega amostras quando ociosas e\n"
+" --scache-idle-time=SECS Descarrega amostras quando ociosas "
+"e\n"
" este tempo foi decorrido\n"
-" --log-level[=LEVEL] Aumenta ou define o grau de detalhamento\n"
+" --log-level[=LEVEL] Aumenta ou define o grau de "
+"detalhamento\n"
" -v Aumenta o nÃvel de detalhamento\n"
" --log-target={auto,syslog,stderr} Especifica o destino do log\n"
-" --log-meta[=BOOL] Inclui a localização do código na mensagem de log\n"
-" --log-time[=BOOL] Inclui carimbos de hora nas mensagens de log\n"
-" --log-backtrace=FRAMES Inclui um backtrace na mensagem de log\n"
-" -p, --dl-search-path=PATH Define o caminho de pesquisa para objetos (plugins)\n"
+" --log-meta[=BOOL] Inclui a localização do código na "
+"mensagem de log\n"
+" --log-time[=BOOL] Inclui carimbos de hora nas "
+"mensagens de log\n"
+" --log-backtrace=FRAMES Inclui um backtrace na mensagem de "
+"log\n"
+" -p, --dl-search-path=PATH Define o caminho de pesquisa para "
+"objetos (plugins)\n"
" dinamicamente compartilhados\n"
-" --resample-method=METHOD Usa o método de reamostragem especificado\n"
+" --resample-method=METHOD Usa o método de reamostragem "
+"especificado\n"
" (Veja --dump-resample-methods para\n"
" valores possÃveis)\n"
" --use-pid-file[=BOOL] Cria um arquivo PID\n"
-" --no-cpu-limit[=BOOL] Não instala um limitador de carga de CPU em\n"
+" --no-cpu-limit[=BOOL] Não instala um limitador de carga de "
+"CPU em\n"
" plataformas que o suportem.\n"
-" --disable-shm[=BOOL] Desabilita o suporte à memória compartilhada.\n"
+" --disable-shm[=BOOL] Desabilita o suporte à memória "
+"compartilhada.\n"
"\n"
"SCRIPT DE INÃCIO:\n"
" -L, --load=\"ARGUMENTOS DO MÃDULO\" Carrega um plugin especificado com\n"
" o argumento especificado\n"
" -F, --file=NOME_DO_ARQUIVO Executa o script especificado\n"
-" -C Abre uma linha de comando no TTY em execução\n"
+" -C Abre uma linha de comando no TTY em "
+"execução\n"
" depois da partida\n"
"\n"
-" -n Não carrega o arquivo de script padrão\n"
+" -n Não carrega o arquivo de script "
+"padrão\n"
#: ../src/daemon/cmdline.c:247
msgid "--daemonize expects boolean argument"
@@ -507,8 +602,12 @@ msgid "--fail expects boolean argument"
msgstr "--fail espera argumento booleano"
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr "--log-level espera um argumento em nÃvel de log (seja numérico na faixa de 0..4 seja algum entre 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 espera um argumento em nÃvel de log (seja numérico na faixa de "
+"0..4 seja algum entre debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:276
msgid "--high-priority expects boolean argument"
@@ -604,76 +703,85 @@ msgstr "AVISO DE OBSOLESCÃNCIA: %s\n"
msgid "Path: %s\n"
msgstr "Caminho: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Alvo do log inválido '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] NÃvel de log inválido '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Método de reamostragem inválido '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit inválido '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit não tem suporte nessa plataforma."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato de amostragem inválido '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Taxa de amostragem inválida '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canais de amostragem inválidos'%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canais \"%s\" inválido."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Números de fragmentos inválidos '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Tamanho de fragmentos inválido '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Número de nice inválido'%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Taxa de amostragem inválida '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Falha em abrir o arquivo de configuração: %s"
-#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
-msgstr "O mapa padrão dos canais especificado tem um número diferente de canais do que o número de canais padrão especificado."
+#: ../src/daemon/daemon-conf.c:602
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+"O mapa padrão dos canais especificado tem um número diferente de canais do "
+"que o número de canais padrão especificado."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lido do arquivo de configuração: %s ###\n"
@@ -690,8 +798,7 @@ msgstr "Sistema de som PulseAudio"
msgid "Start the PulseAudio Sound System"
msgstr "Iniciar o sistema de som PulseAudio"
-#: ../src/pulse/channelmap.c:105
-#: ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
msgstr "Mono"
@@ -720,8 +827,8 @@ msgid "Rear Right"
msgstr "Posterior direito"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "Emissor de baixa freqüência"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -895,12 +1002,9 @@ msgstr "Posterior superior esquerdo"
msgid "Top Rear Right"
msgstr "Posterior superior direito"
-#: ../src/pulse/channelmap.c:484
-#: ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295
-#: ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341
-#: ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
msgstr "(Inválido)"
@@ -1061,8 +1165,7 @@ msgstr "%0.1f KiB"
msgid "%u B"
msgstr "%u B"
-#: ../src/pulse/client-conf-x11.c:55
-#: ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
msgstr "XOpenDisplay() falhou"
@@ -1070,193 +1173,191 @@ msgstr "XOpenDisplay() falhou"
msgid "Failed to parse cookie data"
msgstr "Falhou ao analisar os dados do cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Falha em abrir o arquivo de configuração '%s': %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Nenhum cookie foi carregado. Tentativa de conexão sem eles."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Foi recebida uma mensagem para uma extensão desconhecida '%s'"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Falha ao drenar o fluxo: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Fluxo de reprodução drenado."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Drenando conexão para o servidor."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() falhou: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() falhou: %s"
-#: ../src/utils/pacat.c:237
-#: ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() falhou: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Fluxo criado com sucesso."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() falhou: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Métricas do buffer: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Métricas do buffer: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Usando especificação de amostragem \"%s\", mapa de canais \"%s\"."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "Conectado ao dispositivo %s (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Erro de fluxo: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "Dispositivo de fluxo suspenso.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "O dispositivo de fluxo continuou.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Subestimação do fluxo.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Superestimação do fluxo.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Fluxo iniciado.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Fluxo movido para o dispositivo %s (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "não"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Atributos do buffer de fluxo alterados.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Conexão estabelecida.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() falhou: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() falhou: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() falhou: %s"
-#: ../src/utils/pacat.c:470
-#: ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Falha na conexão: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Atingiu EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() falhou: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Sinal recebido, saindo."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Falha ao obter a latência: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Tempo: %0.3f sec;; Latência: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() falhou: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1268,31 +1369,54 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opções]\n"
@@ -1303,36 +1427,58 @@ msgstr ""
" -r, --record Cria uma conexão para gravação\n"
" -p, --playback Cria uma conexão para reprodução\n"
"\n"
-" -v, --verbose Habilita operações no modo detalhado\n"
+" -v, --verbose Habilita operações no modo "
+"detalhado\n"
"\n"
" -s, --server=SERVIDOR Nome do servidor a conectar-se\n"
-" -d, --device=DISPOSITIVO O nome do destino/fonte a conectar-se\n"
-" -n, --client-name=NOME Como chamar este cliente no servidor\n"
+" -d, --device=DISPOSITIVO O nome do destino/fonte a "
+"conectar-se\n"
+" -n, --client-name=NOME Como chamar este cliente no "
+"servidor\n"
" --stream-name=NOME Como chamar este fluxo no servidor\n"
-" --volume=VOLUME Especifica a faixa (linear) inicial de volume no intervalo 0...65536\n"
-" --rate=TAXA_DE_AMOSTRAGEM Taxa de amostragem em Hz (o padrão é 44100)\n"
-" --format=FORMATO_DE_AMOSTRAGEM Tipo de amostragem, um de s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw, s32le, s32be, s24le, s24be,\n"
-" s24-32le, s24-32be (o padrão é s16ne)\n"
-" --channels=CANAIS O número de canais, 1 para mono, 2 para estéreo\n"
+" --volume=VOLUME Especifica a faixa (linear) inicial "
+"de volume no intervalo 0...65536\n"
+" --rate=TAXA_DE_AMOSTRAGEM Taxa de amostragem em Hz (o "
+"padrão é 44100)\n"
+" --format=FORMATO_DE_AMOSTRAGEM Tipo de amostragem, um de s16le, "
+"s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (o padrão é "
+"s16ne)\n"
+" --channels=CANAIS O número de canais, 1 para mono, 2 "
+"para estéreo\n"
" (o padrão é 2)\n"
-" --channel-map=MAPA_DE_CANAIS Mapeamento de canais a ser usado no lugar do padrão\n"
-" --fix-format Obtém o formato da amostragem do destino onde o fluxo\n"
+" --channel-map=MAPA_DE_CANAIS Mapeamento de canais a ser usado "
+"no lugar do padrão\n"
+" --fix-format Obtém o formato da amostragem do "
+"destino onde o fluxo\n"
" está sendo conectado.\n"
-" --fix-rate Obtém a taxa de amostragem do destino onde o fluxo está\n"
+" --fix-rate Obtém a taxa de amostragem do "
+"destino onde o fluxo está\n"
" sendo conectado.\n"
-" --fix-channels Obtém o número de canais e o mapa de canais\n"
-" do destino onde o fluxo está sendo conectado.\n"
-" --no-remix Não realizar upmix nem downmix dos canais.\n"
-" --no-remap Mapear os canais por Ãndice em vez de nome.\n"
-" --latency=BYTES Requisitar a latência especificada em bytes.\n"
-" --process-time=BYTES Requisitar o tempo de processo especificado por requisições em bytes.\n"
-" --property=PROPRIEDADE=VALOR Define a propriedade especificada para o valor especificado.\n"
-" --raw Grava/reproduz dados PCM não tratados.\n"
-" --file-format=FORMATO_DO_ARQ. Grava/reproduz dados PCM formatados.\n"
-" --list-file-formats Lista os formatos de arquivo disponÃveis.\n"
-
-#: ../src/utils/pacat.c:731
+" --fix-channels Obtém o número de canais e o mapa de "
+"canais\n"
+" do destino onde o fluxo está sendo "
+"conectado.\n"
+" --no-remix Não realizar upmix nem downmix dos "
+"canais.\n"
+" --no-remap Mapear os canais por Ãndice em vez "
+"de nome.\n"
+" --latency=BYTES Requisitar a latência especificada "
+"em bytes.\n"
+" --process-time=BYTES Requisitar o tempo de processo "
+"especificado por requisições em bytes.\n"
+" --property=PROPRIEDADE=VALOR Define a propriedade especificada "
+"para o valor especificado.\n"
+" --raw Grava/reproduz dados PCM não "
+"tratados.\n"
+" --file-format=FORMATO_DO_ARQ. Grava/reproduz dados PCM "
+"formatados.\n"
+" --list-file-formats Lista os formatos de arquivo "
+"disponÃveis.\n"
+
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1343,179 +1489,183 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pacat.c:764
-#: ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Nome do cliente \"%s\" inválido"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Nome do fluxo \"%s\" inválido"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Mapa de canais \"%s\" inválido"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Especificação de latência inválida \"%s\""
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Especificação do tempo de processo \"%s\" inválida"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Propriedade \"%s\" inválida"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Formato de arquivo %s desconhecido."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Especificação de amostragem inválida"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Argumentos em excesso."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Falha ao gerar a especificação de amostragem para o arquivo."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Falha ao abrir o arquivo de áudio."
-#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
-msgstr "Aviso: a especificação de amostragem especificada será sobrescrita pela especificação do arquivo."
+#: ../src/utils/pacat.c:1000
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
+msgstr ""
+"Aviso: a especificação de amostragem especificada será sobrescrita pela "
+"especificação do arquivo."
-#: ../src/utils/pacat.c:962
-#: ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Falha ao determinar a especificação de amostragem a partir do arquivo."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Aviso: falha ao determinar o mapa de canais a partir do arquivo."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "O mapa de canais não combina com a especificação da amostragem"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Aviso: falha ao gravar o mapa de canais no arquivo."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "Abrindo um fluxo %s com a especificação de amostragem \"%s\" e mapeamento de canais \"%s\"."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"Abrindo um fluxo %s com a especificação de amostragem \"%s\" e mapeamento de "
+"canais \"%s\"."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "gravando"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "playback"
-#: ../src/utils/pacat.c:1035
-#: ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() falhou."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() falhou."
-#: ../src/utils/pacat.c:1061
-#: ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() falhou."
-#: ../src/utils/pacat.c:1069
-#: ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() falhou: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() falhou."
-#: ../src/utils/pacat.c:1082
-#: ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() falhou."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Falha em suspender: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Falha ao prosseguir: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "AVISO: O servidor de som não é local, Sound server is not local, não está em suspenso.\n"
+msgstr ""
+"AVISO: O servidor de som não é local, Sound server is not local, não está em "
+"suspenso.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Falha na conexão: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Recebido o SIGINT, saindo.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "AVISO: O processo filho terminou pelo sinal %u \n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
"\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"
@@ -1525,7 +1675,7 @@ msgstr ""
" -s, --server=SERVER Nome do servidor a ser conectado\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1536,50 +1686,61 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() falhou.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() falhou.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() falhou.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Falha ao obter estatÃsticas: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Em uso no momento: %u blocos contendo %s bytes no total.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "Alocado por todo o tempo: %u blocos contendo %s bytes no total.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Tamanho do cache para amostragem: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Falha ao obter informações do servidor: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1587,7 +1748,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"Nome do usuário: %s\n"
"Nome da máquina: %s\n"
@@ -1599,12 +1760,12 @@ msgstr ""
"Fonte padrão %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Falha ao obter informações do destino: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1643,24 +1804,22 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268
-#: ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPortas:\n"
-#: ../src/utils/pactl.c:274
-#: ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPorta ativa: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Falha ao obter informações da fonte: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1699,28 +1858,20 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345
-#: ../src/utils/pactl.c:401
-#: ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473
-#: ../src/utils/pactl.c:532
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543
-#: ../src/utils/pactl.c:587
-#: ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594
-#: ../src/utils/pactl.c:637
-#: ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Falha ao obter informações do módulo: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1737,12 +1888,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Falha ao obter informações do cliente: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1757,12 +1908,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Falha ao obter informações da placa: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1779,22 +1930,22 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tPerfis:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tPerfil ativo: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Falha ao obter informações da entrada do destino: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1831,12 +1982,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Falha ao obter informações da saÃda da fonte: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1865,12 +2016,12 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Falha ao obter informações sobre a amostragem: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1901,27 +2052,81 @@ msgstr ""
"\tPropriedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653
-#: ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Falha: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Falha ao enviar a amostra: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Fim prematuro do arquivo"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "destino"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "fonte"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "fonte"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Servidor inválido"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT recebido, saindo."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1944,12 +2149,15 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\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 ""
"%s [opções] stat\n"
"%s [opções] list\n"
@@ -1976,10 +2184,12 @@ msgstr ""
" -h, --help Mostra essa ajuda\n"
" --version Mostra a versão\n"
"\n"
-" -s, --server=SERVIDOR O nome do servidor a ser conectado\n"
-" -n, --client-name=NOME Como chamar este cliente no servidor \n"
+" -s, --server=SERVIDOR O nome do servidor a ser "
+"conectado\n"
+" -n, --client-name=NOME Como chamar este cliente no "
+"servidor \n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1990,104 +2200,111 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Por favor, especifique um arquivo de amostra a ser carregado"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Falha ao abrir o arquivo de som."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
-msgstr "Aviso: falha ao determinar a especificação da amostragem a partir do arquivo."
+msgstr ""
+"Aviso: falha ao determinar a especificação da amostragem a partir do arquivo."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Você deve especificar um nome para amostra a ser reproduzida"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Você deve especificar um nome para a amostra a ser removida"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Você deve especificar a entrada do destino e um destino"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Você deve especificar um Ãndice de saÃda da fonte e uma fonte"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Você deve especificar um nome para o módulo e seus argumentos."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Você deve especificar um Ãndice do módulo"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "Você não pode especificar mais de um destino. Você deve especificar um valor booleano."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"Você não pode especificar mais de um destino. Você deve especificar um valor "
+"booleano."
-#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
-msgstr "Você não pode especificar mais de uma fonte. Você deve especificar um valor booleano."
+#: ../src/utils/pactl.c:1196
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
+msgstr ""
+"Você não pode especificar mais de uma fonte. Você deve especificar um valor "
+"booleano."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Você deve especificar um nome/Ãndice para a placa e um nome de perfil"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Você deve especificar um nome/Ãndice do destino e o nome da porta"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Você deve especificar um nome/Ãndice da fonte e o nome da porta"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Você deve especificar um nome/Ãndice do destino e um volume"
-#: ../src/utils/pactl.c:1154
-#: ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193
-#: ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226
-#: ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Especificação de volume inválida"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Você deve especificar um nome/Ãndice da fonte e um volume"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Você deve especificar um Ãndice de entrada para o destino e um volume"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Ãndice de entrada de destino inválido"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Você deve especificar um nome/Ãndice do destino e um booleano do mudo"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Você deve especificar um nome/Ãndice da fonte e um booleano do mudo"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Você deve especificar um Ãndice de entrada para o destino e um booleano do mudo"
+msgstr ""
+"Você deve especificar um Ãndice de entrada para o destino e um booleano do "
+"mudo"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Especificação do Ãndice de entrada de destino inválida"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Nenhum comando válido especificado."
@@ -2098,14 +2315,17 @@ msgid ""
"\n"
" -d Show current PulseAudio data attached to X11 display (default)\n"
" -e Export local PulseAudio data to X11 display\n"
-" -i Import PulseAudio data from X11 display to local environment variables and cookie file.\n"
+" -i Import PulseAudio data from X11 display to local environment "
+"variables and cookie file.\n"
" -r Remove PulseAudio data from X11 display\n"
msgstr ""
"%s [-D display] [-S server] [-O sink] [-I source] [-c file] [-d|-e|-i|-r]\n"
"\n"
-" -d Mostra os dados atuais do PulseAudio associados ao display X11 (padrão)\n"
+" -d Mostra os dados atuais do PulseAudio associados ao display X11 "
+"(padrão)\n"
" -e Exporta os dados locais do PulseAudio para um display X11 \n"
-" -i Importa os dados do PulseAudio de um display X11 para as variáveis de ambiente locais e para o arquivo de cookie.\n"
+" -i Importa os dados do PulseAudio de um display X11 para as variáveis "
+"de ambiente locais e para o arquivo de cookie.\n"
" -r Remove os dados do PulseAudio do display X11\n"
#: ../src/utils/pax11publish.c:94
@@ -2168,107 +2388,120 @@ msgstr "Falha em carregar os dados do cookie\n"
msgid "Not yet implemented.\n"
msgstr "Ainda não implementado.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr "Nenhum daemon do PulseAudio em execução ou não está em execução como daemon de sessão."
+msgstr ""
+"Nenhum daemon do PulseAudio em execução ou não está em execução como daemon "
+"de sessão."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Falha ao matar o daemon do PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "O daemon não responde."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171
-#: ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207
-#: ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136
-#: ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Não foi possÃvel acessar a trava de autogeração."
-#: ../src/modules/alsa/alsa-sink.c:530
-#: ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-"O ALSA nos acordou para gravar novos dados no dispositivo, mas não há nada a ser gravado!\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema para os desenvolvedores do ALSA.\n"
-"Nós fomos acordados com o conjunto POLLOUT -- entretanto, a snd_pcm_avail() subseqüente retornou 0 ou outro valor < min_avail."
+"O ALSA nos acordou para gravar novos dados no dispositivo, mas não há nada a "
+"ser gravado!\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"relate esse problema para os desenvolvedores do ALSA.\n"
+"Nós fomos acordados com o conjunto POLLOUT -- entretanto, a snd_pcm_avail() "
+"subseqüente retornou 0 ou outro valor < min_avail."
-#: ../src/modules/alsa/alsa-source.c:506
-#: ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-"O ALSA nos acordou para ler novos dados no dispositivo, mas não há nada a ser lido!\n"
-"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, relate esse problema para os desenvolvedores do ALSA.\n"
-"Nós fomos acordados com o conjunto POLLIN -- entretanto, a snd_pcm_avail() subseqüente retornou 0 ou outro valor < min_avail."
+"O ALSA nos acordou para ler novos dados no dispositivo, mas não há nada a "
+"ser lido!\n"
+"à mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"relate esse problema para os desenvolvedores do ALSA.\n"
+"Nós fomos acordados com o conjunto POLLIN -- entretanto, a snd_pcm_avail() "
+"subseqüente retornou 0 ou outro valor < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Desligado"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Reprodução de alta fidelidade (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Captura de alta fidelidade (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Duplex telefônico (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Servidor de som PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Dispositivos de saÃda"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Dispositivos de entrada"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Ãudio em @HOSTNAME@"
@@ -2332,230 +2565,293 @@ msgstr "Amplificador"
msgid "No Amplifier"
msgstr "Sem amplificador"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Impulso"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Sem impulso"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Fones de ouvido analógico"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Entrada analógica"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Microfone analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Entrada de linha analógica"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Rádio analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "VÃdeo analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "SaÃda analógica"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Fones de ouvido analógico"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "SaÃda analógica (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "SaÃda analógica monofônica"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Estéreo analógico"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984
-#: ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Monofônico analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Estéreo analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Surround analógico 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Surround analógico 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Surround analógico 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Surround analógico 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Surround analógico 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Surround analógico 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Surround analógico 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Surround analógico 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Surround analógico 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Surround analógico 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Surround analógico 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Estéreo digital (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Surround 4.0 digital (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Surround digital 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Surround digital 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Estéreo digital (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Duplex monofônico analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Duplex estéreo analógico"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Duplex estéreo digital (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "Emissor de baixa freqüência"
+
#~ msgid "Invalid client name '%s'\n"
#~ msgstr "Nome do cliente \"%s\" inválido\n"
+
#~ msgid "Failed to determine sample specification from file.\n"
#~ msgstr ""
#~ "Falha ao determinar a especificação de amostragem a partir do arquivo.\n"
+
#~ msgid "select(): %s"
#~ msgstr "select(): %s"
+
#~ msgid "Cannot connect to system bus: %s"
#~ msgstr "Não foi possÃvel conectar com o barramento do sistema: %s"
+
#~ msgid "Cannot get caller from PID: %s"
#~ msgstr "Não foi possÃvel obter quem chamou pelo PID: %s"
+
#~ msgid "Cannot set UID on caller object."
#~ msgstr "Não foi possÃvel definir o UID sobre o objeto que chamou."
+
#~ msgid "Failed to get CK session."
#~ msgstr "Falha em obter a sessão CK."
+
#~ msgid "Cannot set UID on session object."
#~ msgstr "Não foi possÃvel definir o UID do objeto da sessão."
+
#~ msgid "Cannot allocate PolKitAction."
#~ msgstr "Não foi possÃvel alocar o PolKitAction."
+
#~ msgid "Cannot set action_id"
#~ msgstr "Não foi possÃvel definir a action_id"
+
#~ msgid "Cannot allocate PolKitContext."
#~ msgstr "Não foi possÃvel alocar o PolKitContext."
+
#~ msgid "Cannot initialize PolKitContext: %s"
#~ msgstr "Não foi possÃvel iniciar o PolKitContext: %s"
+
#~ msgid "Could not determine whether caller is authorized: %s"
#~ msgstr "Não foi possÃvel determinar se o solicitante está autorizado: %s"
+
#~ msgid "Cannot obtain auth: %s"
#~ msgstr "Não foi possÃvel obter auth: %s"
+
#~ msgid "PolicyKit responded with '%s'"
#~ msgstr "PolicyKit respondeu com '%s'"
+
#~ msgid ""
#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
#~ "daemon"
#~ msgstr ""
#~ "Escalonamento de alta prioridade (nÃvel de nice Unix negativo) para o "
#~ "daemon do PulseAudio"
+
#~ msgid "Real-time scheduling for the PulseAudio daemon"
#~ msgstr "Escalonamento em tempo real para o daemon do PulseAudio"
+
#~ msgid ""
#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
#~ msgstr ""
#~ "Uma polÃtica do sistema impede que o PulseAudio adquira escalonamento de "
#~ "alta prioridade."
+
#~ msgid ""
#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
#~ msgstr ""
#~ "Uma polÃtica do sistema impede que o PulseAudio adquira o escalonamento "
#~ "em tempo real."
+
#~ msgid "read() failed: %s\n"
#~ msgstr "read() falhou: %s\n"
+
#~ msgid "pa_context_connect() failed: %s\n"
#~ msgstr "pa_context_connect() falhou: %s\n"
+
#~ msgid "We're in the group '%s', allowing high-priority scheduling."
#~ msgstr "Estamos no grupo '%s', permitindo escalonamento de alta prioridade."
+
#~ msgid "We're in the group '%s', allowing real-time scheduling."
#~ msgstr "Estamos no grupo '%s', permitindo escalonamento em tempo real."
+
#~ msgid "PolicyKit grants us acquire-high-priority privilege."
#~ msgstr ""
#~ "O PolicyKit assegura-nos a aquisição de privilégio de alta prioridade."
+
#~ msgid "PolicyKit refuses acquire-high-priority privilege."
#~ msgstr "O PolicyKit recusa a aquisição de privilégios de alta prioridade."
+
#~ msgid "PolicyKit grants us acquire-real-time privilege."
#~ msgstr "O PolicyKit assegura-nos a aquisição de privilégios de tempo-real."
+
#~ msgid "PolicyKit refuses acquire-real-time privilege."
#~ msgstr "O PolicyKit recusa a aquisição de privilégios de tempo real."
+
#~ 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."
+
#~ msgid "Successfully increased RLIMIT_RTPRIO"
#~ msgstr "RLIMIT_RTPRIO aumentado com sucesso"
+
#~ msgid "RLIMIT_RTPRIO failed: %s"
#~ msgstr "RLIMIT_RTPRIO falhou: %s"
+
#~ msgid "Giving up CAP_NICE"
#~ msgstr "Abandonando CAP_NICE"
+
#~ 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."
+
#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
#~ msgstr "As capacidades foram limitadas com sucesso para CAP_SYS_NICE."
+
#~ msgid "time_new() failed.\n"
#~ msgstr "time_new() falhou.\n"
+
#~ msgid "Stream successfully created\n"
#~ msgstr "Fluxo criado com sucesso\n"
+
#~ msgid "Stream errror: %s\n"
#~ msgstr "Erro de fluxo: %s\n"
+
#~ msgid "Connection established.\n"
#~ msgstr "Conexão estabelecida.\n"
+
#~ msgid ""
#~ "%s [options] [FILE]\n"
#~ "\n"
@@ -2594,6 +2890,7 @@ msgstr "Duplex estéreo digital (IEC958)"
#~ " --volume=VOLUME Especifica o volume inicial "
#~ "(linear) no intervalo 0...65536\n"
#~ " --channel-map=CHANNELMAP Define o mapa do canal para uso\n"
+
#~ msgid ""
#~ "paplay %s\n"
#~ "Compiled with libpulse %s\n"
@@ -2602,12 +2899,16 @@ msgstr "Duplex estéreo digital (IEC958)"
#~ "paplay %s\n"
#~ "Compilado com libpulse %s\n"
#~ "Linkado com libpulse %s\n"
+
#~ msgid "Invalid channel map\n"
#~ msgstr "Mapa de canais inválido\n"
+
#~ msgid "Failed to open file '%s'\n"
#~ msgstr "Falha ao abrir o arquivo '%s'\n"
+
#~ msgid "Channel map doesn't match file.\n"
#~ msgstr "O mapa dos canais não coincide com o arquivo.\n"
+
#~ msgid "Using sample spec '%s'\n"
#~ msgstr "Usando a especificação da amostragem '%s'\n"
@@ -2626,14 +2927,19 @@ msgstr "Duplex estéreo digital (IEC958)"
#, fuzzy
#~ msgid "--log-time boolean argument"
#~ msgstr "--disallow-exit argumento booleano"
+
#~ msgid "Default sink name (%s) does not exist in name register."
#~ msgstr "O nome padrão do destino (%s) não existe no registro de nomes."
+
#~ msgid "Buffer overrun, dropping incoming data\n"
#~ msgstr "Houve estouro de buffer, os dados que chegaram foram descartados\n"
+
#~ msgid "pa_stream_drop() failed: %s\n"
#~ msgstr "pa_stream_drop() falhou: %s\n"
+
#~ msgid "muted"
#~ msgstr "mudo"
+
#~ msgid ""
#~ "*** Autoload Entry #%u ***\n"
#~ "Name: %s\n"
@@ -2646,10 +2952,7 @@ msgstr "Duplex estéreo digital (IEC958)"
#~ "Tipo: %s\n"
#~ "Módulo: %s\n"
#~ "Argumento: %s\n"
-#~ msgid "sink"
-#~ msgstr "destino"
-#~ msgid "source"
-#~ msgstr "fonte"
+
#~ msgid ""
#~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
#~ "For enabling real-time scheduling please acquire the appropriate "
@@ -2659,12 +2962,13 @@ msgstr "Duplex estéreo digital (IEC958)"
#~ "outra vez.\n"
#~ " Para habilitar o escalonamento em tempo real, por favo, adquira os "
#~ "privilégios adequados pelo PolicyKit, ou torne-se membro do'"
+
#~ msgid ""
#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
#~ "user."
#~ msgstr ""
#~ "', ou eleve o RLIMIT_NICE/RLIMIT_RTPRIO dos limites do recurso para este "
#~ "usuário."
+
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair(): %s"
-
diff --git a/po/ru.po b/po/ru.po
index cb109ef..810c26e 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-24 06:51+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2010-01-31 15:49+0300\n"
"Last-Translator: Leonid Kurbatov <llenchikk at rambler.ru>\n"
"Language-Team: Russian <->\n"
@@ -16,12 +16,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: -\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -34,7 +34,7 @@ msgstr ""
"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой "
"пÑоблеме ÑазÑабоÑÑикам ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"ÐеÑоÑÑно, ÑÑо оÑибка в дÑайвеÑе ALSA '%s'. ÐожалÑйÑÑа, ÑообÑиÑе об ÑÑой "
"пÑоблеме ÑазÑабоÑÑикам ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -96,11 +96,11 @@ msgstr "СинÑ
ÑонизиÑованнÑй NULL аÑдиопÑиÑмник"
msgid "Null Output"
msgstr "ÐÑÑÑой вÑÑ
од"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "ÐÑÑÑоенное аÑдио"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Ðодем"
@@ -116,92 +116,98 @@ msgstr "Ðе ÑдалоÑÑ Ð²ÑделиÑÑ Ð½Ð¾Ð²Ñй dl загÑÑзÑик."
msgid "Failed to add bind-now-loader."
msgstr "Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ bind-now-загÑÑзÑик."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "ÐолÑÑен Ñигнал %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "ÐÑÑ
од."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð¹Ñи полÑзоваÑÐµÐ»Ñ '%s'."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Ðе ÑдалоÑÑ Ð½Ð°Ð¹Ñи гÑÑÐ¿Ð¿Ñ '%s'."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Ðайден полÑзоваÑÐµÐ»Ñ '%s' (UID %lu) и гÑÑппа '%s' (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "ÐденÑиÑикаÑоÑÑ Ð³ÑÑпп полÑзоваÑÐµÐ»Ñ '%s' и гÑÑÐ¿Ð¿Ñ '%s' не ÑовпадаÑÑ."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ÐомаÑнÑÑ Ð¿Ð°Ð¿ÐºÐ° полÑзоваÑÐµÐ»Ñ '%s' не ÑвлÑеÑÑÑ '%s', игноÑиÑование."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Ðе ÑдалоÑÑ ÑоздаÑÑ '%s': %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "ÐÑибка пÑи изменении ÑпиÑка гÑÑпп: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð³ÑÑÐ¿Ð¿Ñ GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "УÑпеÑное Ñдаление пÑивилегий админиÑÑÑаÑоÑа."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "РаÑÑиÑеннÑй ÑиÑÑемнÑй Ñежим не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑÑоÑме."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) не ÑдалоÑÑ: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "ÐÑибка ÑазбоÑа командной ÑÑÑоки."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Ðемон не запÑÑен"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Ðемон запÑÑен как PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Ðе ÑдалоÑÑ ÑбиÑÑ Ð´ÐµÐ¼Ð¾Ð½: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -209,157 +215,172 @@ msgstr ""
"ÐÑа пÑогÑамма не пÑедназнаÑена Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка Ñ Ð¿Ñавами админиÑÑÑаÑоÑа (еÑли не "
"Ñказано в ÑиÑÑеме)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "ÐеобÑ
Ð¾Ð´Ð¸Ð¼Ñ Ð¿Ñава админиÑÑÑаÑоÑа."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start не поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑиÑÑемнÑÑ
ÑлеменÑов."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме, но --disallow-exit не задан!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме, но --disallow-module-loading не задан!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑелÑнÑм оÑклÑÑением Ñежима SHM!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"ÐапÑÑен в ÑиÑÑемном Ñежиме Ñ Ð¿ÑинÑдиÑелÑнÑм оÑклÑÑением вÑемени вÑÑ
ода поÑле "
"пÑоÑÑоÑ!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð¿ÑоÑиÑÑ stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "Ðанал не ÑдалÑÑ: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() веÑÐ²Ñ Ð½Ðµ ÑдалаÑÑ: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() ÑÑение не ÑдалоÑÑ: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ÐапÑÑк демона не ÑдалÑÑ."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "УÑпеÑнÑй запÑÑк демона."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() ÑÑение не ÑдалоÑÑ: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ХоÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ÐомпилÑÑÐ¸Ñ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "ÐапÑÑен на Ñ
оÑÑе: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Ðайдено пÑоÑеÑÑоÑов: %u."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "Ð Ð°Ð·Ð¼ÐµÑ ÑÑÑаниÑÑ: %lu байÑ"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "СкомпилиÑовано Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой Valgrind: да"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "СкомпилиÑовано Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой Valgrind: неÑ"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "ÐапÑÑк в Ñежиме Valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "ÐапÑÑен на Ñ
оÑÑе: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "ÐпÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑбоÑка: да"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "ÐпÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑбоÑка: неÑ"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG задан, вÑе аÑÑеÑÑÑ Ð·Ð°Ð¿ÑеÑенÑ."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH задан, запÑеÑÐµÐ½Ñ ÑолÑко fast path аÑÑеÑÑÑ."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "ÐÑе аÑÑеÑÑÑ ÑазÑеÑенÑ."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ID маÑинÑ"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ID маÑÐ¸Ð½Ñ %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ID ÑеÑÑии %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ÐÑполÑзование каÑалога изолиÑованного окÑÑÐ¶ÐµÐ½Ð¸Ñ %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ÐÑполÑзование заданного каÑалога %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "ÐÑполÑзование каÑалога модÑлей %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ÐапÑÑк в ÑиÑÑемном Ñежиме: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -375,15 +396,15 @@ msgstr ""
"ÐожалÑйÑÑа пÑоÑиÑайÑе http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode "
"Ð´Ð»Ñ Ð¾Ð±ÑÑÑнениÑ, поÑÐµÐ¼Ñ ÑиÑÑемнÑй Ñежим обÑÑно ÑвлÑеÑÑÑ Ð¿Ð»Ð¾Ñ
ой идеей."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() не ÑдалоÑÑ."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ÐоÑÑÑпен Ñвежий ÑÐ°Ð¹Ð¼ÐµÑ Ð²ÑÑокого ÑазÑеÑениÑ! ÐÑиÑÑного аппеÑиÑа!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -391,27 +412,27 @@ msgstr ""
"ÐÑаÑан, ÑÐ²Ð¾Ñ ÑдÑо вонÑеÑ! СегоднÑÑнÑÑ ÑекомендаÑÐ¸Ñ ÑеÑа - ÑдÑо Ñ Ð²ÐºÐ»ÑÑеннÑм "
"ÑаймеÑом вÑÑокого ÑазÑеÑениÑ!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() не ÑдалаÑÑ."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ÐÑибка иниÑиализаÑии демона."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ÐапÑÑк демона без какиÑ
-либо загÑÑжаемÑÑ
модÑлей, оÑказ Ð¾Ñ ÑабоÑÑ."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ÐапÑÑк демона завеÑÑÑн."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ÐавеÑÑение демона иниÑиализиÑовано."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Ðемон завеÑÑÑн."
@@ -668,72 +689,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "ÐÑÑÑ: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй жÑÑнал '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑоколиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй меÑод ÑеÑÑмплиÑÐ¾Ð²Ð°Ð½Ð¸Ñ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit не поддеÑживаеÑÑÑ Ð½Ð° ÑÑой плаÑÑоÑме."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй ÑоÑÐ¼Ð°Ñ ÑÑмпла '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ÐевеÑÐ½Ð°Ñ ÑаÑÑоÑа диÑкÑеÑизаÑии '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ÐевеÑнÑе ÑÑмпл-ÐºÐ°Ð½Ð°Ð»Ñ '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ÐевеÑÐ½Ð°Ñ ÑÑ
ема каналов '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ÐевеÑное ÑиÑло ÑÑагменÑов '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑагменÑа '%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ÐедопÑÑÑимÑй ÑоÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] ÐевеÑÐ½Ð°Ñ ÑаÑÑоÑа диÑкÑеÑизаÑии '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ñайл конÑигÑÑаÑии: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -741,7 +767,7 @@ msgstr ""
"Ð Ñказанной ÑÑ
еме каналов ÑиÑло каналов оÑлиÑаеÑÑÑ Ð¾Ñ ÑиÑла каналов по "
"ÑмолÑаниÑ."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ÐÑоÑиÑаÑÑ Ð¸Ð· Ñайла конÑигÑÑаÑии: %s ###\n"
@@ -787,8 +813,8 @@ msgid "Rear Right"
msgstr "Сзади пÑаво"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "СабвÑÑеÑ"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1133,191 +1159,191 @@ msgstr "XOpenDisplay() не ÑдалоÑÑ"
msgid "Failed to parse cookie data"
msgstr "Ðе ÑдалоÑÑ ÑазобÑаÑÑ Ð´Ð°Ð½Ð½Ñе cookie"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ñайл конÑигÑÑаÑии '%s': %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "Cookie не загÑÑженÑ. ÐопÑÑка подклÑÑÐµÐ½Ð¸Ñ Ð±ÐµÐ· ниÑ
."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "ÐолÑÑено ÑообÑение Ð´Ð»Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑного ÑаÑÑиÑÐµÐ½Ð¸Ñ '%s'"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Ðе ÑдалоÑÑ ÑоздаÑÑ ÑÑÐ½Ð½ÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ñока: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "ÐоÑок воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑÑннелиÑован."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "ТÑннелиÑование ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑеÑвеÑом."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ÐоÑок ÑÑпеÑно Ñоздан."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ÐоказаÑели бÑÑеÑа: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ÐоказаÑели бÑÑеÑа: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ÐÑполÑзование Ñемплов '%s', ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² '%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "СоединÑн Ñ ÑÑÑÑойÑÑвом %s (%u, %sожидание)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ÐÑибка поÑока: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ÐоÑок пÑиоÑÑановлен.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ÐоÑок возобновлÑн.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ÐоÑок недогÑÑжен.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ÐоÑок пеÑеполнен.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ÐоÑок запÑÑен.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ÐоÑок пеÑемеÑÑн на ÑÑÑÑойÑÑво %s (%u, %sожидание).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "not "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ÐÑÑибÑÑÑ Ð±ÑÑеÑа поÑока измененÑ.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Соединение ÑÑÑановлено.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "ÐÑибка подклÑÑениÑ: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "ÐоÑÑигнÑÑ ÐºÐ¾Ð½ÐµÑ Ñайла."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Сигнал полÑÑен, вÑÑ
од."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð·Ð°Ð´ÐµÑжкÑ: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "ÐÑемÑ: %0.3f Ñ; задеÑжка: %0.0f мкÑ."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1369,10 +1395,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1431,7 +1461,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1442,68 +1472,68 @@ msgstr ""
"СкомпилиÑовано Ñ libpulse %s\n"
"СвÑзано Ñ libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "ÐевеÑное Ð¸Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñа '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "ÐевеÑное Ð¸Ð¼Ñ Ð¿Ð¾Ñока '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "ÐевеÑÐ½Ð°Ñ ÑÑ
ема каналов '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "ÐевеÑное знаÑение задеÑжки '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð²Ñемени пÑоÑеÑÑа '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "ÐевеÑное ÑвойÑÑво '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "ÐеизвеÑÑнÑй ÑоÑÐ¼Ð°Ñ Ñайла %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ ÑÑмпла"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "СлиÑком много аÑгÑменÑов."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ÐÑибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑпеÑиÑикаÑии ÑÑмпла Ð´Ð»Ñ Ñайла."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ð°Ñдио Ñайл."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1511,104 +1541,104 @@ msgstr ""
"ÐÑедÑпÑеждение: Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ ÑÑмпла бÑÐ´ÐµÑ Ð¿ÐµÑезапиÑана "
"ÑпеÑиÑикаÑией из Ñайла."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Ðе ÑдалоÑÑ Ð¾Ð¿ÑеделиÑÑ ÑпеÑиÑикаÑÐ¸Ñ ÑÑмпла из Ñайла."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "ÐÑедÑпÑеждение: не ÑдалоÑÑ Ð¾Ð¿ÑеделиÑÑ ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² из Ñайла."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "СÑ
ема каналов не ÑооÑвеÑÑÑвÑÐµÑ ÑпеÑиÑикаÑии ÑÑмпла"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "ÐÑедÑпÑеждение: не ÑдалоÑÑ Ð·Ð°Ð¿Ð¸ÑаÑÑ ÑÑ
ÐµÐ¼Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² в Ñайл."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
"ÐÑкÑÑÑие поÑока %s Ñо ÑпеÑиÑикаÑией ÑÑмплов '%s' и ÑÑ
емой каналов '%s'."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "запиÑÑ"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "воÑпÑоизведение"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() не ÑдалоÑÑ."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() не ÑдалоÑÑ."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() не ÑдалоÑÑ."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() не ÑдалоÑÑ: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() не ÑдалоÑÑ."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() не ÑдалоÑÑ."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Ðе ÑдаÑÑÑÑ Ð¿ÑиоÑÑановиÑÑ: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Ðе ÑдаÑÑÑÑ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
"ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ: ÐÑдио ÑеÑÐ²ÐµÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑм, не пÑиоÑÑанавливаеÑÑÑ.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "ÐÑибка ÑоединениÑ: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "ÐолÑÑен Ñигнал Ð´Ð»Ñ Ð¾ÑÑановки, вÑÑ
од.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "ÐÐ ÐÐУÐÐ ÐÐÐÐÐÐÐ: ÐоÑеÑний пÑоÑеÑÑ Ð¾ÑменÑн по ÑÐ¸Ð³Ð½Ð°Ð»Ñ %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1627,7 +1657,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1638,50 +1668,61 @@ msgstr ""
"СкомпилиÑовано Ñ libpulse %s\n"
"СвÑзано Ñ libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() не ÑдалоÑÑ.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() не ÑдалоÑÑ.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() не ÑдалоÑÑ.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑаÑиÑÑикÑ: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "СейÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ: %u блоков ÑодеÑжаÑиÑ
вÑего %s байÑ.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "ÐÑделено за вÑÑ Ð²ÑемÑ: %u блоков ÑодеÑжаÑиÑ
вÑего %s байÑ.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "Ð Ð°Ð·Ð¼ÐµÑ ÐºÑÑа ÑÑмплов: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑеÑвеÑе: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1689,7 +1730,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"ÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ: %s\n"
"ÐÐ¼Ñ Ñ
оÑÑа: %s\n"
@@ -1701,12 +1742,12 @@ msgstr ""
"ÐÑÑоÑник по ÑмолÑаниÑ: %s\n"
"Cookie: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± аÑдиопÑиÑмнике: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1745,22 +1786,22 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tÐоÑÑÑ:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tÐкÑивнÑй поÑÑ: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± иÑÑоÑнике: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1799,20 +1840,20 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "н/д"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ модÑле: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1829,12 +1870,12 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ клиенÑе: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1849,12 +1890,12 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ каÑÑе: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1871,22 +1912,22 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tÐÑоÑили:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tÐкÑивнÑй пÑоÑилÑ: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вводе аÑдиопÑиÑмника: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1923,12 +1964,12 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ вÑÑ
оде иÑÑоÑника: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1957,12 +1998,12 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑÑмпле: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1993,26 +2034,80 @@ msgstr ""
"\tСвойÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Ðе ÑдалоÑÑ: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ ÑÑмпл: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ÐÑеждевÑеменнÑй ÐºÐ¾Ð½ÐµÑ Ñайла"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "ÐевеÑнÑй ÑеÑвеÑ"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "ÐолÑÑен Ñигнал Ð´Ð»Ñ Ð¾ÑÑановки, вÑÑ
од."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2035,6 +2130,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2074,7 +2170,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2085,50 +2181,50 @@ msgstr ""
"СкомпилиÑовано Ñ libpulse %s\n"
"СвÑзано Ñ libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ÐожалÑйÑÑа ÑкажиÑе Ñайл ÑÑмпла Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Ðе ÑдалоÑÑ Ð¾ÑкÑÑÑÑ Ð·Ð²Ñковой Ñайл."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "ÐÑедÑпÑеждение: не ÑдалоÑÑ Ð¾Ð¿ÑеделиÑÑ ÑпеÑиÑикаÑии ÑÑмплов из Ñайла."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ ÑÑмпла Ð´Ð»Ñ Ð²Ð¾ÑпÑоизведениÑ"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ ÑÑмпла Ð´Ð»Ñ ÑдалениÑ"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника и аÑдиопÑиÑмник"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñвода иÑÑоÑника и иÑÑоÑник"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¸ аÑгÑменÑÑ"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑлÑ"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"ÐÑ Ð½Ðµ можеÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ одного аÑдиопÑиÑмника. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ "
"логиÑеÑкое знаÑение."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2136,57 +2232,57 @@ msgstr ""
"ÐÑ Ð½Ðµ можеÑе ÑказаÑÑ Ð±Ð¾Ð»ÐµÐµ одного иÑÑоÑника. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое "
"знаÑение."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ°ÑÑÑ Ð¸ Ð¸Ð¼Ñ Ð¿ÑоÑилÑ"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиопÑиÑмника и Ð¸Ð¼Ñ Ð¿Ð¾ÑÑа"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника и Ð¸Ð¼Ñ Ð¿Ð¾ÑÑа"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиопÑиÑмника и гÑомкоÑÑÑ"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "ÐевеÑное знаÑение гÑомкоÑÑи"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника и гÑомкоÑÑÑ"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника и гÑомкоÑÑÑ"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "ÐевеÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð°ÑдиопÑиÑмника и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð¼Ñ/Ð¸Ð½Ð´ÐµÐºÑ Ð¸ÑÑоÑника и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ð²Ð¾Ð´Ð° аÑдиопÑиÑмника и вÑклÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "ÐевеÑÐ½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ввода аÑдиопÑиÑмника"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Ðе ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¿ÑавилÑнÑе командÑ."
@@ -2269,46 +2365,46 @@ msgstr "Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð´Ð°Ð½Ð½Ñе cookie\n"
msgid "Not yet implemented.\n"
msgstr "ÐÑÑ Ð½Ðµ вÑполнено.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"ÐÐµÑ Ð·Ð°Ð¿ÑÑенного демона PulseAudio или не запÑÑен в каÑеÑÑве ÑеÑÑионного "
"демона."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Ðе ÑдалоÑÑ ÑбиÑÑ Ð´ÐµÐ¼Ð¾Ð½ PulseAudio."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Ðемон не оÑвеÑаеÑ."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Cannot access autospawn lock."
@@ -2347,38 +2443,42 @@ msgstr ""
"или дÑÑгое знаÑение < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "ÐÑклÑÑено"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "ÐоÑпÑоизведение вÑÑокого каÑеÑÑва (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "ÐапиÑÑ Ð²ÑÑокого каÑеÑÑва (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "ÐÑплекÑÐ½Ð°Ñ ÑелеÑÐ¾Ð½Ð¸Ñ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "ÐвÑковой ÑеÑÐ²ÐµÑ PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "УÑÑÑойÑÑва вÑвода"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "УÑÑÑойÑÑва ввода"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "ÐÑдио на @HOSTNAME@"
@@ -2442,132 +2542,159 @@ msgstr "УÑилиÑелÑ"
msgid "No Amplifier"
msgstr "ÐÐµÑ ÑÑилиÑелÑ"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "УÑиление"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "ÐÐµÑ ÑÑилениÑ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "ÐналоговÑе наÑÑники"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "ÐналоговÑй ввод"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "ÐналоговÑй микÑоÑон"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "ÐналоговÑй линейнÑй вÑ
од"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Ðналоговое Ñадио"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Ðналоговое видео"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "ÐналоговÑй вÑвод"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "ÐналоговÑе наÑÑники"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "ÐналоговÑй вÑвод (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "ÐналоговÑй вÑвод моно"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Ðналоговое ÑÑеÑео"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Ðналоговое моно"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Ðналоговое ÑÑеÑео"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "ÐналоговÑй обÑÑмнÑй 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "ÐналоговÑй обÑÑмнÑй 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "ÐналоговÑй обÑÑмнÑй 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "ÐналоговÑй обÑÑмнÑй 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "ÐналоговÑй обÑÑмнÑй 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "ÐналоговÑй обÑÑмнÑй 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "ÐналоговÑй обÑÑмнÑй 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "ÐналоговÑй обÑÑмнÑй 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "ÐналоговÑй обÑÑмнÑй 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "ÐналоговÑй обÑÑмнÑй 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "ÐналоговÑй обÑÑмнÑй 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ЦиÑÑовое ÑÑеÑео (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ЦиÑÑовой обÑÑмнÑй 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ЦиÑÑовой обÑÑмнÑй 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ЦиÑÑовой обÑÑмнÑй 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ЦиÑÑовое ÑÑеÑео (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "ÐналоговÑй моно дÑплекÑ"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "ÐналоговÑй ÑÑеÑео дÑплекÑ"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ЦиÑÑовой ÑÑеÑео дÑÐ¿Ð»ÐµÐºÑ (IEC958)"
+
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "СабвÑÑеÑ"
diff --git a/po/sr.po b/po/sr.po
index 820b14d..ed1b2b1 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-30 10:22+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-30 22:51+0100\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian (sr) <fedora-trans-sr at redhat.com>\n"
@@ -18,12 +18,12 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -36,7 +36,7 @@ msgstr ""
"Ðво Ñе наÑвеÑоваÑниÑе гÑеÑка Ñ â%sâ ALSA ÑпÑавÑаÑком пÑогÑамÑ. ÐÑиÑавиÑе "
"Ð¾Ð²Ð°Ñ Ð¿Ñоблем ALSA пÑогÑамеÑима."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -49,7 +49,7 @@ msgstr ""
"Ðво Ñе наÑвеÑоваÑниÑе гÑеÑка Ñ â%sâ ALSA ÑпÑавÑаÑком пÑогÑамÑ. ÐÑиÑавиÑе "
"Ð¾Ð²Ð°Ñ Ð¿Ñоблем ALSA пÑогÑамеÑима."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -96,11 +96,11 @@ msgstr "УзоÑак NULL Ñливника"
msgid "Null Output"
msgstr "ÐÑазан излаз"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "УнÑÑÑаÑÑи звÑк"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Ðодем"
@@ -116,92 +116,98 @@ msgstr "ÐеÑÑпеÑно ÑмеÑÑаÑе новог dl ÑÑиÑаваÑа."
msgid "Failed to add bind-now-loader."
msgstr "ÐеÑÑпеÑно додаваÑе âповежи одмаÑ
â ÑÑиÑаваÑа."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "ÐобиÑ
Ñигнал %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "ÐапÑÑÑам."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Ðе Ð¼Ð¾Ð³Ñ Ð½Ð°Ñи коÑиÑника â%sâ."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Ðе Ð¼Ð¾Ð³Ñ Ð½Ð°Ñи гÑÑÐ¿Ñ â%sâ."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "ÐаÑени ÑÑ ÐºÐ¾ÑиÑник â%sâ (UID %lu) и гÑÑпа â%sâ (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID коÑиÑника â%sâ Ñе не поклапа Ñа гÑÑпом â%sâ."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ÐиÑни диÑекÑоÑиÑÑм коÑиÑника â%sâ ниÑе â%sâ, занемаÑÑÑем."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "ÐеÑÑпеÑно пÑавÑеÑе â%sâ: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "ÐеÑÑпеÑна пÑомена гÑÑпног ÑпиÑка: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "ÐеÑÑпеÑна пÑомена GID-а: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "ÐеÑÑпеÑна пÑомена UID-а: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "УÑпеÑно одбаÑена root овлаÑÑеÑа."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Режим за ÑиÑав ÑиÑÑем ниÑе подÑжан на Ð¾Ð²Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑми."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) ниÑе ÑÑпело: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "ÐеÑÑпеÑно ÑÑмаÑеÑе командне линиÑе."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Ðемон ниÑе покÑенÑÑ"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Ðемон Ñе покÑенÑÑ Ñа PID-ом %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ÐеÑÑпеÑно ÑбиÑаÑе демона: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -209,158 +215,173 @@ msgstr ""
"ÐиÑе намеÑавано да Ñе Ð¾Ð²Ð°Ñ Ð¿ÑогÑам покÑеÑе из root налога (оÑим Ñ ÑлÑÑаÑÑ "
"када Ñе --system наведено)"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "ÐоÑÑебна ÑÑ root овлаÑÑеÑа."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start ниÑе подÑжано за ÑиÑÑемÑке пÑимеÑке."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "ÐокÑенÑÑо Ñ ÑиÑÑемÑком ÑежимÑ, али --disallow-exit ниÑе поÑÑавÑено!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"ÐокÑенÑÑо Ñ ÑиÑÑемÑком ÑежимÑ, али --disallow-module-loading ниÑе поÑÑавÑено!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "ÐокÑенÑÑо Ñ ÑиÑÑемÑком ÑежимÑ, пÑиÑилно онемогÑÑÑÑем SHM Ñежим!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"ÐокÑенÑÑо Ñ ÑиÑÑемÑком ÑежимÑ, пÑиÑилно онемогÑÑÑÑем гаÑеÑе поÑле одÑеÑеног "
"вÑемена миÑоваÑа!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "ÐеÑÑпеÑно пÑоналажеÑе ÑÑандаÑдног Ñлаза/излаза."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "ÐеÑÑпеÑно пÑÑÑаÑе подаÑака кÑоз Ñев: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа fork(): %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа read(): %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "ÐеÑÑпеÑно покÑеÑаÑе демона."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Ðемон ÑÑпеÑно покÑенÑÑ."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "ÐеÑÑпела ÑÑнкÑиÑа read(): %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Ðво Ñе PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ÐомаÑин компаÑлиÑаÑа: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS компаÑлиÑаÑа: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "ÐокÑенÑÑ Ð½Ð° домаÑинÑ: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "ÐаÑао %u пÑоÑеÑоÑ(а)"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "ÐелиÑина ÑÑÑаниÑе Ñе %lu баÑÑова"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "ÐомпаÑлиÑано Ñа подÑÑком за Valgrind: да"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "ÐомпаÑлиÑано Ñа подÑÑком за Valgrind: не"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "ÐокÑенÑÑ Ñ Valgrind ÑежимÑ: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "ÐокÑенÑÑ Ð½Ð° домаÑинÑ: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "ÐпÑимизована изгÑадÑа: да"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "ÐпÑимизована изгÑадÑа: не"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG деÑиниÑан, Ñва обавеÑÑеÑа иÑкÑÑÑена."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH деÑиниÑан, Ñамо обавеÑÑеÑа бÑзе пÑÑаÑе иÑкÑÑÑена."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Сва обавеÑÑеÑа омогÑÑена."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "ÐеÑÑпеÑно добавÑаÑе ÐРмаÑине"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ÐРмаÑине Ñе %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ÐÐ ÑеÑиÑе Ñе %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ÐоÑиÑÑи Ñе %s извÑÑни диÑекÑоÑиÑÑм."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ÐоÑиÑÑи Ñе %s диÑекÑоÑиÑÑм ÑÑаÑа."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "ÐоÑиÑÑи Ñе %s диÑекÑоÑиÑÑм модÑла."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ÐокÑенÑÑо Ñ ÑиÑÑемÑком ÑежимÑ: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -376,15 +397,15 @@ msgstr ""
"ÐÑоÑиÑаÑÑе http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode Ñади "
"обÑаÑÑеÑа заÑÑо Ñе ÑиÑÑемÑки Ñежим обиÑно лоÑа идеÑа."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_pid_file_create()."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ÐоÑÑÑпни ÑÑ Ð½Ð¾Ð²Ð¸ бÑоÑаÑи виÑоке ÑезолÑÑиÑе! ÐÑиÑаÑно!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -392,27 +413,27 @@ msgstr ""
"ÐаÑе ÑезгÑо ниÑе добÑо подеÑено за pulseaudio! ÐÑепоÑÑÑÑÑе Ðам Ñе да "
"коÑиÑÑиÑе Linux ÑезгÑо Ñа омогÑÑеним бÑоÑаÑима виÑоке ÑезолÑÑиÑе."
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_core_new()."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "ÐеÑÑпеÑно покÑеÑаÑе демона."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Ðемон Ñе покÑенÑÑ Ð±ÐµÐ· иÑедног ÑÑиÑаног модÑла, одбиÑа да Ñади."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ÐокÑеÑаÑе демона ÑÑпеÑно."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ÐокÑенÑÑо гаÑеÑе демона."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Рад демона Ñе пÑекинÑÑ."
@@ -678,72 +699,77 @@ msgstr "УÐÐÐÐÐ ÐÐÐ Ð ÐÐ ÐÐÐÐÐÐÐÐÐÐУ: %s\n"
msgid "Path: %s\n"
msgstr "ÐÑÑаÑа: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван ÑиÑни дневник â%sâ."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван ниво опÑиÑноÑÑи Ñ Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ â%sâ."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван наÑин диÑкÑеÑизаÑиÑе â%sâ."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван rlimit â%sâ."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ниÑе подÑжан на Ð¾Ð²Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑми."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван ÑоÑÐ¼Ð°Ñ ÑзоÑка â%sâ."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ÐеиÑпÑавна ÑÑеÑÑаноÑÑ Ð´Ð¸ÑкÑеÑизаÑиÑе â%sâ."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ÐеиÑпÑавни канали ÑзоÑка â%sâ."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ÐеиÑпÑавна мапа канала â%sâ."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван бÑÐ¾Ñ Ð¾Ð´Ð»Ð¾Ð¼Ð°ÐºÐ° â%sâ."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ÐеиÑпÑавна велиÑина одломка â%sâ."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ÐеиÑпÑаван ниво пÑиоÑиÑеÑа â%sâ."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] ÐеиÑпÑавна ÑÑеÑÑаноÑÑ Ð´Ð¸ÑкÑеÑизаÑиÑе â%sâ."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ÐеÑÑпело оÑваÑаÑе даÑоÑеке подеÑаваÑа: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -751,7 +777,7 @@ msgstr ""
"Ðаведена мапа канала има нема иÑÑи бÑÐ¾Ñ ÐºÐ°Ð½Ð°Ð»Ð° као ÑÑо Ñе наведено Ñ "
"подÑазÑмеваном бÑоÑÑ ÐºÐ°Ð½Ð°Ð»Ð°."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ÐÑоÑиÑÐ°Ñ Ð¸Ð· даÑоÑеке подеÑаваÑа: %s ###\n"
@@ -797,8 +823,8 @@ msgid "Rear Right"
msgstr "ÐозадинÑки деÑни"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ÐвÑÑник за ниÑке ÑÑеквенÑиÑе"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1143,191 +1169,191 @@ msgstr "ÐеÑÑпела ÑÑнкÑиÑа XOpenDisplay()"
msgid "Failed to parse cookie data"
msgstr "ÐеÑÑпеÑно ÑÑмаÑеÑе подаÑака из колаÑиÑа"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "ÐеÑÑпеÑно оÑваÑаÑе даÑоÑеке подеÑаваÑа â%sâ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "ÐолаÑÐ¸Ñ Ð½Ð¸Ñе ÑÑиÑан. ÐокÑÑавам Ñе повезаÑи без колаÑиÑа."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "ÐÑимио поÑÑÐºÑ Ð·Ð° непознаÑи локал â%sâ"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "ÐеÑÑпеÑно иÑÑÑиваÑе Ñока: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "РепÑодÑкÑиони Ñок Ñе иÑÑÑен."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Ðеза до ÑеÑвеÑа Ñе иÑÑÑÑÑе."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_write(): %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_write(): %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_peek(): %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Ток Ñе ÑÑпеÑно напÑавÑен."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_get_buffer_attr(): %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ÐеÑе баÑеÑа: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ÐеÑе баÑеÑа: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ÐоÑиÑÑим ÑледеÑе паÑамеÑÑе ÑзоÑка â%sâ и Ð¼Ð°Ð¿Ñ ÐºÐ°Ð½Ð°Ð»Ð° â%sâ."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "ÐÑикÑÑÑен на ÑÑеÑÐ°Ñ %s (%u, %s обÑÑÑавÑено)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ÐÑеÑка Ñока: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "УÑеÑÐ°Ñ Ñока обÑÑÑавÑен.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "УÑеÑÐ°Ñ Ñока наÑÑавÑен.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Ток ниÑе попÑÑен.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Ток Ñе пÑелива.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Ток Ñе покÑенÑÑ.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Ток пÑебаÑен на ÑÑеÑÐ°Ñ %s (%u, %s обÑÑÑавÑено).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "ниÑе"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ÐаÑамеÑÑи баÑеÑа Ñока ÑÑ Ð¿ÑомеÑени.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Ðеза ÑÑпоÑÑавÑена.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_new(): %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_connect_playback(): %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_connect_record(): %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "ÐеÑÑпеÑно повезиваÑе: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "ÐобиÑ
EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа write(): %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ÐобиÑ
Ñигнал, излазим."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Ðе Ð¼Ð¾Ð³Ñ Ð´Ð¾Ð±Ð¸Ñи вÑедноÑÑ ÐºÐ°ÑÑеÑа: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "ÐÑеме: %0.3f s; ÐаÑÑеÑе: %0.0f us."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_stream_update_timing_info(): %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1379,10 +1405,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [опÑиÑе]\n"
@@ -1440,7 +1470,7 @@ msgstr ""
" --list-file-formats ÐÑпиÑи Ñве доÑÑÑпне ÑоÑмаÑе "
"подаÑака.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1451,68 +1481,68 @@ msgstr ""
"ÐомпаÑлиÑано Ñа libpulse %s\n"
"Ðовезано Ñа libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "ÐеиÑпÑавно име клиÑенÑа â%sâ"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "ÐеиÑпÑавно име Ñока â%sâ"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "ÐеиÑпÑавна мапа канала â%sâ"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "ÐеиÑпÑаван паÑамеÑÐ°Ñ ÐºÐ°ÑÑеÑа â%sâ"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "ÐеиÑпÑаван паÑамеÑÐ°Ñ Ð·Ð° вÑеме пÑоÑеÑа â%sâ"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "ÐеиÑпÑавно ÑвоÑÑÑво â%sâ"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "ÐÐµÐ¿Ð¾Ð·Ð½Ð°Ñ %s ÑоÑÐ¼Ð°Ñ Ð´Ð°ÑоÑеке."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "ÐеиÑпÑаван паÑамеÑÐ°Ñ ÑзоÑка"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "ÐÑевиÑе аÑгÑменаÑа."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "ÐиÑе ÑÑпело пÑавÑеÑе паÑамеÑаÑа ÑзоÑка за даÑоÑекÑ."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "ÐиÑе ÑÑпело оÑваÑаÑе звÑÑне даÑоÑеке."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1520,102 +1550,102 @@ msgstr ""
"УпозоÑеÑе: наведени паÑамеÑÑи ÑзоÑка Ñе биÑи пÑебÑиÑани паÑамеÑÑима из "
"даÑоÑеке."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ÐеÑÑпеÑно ÑÑвÑÑиваÑе паÑамеÑаÑа ÑзоÑка из даÑоÑеке."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "УпозоÑеÑе: ÐеÑÑпеÑно ÑÑвÑÑиваÑе мапе канала из даÑоÑеке."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Ðапа канала Ñе не поклапа Ñа паÑамеÑÑима ÑзоÑка"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "УпозоÑеÑе: ÐеÑÑпеÑно запиÑиваÑе мапе канала Ñ Ð´Ð°ÑоÑекÑ."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "ÐÑваÑам Ñок %s Ñа паÑамеÑÑима ÑзоÑка â%sâ и мапом канала â%sâ."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "Ñнима"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "пÑÑÑа"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_mainloop_new()."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа io_new()."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_context_new()."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_context_connect(): %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_context_new()."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_mainloop_run()."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "ÐеÑÑпеÑно заÑÑÑавÑаÑе: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "ÐеÑÑпеÑно наÑÑавÑаÑе: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "УÐÐÐÐÐ ÐÐÐ: ÐвÑÑни ÑеÑÐ²ÐµÑ Ð½Ð¸Ñе локални, не заÑÑÑавÑам.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "ÐеÑÑпеÑно повезиваÑе: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "ÐобиÑ
SIGINT, излазим.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "УÐÐÐÐÐ ÐÐÐ: ÐоÑлаÑени пÑоÑÐµÑ Ñе пÑекинÑÑ Ñигналом %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1634,7 +1664,7 @@ msgstr ""
"повезаÑи\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1645,50 +1675,61 @@ msgstr ""
"ÐомпаÑлиÑано Ñа libpulse %s\n"
"Ðовезано Ñа libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_mainloop_new().\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_context_new().\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "ÐеÑÑпела ÑÑнкÑиÑа pa_mainloop_run().\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе ÑÑаÑиÑÑике: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "ТÑенÑÑно Ñ ÑпоÑÑеби: %u блокова ÑадÑжи ÑкÑпно %s баÑÑова.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "СмеÑÑено од покÑеÑаÑа: %u блокова ÑадÑжи ÑкÑпно %s баÑÑова.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "ÐелиÑина ÐºÐµÑ Ð¼ÐµÐ¼Ð¾ÑиÑе ÑзоÑка: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о ÑеÑвеÑÑ: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1696,7 +1737,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"ÐоÑиÑниÑко име: %s\n"
"Ðме домаÑина: %s\n"
@@ -1708,12 +1749,12 @@ msgstr ""
"ÐодÑазÑмевани извоÑ: %s\n"
"ÐолаÑиÑ: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о ÑливникÑ: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1752,22 +1793,22 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tÐоÑÑови:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tÐкÑивни поÑÑ: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о извоÑÑ: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1806,20 +1847,20 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "непознаÑо"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о модÑлÑ: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1836,12 +1877,12 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о клиÑенÑÑ: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1856,12 +1897,12 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о каÑÑиÑи: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1878,22 +1919,22 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tÐÑоÑили:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tÐкÑивни пÑоÑил: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о ÑÐ»Ð°Ð·Ñ Ñливника: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1930,12 +1971,12 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о Ð¸Ð·Ð»Ð°Ð·Ñ Ð¸Ð·Ð²Ð¾Ñа: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1964,12 +2005,12 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "ÐеÑÑпеÑно добавÑаÑе подаÑака о ÑзоÑкÑ: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2000,26 +2041,80 @@ msgstr ""
"\tСвоÑÑÑва:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "ÐеÑÑпеÑ
: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "ÐиÑе ÑÑпело поÑÑавÑаÑе ÑзоÑка: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ÐÑеÑани кÑÐ°Ñ Ð´Ð°ÑоÑеке"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "СеÑÐ²ÐµÑ Ð½ÐµÐ¸ÑпÑаван"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "ÐобиÑ
SIGINT, излазим."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2042,6 +2137,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2081,7 +2177,7 @@ msgstr ""
" -n, --client-name=ÐÐÐ Ðако назваÑи овог клиÑенÑа на "
"ÑеÑвеÑÑ\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2092,106 +2188,106 @@ msgstr ""
"ÐомпаÑлиÑано Ñа libpulse %s\n"
"Ðовезано Ñа libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ÐаведиÑе даÑоÑÐµÐºÑ ÑзоÑка коÑÑ ÑÑеба ÑÑиÑаÑи"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "ÐиÑе ÑÑпело оÑваÑаÑе звÑÑне даÑоÑеке."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "УпозоÑеÑе: ÐеÑÑпеÑно ÑÑвÑÑиваÑе паÑамеÑаÑа ÑзоÑка из даÑоÑеке."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "ÐоÑаÑе навеÑÑи име ÑзоÑка коÑег желиÑе ÑепÑодÑковаÑи"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "ÐоÑаÑе навеÑÑи име ÑзоÑка коÑег желиÑе ÑклониÑи"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "ÐоÑаÑе навеÑÑи Ð¸Ð½Ð´ÐµÐºÑ Ñлаза Ñливника и Ñливник"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "ÐоÑаÑе навеÑÑи Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð·Ð»Ð°Ð·Ð° извоÑа и извоÑ"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "ÐоÑаÑе навеÑÑи име и аÑгÑменÑе модÑла."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "ÐоÑаÑе навеÑÑи Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´Ñла"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Ðе можеÑе навеÑÑи виÑе од Ñедног Ñливника. ÐоÑаÑе навеÑÑи логиÑÐºÑ Ð²ÑедноÑÑ."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
"Ðе можеÑе навеÑÑи виÑе од Ñедног извоÑа. ÐоÑаÑе навеÑÑи логиÑÐºÑ Ð²ÑедноÑÑ."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ°ÑÑиÑе и име пÑоÑила"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ Ñливника и име поÑÑа"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð·Ð²Ð¾Ñа и име поÑÑа"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ Ñливника и ÑаÑинÑ"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "ÐеиÑпÑаван паÑамеÑÐ°Ñ ÑаÑине"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð·Ð²Ð¾Ñа и ÑаÑинÑ"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "ÐоÑаÑе навеÑÑи Ð¸Ð½Ð´ÐµÐºÑ Ñлаза Ñливника и ÑаÑинÑ"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "ÐеиÑпÑаван Ð¸Ð½Ð´ÐµÐºÑ Ñлаза Ñливника"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ Ñливника и логиÑÐºÑ Ð²ÑедноÑÑ Ð·Ð° иÑкÑÑÑиваÑе"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "ÐоÑаÑе навеÑÑи име/Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð·Ð²Ð¾Ñа и логиÑÐºÑ Ð²ÑедноÑÑ Ð·Ð° иÑкÑÑÑиваÑе"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "ÐоÑаÑе навеÑÑи Ð¸Ð½Ð´ÐµÐºÑ Ñлаза Ñливника и логиÑÐºÑ Ð²ÑедноÑÑ Ð·Ð° иÑкÑÑÑиваÑе"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "ÐеиÑпÑаван паÑамеÑÐ°Ñ Ð¸Ð½Ð´ÐµÐºÑа Ñлаза Ñливника"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "ÐиÑе наведена иÑпÑавна наÑедба."
@@ -2276,45 +2372,45 @@ msgstr "ÐеÑÑпеÑно ÑÑиÑаваÑе даÑоÑека колаÑиÑа\
msgid "Not yet implemented.\n"
msgstr "ÐиÑе ÑÐ¾Ñ Ð¸Ð¼Ð¿Ð»ÐµÐ¼ÐµÐ½ÑиÑано.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Ðема покÑенÑÑог PulseAudio демона, или Ñе не извÑÑава као демон ÑеÑиÑе."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "ÐиÑе ÑÑпело ÑбиÑаÑе PulseAudio демона."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Ðемон Ñе не одазива."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "ÐиÑе могÑÑе пÑиÑÑÑпиÑи даÑоÑеÑи закÑÑÑаваÑа за ÑамоÑмножаваÑе."
@@ -2353,38 +2449,42 @@ msgstr ""
"вÑаÑио 0 или Ð½ÐµÐºÑ Ð´ÑÑÐ³Ñ Ð²ÑедноÑÑ Ð¼Ð°ÑÑ Ð¾Ð´ min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "ÐÑкÑÑÑено"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "РепÑодÑкÑиÑа виÑоке ÑаÑноÑÑи (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "СнимаÑе виÑоке ÑаÑноÑÑи (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "ÐвоÑмеÑно ÑелеÑониÑаÑе (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio звÑÑни ÑиÑÑем"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Ðзлазни ÑÑеÑаÑи"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Улазни ÑÑеÑаÑи"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "ÐÑдио на @HOSTNAME@"
@@ -2448,132 +2548,159 @@ msgstr "ÐоÑаÑало"
msgid "No Amplifier"
msgstr "Ðез поÑаÑала"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ÐодизаÑе"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Ðез подизаÑа"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Ðналогне ÑлÑÑалиÑе"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Ðналогни Ñлаз"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Ðналогни микÑоÑон"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Ðналогна линиÑа Ñ"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Ðналогни Ñадио"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Ðналогни видео"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Ðналогни излаз"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Ðналогне ÑлÑÑалиÑе"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Ðналогни излаз (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Ðналогни моно излаз"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Ðналогни ÑÑеÑео"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Ðналогни моно"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Ðналогни ÑÑеÑео"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Ðналогни окÑÑжÑÑÑÑи 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Ðналогни окÑÑжÑÑÑÑи 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Ðналогни окÑÑжÑÑÑÑи 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Ðналогни окÑÑжÑÑÑÑи 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Ðналогни окÑÑжÑÑÑÑи 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Ðналогни окÑÑжÑÑÑÑи 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Ðналогни окÑÑжÑÑÑÑи 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Ðналогни окÑÑжÑÑÑÑи 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Ðналогни окÑÑжÑÑÑÑи 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Ðналогни окÑÑжÑÑÑÑи 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Ðналогни окÑÑжÑÑÑÑи 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ÐигиÑални ÑÑеÑео (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ÐигиÑални окÑÑжÑÑÑÑи 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ÐигиÑални окÑÑжÑÑÑÑи 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ÐигиÑални окÑÑжÑÑÑÑи 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ÐигиÑални ÑÑеÑео (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "ÐвоÑмеÑни аналогни моно"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "ÐвоÑмеÑни аналогни ÑÑеÑео"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ÐвоÑмеÑни дигиÑални ÑÑеÑео (IEC958)"
+
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ÐвÑÑник за ниÑке ÑÑеквенÑиÑе"
diff --git a/po/sr at latin.po b/po/sr at latin.po
index 45e83d6..c42db98 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-30 10:22+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-30 22:51+0100\n"
"Last-Translator: MiloÅ¡ KomarÄeviÄ <kmilos at gmail.com>\n"
"Language-Team: Serbian (sr) <fedora-trans-sr at redhat.com>\n"
@@ -18,12 +18,12 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -36,7 +36,7 @@ msgstr ""
"Ovo je najverovatnije greÅ¡ka u â%sâ ALSA upravljaÄkom programu. Prijavite "
"ovaj problem ALSA programerima."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -49,7 +49,7 @@ msgstr ""
"Ovo je najverovatnije greÅ¡ka u â%sâ ALSA upravljaÄkom programu. Prijavite "
"ovaj problem ALSA programerima."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -96,11 +96,11 @@ msgstr "Uzorak NULL slivnika"
msgid "Null Output"
msgstr "Prazan izlaz"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "Unutrašnji zvuk"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Modem"
@@ -116,92 +116,98 @@ msgstr "NeuspeÅ¡no smeÅ¡tanje novog dl uÄitavaÄa."
msgid "Failed to add bind-now-loader."
msgstr "NeuspeÅ¡no dodavanje âpoveži odmahâ uÄitavaÄa."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Dobih signal %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Napuštam."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Ne mogu naÄi korisnika â%sâ."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Ne mogu naÄi grupu â%sâ."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "NaÄeni su korisnik â%sâ (UID %lu) i grupa â%sâ (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID korisnika â%sâ se ne poklapa sa grupom â%sâ."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "LiÄni direktorijum korisnika â%sâ nije â%sâ, zanemarujem."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "NeuspeÅ¡no pravljenje â%sâ: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Neuspešna promena grupnog spiska: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Neuspešna promena GID-a: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Neuspešna promena UID-a: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "UspeÅ¡no odbaÄena root ovlaÅ¡Äenja."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "Režim za Äitav sistem nije podržan na ovoj platformi."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) nije uspelo: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "NeuspeÅ¡no tumaÄenje komandne linije."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Demon nije pokrenut"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Demon je pokrenut sa PID-om %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Neuspešno ubijanje demona: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -209,159 +215,174 @@ msgstr ""
"Nije nameravano da se ovaj program pokreÄe iz root naloga (osim u sluÄaju "
"kada je --system navedeno)"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Potrebna su root ovlaÅ¡Äenja."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start nije podržano za sistemske primerke."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "Pokrenuto u sistemskom režimu, ali --disallow-exit nije postavljeno!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"Pokrenuto u sistemskom režimu, ali --disallow-module-loading nije "
"postavljeno!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Pokrenuto u sistemskom režimu, prisilno onemoguÄujem SHM režim!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"Pokrenuto u sistemskom režimu, prisilno onemoguÄujem gaÅ¡enje posle odreÄenog "
"vremena mirovanja!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Neuspešno pronalaženje standardnog ulaza/izlaza."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "Neuspešno puštanje podataka kroz cev: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "Neuspela funkcija fork(): %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "Neuspela funkcija read(): %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "Neuspešno pokretanje demona."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Demon uspešno pokrenut."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "Neuspela funkcija read(): %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Ovo je PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "DomaÄin kompajliranja: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS kompajliranja: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "Pokrenut na domaÄinu: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Našao %u procesor(a)"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "VeliÄina stranice je %lu bajtova"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Kompajlirano sa podrškom za Valgrind: da"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Kompajlirano sa podrškom za Valgrind: ne"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Pokrenut u Valgrind režimu: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "Pokrenut na domaÄinu: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimizovana izgradnja: da"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "Optimizovana izgradnja: ne"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG definisan, sva obaveÅ¡tenja iskljuÄena."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH definisan, samo obaveÅ¡tenja brze putanje iskljuÄena."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "Sva obaveÅ¡tenja omoguÄena."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "Neuspešno dobavljanje IB mašine"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "IB mašine je %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "IB sesije je %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "Koristi se %s izvršni direktorijum."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "Koristi se %s direktorijum stanja."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "Koristi se %s direktorijum modula."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "Pokrenuto u sistemskom režimu: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -377,15 +398,15 @@ msgstr ""
"ProÄitajte http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode radi "
"objaÅ¡njenja zaÅ¡to je sistemski režim obiÄno loÅ¡a ideja."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "Neuspela funkcija pa_pid_file_create()."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Dostupni su novi brojaÄi visoke rezolucije! Prijatno!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -393,27 +414,27 @@ msgstr ""
"VaÅ¡e jezgro nije dobro podeÅ¡eno za pulseaudio! PreporuÄuje Vam se da "
"koristite Linux jezgro sa omoguÄenim brojaÄima visoke rezolucije."
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "Neuspela funkcija pa_core_new()."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Neuspešno pokretanje demona."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Demon je pokrenut bez ijednog uÄitanog modula, odbija da radi."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "Pokretanje demona uspešno."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "Pokrenuto gašenje demona."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "Rad demona je prekinut."
@@ -679,72 +700,77 @@ msgstr "UPOZORENJE O PREVAZILAŽENJU: %s\n"
msgid "Path: %s\n"
msgstr "Putanja: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Neispravan ciljni dnevnik â%sâ."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Neispravan nivo opÅ¡irnosti u dnevniku â%sâ."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Neispravan naÄin diskretizacije â%sâ."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Neispravan rlimit â%sâ."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit nije podržan na ovoj platformi."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Neispravan format uzorka â%sâ."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Neispravna uÄestanost diskretizacije â%sâ."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Neispravni kanali uzorka â%sâ."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Neispravna mapa kanala â%sâ."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Neispravan broj odlomaka â%sâ."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Neispravna veliÄina odlomka â%sâ."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Neispravan nivo prioriteta â%sâ."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Neispravna uÄestanost diskretizacije â%sâ."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Neuspelo otvaranje datoteke podešavanja: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -752,7 +778,7 @@ msgstr ""
"Navedena mapa kanala ima nema isti broj kanala kao Å¡to je navedeno u "
"podrazumevanom broju kanala."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ProÄitaj iz datoteke podeÅ¡avanja: %s ###\n"
@@ -798,8 +824,8 @@ msgid "Rear Right"
msgstr "Pozadinski desni"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ZvuÄnik za niske frekvencije"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1144,191 +1170,191 @@ msgstr "Neuspela funkcija XOpenDisplay()"
msgid "Failed to parse cookie data"
msgstr "NeuspeÅ¡no tumaÄenje podataka iz kolaÄiÄa"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "NeuspeÅ¡no otvaranje datoteke podeÅ¡avanja â%sâ: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "KolaÄiÄ nije uÄitan. PokuÅ¡avam se povezati bez kolaÄiÄa."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "Primio poruku za nepoznati lokal â%sâ"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Neuspešno isušivanje toka: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "Reprodukcioni tok je isušen."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "Veza do servera se isušuje."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "Neuspela funkcija pa_stream_write(): %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "Neuspela funkcija pa_stream_write(): %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "Neuspela funkcija pa_stream_peek(): %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "Tok je uspešno napravljen."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "Neuspela funkcija pa_stream_get_buffer_attr(): %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Mere bafera: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Mere bafera: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "Koristim sledeÄe parametre uzorka â%sâ i mapu kanala â%sâ."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "PrikljuÄen na ureÄaj %s (%u, %s obustavljeno)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Greška toka: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "UreÄaj toka obustavljen.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "UreÄaj toka nastavljen.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "Tok nije popunjen.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "Tok se preliva.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "Tok je pokrenut.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "Tok prebaÄen na ureÄaj %s (%u, %s obustavljeno).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "nije"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "Parametri bafera toka su promenjeni.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "Veza uspostavljena.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "Neuspela funkcija pa_stream_new(): %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "Neuspela funkcija pa_stream_connect_playback(): %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "Neuspela funkcija pa_stream_connect_record(): %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "Neuspešno povezivanje: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "Dobih EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "Neuspela funkcija write(): %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "Dobih signal, izlazim."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Ne mogu dobiti vrednost kašnjenja: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Vreme: %0.3f s; Kašnjenje: %0.0f us."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "Neuspela funkcija pa_stream_update_timing_info(): %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1380,10 +1406,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [opcije]\n"
@@ -1442,7 +1472,7 @@ msgstr ""
" --list-file-formats Ispiši sve dostupne formate "
"podataka.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1453,68 +1483,68 @@ msgstr ""
"Kompajlirano sa libpulse %s\n"
"Povezano sa libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "Neispravno ime klijenta â%sâ"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "Neispravno ime toka â%sâ"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "Neispravna mapa kanala â%sâ"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "Neispravan parametar kaÅ¡njenja â%sâ"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "Neispravan parametar za vreme procesa â%sâ"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "Neispravno svojstvo â%sâ"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "Nepoznat %s format datoteke."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "Neispravan parametar uzorka"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "Previše argumenata."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Nije uspelo pravljenje parametara uzorka za datoteku."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Nije uspelo otvaranje zvuÄne datoteke."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1522,102 +1552,102 @@ msgstr ""
"Upozorenje: navedeni parametri uzorka Äe biti prebrisani parametrima iz "
"datoteke."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "NeuspeÅ¡no utvrÄivanje parametara uzorka iz datoteke."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "Upozorenje: NeuspeÅ¡no utvrÄivanje mape kanala iz datoteke."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "Mapa kanala se ne poklapa sa parametrima uzorka"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "Upozorenje: Neuspešno zapisivanje mape kanala u datoteku."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "Otvaram tok %s sa parametrima uzorka â%sâ i mapom kanala â%sâ."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "snima"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "pušta"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "Neuspela funkcija pa_mainloop_new()."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "Neuspela funkcija io_new()."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "Neuspela funkcija pa_context_new()."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "Neuspela funkcija pa_context_connect(): %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "Neuspela funkcija pa_context_new()."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "Neuspela funkcija pa_mainloop_run()."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Neuspešno zaustavljanje: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Neuspešno nastavljanje: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "UPOZORENJE: ZvuÄni server nije lokalni, ne zaustavljam.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Neuspešno povezivanje: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "Dobih SIGINT, izlazim.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "UPOZORENJE: PotlaÄeni proces je prekinut signalom %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1636,7 +1666,7 @@ msgstr ""
"povezati\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1647,50 +1677,61 @@ msgstr ""
"Kompajlirano sa libpulse %s\n"
"Povezano sa libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "Neuspela funkcija pa_mainloop_new().\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "Neuspela funkcija pa_context_new().\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "Neuspela funkcija pa_mainloop_run().\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Neuspešno dobavljanje statistike: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "Trenutno u upotrebi: %u blokova sadrži ukupno %s bajtova.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "Smešteno od pokretanja: %u blokova sadrži ukupno %s bajtova.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "VeliÄina keÅ¡ memorije uzorka: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Neuspešno dobavljanje podataka o serveru: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1698,7 +1739,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"KorisniÄko ime: %s\n"
"Ime domaÄina: %s\n"
@@ -1710,12 +1751,12 @@ msgstr ""
"Podrazumevani izvor: %s\n"
"KolaÄiÄ: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Neuspešno dobavljanje podataka o slivniku: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1754,22 +1795,22 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPortovi:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tAktivni port: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Neuspešno dobavljanje podataka o izvoru: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1808,20 +1849,20 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "nepoznato"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Neuspešno dobavljanje podataka o modulu: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1838,12 +1879,12 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Neuspešno dobavljanje podataka o klijentu: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1858,12 +1899,12 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Neuspešno dobavljanje podataka o kartici: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1880,22 +1921,22 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfili:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tAktivni profil: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Neuspešno dobavljanje podataka o ulazu slivnika: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1932,12 +1973,12 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Neuspešno dobavljanje podataka o izlazu izvora: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1966,12 +2007,12 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Neuspešno dobavljanje podataka o uzorku: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2002,26 +2043,80 @@ msgstr ""
"\tSvojstva:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Neuspeh: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Nije uspelo postavljanje uzorka: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "Prerani kraj datoteke"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Server neispravan"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "Dobih SIGINT, izlazim."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2044,6 +2139,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2083,7 +2179,7 @@ msgstr ""
" -n, --client-name=IME Kako nazvati ovog klijenta na "
"serveru\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2094,107 +2190,107 @@ msgstr ""
"Kompajlirano sa libpulse %s\n"
"Povezano sa libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "Navedite datoteku uzorka koju treba uÄitati"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Nije uspelo otvaranje zvuÄne datoteke."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "Upozorenje: NeuspeÅ¡no utvrÄivanje parametara uzorka iz datoteke."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Morate navesti ime uzorka kojeg želite reprodukovati"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Morate navesti ime uzorka kojeg želite ukloniti"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Morate navesti indeks ulaza slivnika i slivnik"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Morate navesti indeks izlaza izvora i izvor"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Morate navesti ime i argumente modula."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Morate navesti indeks modula"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Ne možete navesti viÅ¡e od jednog slivnika. Morate navesti logiÄku vrednost."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
"Ne možete navesti viÅ¡e od jednog izvora. Morate navesti logiÄku vrednost."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Morate navesti ime/indeks kartice i ime profila"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Morate navesti ime/indeks slivnika i ime porta"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Morate navesti ime/indeks izvora i ime porta"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Morate navesti ime/indeks slivnika i jaÄinu"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "Neispravan parametar jaÄine"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Morate navesti ime/indeks izvora i jaÄinu"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Morate navesti indeks ulaza slivnika i jaÄinu"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "Neispravan indeks ulaza slivnika"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "Morate navesti ime/indeks slivnika i logiÄku vrednost za iskljuÄivanje"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "Morate navesti ime/indeks izvora i logiÄku vrednost za iskljuÄivanje"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
"Morate navesti indeks ulaza slivnika i logiÄku vrednost za iskljuÄivanje"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "Neispravan parametar indeksa ulaza slivnika"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Nije navedena ispravna naredba."
@@ -2279,45 +2375,45 @@ msgstr "NeuspeÅ¡no uÄitavanje datoteka kolaÄiÄa\n"
msgid "Not yet implemented.\n"
msgstr "Nije još implementirano.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Nema pokrenutog PulseAudio demona, ili se ne izvršava kao demon sesije."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "Nije uspelo ubijanje PulseAudio demona."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Demon se ne odaziva."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Nije moguÄe pristupiti datoteci zakljuÄavanja za samoumnožavanje."
@@ -2356,38 +2452,42 @@ msgstr ""
"vratio 0 ili neku drugu vrednost manju od min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "IskljuÄeno"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "Reprodukcija visoke taÄnosti (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "Snimanje visoke taÄnosti (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Dvosmerno telefoniranje (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio zvuÄni sistem"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "Izlazni ureÄaji"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "Ulazni ureÄaji"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "Audio na @HOSTNAME@"
@@ -2451,132 +2551,159 @@ msgstr "PojaÄalo"
msgid "No Amplifier"
msgstr "Bez pojaÄala"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "Podizanje"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Bez podizanja"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "Analogne slušalice"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "Analogni ulaz"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Analogni mikrofon"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Analogna linija u"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Analogni radio"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Analogni video"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Analogni izlaz"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "Analogne slušalice"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Analogni izlaz (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Analogni mono izlaz"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Analogni stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Analogni mono"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Analogni stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analogni okružujuÄi 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analogni okružujuÄi 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analogni okružujuÄi 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analogni okružujuÄi 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analogni okružujuÄi 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analogni okružujuÄi 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analogni okružujuÄi 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analogni okružujuÄi 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analogni okružujuÄi 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analogni okružujuÄi 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analogni okružujuÄi 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digitalni stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digitalni okružujuÄi 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digitalni okružujuÄi 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digitalni okružujuÄi 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digitalni stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Dvosmerni analogni mono"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Dvosmerni analogni stereo"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Dvosmerni digitalni stereo (IEC958)"
+
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ZvuÄnik za niske frekvencije"
diff --git a/po/sv.po b/po/sv.po
index d08b30e..eee7585 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-09-29 23:47+0200\n"
+"POT-Creation-Date: 2010-02-21 21:15+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,12 +15,12 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -29,7 +29,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -38,7 +38,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -76,12 +76,12 @@ msgstr ""
msgid "Null Output"
msgstr ""
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
#, fuzzy
msgid "Internal Audio"
msgstr "Internt fel"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr ""
@@ -98,92 +98,98 @@ msgstr "Misslyckades med att öppna ljudfil.\n"
msgid "Failed to add bind-now-loader."
msgstr ""
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "Fick signal %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "Avslutar."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Misslyckades med att hitta användaren \"%s\"."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Misslyckades med att hitta gruppen \"%s\"."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr ""
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr ""
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Hemkatalogen för användaren \"%s\" är inte \"%s\", ignorerar."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Misslyckades med att skapa \"%s\": %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr ""
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr ""
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr ""
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr ""
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr ""
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) misslyckades: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -191,156 +197,171 @@ msgstr ""
"Detta program är inte tänkt att köras som root (såvida inte --system har "
"angivits)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
#, fuzzy
msgid "Root privileges required."
msgstr "Root-behörighet krävs."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start stöds inte för systeminstanser."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe misslyckades: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() misslyckades: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() misslyckades: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() misslyckades: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Detta är PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, c-format
+msgid "Running in VM: %s"
+msgstr ""
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr ""
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr ""
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -350,41 +371,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() misslyckades."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() misslyckades."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr ""
@@ -573,78 +594,83 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Sökväg: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "Ogiltig server"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Misslyckades med att öppna konfigurationsfil: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr ""
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@@ -691,7 +717,7 @@ msgid "Rear Right"
msgstr "Höger bak"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
+msgid "Subwoofer"
msgstr ""
#: ../src/pulse/channelmap.c:117
@@ -1038,192 +1064,192 @@ msgstr "XOpenDisplay() misslyckades"
msgid "Failed to parse cookie data"
msgstr ""
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Misslyckades med att öppna konfigurationsfilen \"%s\": %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr ""
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr ""
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, fuzzy, c-format
msgid "Failed to drain stream: %s"
msgstr "Misslyckades med att hitta användaren \"%s\"."
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr ""
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr ""
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, fuzzy, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, fuzzy, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() misslyckades: %s\n"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, fuzzy, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() misslyckades: %s\n"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, fuzzy, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() misslyckades: %s\n"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr ""
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, fuzzy, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() misslyckades: %s\n"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr ""
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr ""
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr ""
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr ""
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, fuzzy, c-format
msgid "Stream error: %s"
msgstr "Strömfel: %s\n"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr ""
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr ""
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, fuzzy, c-format
msgid "Stream underrun.%s"
msgstr "Strömfel: %s\n"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, fuzzy, c-format
msgid "Stream overrun.%s"
msgstr "Strömfel: %s\n"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr ""
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr ""
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "inte "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr ""
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, fuzzy, c-format
msgid "Connection established.%s"
msgstr "Anslutning etablerad.\n"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, fuzzy, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() misslyckades: %s\n"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, fuzzy, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() misslyckades: %s\n"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, fuzzy, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() misslyckades: %s\n"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, fuzzy, c-format
msgid "Connection failure: %s"
msgstr "Anslutningsfel: %s\n"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
#, fuzzy
msgid "Got EOF."
msgstr "Fick filslut.\n"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, fuzzy, c-format
msgid "write() failed: %s"
msgstr "write() misslyckades: %s\n"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
#, fuzzy
msgid "Got signal, exiting."
msgstr "Fick signal %s."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, fuzzy, c-format
msgid "Failed to get latency: %s"
msgstr "Misslyckades med att få statistik: %s\n"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, fuzzy, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Tid: %0.3f sec; Latens: %0.0f ms \r"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, fuzzy, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() misslyckades: %s\n"
-#: ../src/utils/pacat.c:609
+#: ../src/utils/pacat.c:630
#, c-format
msgid ""
"%s [options]\n"
@@ -1276,14 +1302,18 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1291,180 +1321,180 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, fuzzy, c-format
msgid "Invalid client name '%s'"
msgstr "Ogiltig server"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, fuzzy, c-format
msgid "Invalid stream name '%s'"
msgstr "Ogiltig server"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, fuzzy, c-format
msgid "Invalid channel map '%s'"
msgstr "Ogiltig server"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr ""
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, fuzzy, c-format
msgid "Invalid process time specification '%s'"
msgstr "Ogiltig server"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, fuzzy, c-format
msgid "Invalid property '%s'"
msgstr "Ogiltig server"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr ""
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
#, fuzzy
msgid "Invalid sample specification"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, fuzzy, c-format
msgid "open(): %s"
msgstr "open(): %s\n"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, fuzzy, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
#, fuzzy
msgid "Too many arguments."
msgstr "För många argument.\n"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
#, fuzzy
msgid "Failed to generate sample specification for file."
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
#, fuzzy
msgid "Failed to open audio file."
msgstr "Misslyckades med att öppna ljudfil.\n"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr ""
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
#, fuzzy
msgid "Failed to determine sample specification from file."
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr ""
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
#, fuzzy
msgid "Channel map doesn't match sample specification"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr ""
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
msgid ""
"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr ""
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr ""
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
#, fuzzy
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() misslyckades.\n"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
#, fuzzy
msgid "io_new() failed."
msgstr "io_new() misslyckades.\n"
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
#, fuzzy
msgid "pa_context_new() failed."
msgstr "pa_context_new() misslyckades.\n"
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, fuzzy, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() misslyckades.\n"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
#, fuzzy
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_new() misslyckades.\n"
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
#, fuzzy
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() misslyckades.\n"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "Anslutningsfel: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr ""
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1476,7 +1506,7 @@ msgid ""
"\n"
msgstr ""
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1487,50 +1517,61 @@ msgstr ""
"Kompilerad med libpulse %s\n"
"Länkad med libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() misslyckades.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() misslyckades.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() misslyckades.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, fuzzy, c-format
msgid "Failed to get statistics: %s"
msgstr "Misslyckades med att få statistik: %s\n"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, fuzzy, c-format
msgid "Failed to get server information: %s"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
+#, c-format
+msgid ""
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
#, c-format
msgid ""
-"User name: %s\n"
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1538,15 +1579,15 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, fuzzy, c-format
msgid "Failed to get sink information: %s"
msgstr "Misslyckades med att få klientinformation: %s\n"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1568,22 +1609,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, fuzzy, c-format
msgid "\tActive Port: %s\n"
msgstr "pipe misslyckades: %s"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, fuzzy, c-format
msgid "Failed to get source information: %s"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1605,20 +1646,20 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr ""
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, fuzzy, c-format
msgid "Failed to get module information: %s"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1629,12 +1670,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, fuzzy, c-format
msgid "Failed to get client information: %s"
msgstr "Misslyckades med att få klientinformation: %s\n"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1644,12 +1685,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, fuzzy, c-format
msgid "Failed to get card information: %s"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1660,22 +1701,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr ""
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, fuzzy, c-format
msgid "\tActive Profile: %s\n"
msgstr "pipe misslyckades: %s"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, fuzzy, c-format
msgid "Failed to get sink input information: %s"
msgstr "Misslyckades med att få klientinformation: %s\n"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1696,12 +1737,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, fuzzy, c-format
msgid "Failed to get source output information: %s"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1718,12 +1759,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, fuzzy, c-format
msgid "Failed to get sample information: %s"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1741,26 +1782,81 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, fuzzy, c-format
msgid "Failure: %s"
msgstr "Fel: %s\n"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, fuzzy, c-format
msgid "Failed to upload sample: %s"
msgstr "Misslyckades med att hitta användaren \"%s\"."
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr ""
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr "sink"
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr "källa"
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+#, fuzzy
+msgid "source-output"
+msgstr "källa"
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "Ogiltig server"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
#, fuzzy
msgid "Got SIGINT, exiting."
msgstr "Fick signal %s."
-#: ../src/utils/pactl.c:869
+#: ../src/utils/pactl.c:961
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1784,6 +1880,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -1794,7 +1891,7 @@ msgid ""
"server\n"
msgstr ""
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1805,108 +1902,108 @@ msgstr ""
"Kompilerad med libpulse %s\n"
"Länkad med libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr ""
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
#, fuzzy
msgid "Failed to open sound file."
msgstr "Misslyckades med att öppna ljudfil.\n"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
#, fuzzy
msgid "Warning: Failed to determine sample specification from file."
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr ""
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr ""
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr ""
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr ""
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr ""
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr ""
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr ""
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr ""
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
#, fuzzy
msgid "Invalid volume specification"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr ""
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
#, fuzzy
msgid "Invalid sink input index specification"
msgstr "Misslyckades med att få modulinformation: %s\n"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr ""
@@ -1982,44 +2079,44 @@ msgstr ""
msgid "Not yet implemented.\n"
msgstr "Ãnnu inte implementerad.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr ""
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr ""
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr ""
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, fuzzy, c-format
msgid "poll(): %s"
msgstr "fork(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr ""
@@ -2046,38 +2143,42 @@ msgid ""
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr ""
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr ""
@@ -2142,133 +2243,153 @@ msgstr ""
msgid "No Amplifier"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+msgid "Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+msgid "No Bass Boost"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+msgid "Headphones"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+msgid "Analog Speakers"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr ""
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr ""
@@ -2313,11 +2434,5 @@ msgstr ""
#~ msgid "muted"
#~ msgstr "tystad"
-#~ msgid "sink"
-#~ msgstr "sink"
-
-#~ msgid "source"
-#~ msgstr "källa"
-
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair(): %s"
diff --git a/po/ta.po b/po/ta.po
index 1a88bf2..1fe6bc3 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.ta\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-13 08:56+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-11-13 16:54+0530\n"
"Last-Translator: I. Felix <ifelix at redhat.com>\n"
"Language-Team: Tamil <fedora-trans-ta at redhat.com>\n"
@@ -39,12 +39,12 @@ msgstr ""
"\n"
"\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -57,7 +57,7 @@ msgstr ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -70,7 +70,7 @@ msgstr ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -117,11 +117,11 @@ msgstr "à®à®à®¿à®à®¾à®° பà¯à®à¯à®à®¿à®¯ à®à®¿à®à¯"
msgid "Null Output"
msgstr "பà¯à®à¯à®à®¿à®¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à®à®à¯à®ªà¯à®± à®à®à®¿à®¯à¯"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "மாதிரி"
@@ -137,246 +137,268 @@ msgstr "பà¯à®¤à®¿à®¯ dl à®à®±à¯à®±à¯à®ªà®µà®°à¯ à®à®¤à¯à®à¯à®à®¿à®°
msgid "Failed to add bind-now-loader."
msgstr "à®à®ªà¯à®ªà¯à®¤à¯ பிணà¯à®à¯à®à¯à®®à¯ à®à®±à¯à®ªà®¿à®¯à¯ à®à¯à®°à¯à®ªà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "%sà®à¯à®à¯ à®à®¿à®à¯à®©à®²à¯ à®à®¿à®à¯à®¤à¯à®¤à¯à®µà®¿à®à¯à®à®¤à¯."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "வà¯à®³à®¿à®¯à¯à®±à¯à®¤à®²à¯."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "'%s' பயனர௠à®à®£à¯à®à¯à®ªà®¿à®à®¿à®ªà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "'%s' à®à¯à®´à¯à®µà¯ à®à®£à¯à®à¯à®ªà®¿à®à®¿à®ªà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "'%s'பயனர௠à®à®£à¯à®à¯à®ªà®¿à®à®¿à®à¯à®à®ªà¯à®ªà®à¯à®à®¾à®°à¯ (UID %lu) மறà¯à®±à¯à®®à¯ à®à¯à®´à¯ '%s' (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID ன௠பயனர௠'%s' மறà¯à®±à¯à®®à¯ '%s' à®à¯à®´à¯à®µà¯à®à®©à¯ à®à®¤à¯à®¤à¯ பà¯à®à®µà®¿à®²à¯à®²à¯."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "à®®à¯à®à®ªà¯à®ªà¯ à®
à®à¯à®µà¯ பயனரான'%s' '%s'à®à®²à¯, பà¯à®±à®à¯à®à®£à®¿à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s'à® à®à®°à¯à®µà®¾à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "à®à¯à®´à¯à®ªà¯ பà®à¯à®à®¿à®¯à®²à¯ மாறà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GIDà®à¯à®à¯ மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UIDà®à¯à®à¯ மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "à®°à¯à®à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯à®à®³à¯ வà¯à®±à¯à®±à®¿à®à®°à®®à®¾à® விà®à®ªà¯à®ªà®à¯à®à®¤à¯."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à®à®¨à¯à®¤ தளதà¯à®¤à®¿à®²à¯ à®à®£à®¿à®©à®¿à®¯à®¿à®©à¯ திறநà¯à®¤ à®®à¯à®±à¯à®®à¯ தà¯à®£à¯à®ªà¯à®°à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à®à®à¯à®à®³à¯ வரிய௠மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "à®à¯à®®à¯à®©à¯ à®à®¯à®à¯à®à®µà®¿à®²à¯à®²à¯"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "PID %uவா஠à®à¯à®®à¯à®©à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "à®à¯à®®à¯à®©à¯à®à¯à®à¯ à®®à¯à®à®¿à®µà¯ à®à®à¯à®à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "à®à®¨à¯à®¤ நிரல௠ரà¯à®à¯à®à®¾à® à®à®¯à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯ (--system à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®¾à®¤ வரà¯)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "à®°à¯à®à¯ à®®à¯à®©à¯à®©à¯à®°à®¿à®®à¯à®à®³à¯ தà¯à®µà¯à®ªà¯à®ªà®à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start à®à®£à®¿à®©à®¿ நிà®à®´à¯à®µà®¿à®²à¯ தà¯à®£à¯à®ªà¯à®°à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, à®à®©à®¾à®²à¯ --disallow-exit à®
à®®à¯à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, à®à®©à®¾à®²à¯ --disallow-module-loading à®
à®®à¯à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯!"
+msgstr ""
+"à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, à®à®©à®¾à®²à¯ --disallow-module-loading à®
à®®à¯à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, SHM à®®à¯à®±à¯à®®à¯ à®à¯à®¯à®²à¯à®¨à¯à®à¯à®à¯à®¤à®²à¯ à®à®à¯à®à®¾à®¯à®ªà¯à®ªà®à¯à®¤à¯à®¤à¯à®à®¿à®±à®¤à¯!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "à®à®£à®¿à®©à®¿ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯, வà¯à®±à¯à®®à¯ நà¯à®°à®¤à¯à®¤à¯ à®à¯à®¯à®²à¯à®¨à¯à®à¯à® à®à®à¯à®à®¾à®¯à®ªà¯à®ªà®à¯à®¤à¯à®¤à¯à®à®¿à®±à®¤à¯!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio஠பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "பà¯à®ªà¯ தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "வாà®à®¿à®ªà¯à®ªà®¤à®¿à®²à¯() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "à®à¯à®®à¯à®©à¯ தà¯à®µà®à¯à®à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "à®à¯à®®à¯à®©à¯ வà¯à®±à¯à®±à®¿à®à®°à®®à®¾à® தà¯à®µà®à¯à®à®à®ªà¯à®ªà®à¯à®à®¤à¯."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "வாà®à®¿à®ªà¯à®ªà®¤à®¿à®²à¯() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à®à®¤à¯ தான௠பளà¯à®¸à¯ à®à®à®¿à®¯à¯ %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "தà¯à®à¯à®à¯à®à®ªà¯à®ªà®à¯à® பà¯à®°à®µà®²à®©à¯: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "தà¯à®à¯à®ªà¯à®ªà¯ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "பà¯à®°à®µà®²à®©à®¾à® à®à®¯à®à¯à®à¯à®à®¿à®±à®¤: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "CPUs %uவில௠à®à®¾à®£à®ªà¯à®ªà®à¯à®à®¿à®±à®¤à¯ ."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "பà®à¯à® à®
ளவà¯à®à®³à¯ %lu பà¯à®à¯à®¸à¯"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Compiled with Valgrind support: yes"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Compiled with Valgrind support: no"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "பà¯à®°à®µà®²à®©à®¾à® à®à®¯à®à¯à®à¯à®à®¿à®±à®¤: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "Optimized build: yes"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à®à¯à®°à¯à®à¯à®à®®à®¾à®© à®à®°à¯à®µà®¾à®à¯à®à®®à¯: à®à®²à¯à®²à¯"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG வரà¯à®¯à®±à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯, à®
னà¯à®¤à¯à®¤à¯à®®à¯ à®à®±à¯à®¤à®¿à®¯à®¾à® à®à¯à®¯à®²à¯à®¨à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH வரà¯à®¯à®±à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯, விரà¯à®µà¯ பாத௠மà®à¯à®à¯à®®à¯ à®à®±à¯à®¤à®¿à®¯à®¾à® à®à¯à®¯à®²à¯à®¨à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "à®
னà¯à®¤à¯à®¤à¯ à®à®±à¯à®¤à®¿à®¯à®¾à® à®à¯à®¯à®²à¯à®ªà®à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "à®à®£à®¿à®©à®¿ à®à¯à®±à®¿à®¯à¯à®à¯ பà¯à®±à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "à®à®£à®¿à®©à®¿ à®à¯à®±à®¿à®¯à¯à®à¯ %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "à®
மரà¯à®µà¯ à®à¯à®±à®¿à®¯à¯à®à¯ %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "à®à®à¯à®®à¯à®¨à¯à®°à®®à¯ %s à®
à®à¯à®µà¯ பயனà¯à®ªà®à¯à®¤à¯à®¤à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "%s நில௠à®
à®à¯à®µà®¿à®©à¯ பயனà¯à®ªà®à¯à®¤à¯à®¤à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "தà¯à®à¯à®¤à®¿ %s à®
à®à¯à®µà¯ பயனà¯à®ªà®à¯à®¤à¯à®¤à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "à®à®£à®¿à®©à®¿à®¯à®¿à®©à¯ à®®à¯à®±à¯à®®à¯à®¯à®¿à®²à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -392,15 +414,15 @@ msgstr ""
"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
"explanation why system mode is usually a bad idea."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "à®à®¯à®°à¯à®¨à¯à®¤ திரà¯à®¤à¯à®¤à®¿à®±à®©à¯ நà¯à®°à®®à¯à®à®¾à®à¯à®à®¿ à®à®¿à®à¯à®à¯à®à®¿à®³à®¤à¯! Bon appetit!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -408,27 +430,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "à®à¯à®®à¯à®©à¯ à®à®°à®®à¯à®ªà®¿à®ªà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "à®à¯à®®à®¾à®©à¯ தà¯à®µà®à¯à®à®®à¯ à®à®¨à¯à®¤ தà¯à®à¯à®¤à®¿à®à®³à¯à®®à¯ à®à®±à¯à®±à®ªà¯à®ªà®à®¾à®®à®²à¯, வà¯à®²à¯à®¯à¯ நிராà®à®°à®¿à®à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "à®à¯à®®à¯à®©à¯ தà¯à®µà®à¯à®à¯à®µà®¤à¯ à®®à¯à®à®¿à®µà®à¯à®¨à¯à®¤à®¤à¯."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "à®à¯à®®à¯à®©à¯ பணிநிறà¯à®¤à¯à®¤à®®à¯ à®®à¯à®©à¯à®à®¿à®±à®¤à¯."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "à®à¯à®®à¯à®©à¯ நà¯à®à¯à®à®ªà¯à®ªà®à¯à®à¯à®¤à¯."
@@ -685,72 +707,77 @@ msgstr "DEPRECATION WARNING: %s\n"
msgid "Path: %s\n"
msgstr "பாதà¯: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] தவறான பதிவ௠à®à®²à®à¯à®à¯ '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] தவறான பதிவ௠à®à®²à®à¯à®à¯ '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] தவறான மறà¯à®®à®¾à®¤à®¿à®°à®¿ à®®à¯à®±à¯ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] தவறான rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit à®à®¨à¯à®¤ தளதà¯à®¤à®¿à®²à¯ தà¯à®£à¯à®ªà¯à®°à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] தவறான மாதிரி à®®à¯à®±à¯ '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] தவறான மாதிரி வில௠'%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] தவறான மாதிரி à®à¯à®©à®²à¯à®à®³à¯ '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] தவறான à®à¯à®©à®²à¯ பà®à®®à¯ '%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] பà®à¯à®ªà¯à®ªà¯ '%s'à®à¯à®à¯ தவறான à®à®£à¯"
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] தவறான பà®à¯à®ªà¯à®ªà¯ à®
ளவ௠'%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] தவறான நலà¯à®² நில௠'%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] தவறான மாதிரி வில௠'%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "à®à®à¯à®à®®à¯à®à¯à®à®ªà¯à®ªà®à¯à® à®à¯à®ªà¯à®ªà®¿à®©à¯ திறபà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -758,7 +785,7 @@ msgstr ""
"à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à¯à® à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ à®à¯à®©à®²à¯ à®®à¯à®ªà¯ வà¯à®±à¯à®ªà®à¯à® à®à¯à®©à®²à¯à®à®³à®¿à®©à¯ à®à®£à¯à®£à®¿à®à¯à®à¯à®¯à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à¯à® "
"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ à®à¯à®©à®²à¯à®à®³à®¿à®©à¯ à®à®£à¯à®£à®¿à®à¯à®à¯à®¯à¯ வி஠à®à¯à®£à¯à®à¯à®³à¯à®³à®¤à¯"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### à®à®à¯à®à®®à¯à®ªà¯à®ªà¯ à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வாà®à®¿à®à¯à®à®µà¯à®®à¯: %s ###\n"
@@ -804,8 +831,8 @@ msgid "Rear Right"
msgstr "பின௠வலதà¯"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "à®à¯à®±à¯à®¨à¯à®¤ à®
லà¯à®µà®°à®¿à®à¯ à®à®®à¯à®®à®¿à®à¯à®à®°à¯"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1150,191 +1177,191 @@ msgstr "XOpenà®à®¾à®à¯à®à®¿() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯"
msgid "Failed to parse cookie data"
msgstr "à®à¯à®à¯à®à¯ தரவ௠மாறà¯à®±à¯à®µà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "'%s'à®à®à¯à®à®®à¯à®à¯à®à®ªà¯à®ªà®à¯à® à®à¯à®ªà¯à®ªà®¿à®©à¯ திறà®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à®à¯à®à¯à®à®¿ à®à®±à¯à®±à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯. à®à®£à¯à®ªà¯à®ªà®¿à®²à¯à®²à®¾à®®à®²à¯ à®®à¯à®¯à®±à¯à®à®¿à®à¯à®à®¿à®±à®¤à¯."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "தà¯à®°à®¿à®¯à®¾à®¤ தà¯à®à®°à®¿à®à¯à®à®¿à®¯à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ '%s'à®à¯à®à¯ à®à¯à®¯à¯à®¤à®¿à®à®³à¯ பà¯à®±à®ªà¯à®ªà®à¯à®à®©"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "ஸà¯à®à¯à®°à®¿à®®à¯ à®à®´à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "பினà¯à®©à®£à®¿ ஸà¯à®à¯à®°à®¿à®®à¯ à®à®´à®à¯à®à®ªà¯à®ªà®à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "à®à¯à®µà¯à®¯à®à®¤à¯à®¤à®¿à®±à¯à®à¯ à®à®£à¯à®ªà¯à®ªà¯ à®à®´à®à¯à®à®ªà¯à®ªà®à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_write() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ஸà¯à®à®¿à®°à¯à®®à¯ வà¯à®±à¯à®±à®¿à®à®°à®®à®¾à® à®à®°à¯à®µà®¾à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Buffer metrics: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à¯à® à®à¯à®±à®¿à®ªà¯à®ªà¯ '%s', à®à¯à®©à®²à¯ வரà¯à®ªà®à®¤à¯à®¤à¯ '%s'஠பயனà¯à®ªà®à¯à®¤à¯à®¤à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "%s à®à®¾à®¤à®©à®¤à¯à®¤à¯à®à®©à¯ à®à®£à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯ (%u, %ssuspended)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "ஸà¯à®à®¿à®°à¯à®®à¯ பிழà¯: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ஸà¯à®à¯à®°à®¿à®®à¯ à®à®¾à®¤à®©à®®à¯ à®à®à¯à®¨à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ஸà¯à®à¯à®°à®¿à®®à¯ à®à®¾à®¤à®©à®®à¯ தà¯à®à®°à¯à®à®¿à®±à®¤à¯.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ஸà¯à®à¯à®°à®¿à®®à¯ à®à®¯à®à¯à®à¯à®à®¿à®±à®¤à¯.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ஸà¯à®à¯à®°à®¿à®®à¯ à®
திà®à®³à®µà¯ à®à®¯à®à¯à®à®¿à®¯à®¤à¯.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ஸà¯à®à®¿à®°à¯à®®à¯ %s தà¯à®µà®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ஸà¯à®à®¿à®°à¯à®®à¯ %s à®à®¾à®¤à®©à®¤à¯à®¤à®¿à®±à¯à®à¯ நà®à®°à¯à®¨à¯à®¤à®¤à¯ (%u, %ssuspended).%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "à®à®²à¯à®²à¯"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ஸà¯à®à¯à®°à®¿à®®à¯ à®à®ªà®ªà¯à®ªà®°à¯ பணà¯à®ªà¯à®à®³à¯ மாறà¯à®±à®ªà¯à®ªà®à¯à®à®¤à¯.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "à®à®£à¯à®ªà¯à®ªà¯ தà¯à®µà®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "à®à®£à¯à®ªà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF à®à®¿à®à¯à®à¯à®à®ªà¯ பà¯à®±à¯à®±à®¤à¯"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "à®à®´à¯à®¤à¯à®µà®¤à®¿à®²à¯ () தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "à®à®¿à®à¯à®©à®²à¯ à®à®¿à®à¯à®¤à¯à®¤à®¤à¯, வà¯à®³à®¿à®¯à¯à®±à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "லà®à®©à¯à®à®¿à®¯à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "Time: %0.3f sec; Latency: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() தà¯à®²à¯à®µà®¿: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1386,10 +1413,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1448,7 +1479,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1459,168 +1490,171 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "தவறான à®à®¿à®³à¯à®¯à®©à¯ பà¯à®¯à®°à¯ '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "தவறான ஸà¯à®à¯à®°à¯à®®à¯ பà¯à®¯à®°à¯ '%s'."
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "தவறான à®à¯à®©à®²à¯ வரà¯à®ªà®à®®à¯ '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "தவறான லà¯à®à®©à¯à®à®¿ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯ '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "தவறான à®à¯à®¯à®²à¯ நà¯à®° à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "தவறான தனà¯à®®à¯ '%s'."
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "தà¯à®°à®¿à®¯à®¾à®¤ à®à¯à®ªà¯à®ªà¯ வà®à®¿à®µà®®à¯ %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "தவறான மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "நிறà¯à®¯ விவாதà®à¯à®à®³à¯."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "மாதிரி தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯.: %s"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "à®à®²à®¿ à®à¯à®ªà¯à®ªà®¿à®©à¯ திறà®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
-msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯à®à®©à¯ à®à¯à®±à®¿à®à¯à®à®¿à®à¯à® மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯ à®®à¯à®²à¯à®´à¯à®¤à®ªà¯à®ªà®à®²à®¾à®®à¯."
+msgstr ""
+"à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯à®à®©à¯ à®à¯à®±à®¿à®à¯à®à®¿à®à¯à® மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯ à®®à¯à®²à¯à®´à¯à®¤à®ªà¯à®ªà®à®²à®¾à®®à¯."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯ வரà¯à®¯à®±à¯à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ à®à¯à®©à®²à¯ வரà¯à®ªà®à®¤à¯à®¤à¯ வரà¯à®¯à®±à¯à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à®à¯à®©à®²à¯ வரà¯à®ªà®à®®à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯à®à®©à¯ பà¯à®°à¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà¯à®à¯à®à¯ à®à¯à®©à®²à¯ வரà¯à®ªà®à®¤à¯à®¤à¯ à®à®´à¯à®¤ à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "à®à®°à¯ %s ஸà¯à®à¯à®°à®®à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯ '%s' மறà¯à®±à¯à®®à¯ à®à¯à®©à®²à¯ வரà¯à®ªà®à¯à®à®®à¯ '%s' à®à®à®©à¯ திறà®à¯à®à®¿à®±à®¤à¯."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"à®à®°à¯ %s ஸà¯à®à¯à®°à®®à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯ '%s' மறà¯à®±à¯à®®à¯ à®à¯à®©à®²à¯ வரà¯à®ªà®à¯à®à®®à¯ '%s' à®à®à®©à¯ திறà®à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "à®à®²à®¿à®ªà¯à®ªà®¤à®¿à®µà¯"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "பிணà¯à®£à®©à®¿"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() தà¯à®²à¯à®µà®¿."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() தà¯à®²à¯à®µà®¿."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() தà¯à®²à¯à®µà®¿: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() தà¯à®²à¯à®µà®¿à®¯à¯à®±à¯à®±à®¤à¯."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() தà¯à®²à¯à®µà®¿."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "நà¯à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "தà¯à®à®° à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à®²à®¿ à®à¯à®µà¯à®¯à®®à¯ à®à®³à¯à®³à®®à¯à®µà®¾à® à®à®²à¯à®²à¯, à®à®à¯à®¨à®¿à®±à¯à®¤à¯à®¤à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "à®à®£à¯à®ªà¯à®ªà®¤à®¿à®²à¯ தà¯à®²à¯à®µà®¿: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT பà¯à®±à®ªà¯à®ªà®à¯à®à®¤à¯, வà¯à®³à®¿à®¯à¯à®±à¯à®à®¿à®±à®¤à¯.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®¯à¯ à®à¯à®¯à®²à¯ à®à®¿à®à¯à®©à®²à¯ %uà®à®²à¯ à®®à¯à®à®¿à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1638,7 +1672,7 @@ msgstr ""
" -s, --à®à¯à®µà¯à®¯à®à®®à¯=SERVER பà¯à®¯à®°à®¿à®à®ªà¯à®ªà®à¯à® à®à¯à®µà¯à®¯à®à®®à¯ à®à®£à¯à®à¯à®à®ªà¯à®ªà® வà¯à®£à¯à®à¯à®®à¯\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1649,50 +1683,62 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() தà¯à®²à¯à®µà®¿.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() தà¯à®²à¯à®µà®¿.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() தà¯à®²à¯à®µà®¿.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "பà¯à®³à¯à®³à®¿à®µà®¿à®µà®°à®¤à¯à®¤à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "தறà¯à®ªà¯à®¤à¯ பயனிலà¯à®³à¯à®³à®¤à¯: %u தà¯à®à¯à®¤à®¿à®à®³à¯ %s பà¯à®à¯à®à®³à¯ à®®à¯à®¤à¯à®¤à®®à®¾à® à®à¯à®£à¯à®à¯à®³à¯à®³à®¤à¯.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "வாழà¯à®à¯à®à¯ à®®à¯à®´à¯à®µà®¤à¯à®®à¯ à®à®¤à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯: %u தà¯à®à¯à®¤à®¿à®à®³à¯ %s பà¯à®à¯à®à®³à¯ à®®à¯à®¤à¯à®¤à®®à®¾à® à®à¯à®£à¯à®à¯à®³à¯à®³à®¤à¯.\n"
+msgstr ""
+"வாழà¯à®à¯à®à¯ à®®à¯à®´à¯à®µà®¤à¯à®®à¯ à®à®¤à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®¤à¯: %u தà¯à®à¯à®¤à®¿à®à®³à¯ %s பà¯à®à¯à®à®³à¯ à®®à¯à®¤à¯à®¤à®®à®¾à® à®à¯à®£à¯à®à¯à®³à¯à®³à®¤à¯.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "மாதிரி à®à®à¯à®¯à® à®
ளவà¯: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "à®à¯à®µà¯à®¯à®à®¤à¯à®¤à®¿à®©à¯ தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1700,7 +1746,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"பயனர௠பà¯à®¯à®°à¯: %s\n"
"பà¯à®°à®µà®²à®©à¯ பà¯à®¯à®°à¯: %s\n"
@@ -1712,12 +1758,12 @@ msgstr ""
"à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ à®®à¯à®²à®à¯à®à®³à¯: %s\n"
"à®à¯à®à¯à®à®¿: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "à®à¯à®°à¯à®à¯à®à®®à®¾à®© தà®à®µà®²à¯ பà¯à®±à¯ à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1756,22 +1802,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorts:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tà®à¯à®¯à®²à¯à®ªà®¾à®à¯à®à®¿à®²à¯à®³à¯à®³ விவரà®à¯à®à¯à®±à®¿à®ªà¯à®ªà¯à®à®³à¯: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à®®à¯à®²à®¤à¯à®¤à®¿à®©à¯ தà®à®µà®²à¯ பà¯à®± à®à®¯à®²à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1810,20 +1856,20 @@ msgstr ""
"\tபணà¯à®ªà¯à®à®³à¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "தà¯à®à¯à®¤à®¿ தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1840,12 +1886,12 @@ msgstr ""
"\tபணà¯à®ªà¯à®à®³à¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à®à®¿à®³à¯à®¯à®©à¯à®à¯ தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1860,12 +1906,12 @@ msgstr ""
"\tபணà¯à®ªà¯à®à®³à¯:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à®
à®à¯à®à¯ தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1882,22 +1928,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tவிவரà®à¯à®à¯à®±à®¿à®ªà¯à®ªà¯à®à®³à¯:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tà®à¯à®¯à®²à¯à®ªà®¾à®à¯à®à®¿à®²à¯à®³à¯à®³ விவரà®à¯à®à¯à®±à®¿à®ªà¯à®ªà¯à®à®³à¯: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "à®à®¿à®à¯à®à¯ தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1934,12 +1980,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à®®à¯à®² வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯ தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1968,12 +2014,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "மாதிரி தà®à®µà®²à¯ பà¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯.: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2004,26 +2050,80 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "தà¯à®²à¯à®µà®¿: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "மாதிரிய௠மà¯à®®à¯à®ªà®à¯à®¤à¯à®¤ à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "à®®à¯à®©à¯à®©à®¾à® à®à¯à®ªà¯à®ªà¯ à®®à¯à®à®¿à®¤à¯à®¤à®²à¯"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "தவறான பà¯à®°à®µà®²à®©à¯"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT பà¯à®±à®ªà¯à®ªà®à¯à®à®¤à¯, வà¯à®³à®¿à®¯à¯à®±à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2046,6 +2146,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2085,7 +2186,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2096,103 +2197,106 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "à®à®±à¯à®±à¯à®µà®¤à®±à¯à®à¯ à®à®°à¯ மாதிரி à®à¯à®ªà¯à®ªà®¿à®©à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®µà¯à®®à¯"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "à®à®²à®¿ à®à¯à®ªà¯à®ªà®¿à®©à¯ திறà®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "à®à®à¯à®à®°à®¿à®à¯à®à¯: à®à¯à®ªà¯à®ªà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ மாதிரி à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯à®à¯ வரà¯à®¯à®±à¯à®à¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à®à®¯à®à¯à®à®¿à®µà®¤à®±à¯à®à¯ நà¯à®à¯à®à®³à¯ à®à®°à¯ மாதிரி பà¯à®¯à®°à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "நà¯à®à¯à®à¯à®µà®¤à®±à¯à®à¯ நà¯à®à¯à®à®³à¯ à®à®°à¯ மாதிரி பà¯à®¯à®°à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ à®à®³à¯à®³à¯à®à¯ à®à¯à®à¯à®à®¿ மறà¯à®±à¯à®®à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®®à¯à®² வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯ à®à¯à®à¯à®à®¿ மறà¯à®±à¯à®®à¯ à®à®°à¯ à®®à¯à®²à®¤à¯à®¤à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "தà¯à®à¯à®¤à®¿ பà¯à®¯à®°à¯ மறà¯à®±à¯à®®à¯ விவாதà®à¯à®à®³à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "தà¯à®à¯à®¤à®¿ à®
à®à¯à®à®µà®£à¯à®¯à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "à®à®°à¯ à®à®¿à®à¯à®à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"à®à®°à¯ à®à®¿à®à¯à®à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "à®à®°à¯ à®®à¯à®²à®¤à¯à®¤à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
+msgstr ""
+"à®à®°à¯ à®®à¯à®²à®¤à¯à®¤à®¿à®±à¯à®à¯ à®®à¯à®²à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®à¯ à®à¯à®à®¾à®¤à¯. பà¯à®²à®¿à®¯à®©à¯ மதிபà¯à®ªà¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à®à®°à¯ à®
à®à¯à®à¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ விவரà®à¯à®à¯à®à¯à®à¯ பà¯à®¯à®°à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ தà¯à®±à¯à®ªà¯ பà¯à®¯à®°à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à®à®°à¯ à®®à¯à®²à®ªà¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ தà¯à®±à¯à®ªà¯ பà¯à®¯à®°à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ தà¯à®±à¯à®ªà¯ பà¯à®¯à®°à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "தவறான தà¯à®à¯à®¤à®¿ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à®à®°à¯ à®®à¯à®²à®ªà¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ தà¯à®±à¯à®ªà¯ பà¯à®¯à®°à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ à®à®³à¯à®³à¯à®à¯ à®à¯à®à¯à®à®¿ மறà¯à®±à¯à®®à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "தவறான à®à¯à®°à¯à®à¯à® à®à®³à¯à®³à¯à®à¯ à®
à®à¯à®à®µà®£à¯"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ தà¯à®±à¯à®ªà¯ பà¯à®¯à®°à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à®à®°à¯ à®®à¯à®²à®ªà¯ பà¯à®¯à®°à¯/ à®®à¯à®©à¯à®ªà®à¯à®à®®à¯ மறà¯à®±à¯à®®à¯ à®à®°à¯ தà¯à®±à¯à®ªà¯ பà¯à®¯à®°à¯ நà¯à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "நà¯à®à¯à®à®³à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ à®à®³à¯à®³à¯à®à¯ à®à¯à®à¯à®à®¿ மறà¯à®±à¯à®®à¯ à®à®°à¯ à®à®¿à®à¯à®à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à® வà¯à®£à¯à®à¯à®®à¯"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "தவறான à®à¯à®°à¯à®à¯à® à®à®³à¯à®³à¯à®à¯ à®
à®à¯à®à®µà®£à¯ à®à¯à®±à®¿à®ªà¯à®ªà¯à®à¯"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à®à®°à®¿à®¯à®¾à®© à®à®à¯à®à®³à¯ à®à¯à®±à®¿à®ªà¯à®ªà®¿à®à®ªà®à®µà®¿à®²à¯à®²à¯"
@@ -2275,44 +2379,44 @@ msgstr "à®à¯à®à¯à®à¯ தரவ௠à®à®±à¯à®± à®®à¯à®à®¿à®¯à®µà®¿à®²à¯
msgid "Not yet implemented.\n"
msgstr "à®à®©à¯à®©à¯à®®à¯ à®à¯à®¯à®²à¯à®ªà®à¯à®¤à¯à®¤à®ªà®à®µà®¿à®²à¯à®²à¯.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "PulseAudio à®à¯à®®à®¾à®©à¯ à®à®¯à®à¯à®à®µà®¿à®²à¯à®²à¯, à®
லà¯à®²à®¤à¯ à®
மரà¯à®µà¯ à®à¯à®®à®¾à®©à®¾à® à®à®¯à®à¯à®à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio daemon஠நிறà¯à®¤à¯à®¤ à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "à®à¯à®®à¯à®©à¯ பதிலளிà®à¯à® மறà¯à®à¯à®à®¿à®±à®¤à¯."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "autospawn பà¯à®à¯à®à¯ à®
ணà¯à® à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯."
@@ -2351,38 +2455,42 @@ msgstr ""
"() 0 à®
லà¯à®²à®¤à¯ வà¯à®±à¯à®°à¯ மதிபà¯à®ªà¯ < min_avail திரà¯à®®à¯à®ªà®¿à®¯à®¤à¯."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "à®à®à®ªà¯"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "High Fidelity Playback (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "High Fidelity Capture (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Telephony Duplex (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio à®à®²à®¿ à®à¯à®µà¯à®¯à®à®®à¯"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯ à®à®¾à®¤à®©à®à¯à®à®³à¯"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à®à®³à¯à®³à¯à®à¯ à®à®¾à®¤à®©à®à¯à®à®³à¯"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@à®à®²à¯ à®à®à®¿à®¯à¯"
@@ -2446,133 +2554,159 @@ msgstr "à®à®®à¯à®ªà®¿à®³à®¿à®à®ªà¯à®¯à®°à¯"
msgid "No Amplifier"
msgstr "à®à®®à¯à®ªà¯à®³à®¿à®à®ªà¯à®¯à®°à¯ à®à®²à¯à®²à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "பà¯à®¸à¯à®à¯"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "பà¯à®¸à¯à®à¯ à®à®²à¯à®²à¯"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à®
னலாà®à¯ ஹà¯à®à¯à®à®ªà¯à®©à¯à®à®³à¯"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à®
னலாà®à¯ à®à®³à¯à®³à®¿à®à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à®
னலாà®à¯ à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à®
னலாà®à¯ லà¯à®©à¯à®à®©à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à®
னலாà®à¯ à®°à¯à®à®¿à®¯à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à®
னலாà®à¯ வà¯à®à®¿à®¯à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à®
னலாà®à¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à®
னலாà®à¯ ஹà¯à®à¯à®à®ªà¯à®©à¯à®à®³à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à®
னலாà®à¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯ (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à®
னலாà®à¯ à®®à¯à®©à¯ வà¯à®³à®¿à®ªà¯à®ªà®¾à®à¯"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à®
னலாà®à¯ ஸà¯à®à®¿à®°à®¿à®¯à¯"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à®
னலாà®à¯ à®®à¯à®©à¯"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à®
னலாà®à¯ ஸà¯à®à®¿à®°à®¿à®¯à¯"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Analog Surround 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Analog Surround 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Analog Surround 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Analog Surround 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Analog Surround 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Analog Surround 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Analog Surround 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Analog Surround 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Analog Surround 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Analog Surround 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Analog Surround 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "Digital Stereo (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "Digital Surround 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "Digital Surround 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Digital Surround 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "Digital Stereo (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Analog Mono Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Analog Stereo Duplex"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Digital Stereo Duplex (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "à®à¯à®±à¯à®¨à¯à®¤ à®
லà¯à®µà®°à®¿à®à¯ à®à®®à¯à®®à®¿à®à¯à®à®°à¯"
diff --git a/po/te.po b/po/te.po
index ca99a27..a861dda 100644
--- a/po/te.po
+++ b/po/te.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.te\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-12 04:07+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-11-12 13:10+0530\n"
"Last-Translator: Krishna Babu K <kkrothap at redhat.com>\n"
"Language-Team: Telugu <en at li.org>\n"
@@ -15,7 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
"\n"
"\n"
"\n"
@@ -24,12 +25,12 @@ msgstr ""
"\n"
"\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -41,7 +42,7 @@ msgstr ""
"సాదారణà°à°à°¾ యిది ALSA à°¡à±à°°à±à°µà°°à± '%s' à°¨à°à°¦à°²à°¿ à°¬à°à± à°à°¾à°µà°à±à°à±à°¨à±. దయà°à±à°¸à°¿ à°¦à±à°¨à°¿à°¨à°¿ ALSA à°
à°à°¿à°µà±à°¦à±à°¦à°¿ à°à°¾à°°à±à°²à°à± "
"నివà±à°¦à°¿à°à°à±à°®à±."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -53,7 +54,7 @@ msgstr ""
"సాదారణà°à°à°¾ యిది ALSA à°¡à±à°°à±à°µà°°à± '%s' à°¨à°à°¦à± à°¬à°à± à°à°¾à°µà°à±à°à±à°¨à± . దయà°à±à°¸à°¿ à°¦à±à°¨à°¿à°¨à°¿ ALSA à°
à°à°¿à°µà±à°¦à±à°¦à°¿à°à°¾à°°à±à°²à° "
"నివà±à°¦à°¿à°à°à±à°®à±."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -97,11 +98,11 @@ msgstr "NULL సిà°à°à± à°à±à°²à°¾à°à±âà°à±à°¯à°¬à°¡à°¿à°à°¦à°¿"
msgid "Null Output"
msgstr "Null à°
à°µà±à°à±à°ªà±à°à±"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "à°
à°à°¤à°°à±à°à°¤ à°à°¡à°¿à°¯à±"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "à°®à±à°¡à±à°®à±"
@@ -117,246 +118,267 @@ msgstr "à°à±à°¤à±à°¤ dl à°²à±à°¡à°°à± à°à±à°à°¾à°¯à°¿à°à°à±à°à°²à±
msgid "Failed to add bind-now-loader."
msgstr "bind-now-loader à°à°¤à°à±à°¯à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "à°¸à°à°à±à°¤à°®à± %s à°ªà±à°à°¦à°¿à°¨à°¦à°¿."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "నిషà±à°à±à°°à°®à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "వినియà±à°à°¦à°¾à°°à°¿ '%s'నౠà°à°¨à±à°à±à°¨à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "సమà±à°¹à° '%s' à°à°¨à±à°à±à°¨à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "వినియà±à°à°¦à°¾à°°à°¿ '%s' (UID %lu) మరియౠసమà±à°¹à°®à± '%s' (GID %lu) à°à°¨à°¬à°¡à°¿à°¨à°µà°¿."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "వినియà±à°à°¦à°¾à°°à°¿ '%s' మరియౠసమà±à°¹à°®à± '%s' à°¯à±à°à±à° GID సరితà±à°à°²à±à°¦à±."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "వినియà±à°à°¦à°¾à°°à°¿ '%s' à°¯à±à°à±à° నివాస à°¡à±à°°à±à°à±à°à°°à± '%s' à°à°¾à°¦à±, వదిలివà±à°¯à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "'%s' à°¸à±à°·à±à°à°¿à°à°à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "సమà±à°¹ à°à°¾à°¬à°¿à°¤à°¾ మారà±à°à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "GID మారà±à°à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "UID మారà±à°à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "root à°
à°¨à±à°®à°¤à±à°²à± విà°à°¯à°µà°à°¤à°à°à°¾ తిసివà±à°¯à°¬à°¡à°¿à°¨à°¾à°¯à°¿."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "à° à°ªà±à°²à°¾à°à±âఫాఠనà°à°¦à± సిసà±à°à°®à± తరహా à°°à±à°¤à°¿ మదà±à°¦à°¤à±à°¯à°¬à°¡à°¦à±."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "à°à°¦à±à°¶ వరà±à°¸à°¨à± పారà±à°¶à± à°à±à°¯à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "à°¡à±à°®à±à°¨à± నడà±à°à±à° à°²à±à°¦à±"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "à°¡à±à°®à±à°¨à± PID %u వలౠనడà±à°à±à°à±à°¨à±à°¨à°¦à°¿"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "à°¡à±à°®à±à°¨à± à°à°à°ªà±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "à° à°ªà±à°°à±à°à±à°°à°¾à°®à± root లా నడà±à°ªà°µà°²à°¸à°¿à°à°¦à°¿ à°à°¾à°¦à± (--system à°¤à±à°²à°¿à°ªà°¿à°¤à± తపà±à°ª)"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "Root à°
à°¨à±à°®à°¤à±à°²à± à°
వసరమà±."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "--start సిసà±à°à°®à± à°¸à°à°à°µà°¾à°² à°¦à±à°µà°¾à°°à°¾ మదà±à°¦à°¤à±à°¯à°¬à°¡à°¦à±."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "సిసà±à°à°®à± à°®à±à°¡à± à°¨à°à°¦à± నడà±à°ªà±à°¤à±à°à°¦à°¿, à°
యితౠ--disallow-exit à°
మరà±à°à°²à±à°¦à±!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "సిసà±à°à°®à± à°°à±à°¤à°¿à°¨à°à°¦à± నడà±à°à±à°à±à°¨à±à°¨à°¦à°¿, à°
యితౠ--disallow-module-loading à°
మరà±à°à°²à±à°¦à±!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "సిసà±à°à°®à± à°°à±à°¤à°¿à°¨à°à°¦à± నడà±à°ªà±à°à±à°¨à±à°¨à°¦à°¿, బలవà°à°¤à°à°à°¾ SHM à°°à±à°¤à°¿à°¨à°¿ à°
à°à±à°¤à°¨à°®à± à°à±à°¸à±à°¤à±à°à°¦à°¿!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "సిసà±à°à°®à± à°°à±à°¤à°¿à°¨à°à°¦à± నడà±à°à±à°à±à°¨à±à°¨à°¦à°¿, బలవà°à°¤à°à°à°¾ నిషà±à°à±à°°à°®à°£ à°µà±à°§à°¾ సమయానà±à°¨à°¿ à°
à°à±à°¤à°¨à°®à± à°à±à°¯à±à°à±à°¨à±à°¨à°¦à°¿!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "stdio à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "à°ªà±à°°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "à°¡à±à°®à±à°¨à± à°ªà±à°°à°¾à°°à°à°à° విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "à°¡à±à°®à±à°¨à± à°ªà±à°°à°¾à°°à°à°à°®à± సఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() విఫలమà±à°à°¦à°¿: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "à°à°¦à°¿ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "నిరà±à°µà°°à±à°¤à°¨ à°¹à±à°¸à±à°à±: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "నిరà±à°µà°°à±à°¤à°¨ CFLAGS: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "à°¹à±à°¸à±à°à±à°¨à± నడà±à°ªà±à°à±à°¨à±à°¨à°¦à°¿: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUలనౠà°à°¨à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "à°ªà±à°à± పరిమాణమౠ%lu à°¬à±à°à±à°²à±"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "Valgrind మదà±à°¦à°¤à±à°¤à± నిరà±à°µà°°à±à°¤à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿: à°
à°µà±à°¨à±"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "Valgrind మదà±à°¦à°¤à±à°¤à± నిరà±à°µà°°à±à°¤à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿: à°²à±à°¦à±"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "valgrind à°°à±à°¤à°¿à°¨à°à°¦à± నడà±à°ªà±à°à±à°¨à±à°¨à°¦à°¿: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "à°¹à±à°¸à±à°à±à°¨à± నడà±à°ªà±à°à±à°¨à±à°¨à°¦à°¿: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "à°à°ªà±à°à°¿à°®à±à°à±à°¡à± à°¬à±à°²à±à°¡à±: à°
à°µà±à°¨à±"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "à°à°ªà±à°à°¿à°®à±à°à±à°¡à± à°¬à±à°²à±à°¡à±: à°à°¾à°¦à±"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG నిరà±à°µà°à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿, à°
à°¨à±à°¨à°¿ à°¸à±à°¥à°¿à°°à°°à°¾à°¶à±à°²à± à°
à°à±à°¤à°¨à°®à±à°¨à°µà°¿."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH నిరà±à°µà°à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿, ఫాసà±à°à± పాతౠసà±à°¥à°¿à°°à°°à°¾à°¶à±à°²à± మాతà±à°°à°®à± à°
à°à±à°¤à°¨à°®à±à°¨à°µà°¿."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "à°
à°¨à±à°¨à°¿ à°¸à±à°¥à°¿à°°à°°à°¾à°¶à±à°²à± à°à±à°¤à°¨à°®à±à°¨à°µà°¿."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "మిషనౠID à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "మిషనౠID %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "à°¸à±à°·à°¨à± ID %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "à°°à°¨à±âà°à±à°®à± à°¡à±à°°à±à°à±à°à°°à±à°¨à± à°µà±à°ªà°¯à±à°à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿ %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "à°¸à±à°¥à°¿à°¤à°¿ à°¡à±à°°à±à°à±à°à°°à±à°¨à± à°µà±à°ªà°¯à±à°à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿ %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "మాడà±à°¯à±à°³à±à°³ à°¡à±à°°à±à°à±à°à°°à± %s à°µà±à°ªà°¯à±à°à°¿à°¸à±à°¤à±à°à°¦à°¿."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "సిసà±à°à°®à± à°°à±à°¤à°¿à°¨à°à°¦à± à°µà±à°ªà°¯à±à°à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -370,41 +392,41 @@ msgstr ""
"సిసà±à°à°®à± à°°à±à°¤à°¿ à°
à°¨à±à°¨à°¦à°¿ సరà±à°¨à°à±à°µà°à°à°¿à°¦à°¿ à°¯à±à°à°¦à±à°à± à°à°¾à°¦à± వివరణ à°à±à°°à°à± దయà°à±à°¸à°¿ యిà°à±à°à°¡ à°à°¦à°µà°à°¡à°¿ http://"
"pulseaudio.org/wiki/WhatIsWrongWithSystemMode"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "తాà°à°¾ à°
ధిà°-à°¤à±à°µà±à°°à°¤ à°à°¾à°²à°¸à±à°à°¿à°à°²à± à°
à°à°¦à±à°¬à°¾à°à±à°²à± à°µà±à°¨à±à°¨à°¾à°¯à°¿! బానౠà°à°ªà°à±à°à±!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "మితà±à°°à°®à°¾, నౠà°à±à°°à±à°¨à°²à± à°à±à°¡à°¿à°ªà±à°¯à°¿à°à°¦à°¿! à°
ధిà°-à°¤à±à°µà±à°°à°¤ à°à°¾à°²à°¸à±à°à°à°¿à°²à°¨à± à°à±à°¤à°¨à°®à± à°à±à°¯à°®à°¨à°¿ à°¸à±à°à°¿à°à°à°¡à°®à±à°¨à°¦à°¿!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "à°¡à±à°®à±à°¨à± సిదà±à°¦à°®à±à°à±à°¯à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "à°à°µà°¿à°§à°®à±à°¨ మాడà±à°¯à±à°³à±à°³à± à°²à±à°¡à°µà°à±à°à°¡à°¾ à°¡à±à°®à±à°¨à± à°ªà±à°°à°¾à°°à°à°à°®à±, పనిà°à±à°¯à±à°à°à± తిరసà±à°à°°à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "à°¡à±à°®à±à°¨à± à°ªà±à°°à°¾à°°à°à°à°®à± à°ªà±à°°à±à°¤à±à°¨à°¦à°¿."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "à°¡à±à°®à±à°¨à± à°®à±à°¸à°¿à°µà±à°¤ సిదà±à°¦à°®à±à°à±à°¯à°¬à°¡à°¿à°à°¦à°¿."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "à°¡à±à°®à±à°¨à± à°
à°à°¤à°®à±à°à±à°¯à°¬à°¡à°¿à°à°¦à°¿."
@@ -661,72 +683,77 @@ msgstr "à°¤à±à°¸à°¿à°µà±à°¤ à°¹à±à°à±à°à°°à°¿à°: %s\n"
msgid "Path: %s\n"
msgstr "పాతà±: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ లాà°à± à°²à°à±à°·à±à°¯à°®à± '%s'."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ లాà°à± à°¸à±à°¥à°¾à°¯à°¿ '%s'."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ à°ªà±à°¨à°à°µà±à°¦à°¾à°¹à°°à°£ పదà±à°¦à°¤à°¿ '%s'."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ rlimit '%s'."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit à°
à°¨à±à°¨à°¦à°¿ à° à°ªà±à°²à°¾à°à±âఫాఠనà°à°¦à± మదà±à°¦à°¤à°¿à°µà±à°µà°¬à°¡à°¦à±."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ మాదిరి ఫారà±à°®à°¾à°à± '%s'."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ మాదిరి à°°à±à°à± '%s'."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ మాదిరి à°à°¾à°¨à°³à±à°³à± '%s'."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ à°à°¾à°¨à°²à± మాపౠ'%s'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ à°®à±à°à±à°à°²à± à°¸à°à°à±à°¯ '%s'."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ à°®à±à°à±à° పరిమాణమౠ'%s'."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ సాదా à°¸à±à°¥à°¾à°¯à°¿ '%s'."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] à°à±à°²à±à°²à°¨à°¿ మాదిరి à°°à±à°à± '%s'."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "à°à°à±à°¤à±à°à°°à°£ దసà±à°¤à±à°°à°®à±à°¨à± à°¤à±à°°à±à°à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -734,7 +761,7 @@ msgstr ""
"à°¤à±à°²à±à°ªà°¬à°¡à°¿à°¨ à°
à°ªà±à°°à°®à±à°¯ à°ªà±à°°à°¾à°¸à°¾à°°à°®à°¾à°°à±à°à° మాపౠతà±à°²à±à°ªà°¬à°¡à°¿à°¨ à°
à°ªà±à°°à°®à±à°¯ à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à°à°®à±à°² à°à°¨à±à°¨à°¾ విà°à°¿à°¨à±à°¨ à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à°à°®à±à°² "
"à°¸à°à°à±à°¯à°¨à± à°à°²à°¿à°à°¿à°µà±à°à°¦à°¿."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### à°à°à±à°¤à±à°à°°à°£ దసà±à°¤à±à°°à°®à±à°¨à±à°à°¡à°¿ à°à°¦à±à°µà±à°®à±: %s ###\n"
@@ -780,8 +807,8 @@ msgid "Rear Right"
msgstr "à°µà±à°¨à±à° à°à±à°¡à°¿à°µà±à°ªà±"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "à°¤à°à±à°à±à°µ తరà°à±à°¦à°¨à° à°µà±à°²à±à°µà°°à°¿à°à°à±à°¨à°¦à°¿"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1126,191 +1153,191 @@ msgstr "XOpenDisplay() విఫలమà±à°à°¦à°¿"
msgid "Failed to parse cookie data"
msgstr "à°à±à°à± à°¡à°¾à°à°¾ పారà±à°¶à± à°à±à°¯à±à°à°à± విఫలమà±à°à°¦à°¿"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "à°à°à±à°¤à±à°à°°à°£ దసà±à°¤à±à°°à°®à± '%s' à°¤à±à°°à±à°µà±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "à° à°à±à°à± à°²à±à°¡à°µà°²à±à°¦à±. à°²à±à°à±à°à°¡à°¾ à°
à°¨à±à°¸à°à°§à°¾à°¨à°®à°à±à°à°à± à°ªà±à°°à°¯à°¤à±à°¨à°¿à°¸à±à°¤à±à°à°¦à°¿."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "à°¤à±à°²à°¿à°¯à°¨à°¿ à°ªà±à°¡à°¿à°à°¿à°à°ªà± à°à±à°°à°à± à°¸à°à°¦à±à°¶à°®à± à°¸à±à°µà±à°à°°à°¿à°à°à°¿à°à°¦à°¿ '%s'"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "à°¸à±à°à±à°°à±à°®à±âనౠడà±à°°à±à°¯à°¿à°¨à± à°à±à°¯à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "à°ªà±à°²à±à°¬à±à°¯à°¾à°à± à°¸à±à°à±à°°à±à°®à± à°¡à±à°°à±à°¯à°¿à°¨à± à°
యినది."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "à°¸à±à°µà°¿à°à°à± à°
à°¨à±à°¸à°à°§à°¾à°¨à°®à±à°¨à± à°à°à°¡à°à°à±à°à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "à°¸à±à°à±à°°à±à°®à± సమరà±à°§à°µà°à°¤à°à°à°¾ à°¸à±à°·à±à°à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "బఫరౠపà±à°°à°®à°¾à°£à°¾à°²à±: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "బఫరౠపà±à°°à°®à°¾à°£à°¾à°²à±: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "సాదారణ విశదà±à°à°°à°£(à°¸à±à°ªà±à°à±) '%s' à°µà±à°ªà°¯à±à°à°¿à°¸à±à°¤à±à°à°¦à°¿, à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à°à° మాపౠ'%s'."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "పరిà°à°°à°®à± %s (%u, %ssuspended) à°à± à°
à°¨à±à°¸à°à°§à°¾à°¨à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "à°¸à±à°à±à°°à±à°®à± à°¦à±à°·à°®à±: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "à°¸à±à°à±à°°à±à°®à± పరిà°à°°à°®à± à°
à°°à±à°¦à°¾à°à°¤à°°à°®à±à°à°¾ నిలిపివà±à°¯à°¬à°¡à°¿à°à°¦à°¿.%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "à°¸à±à°à±à°°à±à°®à± పరిà°à°°à°®à± తిరిà°à°¿à°à±à°¨à°¸à°¾à°à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿.%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "à°¸à±à°à±à°°à±à°®à± à°¤à°à±à°à±à°µà°à°¾à°¨à°¡à±à°à±à°à±à°¨à±à°¨à°¦à°¿.%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "à°¸à±à°à±à°°à±à°®à± మిà°à°à°¿à°¨à°¡à±à°à±à°à±à°¨à±à°¨à°¦à°¿.%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "à°¸à±à°à±à°°à±à°®à± à°ªà±à°°à°¾à°°à°à°à°®à±à°à°¦à°¿.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "à°¸à±à°à±à°°à±à°®à± పరిà°à°°à°®à± %s (%u, %ssuspended) à°à± à°à°¦à±à°ªà°¬à°¡à°¿à°à°¦à°¿.%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "à°à°¾à°¦à± "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "à°¸à±à°à±à°°à±à°®à± బఫరౠయాà°à±à°°à°¿à°¬à±à°¯à±à°à±à°²à± మారà±à°à°¬à°¡à°¿à°¨à°µà°¿.%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "à°
à°¨à±à°¸à°à°§à°¾à°¨à°®à± à°à°°à±à°ªà°¡à°¿à°¨à°¦à°¿.%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "à°
à°¨à±à°¸à°à°§à°¾à°¨à°®à± à°µà±à°«à°²à±à°¯à°®à±: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "EOF à°ªà±à°à°¦à°¿à°à°¦à°¿."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "à°¸à°à°à±à°¤à°®à± à°ªà±à°à°¦à°¿à°¨à°¦à°¿, నిషà±à°à±à°°à°®à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "à°²à±à°à±à°¨à±à°¸à±à°¨à°¿ à°ªà±à°à°¦à±à°à°²à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "సమయà°: %0.3f à°¸à±à°à°¨à±; à°²à±à°à±à°¨à±à°¸à±: %0.0f usec."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1362,10 +1389,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1424,7 +1455,7 @@ msgstr ""
" --file-format=FFORMAT Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1435,168 +1466,169 @@ msgstr ""
"libpulse తౠనిరà±à°µà°°à±à°¤à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿ %s\n"
"libpulse లిà°à°à±à°¨à°¦à°¿ %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "à°à±à°²à±à°²à°¨à°¿ à°à°à±à°·à°¿à°¦à°¾à°°à°¿ నామమౠ'%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "à°à±à°²à±à°²à°¨à°¿ à°¸à±à°à±à°°à±à°®à± నామమౠ'%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "à°à±à°²à±à°²à°¨à°¿ à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపౠ'%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "à°à±à°²à±à°²à°¨à°¿ à°²à±à°à±à°¨à±à°¸à± విశదà±à°à°°à°£à°®à± '%s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "à°à±à°²à±à°²à°¨à°¿ à°à°¾à°°à±à°¯à°à±à°°à°®à°®à± సమయ విశదà±à°à°°à°£ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "à°à±à°²à±à°²à°¨à°¿ à°²à°à±à°·à°£à°®à± '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "à°¤à±à°²à°¿à°¯à°¨à°¿ à°«à±à°²à± ఫారà±à°®à°¾à°à± %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "à°à±à°²à±à°²à°¨à°à±à°µà°à°à°¿ మాదిరి విశదà±à°à°°à°£"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "à°à°¾à°²à°¾ à°¯à±à°à±à°à±à°µ à°à°°à±à°à±à°®à±à°à°à±à°²à±."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "దసà±à°¤à±à°°à°®à± à°à±à°°à°à± మాదిరి సమాà°à°¾à°°à°®à± à°à°¨à°¿à°¯à°¿à°à°ªà°à±à°¯à±à°à°²à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "à°à°¡à°¿à°¯à± à°«à±à°²à±à°¨à± à°¤à±à°°à±à°µà±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "à°¹à±à°à±à°à°°à°¿à°: à°¤à±à°²à±à°ªà°¬à°¡à°¿à°¨ మాదిరి విశదà±à°à°°à°£ దసà±à°¤à±à°°à°®à±à°¨à±à°à°¡à°¿ à°µà°à±à°à± విశదà±à°à°°à°£à°¤à± తిరిà°à°¿à°µà±à°°à°¾à°¯à°¬à°¡à±à°¤à±à°à°¦à°¿."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "దసà±à°¤à±à°°à°®à±à°¨à±à°à°¡à°¿ మాదిరి విశదà±à°à°°à°£à°¨à± నిరà±à°§à°¾à°°à°¿à°à°à±à°à°²à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "à°¹à±à°à±à°à°°à°¿à°: దసà±à°¤à±à°°à°®à±à°¨à±à°à°¡à°¿ à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపౠనిరà±à°§à°¾à°°à°¿à°à°à±à°à°²à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపౠమాదిరి విశదà±à°à°°à°£à°¿à°¤à± సరిపà±à°²à±à°à°²à±à°¦à±"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "à°¹à±à°à±à°à°°à°¿à°: à°ªà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపà±âనౠదసà±à°¤à±à°°à°®à±à°à± à°µà±à°°à°¾à°¯à±à°à°²à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "%s à°¸à±à°à±à°°à±à°®à±âనౠమాదిరి విశదà±à°à°°à°£ '%s' మరియౠపà±à°°à°¸à°¾à°°à°®à°¾à°°à±à° మాపౠ'%s'తౠతà±à°°à±à°à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "à°°à°¿à°à°¾à°°à±à°¡à°¿à°à°à±"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "à°ªà±à°²à±à°¬à°¾à°à±"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "à°
à°°à±à°§à°¾à°à°¤à°°à°¨à°¿à°²à±à°ªà±à°¦à°² à°µà±à°«à°²à±à°¯à°: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "తిరిà°à°¿à°à±à°¨à°¸à°¾à°à°¿à°à°ªà± à°µà±à°«à°²à±à°¯à°®à±: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "à°¹à±à°à±à°à°°à°¿à°: శబà±à°§à°ªà± à°¸à±à°µà°¿à° à°¸à±à°¥à°¾à°¨à°¿à°à° à°à°¾à°¦à±, à°
à°°à±à°§à°¾à°à°¤à°°à°¨à°¿à°²à±à°ªà±à°¦à°² à°à°¾à°µà°¡à°à°²à±à°¦à±.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "à°
à°¨à±à°¸à°à°§à°¾à°¨à°®à± à°µà±à°«à°²à±à°¯à°®à±: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "SIGINT à°ªà±à°à°¦à°¿à°à°¦à°¿, నిషà±à°à±à°°à°®à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "à°¹à±à°à±à°à°°à°¿à°: à°à±à°²à±à°¡à± à°à°¾à°°à±à°¯à°à±à°°à°®à°®à± à°¸à°à°à±à°¤à°®à± %u à°¦à±à°µà°¾à°°à°¾ à°
à°à°¤à°®à±à°à±à°¯à°¬à°¡à°¿à°à°¦à°¿\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1615,7 +1647,7 @@ msgstr ""
"to\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1626,50 +1658,61 @@ msgstr ""
"libpulse తౠనిరà±à°µà°°à±à°¤à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿ %s\n"
"libpulse తౠనిరà±à°µà°°à±à°¤à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿ %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() విఫలమà±à°à°¦à°¿.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() విఫలమà±à°à°¦à°¿.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() విఫలమà±à°à°¦à°¿.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "à°à°£à°¾à°à°à°¾à°²à°¨à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "à°ªà±à°°à°¸à±à°¤à±à°¤à° à°µà±à°ªà°¯à±à°à°à°²à±à°µà±à°à°¦à°¿: %u à°¬à±à°²à°¾à°à±âలౠ%s à°¬à±à°à±à°²à°¨à± à°®à±à°¤à±à°¤à°à°à°¾ à°à°²à°¿à°à°¿ à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "à°®à±à°¤à±à°¤à° à°²à±à°«à±âà°à±à°®à±à°²à± à°à±à°à°¾à°¯à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿: %u à°¬à±à°²à°¾à°à±à°²à± %s à°¬à±à°à±à°²à°¨à± à°®à±à°¤à±à°¤à°à°à°¾ à°à°²à°¿à°à°¿à°µà±à°¨à±à°¨à°¾à°¯à°¿.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "మాదిరి à°à±à°¯à°¾à°à°¿ పరిమాణమà±: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "à°¸à±à°µà°¿à° సమాà°à°¾à°°à°®à±à°¨à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1677,7 +1720,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"వినియà±à°à°¦à°¾à°°à°¿ నామమà±: %s\n"
"à°¹à±à°¸à±à°à± నామమà±: %s\n"
@@ -1689,12 +1732,12 @@ msgstr ""
"à°
à°ªà±à°°à°®à±à°¯ à°®à±à°²à°®à±: %s\n"
"à°à±à°à±: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "సిà°à°à± సమాà°à°¾à°°à°®à±à°¨à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1733,22 +1776,22 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tà°ªà±à°°à±à°à±à°²à±:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tà°à±à°°à°¿à°¯à°¾à°¶à±à°² à°ªà±à°°à±à°à±: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "à°®à±à°²à°®à± సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1787,20 +1830,20 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "వరà±à°¤à°¿à°à°à°¦à±"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "మాడà±à°¯à±à°²à± సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1817,12 +1860,12 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "à°à°à±à°·à°¿à°¦à°¾à°°à°¿ సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°²à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1837,12 +1880,12 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "à°à°¾à°°à±à°¡à± సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1859,22 +1902,22 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tà°ªà±à°°à±à°«à±à°²à±à°¸à±:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tà°à±à°°à°¿à°¯à°¾à°¶à±à°² à°ªà±à°°à±à°«à±à°²à±: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "సిà°à°à± à°à°¨à±à°ªà±à°à± సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1911,12 +1954,12 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "à°®à±à°²à°ªà± à°
à°µà±à°à±à°ªà±à°à± సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1945,12 +1988,12 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "మాదిరి సమాà°à°¾à°°à°®à± à°ªà±à°à°¦à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1981,26 +2024,80 @@ msgstr ""
"\tà°²à°à±à°·à°£à°¾à°²à±:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "à°µà±à°«à±à°²à±à°¯à°®à±: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "మాదిరి à°
à°ªà±âà°²à±à°¡à± à°à±à°¯à±à°à°à± విఫలమà±à°à°¦à°¿: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "దసà±à°¤à±à°°à°®à± à°¯à±à°à±à° à°
పరిపà°à±à°µ à°®à±à°à°¿à°à°ªà±"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "à°à±à°²à±à°²à°¨à°¿ à°¸à±à°µà°¿à°"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "SIGINT à°ªà±à°à°¦à°¿à°à°¦à°¿, నిషà±à°à±à°°à°®à°¿à°à°à±à°à±à°¨à±à°¨à°¦à°¿."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2023,6 +2120,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2062,7 +2160,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2073,103 +2171,106 @@ msgstr ""
"libpulse తౠనిరà±à°µà°°à±à°¤à°¿à°à°à°¬à°¡à°¿à°à°¦à°¿%s\n"
"libpulse తౠలిà°à°à±à°à±à°¯à°¬à°¡à°¿à°à°¦à°¿ %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "à°²à±à°¡à±à°µà±à°µà±à°à°à± దయà°à±à°¸à°¿ మాదిరి దసà±à°¤à±à°°à°®à±à°¨à± à°¤à±à°²à±à°ªà±à°®à±"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "శబà±à°¦à°ªà± దసà±à°¤à±à°°à°®à±à°¨à± à°¤à±à°°à±à°µà±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "à°¹à±à°à±à°à°°à°¿à°: దసà±à°¤à±à°°à°®à±à°¨à±à°à°¡à°¿ మాదిరి విశదà±à°à°°à°£à°¨à± నిరà±à°£à°¯à°¿à°à°à±à°à°à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "à°ªà±à°²à± à°à±à°¯à±à°à°à± à°®à±à°°à± మాదిరి నామమà±à°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "à°¤à±à°²à°à°¿à°à°à±à°à°à± à°®à±à°°à± మాదిరి నామమà±à°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "à°®à±à°°à± సిà°à°à± à°à°¨à±à°ªà±à°à± విషయసà±à°à°¿à° మరియౠసిà°à°à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "à°®à±à°°à± à°®à±à°²à°®à± à°
à°µà±à°à±à°ªà±à°à± విషయసà±à°à°¿à° మరియౠమà±à°²à°®à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "à°®à±à°°à± మాడà±à°¯à±à°²à± నామమౠమరియౠà°à°°à±à°à±à°®à±à°à°à±à°²à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "à°®à±à°°à± మాడà±à°¯à±à°²à± విషయసà±à°à°¿à° à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
-msgstr "à°®à±à°°à± à°µà±à° సిà°à°à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
+msgstr ""
+"à°®à±à°°à± à°µà±à° సిà°à°à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
-msgstr "à°®à±à°°à± à°µà±à° à°®à±à°²à°®à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
+msgstr ""
+"à°®à±à°°à± à°µà±à° à°®à±à°²à°®à± à°à°¨à±à°¨à°¾ à°¯à±à°à±à°à±à°µ à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¡à°à°ªà±à°µà°à±à°à±. à°®à±à°°à± à°¬à±à°²à°¿à°¯à°¨à± విలà±à°µà°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "à°®à±à°°à± à°à°¾à°°à±à°¡à± నామమà±/విషయసà±à°à°¿à° మరియౠపà±à°°à±à°«à±à°²à± నామమౠతà±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "à°®à±à°°à± సిà°à°à±â నామమà±/విషయసà±à°à°¿à° మరియౠపà±à°°à±à°«à±à°²à± నామమౠతà±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "à°®à±à°°à± à°®à±à°²à°®à± నామమà±/విషయసà±à°à°¿à° మరియౠపà±à°°à±à°«à±à°²à± నామమౠతà±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "à°®à±à°°à± సిà°à°à± నామమà±/విషయసà±à°à°¿à° మరియౠపà±à°°à±à°«à±à°²à± నామమౠతà±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "à°à±à°²à±à°²à°¨à°à±à°µà°à°à°¿ వాలà±à°¯à±à°®à± విశదà±à°à°°à°£"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "à°®à±à°°à± à°®à±à°²à°®à± నామమà±/విషయసà±à°à°¿à° మరియౠపà±à°°à±à°«à±à°²à± నామమౠతà±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "à°®à±à°°à± సిà°à°à± à°à°¨à±à°ªà±à°à± విషయసà±à°à°¿à° మరియౠవాలà±à°¯à±à°®à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "à°à±à°²à±à°²à°¨à°¿ సిà°à°à± యినà±à°ªà±à°à± విషయసà±à°à°¿à°"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "à°®à±à°°à± సిà°à°à±â నామమà±/విషయసà±à°à°¿à° మరియౠమà±à°¯à±à°à± à°¬à±à°²à°¿à°¯à°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿ à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "à°®à±à°°à± à°®à±à°²à°ªà± నామమà±/విషయసà±à°à°¿à° మరియౠమà±à°¯à±à°à± à°¬à±à°²à°¿à°¯à°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "à°®à±à°°à± సిà°à°à± à°à°¨à±à°ªà±à°à± విషయసà±à°à°¿à° మరియౠమà±à°¯à±à°à± à°¬à±à°²à°¿à°¯à°¨à± à°¤à±à°²à±à°ªà°µà°²à°¸à°¿à°µà±à°à°¦à°¿"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "à°à±à°²à±à°²à°¨à°à±à°µà°à°à°¿ సిà°à°à± యినà±à°ªà±à°à± విషయసà±à°à°¿à° విశదà±à°à°°à°£"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "à°à°à±à°µà°à°à°¿ విలà±à°µà±à°¨ à°à°¦à±à°¶à°®à± à°¤à±à°²à±à°ªà°¬à°¡à°²à±à°¦à±."
@@ -2252,44 +2353,44 @@ msgstr "à°à±à°à± à°¡à°¾à°à°¾ à°²à±à°¡à± à°à±à°¯à±à°à°à± విఫ
msgid "Not yet implemented.\n"
msgstr "à°à°à°à°¾ యిà°à°ªà±à°²à°¿à°®à±à°à°à± à°à±à°¯à°²à±à°¦à±\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "PulseAudio à°¡à±à°®à±à°¨à± నడà±à°à±à°à°²à±à°¦à±, à°²à±à°¦à°¾ à°¸à±à°·à°¨à± à°¡à±à°®à±à°¨à± వలౠనడà±à°à±à°à°²à±à°¦à±."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio à°¡à±à°®à±à°¨à± నాశనఠà°à±à°¯à±à°à°²à± విఫలమà±à°à°¦à°¿."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "à°¡à±à°®à±à°¨à± à°¸à±à°ªà°à°¦à°¿à°à°à±à°à°²à±à°¦à±."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "à°à°à±à°¸à±à°ªà°¾à°¨à± తాళà°à°¨à± యాà°à±à°¸à°¿à°¸à± à°à±à°¯à°²à±à°¦à±."
@@ -2326,38 +2427,42 @@ msgstr ""
"యిసà±à°¤à±à°à°¦à°¿ à°²à±à°¦à°¾ à°µà±à°°à±à° విలà±à°µ < min_avail యిసà±à°¤à±à°à°¦à°¿."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "à°à°«à±"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "హౠఫà±à°¡à°¿à°²à°¿à°à°¿ à°ªà±à°²à±à°¬à±à°¯à°¾à°à± (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "హౠఫà±à°¡à°¿à°²à°¿à°à°¿ à°à°¾à°ªà±à°à°°à± (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "à°à±à°²à°¿à°«à±à°¨à± à°¡à±à°ªà±à°²à±à°à±à°¸à± (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "పలà±à°¸à± à°à°¡à°¿à°¯à± à°¸à±à°à°¡à± à°¸à±à°µà°¿à°"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "à°
à°µà±à°à±à°ªà±à°à± పరిà°à°°à°®à±à°²à±"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "à°à°¨à±à°ªà±à°à± పరిà°à°°à°®à±à°²à±"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ పౠà°à°¡à°¿à°¯à±"
@@ -2421,133 +2526,159 @@ msgstr "à°à°à°ªà±à°²à°¿à°«à±à°°à±"
msgid "No Amplifier"
msgstr "à°à°à°ªà±à°²à°¿à°«à±à°°à± à°²à±à°¦à±"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "à°¬à±à°¸à±à°à±"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "à°¬à±à°¸à±à°à± à°²à±à°¦à±"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "à°à°¨à°²à°¾à°à± à°¹à±à°¡à±âà°«à±à°¨à±à°¸à±"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "à°à°¨à°²à°¾à°à± యినà±à°ªà±à°à±"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "à°à°¨à°²à°¾à°à± à°®à±à°à±à°°à±à°«à±à°¨à±"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "à°à°¨à°²à°¾à°à± à°²à±à°¨à±-యినà±"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "à°à°¨à°²à°¾à°à± à°°à±à°¡à°¿à°¯à±"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "à°à°¨à°²à°¾à°à± à°µà±à°¡à°¿à°¯à±"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "à°à°¨à°²à°¾à°à± à°
à°µà±à°à±à°ªà±à°à±"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "à°à°¨à°²à°¾à°à± à°¹à±à°¡à±âà°«à±à°¨à±à°¸à±"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "à°à°¨à°²à°¾à°à± à°
à°µà±à°à±à°ªà±à°à± (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "à°à°¨à°²à°¾à°à± à°®à±à°¨à± à°
à°µà±à°à±à°ªà±à°à±"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "à°à°¨à°²à°¾à°à± à°¸à±à°à±à°°à°¿à°¯à±"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "à°à°¨à°²à°¾à°à± à°®à±à°¨à±"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "à°à°¨à°²à°¾à°à± à°¸à±à°à±à°°à°¿à°¯à±"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "à°à°¨à°²à°¾à°à± సరà±à°à°¡à± 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "à°¡à°¿à°à°¿à°à°²à± à°¸à±à°à±à°°à°¿à°¯à± (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "à°¡à°¿à°à°¿à°à°²à± సరà±à°à°¡à± 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "à°¡à°¿à°à°¿à°à°²à± సరà±à°à°¡à± 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "à°¡à°¿à°à°¿à°à°²à± సరà±à°à°¡à± 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "à°¡à°¿à°à°¿à°à°²à± à°¸à±à°à±à°°à°¿à°¯à± (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "à°à°¨à°²à°¾à°à± à°®à±à°¨à± à°¡à±à°ªà±à°²à±à°à±à°¸à±"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "à°à°¨à°²à°¾à°à± à°¸à±à°à±à°°à°¿à°¯à± à°¡à±à°ªà±à°²à±à°à±à°¸à±"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "à°¡à°¿à°à°¿à°à°²à± à°¸à±à°à±à°°à°¿à°¯à± à°¡à±à°ªà±à°²à±à°à±à°¸à± (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "à°¤à°à±à°à±à°µ తరà°à±à°¦à°¨à° à°µà±à°²à±à°µà°°à°¿à°à°à±à°¨à°¦à°¿"
diff --git a/po/uk.po b/po/uk.po
index aacdf94..528a6e5 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-03 10:02+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-10-03 19:28+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
"Language-Team: Ukrainian <translation at linux.org.ua>\n"
@@ -14,15 +14,15 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 0.3\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 "
-"&& (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -35,7 +35,7 @@ msgstr ""
"ÐмовÑÑно, ви наÑÑапили на Ð²Ð°Ð´Ñ Ñ Ð´ÑайвеÑÑ ALSA «%s». ÐÑÐ´Ñ Ð»Ð°Ñка, повÑдомÑе "
"пÑо ÑÑ Ð²Ð°Ð´Ñ ÑозÑобникам ALSA."
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -48,7 +48,7 @@ msgstr ""
"ÐмовÑÑно, ви наÑÑапили на Ð²Ð°Ð´Ñ Ñ Ð´ÑайвеÑÑ ALSA «%s». ÐÑÐ´Ñ Ð»Ð°Ñка, повÑдомÑе "
"пÑо ÑÑ Ð²Ð°Ð´Ñ ÑозÑобникам ALSA."
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -97,11 +97,11 @@ msgstr "NULL-пÑÐ¸Ð¹Ð¼Ð°Ñ Ð· годинником"
msgid "Null Output"
msgstr "ÐÑлÑ-вÑдÑвоÑеннÑ"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "ÐбÑдоване аÑдÑо"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "Ðодем"
@@ -120,92 +120,98 @@ msgstr ""
msgid "Failed to add bind-now-loader."
msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñи bind-now-loader."
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "ÐÑÑимано Ñигнал %s."
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "ÐавеÑÑÐµÐ½Ð½Ñ ÑобоÑи."
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи коÑиÑÑÑваÑа «%s»."
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñи гÑÑÐ¿Ñ Â«%s»."
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Ðнайдено коÑиÑÑÑваÑа «%s» (UID %lu) Ñ Ð³ÑÑÐ¿Ñ Â«%s» (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "GID коÑиÑÑÑваÑа «%s» Ñ Ð³ÑÑпи «%s» не збÑгаÑÑÑÑÑ."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ÐомаÑнÑм каÑалогом коÑиÑÑÑваÑа «%s» не Ñ Â«%s», Ð´Ð°Ð½Ñ Ð¿ÑоÑгноÑовано."
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Ðе вдалоÑÑ ÑÑвоÑиÑи «%s»: %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "Ðе вдалоÑÑ Ð·Ð¼ÑниÑи ÑпиÑок гÑÑп: %s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "Ðе вдалоÑÑ Ð·Ð¼ÑниÑи GID: %s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "Ðе вдалоÑÑ Ð·Ð¼ÑниÑи UID: %s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "ÐÑогÑама ÑÑпÑÑно позбÑлаÑÑ Ð¿Ñав доÑÑÑÐ¿Ñ ÐºÐ¾ÑиÑÑÑваÑа root."
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "ÐагалÑноÑиÑÑемний Ñежим не пÑдÑÑимÑÑÑÑÑÑ Ð½Ð° ÑÑй плаÑÑоÑмÑ."
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "СпÑоба виконаÑи setrlimit(%s, (%u, %u)) бÑла невдалоÑ: %s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "Ðе вдалоÑÑ Ð¾Ð±ÑобиÑи ÑÑдок команди."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "Ð¤Ð¾Ð½Ð¾Ð²Ñ ÑлÑÐ¶Ð±Ñ Ð½Ðµ запÑÑено"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "Ð¤Ð¾Ð½Ð¾Ð²Ñ ÑлÑÐ¶Ð±Ñ Ð·Ð°Ð¿ÑÑено Ñк PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²ÐµÑÑиÑи ÑобоÑÑ ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби: %s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -213,160 +219,176 @@ msgstr ""
"Ð¦Ñ Ð¿ÑогÑÐ°Ð¼Ñ Ð½Ðµ пÑизнаÑено Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑÐºÑ Ð²Ñд ÑÐ¼ÐµÐ½Ñ ÐºÐ¾ÑиÑÑÑваÑа root (ÑкÑо не "
"вказано паÑамеÑÑа --system)."
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "ÐоÑÑÑÐ±Ð½Ñ Ð¿Ñава доÑÑÑÐ¿Ñ ÐºÐ¾ÑиÑÑÑваÑа root."
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr ""
"ÐаÑамеÑÑ --start не пÑдÑÑимÑÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑемниÑ
екземплÑÑÑв пÑогÑами."
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, але не вÑÑановлено --disallow-exit!"
+msgstr ""
+"ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, але не вÑÑановлено --disallow-exit!"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, але не вÑÑановлено --disallow-module-"
"loading!"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, пÑимÑÑове Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ ÑÐµÐ¶Ð¸Ð¼Ñ SHM!"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"ÐапÑÑк Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ, пÑимÑÑове Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ ÑÐµÐ¶Ð¸Ð¼Ñ Ð¿Ð°ÑамеÑÑÑв "
"ÑаÑÑ Ð²Ð¸Ñ
Ð¾Ð´Ñ Ð·Ð° вÑдÑÑÑноÑÑÑ Ð°ÐºÑивноÑÑÑ!"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи stdio."
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "СпÑоба ÑÑвоÑÐµÐ½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñ Ð·Ð°Ð²ÐµÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ fork() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ read() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "СпÑоба запÑÑÐºÑ ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "Ð¤Ð¾Ð½Ð¾Ð²Ñ ÑлÑÐ¶Ð±Ñ ÑÑпÑÑно запÑÑено."
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ read() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "Це PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ÐÑзол збиÑаннÑ: %s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS збиÑаннÑ: %s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "ÐапÑÑено на вÑзлÑ: %s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "Ðнайдено %u пÑоÑеÑоÑÑв."
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "РозмÑÑ ÑÑоÑÑнки доÑÑвнÑÑ %lu байÑам"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "ÐÑбÑано з пÑдÑÑÐ¸Ð¼ÐºÐ¾Ñ Valgrind: Ñак"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "ÐÑбÑано з пÑдÑÑÐ¸Ð¼ÐºÐ¾Ñ Valgrind: нÑ"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "ÐапÑÑк Ñ ÑÐµÐ¶Ð¸Ð¼Ñ valgrind: %s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "ÐапÑÑено на вÑзлÑ: %s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "ÐÑбÑано з опÑимÑзаÑÑÑÑ: Ñак"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "ÐÑбÑано з опÑимÑзаÑÑÑÑ: нÑ"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "ÐизнаÑено NDEBUG, вÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾."
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "ÐизнаÑено FASTPATH, вимкнено лиÑе Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑвидкиÑ
ÑлÑÑ
Ñв."
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "УвÑмкнено вÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ."
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "СпÑоба оÑÑимаÑи ÑденÑиÑÑкаÑÐ¾Ñ ÑиÑÑеми завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "ÐденÑиÑÑкаÑÐ¾Ñ ÑиÑÑеми %s."
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ÐденÑиÑÑкаÑÐ¾Ñ ÑеанÑÑ â %s."
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "ÐаÑалог запÑÑкÑ: %s."
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "ÐаÑалог ÑÑанÑ: %s."
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "ÐаÑалог модÑлÑв: %s."
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "ÐапÑÑÐºÑ Ñ Ð·Ð°Ð³Ð°Ð»ÑноÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÑежимÑ: %s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -383,15 +405,15 @@ msgstr ""
"WhatIsWrongWithSystemMode, Ñоб дÑзнаÑиÑÑ Ð¿Ñо Ñе, ÑÐ¾Ð¼Ñ Ð½Ðµ ваÑÑо "
"викоÑиÑÑовÑваÑи ÑиÑÑемний Ñежим."
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_pid_file_create() зазнала невдаÑÑ."
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ÐоÑÑÑÐ¿Ð½Ñ ÑвÑÐ¶Ñ Ð²Ð¸ÑокоÑоÑÐ½Ñ ÑаймеÑи! СмаÑного!"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -399,29 +421,29 @@ msgstr ""
"ЧÑвак, ÑÐ²Ð¾Ñ ÑдÑо â лайно! ÐÑÑÑÑ Ð¿Ð°Ñани ÑекомендÑÑÑÑ Linux з ÑвÑмкненими "
"виÑокоÑоÑними ÑаймеÑами!"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_core_new() зазнала невдаÑÑ."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "Ðе вдалоÑÑ ÑнÑÑÑалÑзÑваÑи ÑÐ¾Ð½Ð¾Ð²Ñ ÑлÑжбÑ."
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"ÐапÑÑк ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби без жодного заванÑаженого модÑлÑ, ÑлÑжба не бÑде "
"пÑаÑездаÑноÑ."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "ÐапÑÑк ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби завеÑÑено."
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "ÐнÑÑÑйовано завеÑÑÐµÐ½Ð½Ñ ÑобоÑи ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби."
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "ÐÐ¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби пеÑеÑвано."
@@ -695,72 +717,77 @@ msgstr "ÐÐÐÐÐ ÐÐÐÐÐÐЯ ÐÐ Ð ÐÐСТÐÐ ÐÐÐСТЬ: %s\n"
msgid "Path: %s\n"
msgstr "ШлÑÑ
: %s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ÐекоÑекÑний жÑÑнал «%s»."
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ÐекоÑекÑний ÑÑÐ²ÐµÐ½Ñ Ð¶ÑÑналÑÐ²Ð°Ð½Ð½Ñ Â«%s»."
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ÐекоÑекÑний меÑод змÑни ÑаÑÑоÑниÑ
Ñ
аÑакÑеÑиÑÑик «%s»."
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ÐекоÑекÑне знаÑÐµÐ½Ð½Ñ rlimit «%s»."
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit не пÑдÑÑимÑÑÑÑÑÑ Ð½Ð° ÑÑй плаÑÑоÑмÑ."
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ÐекоÑекÑний ÑоÑÐ¼Ð°Ñ ÑÑагменÑа «%s»."
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ÐекоÑекÑна ÑаÑÑоÑа вибÑÑки «%s»."
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ÐекоÑекÑÐ½Ñ ÐºÐ°Ð½Ð°Ð»Ð¸ ÑÑагменÑа «%s»."
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ÐекоÑекÑна каÑÑа каналÑв «%s»'."
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ÐекоÑекÑна кÑлÑкÑÑÑÑ ÑÑагменÑÑв «%s»."
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ÐекоÑекÑний ÑозмÑÑ ÑÑагменÑа «%s»."
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ÐекоÑекÑний ÑÑÐ²ÐµÐ½Ñ nice «%s»."
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] ÐекоÑекÑна ÑаÑÑоÑа вибÑÑки «%s»."
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Ðе вдалоÑÑ Ð²ÑдкÑиÑи Ñайл налаÑÑÑванÑ: %s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
@@ -768,7 +795,7 @@ msgstr ""
"У вказанÑй ÑиповÑй каÑÑÑ ÐºÐ°Ð½Ð°Ð»Ñв визнаÑаÑÑÑÑÑ ÑнÑа кÑлÑкÑÑÑÑ ÐºÐ°Ð½Ð°Ð»Ñв, нÑж "
"Ñипова кÑлÑкÑÑÑÑ ÐºÐ°Ð½Ð°Ð»Ñв."
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ÐÑоÑиÑано з Ñайла налаÑÑÑванÑ: %s ###\n"
@@ -814,8 +841,8 @@ msgid "Rear Right"
msgstr "ÐаднÑй пÑавий"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ÐжеÑело низÑкиÑ
ÑаÑÑоÑ"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1160,191 +1187,193 @@ msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ XOpenDisplay() завеÑÑилаÑÑ Ð½
msgid "Failed to parse cookie data"
msgstr "Ðе вдалоÑÑ Ð¾Ð±ÑобиÑи Ð´Ð°Ð½Ñ ÐºÑки"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "Ðе вдалоÑÑ Ð²ÑдкÑиÑи Ñайл налаÑÑÑÐ²Ð°Ð½Ð½Ñ Â«%s»: %s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
-msgstr "ÐÑкÑв не заванÑажено. ÐÑде виконано ÑпÑÐ¾Ð±Ñ Ð·âÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð° ÑÑ
вÑдÑÑÑноÑÑÑ."
+msgstr ""
+"ÐÑкÑв не заванÑажено. ÐÑде виконано ÑпÑÐ¾Ð±Ñ Ð·âÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð° ÑÑ
вÑдÑÑÑноÑÑÑ."
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "ÐÑÑимано повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñо невÑдомий додаÑок «%s»"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "Ðе вдалоÑÑ ÑÑвоÑиÑи ÑÑÐ½ÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾ÑокÑ: %s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "ÐоÑÑк вÑдÑвоÑÐµÐ½Ð½Ñ ÑÑнелÑовано."
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "ТÑнелÑне зâÑÐ´Ð½Ð°Ð½Ð½Ñ Ð· ÑеÑвеÑом."
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_write() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_write() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_peek() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "ÐоÑÑк бÑло ÑÑпÑÑно ÑÑвоÑено."
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_get_buffer_attr() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "ÐеÑÑика бÑÑеÑа: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "ÐеÑÑика бÑÑеÑа: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "ÐикоÑиÑÑÐ°Ð½Ð½Ñ ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑ Â«%s», каÑÑа каналÑв «%s»."
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "ÐâÑднано з пÑиÑÑÑоÑм %s (%u, %s пÑизÑпинено)."
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "Ðомилка поÑокÑ: %s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "ÐÑизÑпинено пÑиÑÑÑÑй поÑокÑ. %s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "ÐÑдновлено пÑиÑÑÑÑй поÑокÑ. %s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "ÐедованÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ÑокÑ. %s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "ÐеÑеванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ÑокÑ. %s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "ÐоÑÑк запÑÑено. %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "ÐоÑÑк пеÑеÑÑнÑÑо на пÑиÑÑÑÑй %s (%u, %s пÑизÑпинено). %s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "не "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "ÐедованÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ÑокÑ. %s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "ÐÑÑановлено зâÑднаннÑ. %s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_new() зазнала невдаÑÑ: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_connect_playback() зазнала невдаÑÑ: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_connect_record() зазнала невдаÑÑ: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "СпÑоба вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·âÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдаÑÑ: %s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "ÐÑÑимано EOF."
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ write() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "ÐÑÑимано Ñигнал, завеÑÑÐµÐ½Ð½Ñ ÑобоÑи."
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи лаÑенÑнÑÑÑÑ: %s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "ЧаÑ: %0.3f Ñек.; ÐаÑенÑнÑÑÑÑ: %0.0f мкÑ."
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_update_timing_info() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
+msgstr ""
+"СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_stream_update_timing_info() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1396,10 +1425,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [паÑамеÑÑи]\n"
@@ -1457,7 +1490,7 @@ msgstr ""
" --list-file-formats ÐоказаÑи ÑпиÑок можливиÑ
ÑоÑмаÑÑв "
"ÑайлÑв.\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1468,68 +1501,68 @@ msgstr ""
"ÐÑбÑано з libpulse %s\n"
"ÐâÑднано з libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "ÐекоÑекÑна назва клÑÑнÑа «%s»"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "ÐекоÑекÑна назва поÑÐ¾ÐºÑ Â«%s»"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "ÐекоÑекÑна каÑÑа каналÑв «%s»"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "ÐекоÑекÑна ÑпеÑиÑÑкаÑÑÑ Ð»Ð°ÑенÑноÑÑÑ Â«%s»"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "ÐекоÑекÑна ÑаÑова ÑпеÑиÑÑкаÑÑÑ Â«%s»"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "ÐекоÑекÑна влаÑÑивÑÑÑÑ Â«%s»"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "ÐевÑдомий ÑоÑÐ¼Ð°Ñ ÑайлÑв %s."
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "ÐекоÑекÑна ÑаÑÑоÑна ÑпеÑиÑÑкаÑÑÑ"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "ÐабагаÑо аÑгÑменÑÑв."
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "Ðе вдалоÑÑ ÑÑвоÑиÑи ÑаÑÑоÑÐ½Ñ ÑпеÑиÑÑкаÑÑÑ Ð´Ð»Ñ Ñайла."
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "Ðе вдалоÑÑ Ð²ÑдкÑиÑи звÑковий Ñайл."
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
@@ -1537,102 +1570,105 @@ msgstr ""
"ÐопеÑедженнÑ: Ð²ÐºÐ°Ð·Ð°Ð½Ñ ÑаÑÑоÑÐ½Ñ ÑпеÑиÑÑкаÑÑÑ Ð±Ñде пеÑезапиÑано ÑпеÑиÑÑкаÑÑÑÑ "
"з Ñайла."
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑ Ð· Ñайла."
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "ÐопеÑедженнÑ: не вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо каÑÑи каналÑв з Ñайла."
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "ÐаÑÑа каналÑв не вÑдповÑÐ´Ð°Ñ ÑаÑÑоÑнÑй ÑпеÑиÑÑкаÑÑÑ"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "ÐопеÑедженнÑ: не вдалоÑÑ Ð·Ð°Ð¿Ð¸ÑаÑи каÑÑÑ ÐºÐ°Ð½Ð°Ð»Ñв до Ñайла."
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr "ÐÑдкÑиÑÑÑ Ð¿Ð¾ÑÐ¾ÐºÑ %s з ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑÑ Â«%s» Ñ ÐºÐ°ÑÑÐ¾Ñ ÐºÐ°Ð½Ð°Ð»Ñв «%s»."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgstr ""
+"ÐÑдкÑиÑÑÑ Ð¿Ð¾ÑÐ¾ÐºÑ %s з ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑÑ Â«%s» Ñ ÐºÐ°ÑÑÐ¾Ñ ÐºÐ°Ð½Ð°Ð»Ñв «%s»."
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "запиÑ"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "вÑдÑвоÑеннÑ"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_mainloop_new() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ io_new() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_context_new() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_context_connect() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾: %s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_context_new() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_mainloop_run() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "Ðевдала ÑпÑоба пÑизÑпинки: %s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "Ðевдала ÑпÑоба вÑдновленнÑ: %s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
"ÐÐÐÐÐ ÐÐÐÐÐÐЯ: звÑковий ÑеÑÐ²ÐµÑ Ð½Ðµ Ñ Ð»Ð¾ÐºÐ°Ð»Ñним, його не можна пÑизÑпиниÑи.\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "СпÑоба вÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·âÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð·Ð½Ð°Ð»Ð° невдаÑÑ: %s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "ÐÑÑимано Ñигнал SIGINT, завеÑÑÐµÐ½Ð½Ñ ÑобоÑи.\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
-msgstr "ÐÐÐÐÐ ÐÐÐÐÐÐЯ: Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑнÑого пÑоÑеÑÑ Ð±Ñло пеÑеÑвано з Ñигналом %u\n"
+msgstr ""
+"ÐÐÐÐÐ ÐÐÐÐÐÐЯ: Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ÑÑÑнÑого пÑоÑеÑÑ Ð±Ñло пеÑеÑвано з Ñигналом %u\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1651,7 +1687,7 @@ msgstr ""
"зâÑднаÑиÑÑ\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1662,50 +1698,62 @@ msgstr ""
"ÐÑбÑано з libpulse %s\n"
"ÐâÑднано з libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_mainloop_new() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾.\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_context_new() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾.\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "СпÑоба Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pa_mainloop_run() завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾.\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи ÑÑаÑиÑÑиÑÐ½Ñ Ð´Ð°Ð½Ñ: %s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "ÐаÑаз викоÑиÑÑано: %u блокÑв, Ñо мÑÑÑÑÑÑ Ð·Ð°Ð³Ð°Ð»Ð¾Ð¼ %s байÑÑв.\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "ÐидÑлено пÑоÑÑгом Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»Ð¾Ð¼: %u блокÑв, Ñо мÑÑÑÑÑÑ %s байÑÑв.\n"
+msgstr ""
+"ÐидÑлено пÑоÑÑгом Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»Ð¾Ð¼: %u блокÑв, Ñо мÑÑÑÑÑÑ %s байÑÑв.\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "РозмÑÑ ÐºÐµÑÑ ÑÑагменÑÑв: %s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо ÑеÑвеÑа: %s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1713,7 +1761,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"ÐоÑиÑÑÑваÑ: %s\n"
"Ðазва вÑзла: %s\n"
@@ -1725,12 +1773,12 @@ msgstr ""
"Типове джеÑело: %s\n"
"ÐÑка: %08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо пÑиймаÑа: %s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1769,22 +1817,22 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tÐоÑÑи:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tÐкÑивний поÑÑ: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо джеÑела: %s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1823,20 +1871,20 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "н/д"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо модÑлÑ: %s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1853,12 +1901,12 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо клÑÑнÑа: %s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1873,12 +1921,12 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо каÑÑи: %s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1895,22 +1943,22 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tÐÑоÑÑлÑ:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tÐкÑивний пÑоÑÑлÑ: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи вÑдомоÑÑей Ñодо пÑиймаÑа: %s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1947,12 +1995,12 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо вÑдÑвоÑÐµÐ½Ð½Ñ Ð´Ð¶ÐµÑела: %s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1981,12 +2029,12 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Ðе вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо ÑÑагменÑа: %s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -2017,26 +2065,80 @@ msgstr ""
"\tÐлаÑÑивоÑÑÑ:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "Ðомилка: %s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð²Ð°Ð½ÑажиÑи зÑазок: %s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "ÐеÑедÑаÑне завеÑÑÐµÐ½Ð½Ñ Ñайла"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "ÐекоÑекÑний ÑеÑвеÑ"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "ÐÑÑимано Ñигнал SIGINT, завеÑÑÐµÐ½Ð½Ñ ÑобоÑи."
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -2059,6 +2161,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2097,7 +2200,7 @@ msgstr ""
"зâÑднаÑиÑÑ\n"
" -n, --client-name=ÐÐÐÐРСпоÑÑб Ð²Ð¸ÐºÐ»Ð¸ÐºÑ ÐºÐ»ÑÑнÑа на ÑеÑвеÑÑ\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2108,51 +2211,51 @@ msgstr ""
"ÐÑбÑано з libpulse %s\n"
"ÐâÑднано з libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "ÐÑÐ´Ñ Ð»Ð°Ñка, вкажÑÑÑ Ð·Ñазковий Ñайл Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "Ðе вдалоÑÑ Ð²ÑдкÑиÑи звÑковий Ñайл."
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr ""
"ÐопеÑедженнÑ: не вдалоÑÑ Ð¾ÑÑимаÑи Ð´Ð°Ð½Ñ Ñодо ÑаÑÑоÑÐ½Ð¾Ñ ÑпеÑиÑÑкаÑÑÑ Ð· Ñайла."
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "Ðам ÑлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð·Ñазкового Ñайла, Ñкий ÑлÑд вÑдÑвоÑиÑи"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "Ðам ÑлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð·Ñазкового Ñайла, Ñкий ÑлÑд вилÑÑиÑи"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа даниÑ
Ñ Ð¿ÑиймаÑ"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела вÑдÑвоÑÐµÐ½Ð½Ñ Ñ Ð´Ð¶ÐµÑело"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "Ðам ÑлÑд вказаÑи Ð½Ð°Ð·Ð²Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ñ Ð°ÑгÑменÑи."
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑлÑ"
-#: ../src/utils/pactl.c:1090
+#: ../src/utils/pactl.c:1183
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Ðе можна вказÑваÑи бÑлÑÑе одного пÑиймаÑа. Ðам ÑлÑд вказаÑи бÑлÑвÑÑке "
"знаÑеннÑ."
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@@ -2160,57 +2263,60 @@ msgstr ""
"Ðе можна вказÑваÑи бÑлÑÑе одного джеÑела. Ðам ÑлÑд вказаÑи бÑлÑвÑÑке "
"знаÑеннÑ."
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ ÐºÐ°ÑÑи Ñ Ð½Ð°Ð·Ð²Ñ Ð¿ÑоÑÑлÑ"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа Ñ Ð½Ð°Ð·Ð²Ñ Ð¿Ð¾ÑÑÑ"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела Ñ Ð½Ð°Ð·Ð²Ñ Ð¿Ð¾ÑÑÑ"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа Ñ Ð³ÑÑнÑÑÑÑ"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "ÐекоÑекÑна ÑпеÑиÑÑкаÑÑÑ Ð³ÑÑноÑÑÑ"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела Ñ Ð³ÑÑнÑÑÑÑ"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа даниÑ
Ñ Ð³ÑÑнÑÑÑÑ"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "ÐекоÑекÑний ÑÐ½Ð´ÐµÐºÑ Ð²Ñ
ÑдниÑ
даниÑ
пÑиймаÑа"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+msgstr ""
+"Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+msgstr ""
+"Ðам ÑлÑд вказаÑи назвÑ/ÑÐ½Ð´ÐµÐºÑ Ð´Ð¶ÐµÑела Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
-msgstr "Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа даниÑ
Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
+msgstr ""
+"Ðам ÑлÑд вказаÑи ÑÐ½Ð´ÐµÐºÑ Ð¿ÑиймаÑа даниÑ
Ñ Ð±Ñлеве знаÑÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð·Ð²ÑкÑ"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "ÐекоÑекÑна ÑпеÑиÑÑкаÑÑÑ ÑндекÑÑ Ð¿ÑиймаÑа даниÑ
"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "Ðе вказано коÑекÑÐ½Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸."
@@ -2295,46 +2401,47 @@ msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½ÑажиÑи Ð´Ð°Ð½Ñ ÐºÑки\n"
msgid "Not yet implemented.\n"
msgstr "Ще не ÑеалÑзовано.\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Ð¤Ð¾Ð½Ð¾Ð²Ñ ÑлÑÐ¶Ð±Ñ PulseAudio не запÑÑено, або ÑÑ ÑлÑÐ¶Ð±Ñ Ð½Ðµ запÑÑено Ñк ÑÐ¾Ð½Ð¾Ð²Ñ "
"ÑлÑÐ¶Ð±Ñ ÑеанÑÑ."
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
-msgstr "СпÑоба завеÑÑÐµÐ½Ð½Ñ ÑобоÑи ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби PulseAudio завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
+msgstr ""
+"СпÑоба завеÑÑÐµÐ½Ð½Ñ ÑобоÑи ÑÐ¾Ð½Ð¾Ð²Ð¾Ñ ÑлÑжби PulseAudio завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾."
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "Фонова ÑлÑжба не вÑдповÑдаÑ."
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "Ðе вдалоÑÑ Ð·Ð½ÑÑи блокÑÐ²Ð°Ð½Ð½Ñ Ð°Ð²ÑомаÑиÑного ÑозгалÑженнÑ."
@@ -2373,38 +2480,42 @@ msgstr ""
"snd_pcm_avail() повеÑнÑв 0 або ÑнÑе знаÑÐµÐ½Ð½Ñ < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "Ðимкнено"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "ÐиÑокоÑоÑне вÑдÑвоÑÐµÐ½Ð½Ñ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "ÐиÑокоÑоÑне заÑ
Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "ТелеÑонний дÑÐ¿Ð»ÐµÐºÑ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "ÐвÑковий ÑеÑÐ²ÐµÑ PulseAudio"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "ÐÑиÑÑÑÐ¾Ñ Ð²ÑдÑвоÑеннÑ"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "ÐÑиÑÑÑÐ¾Ñ Ð¾ÑÑиманнÑ"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "ÐвÑк на @ÐÐÐÐÐÐУÐÐÐ@"
@@ -2468,131 +2579,159 @@ msgstr "ÐÑдÑилÑваÑ"
msgid "No Amplifier"
msgstr "Ðез пÑдÑилÑваÑа"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "ÐÑдÑиленнÑ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "Ðез пÑÑиленнÑ"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "ÐÐ½Ð°Ð»Ð¾Ð³Ð¾Ð²Ñ Ð½Ð°Ð²ÑÑники"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "ÐналоговиÑ
вÑ
Ñд"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "Ðналоговий мÑкÑоÑон"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "Ðналоговий лÑнÑйний вÑ
Ñд"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "Ðналогове ÑадÑо"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "Ðналогове вÑдео"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "Ðналогове вÑдÑвоÑеннÑ"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "ÐÐ½Ð°Ð»Ð¾Ð³Ð¾Ð²Ñ Ð½Ð°Ð²ÑÑники"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "Ðналоговий виÑ
Ñд (ÑабвÑÑеÑ)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "Ðналоговий моно-виÑ
Ñд"
-#: ../src/modules/alsa/alsa-mixer.c:1981, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "Ðналогове ÑÑеÑео"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
+#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404, c-format
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
+#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "Ðналогове моно"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "Ðналогове ÑÑеÑео"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "Ðналоговий об'Ñмний 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "Ðналоговий об'Ñмний 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "Ðналоговий об'Ñмний 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "Ðналоговий об'Ñмний 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "Ðналоговий об'Ñмний 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "Ðналоговий об'Ñмний 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "Ðналоговий об'Ñмний 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "Ðналоговий об'Ñмний 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "Ðналоговий об'Ñмний 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "Ðналоговий об'Ñмний 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "Ðналоговий об'Ñмний 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "ЦиÑÑове ÑÑеÑео (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "ЦиÑÑовий обâÑмний 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "ЦиÑÑовий обâÑмний 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "ЦиÑÑовий обâÑмний 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "ЦиÑÑовий ÑÑеÑео (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "Ðналогове двобÑÑне моно"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "Ðналогове двобÑÑне ÑÑеÑео"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "ЦиÑÑове двобÑÑне ÑÑеÑео (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ÐжеÑело низÑкиÑ
ÑаÑÑоÑ"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index bf3610f..337f2b5 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-07 20:11+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2009-12-09 12:54+1000\n"
"Last-Translator: Leah Liu <lliu at redhat.com>\n"
"Language-Team: Simplified Chinese <zh at li.org>\n"
@@ -20,12 +20,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: ../src/modules/alsa/alsa-util.c:858 ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -36,7 +36,7 @@ msgstr ""
"snd_pcm_avail() è¿åçå¼é常大ï¼%lu åèï¼%lu msï¼ã\n"
"å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸ç bugã请å ALSA å¼åè
举æ¥è¿ä¸ªé®é¢ã"
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -47,7 +47,7 @@ msgstr ""
"snd_pcm_delay() è¿åçå¼é常大ï¼%li åèï¼%s%lu msï¼ã\n"
"å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸ç bugã请å ALSA å¼åè
举æ¥è¿ä¸ªé®é¢ã"
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -92,11 +92,11 @@ msgstr "å®æ¶ç空æ¼"
msgid "Null Output"
msgstr "空è¾åº"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "å
é¨é³é¢"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "è°å¶è§£è°å¨"
@@ -112,246 +112,267 @@ msgstr "åé
æ°ç dl å è½½å¨å¤±è´¥ã"
msgid "Failed to add bind-now-loader."
msgstr "æ·»å bind-now-loader 失败ã"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "è·å¾ä¿¡å·%s"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "éåº"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "æ¾ä¸å°ç¨æ· `%s' "
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "æ¾ä¸å°ç¨æ·ç» `%s'"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "åç°ç¨æ·'%s' (UID %lu)åç»'%s' (GID %lu)."
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "ç¨æ·'%s'ä¸ç»'%s'çGIDä¸å¹é
."
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "ç¨æ·'%s'ç主æ件夹ä¸æ¯'%s'ï¼å¿½ç¥ã"
-#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "å建'%s'å¤±è´¥ï¼ %s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "æ´æ¹ç»å表失败ï¼%s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "æ´æ¹GID失败ï¼%s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "æ´æ¹UID失败ï¼%s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "æåæ¾å¼rootæéã"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "æ¤å¹³å°ä¸æ¯æsystem-wide模å¼ã"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) 失败ï¼%s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "åæå½ä»¤è¡å¤±è´¥ã"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "åå°ç¨åºæ²¡æè¿è¡"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "åå°ç¨åºæ£å¨è¿è¡ï¼PID %u"
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ææ»åå°ç¨åºå¤±è´¥ï¼%s"
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:662
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "ä¸åºä»¥root身份è¿è¡æ¬ç¨åºï¼é¤éæå® --systemï¼ã"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "éè¦ root æéã"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr "ç³»ç»å®ä¾ä¸æ¯æ --startã"
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼ä½æ¯ --disallow-exit æªè®¾å®ï¼"
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼ä½æ¯ --disallow-module-loading æªè®¾å®ï¼"
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼å¼ºå¶ç¦ç¨SHM模å¼ï¼"
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼å¼ºå¶ç¦ç¨éåºç©ºé²æ¶é´ï¼"
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "è·åstdio失败ã"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "管é失败ï¼%s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork()失败ï¼%s"
-#: ../src/daemon/main.c:646 ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read()失败ï¼%s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "åå°ç¨åºå¯å¨å¤±è´¥ã"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "åå°ç¨åºå¯å¨æåã"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read()失败ï¼%s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "è¿æ¯ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr "ç¼è¯ä¸»æºï¼%s"
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ç¼è¯CFLAGSï¼%s"
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "æ£å¨ä¸»æºä¸è¿è¡ï¼%s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "æ¾å° %u CPUã"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "页é¢å¤§å°ä¸º%luåè"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "ç¼è¯å¯ç¨Valgrindæ¯æï¼æ¯"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "ç¼è¯å¯ç¨Valgrindæ¯æï¼å¦"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "æ£å¨ä»¥valgrind模å¼è¿è¡ï¼%s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "æ£å¨ä¸»æºä¸è¿è¡ï¼%s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "ä¼åçæï¼æ¯"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "ä¼åçæï¼å¦"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr "æç» NDEBUGï¼ç¦ç¨ææ assert"
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "æç» FASTPATHï¼åªç¦ç¨å¿«éè·¯å¾ assertã"
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr "å¯ç¨ææ assertã"
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "è·åmachine ID失败"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "machine IDæ¯%sã"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "ä¼è¯ ID %sã"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr "æ£å¨ä½¿ç¨è¿è¡æ¶æ件夹%sã"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr "æ£å¨ä½¿ç¨ç¶ææ件夹%sã"
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "æ£å¨ä½¿ç¨æ¨¡åç®å½ %sã"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼%s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@@ -362,43 +383,44 @@ msgid ""
msgstr ""
"ç¡®å®ï¼é£ä¹æ¨æ£å¨ç³»ç»æ¨¡å¼ä¸è¿è¡ PAã请注æï¼æ¨å¾å¯è½ä¸åºè¯¥è¿æ ·åã\n"
"å¦ææ¨æ 论å¦ä½é½è¿æ ·åäºï¼é£ä¹åºç°æå¤æ
åµå°±æ¯æ¨çé®é¢ã\n"
-"å¨æç« http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode ä¸è§£éäºä¸ºä»ä¹ç³»ç»æ¨¡å¼é常ä¸æ¯ä¸ªå¥½ä¸»æã"
+"å¨æç« http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode ä¸è§£éäºä¸ºä»ä¹ç³»"
+"ç»æ¨¡å¼é常ä¸æ¯ä¸ªå¥½ä¸»æã"
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create()失败ã"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "æ°é²çé«å辨ç计æ¶å¨å¼é
äºï¼å个饱ï¼"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:922
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "èå
ï¼æ¨çå
æ ¸çèï¼ç°å¨æµè¡çæ¯å¯ç¨äºé«å辩ç计åå¨çLinuxï¼"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new()失败ã"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "åå°ç¨åºåå§å失败ã"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "åå°ç¨åºå¯å¨æªå 载任ä½æ¨¡åï¼æç»å·¥ä½ã"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "åå°ç¨åºå¯å¨å®æã"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "å¼å§å
³éåå°ç¨åºã"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "åå°ç¨åºå·²ç»æ¢ã"
@@ -639,78 +661,83 @@ msgstr "å对è¦åï¼%s\n"
msgid "Path: %s\n"
msgstr "è·¯å¾ï¼%s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] æ æçæ¥å¿ç®æ '%s'ã"
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] æ æçæ¥å¿çº§å«'%s'ã"
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] æ æçééæ ·æ¹æ³'%s'ã"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] æ æçrlimit '%s'ã"
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] æ¤å¹³å°ä¸æ¯ærlimitã"
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] æ æçæ ·åæ ¼å¼'%s'ã"
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] æ æçæ ·åç'%s'ã"
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] æ æçæ ·åéé'%s'ã"
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] æ æé¢éå°å¾ '%s'ã"
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] æ æçå段æ°'%s'ã"
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] æ æçå段大å°'%s'ã"
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] æ æçnice level '%s'ã"
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] æ æçæ ·åç'%s'ã"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "æå¼é
ç½®æ件失败ï¼%s"
-#: ../src/daemon/daemon-conf.c:562
+#: ../src/daemon/daemon-conf.c:602
msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr "æå®çé»è®¤é¢éå°å¾çé¢éæ°ä¸æå®çé»è®¤é¢éæ°ä¸åã"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ä»é
ç½®æ件读åï¼%s ###\n"
@@ -756,8 +783,8 @@ msgid "Rear Right"
msgstr "å³å"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ä½é¢èå²"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -1102,191 +1129,191 @@ msgstr "XOpenDisplay()失败"
msgid "Failed to parse cookie data"
msgstr "cookieæ°æ®åæ失败"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "æå¼é
ç½®æ件'%s'失败ï¼%s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "没æå è½½cookieãå°è¯ä¸å è½½cookieè¿è¡è¿æ¥ã"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork()ï¼%s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid()ï¼%s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "æ¶å°æªç¥æ©å±'%s'çä¿¡æ¯"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "æåºæµå¤±è´¥ï¼%s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "åæ¾æµæ¯ç«ã"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "å°æå¡å¨ç Draining è¿æ¥ã"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() failed: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() failed: %s"
-#: ../src/utils/pacat.c:237 ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() failed: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "æµå建æåã"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() failed: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr "Buffer metrics: maxlength=%u, fragsize=%u"
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "æ£å¨ä½¿ç¨æ ·åè§æ ¼ '%s'ï¼ééæ å° '%s'ã"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "å·²è¿æ¥è³è®¾å¤ %s (%uï¼%s æèµ·ï¼ã"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "æµé误ï¼%s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "æµè®¾å¤æèµ·ã%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "æµè®¾å¤æ¢å¤ã%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "æµæ¬ è½½è¿è¡ã%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "æµè¶
éè¿è¡ã%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "æµå·²å¯å¨ã%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "æµç§»è³è®¾å¤ %s ï¼%uï¼%s æèµ·ï¼ã%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "not "
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "æ´æ¹æµç¼å²å±æ§ã%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "è¿æ¥å·²å»ºç«ã%s "
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() failed: %s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() failed: %s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() failed: %s"
-#: ../src/utils/pacat.c:470 ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "è¿æ¥å¤±è´¥ï¼%s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "è·å¾ EOFã"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "åå
¥ï¼ï¼å¤±è´¥ï¼%s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "æ¶å°ä¿¡å·ï¼æ£å¨éåºã"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "è·åä¼ è¾å»¶è¿å¤±è´¥ï¼%s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "æ¶é´ï¼%0.3f ç§ï¼å»¶è¿ï¼%0.0f å¾®ç§ã"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() failed: %s"
-#: ../src/utils/pacat.c:609
-#, c-format
+#: ../src/utils/pacat.c:630
+#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@@ -1338,10 +1365,14 @@ msgid ""
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
"%s [options]\n"
@@ -1363,21 +1394,22 @@ msgstr ""
" --rate=SAMPLERATE éæ ·é¢çï¼åä½ Hzï¼é»è®¤ä¸º44100ï¼\n"
" --format=SAMPLEFORMAT éæ ·ç±»åï¼s16leãs16beãu8ã"
"float32le ä¹ä¸\n"
-" float32beãulawãalawãs32leãs32be ä¸"
-"åï¼é»è®¤ä¸º s16neï¼\n"
+" float32beãulawãalawãs32leãs32be "
+"ä¸åï¼é»è®¤ä¸º s16neï¼\n"
" --channels=CHANNELS ééæ°ï¼1为å声éï¼2为ç«ä½å£°ï¼é»è®¤ä¸º"
"2ï¼\n"
" --channel-map=CHANNELMAP å代é»è®¤å¼çééæ å°è¡¨\n"
" --fix-format ä»æµè¿æ¥çæ¼ä¸æåéæ ·æ ¼å¼ã\n"
" --fix-rate ä»æµè¿æ¥çæ¼ä¸æåéæ ·çã\n"
-" --fix-channels ä»æµè¿æ¥çæ¼ä¸æåééæ°åééæ "
-"å°è¡¨ã\n"
-" --no-remix ä¸è¦å¯¹ééè¿è¡ upmix æè
downmix æä½ã\n"
+" --fix-channels ä»æµè¿æ¥çæ¼ä¸æåééæ°åééæ å°"
+"表ã\n"
+" --no-remix ä¸è¦å¯¹ééè¿è¡ upmix æè
downmix æ"
+"ä½ã\n"
" --no-remap æ ¹æ®ä¸æ èéå称æ¥æ å°ééã\n"
" --latency=BYTES 请æ±æå®åèæ°ç延è¿ã\n"
" --process-time=BYTES æ¯æ¬¡è¯·æ±æå®åèæ°çå¤çæ¶é´ã\n"
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1388,168 +1420,169 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pacat.c:764 ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "æ æ客æ·ç«¯å称 '%s'"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "æ ææµå称 '%s'"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "æ æééæ å° '%s'"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "æ æ延è¿è¯´æ %s'"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "æ æå¤çæ¶é´è¯´æ '%s'"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "æ ææ§è½ '%s'"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "æªç¥æä»¶æ ¼å¼ %sã"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "æ æéæ ·è¯´æ"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "åæ°è¿å¤ã"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "为æ件è·åéæ ·è¯´æ失败ã"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "æå¼å£°é³æ件失败ã"
-#: ../src/utils/pacat.c:959
+#: ../src/utils/pacat.c:1000
msgid ""
"Warning: specified sample specification will be overwritten with "
"specification from file."
msgstr "è¦åï¼æå®çéæ ·è¯´æå°è¦çæ件ä¸ç说æã"
-#: ../src/utils/pacat.c:962 ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "ä»æ件ä¸ç¡®å®éæ ·è¯´æ失败ã"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "è¦åï¼ä»æ件ä¸ç¡®å®ééæ å°å¤±è´¥ã"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "ééæ å°ä¸éæ ·è¯´æä¸å¹é
"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "è¦åï¼å¨æ件ä¸åå
¥ééæ å°å¤±è´¥ã"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "使ç¨éæ ·è¯´æ '%s' åééæ å° '%s' æå¼ %s æµã"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "æ£å¨å½å¶"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "åæ¾"
-#: ../src/utils/pacat.c:1035 ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() failed."
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() failed."
-#: ../src/utils/pacat.c:1061 ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() failed."
-#: ../src/utils/pacat.c:1069 ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect()失败ï¼%s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() failed."
-#: ../src/utils/pacat.c:1082 ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() failed."
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork()ï¼%s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp()ï¼%s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "æ起失败ï¼%s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "æ¢å¤å¤±è´¥ï¼%s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "è¦åï¼éæ¬å°å£°é³æå¡å¨ï¼ä¸ä¼æèµ·ã\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "è¿æ¥å¤±è´¥ï¼%s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "æ¶å°SIGINTï¼æ£å¨éåºã\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "è¦åï¼åè¿ç¨è¢«ä¿¡å·%uç»æ¢\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
@@ -1567,7 +1600,7 @@ msgstr ""
" -s, --server=SERVER è¦è¿æ¥çæå¡å¨å\n"
"\n"
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1578,50 +1611,61 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new()失败ã\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new()失败ã\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run()失败ã\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "è·åç»è®¡æ°æ®å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr "å½å使ç¨ï¼%uåï¼æ»å
±%såèã\n"
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr "æ´ä¸ªçå½å¨ææå¾åé
ï¼%uåï¼æ»å
±%såèã\n"
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "éæ ·ç¼å大å°ï¼%s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "è·åæå¡å¨ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
#, c-format
msgid ""
-"User name: %s\n"
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
+#, fuzzy, c-format
+msgid ""
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1629,7 +1673,7 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
"ç¨æ·åï¼%s\n"
"主æºåï¼%s\n"
@@ -1641,12 +1685,12 @@ msgstr ""
"é»è®¤æºï¼ %s\n"
"Cookieï¼%08x\n"
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "è·åé³é¢åºå£ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1685,22 +1729,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:268 ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr "\tPorts:\n"
-#: ../src/utils/pactl.c:274 ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tActive Port: %s\n"
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "è·åé³é¢å
¥å£ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1739,20 +1783,20 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:345 ../src/utils/pactl.c:401 ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473 ../src/utils/pactl.c:532 ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:587 ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594 ../src/utils/pactl.c:637 ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "è·å模åä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1769,12 +1813,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "è·å客æ·ç«¯ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1789,12 +1833,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "è·å声å¡ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1811,22 +1855,22 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tProfiles:\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tActive Profile: %s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "è·åé³é¢åºå£è¾å
¥ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1863,12 +1907,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "è·åé³é¢å
¥å£è¾åºä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1897,12 +1941,12 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "è·åéæ ·ä¿¡æ¯å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1933,26 +1977,80 @@ msgstr ""
"\tProperties:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:653 ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "失败ï¼%s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "ä¸ä¼ éæ ·å¤±è´¥ï¼%s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "æ件è¿æ©ç»æ"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "æ ææå¡å¨"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "æ¶å° SIGINTï¼æ£å¨éåºã"
-#: ../src/utils/pactl.c:869
-#, c-format
+#: ../src/utils/pactl.c:961
+#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
"%s [options] list\n"
@@ -1975,6 +2073,7 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
@@ -2014,7 +2113,7 @@ msgstr ""
" -n, --client-name=NAME How to call this client on the "
"server\n"
-#: ../src/utils/pactl.c:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -2025,103 +2124,104 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "请æå®è¦å è½½çéæ ·æ件"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "æå¼å£°é³æ件失败ã"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "è¦åï¼ä»æ件ä¸ç¡®å®éæ ·è¯´æ失败ã"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr "æ¨å¿
é¡»æå®è¦ææ¾çéæ ·å"
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr "æ¨å¿
é¡»æå®è¦å é¤çéæ ·å"
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr "æ¨å¿
é¡»æå®æ¼è¾å
¥ç´¢å¼åæ¼"
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr "æ¨å¿
é¡»æå®æºè¾åºç´¢å¼åæº"
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr "å¿
é¡»æå®æ¨¡ååååæ°ã"
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr "å¿
é¡»æå®æ¨¡åç´¢å¼"
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr "ä¸å¯æå®å¤ä¸ªæ¼ãå¿
é¡»æå®ä¸ä¸ªå¸å°å¼ã"
-#: ../src/utils/pactl.c:1103
+#: ../src/utils/pactl.c:1196
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
msgstr "ä¸å¯æå®å¤ä¸ªæºãå¿
é¡»æå®ä¸ä¸ªå¸å°å¼ã"
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr "æ¨å¿
é¡»æå®å£°å¡å称/ç´¢å¼å侧åå称"
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr "æ¨å¿
é¡»æå®æ¼å称/ç´¢å¼å端å£å称"
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr "æ¨å¿
é¡»æå®æºå称/ç´¢å¼å端å£å称"
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr "æ¨å¿
é¡»æå®æ¼å称/ç´¢å¼åå·"
-#: ../src/utils/pactl.c:1154 ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193 ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226 ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr "æ æéæ ·è¯´æ"
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr "æ¨å¿
é¡»æå®æºå称/ç´¢å¼åå·"
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr "æ¨å¿
é¡»æå®æ¼è¾å
¥ç´¢å¼åå·"
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr "æ æé²è¾å
¥ç´¢å¼"
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr "æ¨å¿
é¡»æå®æ¼å称/ç´¢å¼åéé³å¸å°å¼"
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr "æ¨å¿
é¡»æå®æºå称/ç´¢å¼åéé³å¸å°å¼"
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr "æ¨å¿
é¡»æå®é²è¾å
¥ç´¢å¼åéé³å¸å°å¼"
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr "æ ææ¼è¾å
¥ç´¢å¼è¯´æ"
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "æªæå®ææçå½ä»¤ã"
@@ -2203,44 +2303,44 @@ msgstr "å è½½cookieæ°æ®å¤±è´¥\n"
msgid "Not yet implemented.\n"
msgstr "å°æªå®ç°ã\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr "没æ PulseAudio å®æ¤è¿ç¨å¨è¿è¡ï¼æè
没æä½ä¸ºä¼è¯å®æ¤è¿ç¨è¿è¡ã"
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr "socket(PF_UNIX, SOCK_STREAM, 0)ï¼%s"
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect()ï¼%s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "ææ»PulseAudioåå°ç¨åºå¤±è´¥ã"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "åå°ç¨åºæªååºã"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171 ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read()ï¼%s"
-#: ../src/utils/pacmd.c:207 ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write()ï¼%s"
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr "ä¸è½è®¿é®autospawnéã"
@@ -2277,38 +2377,42 @@ msgstr ""
"ç¨å¼çæ°å¼ã"
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "å
³é"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "é«ä¿çåæ¾ï¼A2DPï¼"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "é«ä¿çééï¼A2DPï¼"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "åå·¥çµè¯ï¼HSP/HFPï¼"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio 声é³æå¡å¨"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "è¾åºè®¾å¤"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "è¾å
¥è®¾å¤"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "@HOSTNAME@ ä¸çé³é¢"
@@ -2372,133 +2476,159 @@ msgstr "åè¡¡å¨"
msgid "No Amplifier"
msgstr "æ åè¡¡å¨"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "å éå¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "æ å éå¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "模æè³æº"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "模æè¾å
¥"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "模æ麦å
é£"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "模æ Line-In"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "模ææ 线çµ"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "模æè§é¢"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "模æè¾åº "
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "模æè³æº"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "模æè¾åºï¼LFEï¼"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "模æå声éè¾åº"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "模æç«ä½å£°"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984 ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "模æå声é"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "模æç«ä½å£°"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "模æç¯ç» 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "模æç¯ç» 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "模æç¯ç» 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "模æç¯ç» 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "模æç¯ç» 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "模æç¯ç» 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "模æç¯ç» 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "模æç¯ç» 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "模æç¯ç» 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "模æç¯ç» 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "模æç¯ç» 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "æ°åç«ä½å£°ï¼IEC958ï¼"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "æ°åç¯ç» 4.0ï¼IEC958ï¼"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "æ°åç¯ç» 4.0ï¼IEC958/AC3ï¼"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "æ°åç¯ç» 5.1ï¼IEC958/AC3ï¼"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "æ°åç«ä½å£°ï¼HDMIï¼"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "模æå声éåå·¥"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "模æç«ä½å£°åå·¥"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "æ°åç«ä½å£°åå·¥ï¼IEC958ï¼"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ä½é¢èå²"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 18b94c4..50b049b 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PulseAudio Volume Control\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-05 08:05+0000\n"
+"POT-Creation-Date: 2010-02-21 21:15+0100\n"
"PO-Revision-Date: 2010-02-20 12:55+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680 at gmail.com>\n"
"Language-Team: zh_TW\n"
@@ -17,31 +17,36 @@ msgstr ""
"X-Poedit-Language: Chinese\n"
"X-Poedit-Country: TAIWAN\n"
-#: ../src/modules/alsa/alsa-util.c:858
-#: ../src/pulsecore/sink.c:2629
+#: ../src/modules/alsa/alsa-util.c:861 ../src/pulsecore/sink.c:2631
#, c-format
msgid "%s %s"
msgstr "%s %s"
-#: ../src/modules/alsa/alsa-util.c:1106
+#: ../src/modules/alsa/alsa-util.c:1109
#, c-format
msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1147
+#: ../src/modules/alsa/alsa-util.c:1150
#, c-format
msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1194
+#: ../src/modules/alsa/alsa-util.c:1197
#, c-format
msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
msgstr ""
#: ../src/modules/module-always-sink.c:39
@@ -57,7 +62,12 @@ msgid "Virtual LADSPA sink"
msgstr ""
#: ../src/modules/module-ladspa-sink.c:53
-msgid "sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma seperated list of input control values>"
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma seperated list of "
+"input control values>"
msgstr ""
#: ../src/modules/module-null-sink.c:55
@@ -68,11 +78,11 @@ msgstr "Clocked Null sink"
msgid "Null Output"
msgstr "Null Output"
-#: ../src/pulsecore/sink.c:2613
+#: ../src/pulsecore/sink.c:2615
msgid "Internal Audio"
msgstr "å
§é¨é³æ"
-#: ../src/pulsecore/sink.c:2618
+#: ../src/pulsecore/sink.c:2620
msgid "Modem"
msgstr "æ¸ææ©"
@@ -88,285 +98,311 @@ msgstr "æªè½åé
æ°ç dl loaderã"
msgid "Failed to add bind-now-loader."
msgstr "æªè½å å
¥ bind-now-loaderã"
-#: ../src/daemon/main.c:141
+#: ../src/daemon/main.c:146
#, c-format
msgid "Got signal %s."
msgstr "åå¾ä¿¡è %sã"
-#: ../src/daemon/main.c:168
+#: ../src/daemon/main.c:173
msgid "Exiting."
msgstr "æ£å¨éåºã"
-#: ../src/daemon/main.c:186
+#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find user '%s'."
msgstr "æ¾ä¸å°ä½¿ç¨è
ã%sãã"
-#: ../src/daemon/main.c:191
+#: ../src/daemon/main.c:196
#, c-format
msgid "Failed to find group '%s'."
msgstr "æ¾ä¸å°ç¾¤çµã%sãã"
-#: ../src/daemon/main.c:195
+#: ../src/daemon/main.c:200
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "æ¾å°ä½¿ç¨è
ã%sã(UID %lu) è群çµã%sã(GID %lu)ã"
-#: ../src/daemon/main.c:200
+#: ../src/daemon/main.c:205
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "使ç¨è
ã%sãç GID è群çµã%sãç GID ä¸ç¸ç¬¦ã"
-#: ../src/daemon/main.c:205
+#: ../src/daemon/main.c:210
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "使ç¨è
ã%sãç家ç®éä¸æ¯ã%sãï¼å¿½ç¥ä¸ã"
-#: ../src/daemon/main.c:208
-#: ../src/daemon/main.c:213
+#: ../src/daemon/main.c:213 ../src/daemon/main.c:218
#, c-format
msgid "Failed to create '%s': %s"
msgstr "æªè½å»ºç«ã%sãï¼%s"
-#: ../src/daemon/main.c:220
+#: ../src/daemon/main.c:225
#, c-format
msgid "Failed to change group list: %s"
msgstr "æªè½è®æ´ç¾¤çµæ¸
å®ï¼%s"
-#: ../src/daemon/main.c:236
+#: ../src/daemon/main.c:241
#, c-format
msgid "Failed to change GID: %s"
msgstr "æªè½è®æ´ GICï¼%s"
-#: ../src/daemon/main.c:252
+#: ../src/daemon/main.c:257
#, c-format
msgid "Failed to change UID: %s"
msgstr "æªè½è®æ´ UIDï¼%s"
-#: ../src/daemon/main.c:271
+#: ../src/daemon/main.c:276
msgid "Successfully dropped root privileges."
msgstr "æåå°æ¾ä¸ root ç¹æ¬ã"
-#: ../src/daemon/main.c:279
+#: ../src/daemon/main.c:284
msgid "System wide mode unsupported on this platform."
msgstr "æ¬å¹³å°ä¸æ¯æ´ system wide 模å¼ã"
-#: ../src/daemon/main.c:297
+#: ../src/daemon/main.c:302
#, c-format
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) 失æï¼%s"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:502
msgid "Failed to parse command line."
msgstr "æªè½è§£æå½ä»¤åã"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:535
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+
+#: ../src/daemon/main.c:617
msgid "Daemon not running"
msgstr "å¹å¾ç¨å¼æ²æå¨å·è¡ä¸"
-#: ../src/daemon/main.c:543
+#: ../src/daemon/main.c:619
#, c-format
msgid "Daemon running as PID %u"
msgstr "å¹å¾ç¨å¼æ£å¨å·è¡ä¸ï¼PID çº %u "
-#: ../src/daemon/main.c:553
+#: ../src/daemon/main.c:634
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "æªè½çµæå¹å¾ç¨å¼ï¼%s"
-#: ../src/daemon/main.c:571
-msgid "This program is not intended to be run as root (unless --system is specified)."
+#: ../src/daemon/main.c:662
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
msgstr "æ¬ç¨å¼ä¸é æ以 root 身份å·è¡ï¼é¤éææå® --systemï¼ã"
-#: ../src/daemon/main.c:573
+#: ../src/daemon/main.c:665
msgid "Root privileges required."
msgstr "éè¦ root ç¹æ¬ã"
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:671
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:583
+#: ../src/daemon/main.c:676
+#, c-format
+msgid "User-configured server at %s, not autospawning."
+msgstr ""
+
+#: ../src/daemon/main.c:683
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:586
+#: ../src/daemon/main.c:686
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:589
+#: ../src/daemon/main.c:689
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:594
+#: ../src/daemon/main.c:694
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:621
+#: ../src/daemon/main.c:720
msgid "Failed to acquire stdio."
msgstr "æªè½ç²å stdioã"
-#: ../src/daemon/main.c:627
-#, c-format
-msgid "pipe failed: %s"
+#: ../src/daemon/main.c:726
+#, fuzzy, c-format
+msgid "pipe() failed: %s"
msgstr "pipe 失æ: %s"
-#: ../src/daemon/main.c:632
+#: ../src/daemon/main.c:731 ../src/daemon/main.c:790
#, c-format
msgid "fork() failed: %s"
msgstr "fork() 失æ: %s"
-#: ../src/daemon/main.c:646
-#: ../src/utils/pacat.c:508
+#: ../src/daemon/main.c:745 ../src/utils/pacat.c:529
#, c-format
msgid "read() failed: %s"
msgstr "read() 失æ: %s"
-#: ../src/daemon/main.c:652
+#: ../src/daemon/main.c:751
msgid "Daemon startup failed."
msgstr "å¹å¾ç¨å¼åå失æã"
-#: ../src/daemon/main.c:654
+#: ../src/daemon/main.c:753
msgid "Daemon startup successful."
msgstr "å¹å¾ç¨å¼ååæåã"
-#: ../src/daemon/main.c:731
+#: ../src/daemon/main.c:778
+#, fuzzy, c-format
+msgid "setsid() failed: %s"
+msgstr "read() 失æ: %s"
+
+#: ../src/daemon/main.c:830
#, c-format
msgid "This is PulseAudio %s"
msgstr "éæ¯ PulseAudio %s"
-#: ../src/daemon/main.c:732
+#: ../src/daemon/main.c:831
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:832
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:736
+#: ../src/daemon/main.c:835
#, c-format
msgid "Running on host: %s"
msgstr "æ£å¨å·è¡æ¼æ¤ä¸»æ©ä¸ï¼%s"
-#: ../src/daemon/main.c:739
+#: ../src/daemon/main.c:838
#, c-format
msgid "Found %u CPUs."
msgstr "æ¾å° %u å CPUã"
-#: ../src/daemon/main.c:741
+#: ../src/daemon/main.c:840
#, c-format
msgid "Page size is %lu bytes"
msgstr "åé 大å°çº %lu bytes"
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:843
msgid "Compiled with Valgrind support: yes"
msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼æ¯"
-#: ../src/daemon/main.c:746
+#: ../src/daemon/main.c:845
msgid "Compiled with Valgrind support: no"
msgstr "以 Valgrind æ¯æ´é²è¡ç·¨è¯ï¼å¦"
-#: ../src/daemon/main.c:749
+#: ../src/daemon/main.c:848
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "æ£å¨ä»¥ valgrind 模å¼å·è¡ä¸ï¼%s"
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:850
+#, fuzzy, c-format
+msgid "Running in VM: %s"
+msgstr "æ£å¨å·è¡æ¼æ¤ä¸»æ©ä¸ï¼%s"
+
+#: ../src/daemon/main.c:853
msgid "Optimized build: yes"
msgstr "æä½³åç建æ§çæ¬ï¼æ¯"
-#: ../src/daemon/main.c:754
+#: ../src/daemon/main.c:855
msgid "Optimized build: no"
msgstr "æä½³åç建æ§çæ¬ï¼å¦"
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:859
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:760
+#: ../src/daemon/main.c:861
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:762
+#: ../src/daemon/main.c:863
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:766
+#: ../src/daemon/main.c:867
msgid "Failed to get machine ID"
msgstr "æªè½åå¾æ©å¨ ID"
-#: ../src/daemon/main.c:769
+#: ../src/daemon/main.c:870
#, c-format
msgid "Machine ID is %s."
msgstr "æ©å¨ ID çº %sã"
-#: ../src/daemon/main.c:773
+#: ../src/daemon/main.c:874
#, c-format
msgid "Session ID is %s."
msgstr "å·¥ä½é段 ID çº %sã"
-#: ../src/daemon/main.c:779
+#: ../src/daemon/main.c:880
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:885
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:787
+#: ../src/daemon/main.c:888
#, c-format
msgid "Using modules directory %s."
msgstr "使ç¨æ¨¡çµç®é %sã"
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:890
#, c-format
msgid "Running in system mode: %s"
msgstr "以系統模å¼å·è¡ä¸ï¼%s"
-#: ../src/daemon/main.c:792
+#: ../src/daemon/main.c:893
msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely "
+"shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as "
+"expected.\n"
+"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
+"explanation why system mode is usually a bad idea."
msgstr ""
-#: ../src/daemon/main.c:809
+#: ../src/daemon/main.c:910
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() 失æã"
-#: ../src/daemon/main.c:819
+#: ../src/daemon/main.c:920
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ææ°é®®çé«è§£æ度è¨æå¨å¯ç¨ï¼æææ¨æå好é£æ
¾ï¼"
-#: ../src/daemon/main.c:821
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+#: ../src/daemon/main.c:922
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
msgstr "å
çï¼æ¨çæ ¸å¿ç³éäºï¼ä»æ¥ä¸»å»æ¨è¦æ¯åç¨é«è§£æ度è¨æå¨ç Linuxï¼"
-#: ../src/daemon/main.c:844
+#: ../src/daemon/main.c:945
msgid "pa_core_new() failed."
msgstr "pa_core_new() 失æã"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:1008
msgid "Failed to initialize daemon."
msgstr "æªè½åå§åå¹å¾ç¨å¼ã"
-#: ../src/daemon/main.c:909
+#: ../src/daemon/main.c:1013
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "å¹å¾ç¨å¼ååèæ²æä»»ä½è¼å
¥ç模çµï¼æçµéä½ã"
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:1051
msgid "Daemon startup complete."
msgstr "å¹å¾ç¨å¼ååå®æã"
-#: ../src/daemon/main.c:932
+#: ../src/daemon/main.c:1057
msgid "Daemon shutdown initiated."
msgstr "å¹å¾ç¨å¼å·²éå§ééã"
-#: ../src/daemon/main.c:954
+#: ../src/daemon/main.c:1083
msgid "Daemon terminated."
msgstr "å¹å¾ç¨å¼å·²çµæ¢ã"
@@ -381,37 +417,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"
@@ -422,10 +469,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"
@@ -440,7 +489,9 @@ msgid "--fail expects boolean argument"
msgstr ""
#: ../src/daemon/cmdline.c:264
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of 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 ""
#: ../src/daemon/cmdline.c:276
@@ -537,76 +588,83 @@ msgstr "åå°è¦åï¼%s\n"
msgid "Path: %s\n"
msgstr "è·¯å¾ï¼%s\n"
-#: ../src/daemon/daemon-conf.c:232
+#: ../src/daemon/daemon-conf.c:251
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:248
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:264
+#: ../src/daemon/daemon-conf.c:283
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ç¡æçéæ°å樣æ¹æ³ã%sãã"
-#: ../src/daemon/daemon-conf.c:287
+#: ../src/daemon/daemon-conf.c:306
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:294
+#: ../src/daemon/daemon-conf.c:313
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
-#: ../src/daemon/daemon-conf.c:310
+#: ../src/daemon/daemon-conf.c:329
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:328
+#: ../src/daemon/daemon-conf.c:347
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:352
+#: ../src/daemon/daemon-conf.c:371
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:370
+#: ../src/daemon/daemon-conf.c:389
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:407
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:425
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:424
+#: ../src/daemon/daemon-conf.c:443
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
-#: ../src/daemon/daemon-conf.c:546
+#: ../src/daemon/daemon-conf.c:479
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] ç¡æçéæ°å樣æ¹æ³ã%sãã"
+
+#: ../src/daemon/daemon-conf.c:586
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "æªè½éåé
ç½®æªï¼%s"
-#: ../src/daemon/daemon-conf.c:562
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
+#: ../src/daemon/daemon-conf.c:602
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
msgstr "æå®çé è¨è²éå°æ表çè²éæ¸èæå®çé è¨è²éæ¸ä¸åã"
-#: ../src/daemon/daemon-conf.c:638
+#: ../src/daemon/daemon-conf.c:688
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### å¾æ¤é
ç½®æªè®åï¼%s ###\n"
@@ -623,8 +681,7 @@ msgstr "PulseAudio é³æ系統"
msgid "Start the PulseAudio Sound System"
msgstr "åå PulseAudio é³æ系統"
-#: ../src/pulse/channelmap.c:105
-#: ../src/pulse/channelmap.c:757
+#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
msgid "Mono"
msgstr "å®è²é"
@@ -653,8 +710,8 @@ msgid "Rear Right"
msgstr "å³å¾æ¹"
#: ../src/pulse/channelmap.c:115
-msgid "Low Frequency Emmiter"
-msgstr "ä½é »çæè²å¨"
+msgid "Subwoofer"
+msgstr ""
#: ../src/pulse/channelmap.c:117
msgid "Front Left-of-center"
@@ -828,12 +885,9 @@ msgstr "é 端左å¾æ¹"
msgid "Top Rear Right"
msgstr "é 端å³å¾æ¹"
-#: ../src/pulse/channelmap.c:484
-#: ../src/pulse/sample.c:170
-#: ../src/pulse/volume.c:295
-#: ../src/pulse/volume.c:321
-#: ../src/pulse/volume.c:341
-#: ../src/pulse/volume.c:371
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
+#: ../src/pulse/volume.c:295 ../src/pulse/volume.c:321
+#: ../src/pulse/volume.c:341 ../src/pulse/volume.c:371
msgid "(invalid)"
msgstr "(ç¡æ)"
@@ -994,8 +1048,7 @@ msgstr "%0.1f KiB"
msgid "%u B"
msgstr "%u B"
-#: ../src/pulse/client-conf-x11.c:55
-#: ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
msgstr "XOpenDisplay() 失æ"
@@ -1003,192 +1056,190 @@ msgstr "XOpenDisplay() 失æ"
msgid "Failed to parse cookie data"
msgstr "æªè½è§£æ cookie è³æ"
-#: ../src/pulse/client-conf.c:111
+#: ../src/pulse/client-conf.c:118
#, c-format
msgid "Failed to open configuration file '%s': %s"
msgstr "æªè½éåé
ç½®æªã%sãï¼%s"
-#: ../src/pulse/context.c:550
+#: ../src/pulse/context.c:539
msgid "No cookie loaded. Attempting to connect without."
msgstr "æ²æè¼å
¥ cookieã試åé£æ¥èä¸ç¨ cookieã"
-#: ../src/pulse/context.c:693
+#: ../src/pulse/context.c:682
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:748
+#: ../src/pulse/context.c:737
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1438
+#: ../src/pulse/context.c:1434
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "å·²æ¥æ¶å°æªç¥æ´å±åè½çè¨æ¯ã%sã"
-#: ../src/utils/pacat.c:108
+#: ../src/utils/pacat.c:110
#, c-format
msgid "Failed to drain stream: %s"
msgstr "æªè½æåºä¸²æµï¼%s"
-#: ../src/utils/pacat.c:113
+#: ../src/utils/pacat.c:115
msgid "Playback stream drained."
msgstr "ææ¾æ§å¶ä¸²æµå·²æåºã"
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:125
msgid "Draining connection to server."
msgstr "æ£å¨æåºé£ç·å°ä¼ºæå¨ã"
-#: ../src/utils/pacat.c:136
+#: ../src/utils/pacat.c:138
#, c-format
msgid "pa_stream_drain(): %s"
msgstr "pa_stream_drain(): %s"
-#: ../src/utils/pacat.c:159
+#: ../src/utils/pacat.c:161
#, c-format
msgid "pa_stream_write() failed: %s"
msgstr "pa_stream_write() failed: %s"
-#: ../src/utils/pacat.c:197
+#: ../src/utils/pacat.c:202
#, c-format
msgid "pa_stream_begin_write() failed: %s"
msgstr "pa_stream_begin_write() 失æ: %s"
-#: ../src/utils/pacat.c:237
-#: ../src/utils/pacat.c:267
+#: ../src/utils/pacat.c:252 ../src/utils/pacat.c:282
#, c-format
msgid "pa_stream_peek() failed: %s"
msgstr "pa_stream_peek() 失æ: %s"
-#: ../src/utils/pacat.c:307
+#: ../src/utils/pacat.c:322
msgid "Stream successfully created."
msgstr "å·²æå建ç«ä¸²æµã"
-#: ../src/utils/pacat.c:310
+#: ../src/utils/pacat.c:325
#, c-format
msgid "pa_stream_get_buffer_attr() failed: %s"
msgstr "pa_stream_get_buffer_attr() 失æ: %s"
-#: ../src/utils/pacat.c:314
+#: ../src/utils/pacat.c:329
#, c-format
msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
msgstr ""
-#: ../src/utils/pacat.c:317
+#: ../src/utils/pacat.c:332
#, c-format
msgid "Buffer metrics: maxlength=%u, fragsize=%u"
msgstr ""
-#: ../src/utils/pacat.c:321
+#: ../src/utils/pacat.c:336
#, c-format
msgid "Using sample spec '%s', channel map '%s'."
msgstr "使ç¨å樣è¦æ ¼ã%sãï¼è²éå°æ表ã%sã"
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:340
#, c-format
msgid "Connected to device %s (%u, %ssuspended)."
msgstr "æ£å¨é£æ¥å°è£ç½® %s (%u, %ssuspended)ã"
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:350
#, c-format
msgid "Stream error: %s"
msgstr "串æµé¯èª¤ï¼%s"
-#: ../src/utils/pacat.c:345
+#: ../src/utils/pacat.c:360
#, c-format
msgid "Stream device suspended.%s"
msgstr "串æµè£ç½®å·²æ«åã%s"
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:362
#, c-format
msgid "Stream device resumed.%s"
msgstr "串æµè£ç½®å·²æ¢å¾©ï¼%s"
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:370
#, c-format
msgid "Stream underrun.%s"
msgstr "串æµæ¬ è¼éè¡ã%s"
-#: ../src/utils/pacat.c:362
+#: ../src/utils/pacat.c:377
#, c-format
msgid "Stream overrun.%s"
msgstr "串æµè¶
è¼éè¡ã%s"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:384
#, c-format
msgid "Stream started.%s"
msgstr "串æµå·²éå§ã%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
#, c-format
msgid "Stream moved to device %s (%u, %ssuspended).%s"
msgstr "串æµç§»è³è£ç½® %s (%u, %ssuspended)ã%s"
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:391
msgid "not "
msgstr "ä¸æ¯"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:398
#, c-format
msgid "Stream buffer attributes changed.%s"
msgstr "串æµç·©è¡ç¹å¾µå·²è®æ´ã%s"
-#: ../src/utils/pacat.c:415
+#: ../src/utils/pacat.c:430
#, c-format
msgid "Connection established.%s"
msgstr "é£ç·å·²å»ºç«ã%s"
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:433
#, c-format
msgid "pa_stream_new() failed: %s"
msgstr "pa_stream_new() 失æï¼%s"
-#: ../src/utils/pacat.c:450
+#: ../src/utils/pacat.c:471
#, c-format
msgid "pa_stream_connect_playback() failed: %s"
msgstr "pa_stream_connect_playback() 失æï¼%s"
-#: ../src/utils/pacat.c:456
+#: ../src/utils/pacat.c:477
#, c-format
msgid "pa_stream_connect_record() failed: %s"
msgstr "pa_stream_connect_record() 失æï¼%s"
-#: ../src/utils/pacat.c:470
-#: ../src/utils/pactl.c:857
+#: ../src/utils/pacat.c:491 ../src/utils/pactl.c:949
#, c-format
msgid "Connection failure: %s"
msgstr "é£ç·å¤±æï¼%s"
-#: ../src/utils/pacat.c:503
+#: ../src/utils/pacat.c:524
msgid "Got EOF."
msgstr "åå¾æªæ¡çµå°¾ (EOF)ã"
-#: ../src/utils/pacat.c:540
+#: ../src/utils/pacat.c:561
#, c-format
msgid "write() failed: %s"
msgstr "write() 失æï¼%s"
-#: ../src/utils/pacat.c:561
+#: ../src/utils/pacat.c:582
msgid "Got signal, exiting."
msgstr "åå¾è¨èï¼æ£å¨éåºã"
-#: ../src/utils/pacat.c:575
+#: ../src/utils/pacat.c:596
#, c-format
msgid "Failed to get latency: %s"
msgstr "æªè½åå¾å³è¼¸å»¶é²ï¼%s"
-#: ../src/utils/pacat.c:580
+#: ../src/utils/pacat.c:601
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec."
msgstr "æéï¼%0.3f ç§ï¼å»¶é²ï¼%0.0f å¾®ç§ã"
-#: ../src/utils/pacat.c:599
+#: ../src/utils/pacat.c:620
#, c-format
msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() 失æï¼%s"
-#: ../src/utils/pacat.c:609
+#: ../src/utils/pacat.c:630
#, c-format
msgid ""
"%s [options]\n"
@@ -1201,35 +1252,58 @@ 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, s24le, s24be,\n"
-" s24-32le, s24-32be (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, "
+"s24le, s24be,\n"
+" s24-32le, s24-32be (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"
-" --property=PROPERTY=VALUE Set the specified property to the specified value.\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"
+" --latency-msec=MSEC Request the specified latency in "
+"msec.\n"
+" --process-time-msec=MSEC Request the specified process time "
+"per request in msec.\n"
+" --property=PROPERTY=VALUE Set the specified property to the "
+"specified value.\n"
" --raw Record/play raw PCM data.\n"
-" --file-format=FFORMAT Record/play formatted PCM data.\n"
+" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
msgstr ""
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:758
#, c-format
msgid ""
"pacat %s\n"
@@ -1237,183 +1311,181 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:764
-#: ../src/utils/pactl.c:953
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1046
#, c-format
msgid "Invalid client name '%s'"
msgstr "ç¡æç客æ¶ç«¯å稱ã%sã"
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:806
#, c-format
msgid "Invalid stream name '%s'"
msgstr "ç¡æç串æµå稱ã%sã"
-#: ../src/utils/pacat.c:816
+#: ../src/utils/pacat.c:843
#, c-format
msgid "Invalid channel map '%s'"
msgstr "ç¡æçè²éå°æ表ã%sã"
-#: ../src/utils/pacat.c:845
+#: ../src/utils/pacat.c:872 ../src/utils/pacat.c:886
#, c-format
msgid "Invalid latency specification '%s'"
msgstr "ç¡æç延é²è¦æ ¼ã%sã"
-#: ../src/utils/pacat.c:852
+#: ../src/utils/pacat.c:879 ../src/utils/pacat.c:893
#, c-format
msgid "Invalid process time specification '%s'"
msgstr "ç¡æçç¨åºæéè¦æ ¼ã%sã"
-#: ../src/utils/pacat.c:864
+#: ../src/utils/pacat.c:905
#, c-format
msgid "Invalid property '%s'"
msgstr "ç¡æç屬æ§ã%sã"
-#: ../src/utils/pacat.c:881
+#: ../src/utils/pacat.c:922
#, c-format
msgid "Unknown file format %s."
msgstr "æªç¥æªæ¡æ ¼å¼ %sã"
-#: ../src/utils/pacat.c:900
+#: ../src/utils/pacat.c:941
msgid "Invalid sample specification"
msgstr "ç¡æçå樣è¦æ ¼"
-#: ../src/utils/pacat.c:910
+#: ../src/utils/pacat.c:951
#, c-format
msgid "open(): %s"
msgstr "open(): %s"
-#: ../src/utils/pacat.c:915
+#: ../src/utils/pacat.c:956
#, c-format
msgid "dup2(): %s"
msgstr "dup2(): %s"
-#: ../src/utils/pacat.c:922
+#: ../src/utils/pacat.c:963
msgid "Too many arguments."
msgstr "太å¤åæ¸ã"
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:974
msgid "Failed to generate sample specification for file."
msgstr "æªè½æ¿æªæ¡ç¢çå樣è¦æ ¼ã"
-#: ../src/utils/pacat.c:953
+#: ../src/utils/pacat.c:994
msgid "Failed to open audio file."
msgstr "æªè½éåé³ææªã"
-#: ../src/utils/pacat.c:959
-msgid "Warning: specified sample specification will be overwritten with specification from file."
+#: ../src/utils/pacat.c:1000
+msgid ""
+"Warning: specified sample specification will be overwritten with "
+"specification from file."
msgstr "è¦åï¼æå®çå樣è¦æ ¼å°æè¦å¯«å¾æªæ¡å¾å°çè¦æ ¼ã"
-#: ../src/utils/pacat.c:962
-#: ../src/utils/pactl.c:997
+#: ../src/utils/pacat.c:1003 ../src/utils/pactl.c:1090
msgid "Failed to determine sample specification from file."
msgstr "æªè½å¾æªæ¡å¾ç¥å樣è¦æ ¼ã"
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:1012
msgid "Warning: Failed to determine channel map from file."
msgstr "è¦åï¼æªè½å¾æªæ¡åå¾è²éå°æ表ã"
-#: ../src/utils/pacat.c:982
+#: ../src/utils/pacat.c:1023
msgid "Channel map doesn't match sample specification"
msgstr "è²éå°æ表èå樣è¦æ ¼ä¸ç¬¦"
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1034
msgid "Warning: failed to write channel map to file."
msgstr "è¦åï¼æªè½å°è²éå°æ表寫å
¥æªæ¡ã"
-#: ../src/utils/pacat.c:1008
+#: ../src/utils/pacat.c:1049
#, c-format
-msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid ""
+"Opening a %s stream with sample specification '%s' and channel map '%s'."
msgstr "æ£å¨éåä¸é %s 串æµï¼å樣è¦æ ¼çºã%sãï¼è²éå°æ表çºã%sãã"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "recording"
msgstr "é製"
-#: ../src/utils/pacat.c:1009
+#: ../src/utils/pacat.c:1050
msgid "playback"
msgstr "ææ¾æ§å¶"
-#: ../src/utils/pacat.c:1035
-#: ../src/utils/pactl.c:1267
+#: ../src/utils/pacat.c:1076 ../src/utils/pactl.c:1364
msgid "pa_mainloop_new() failed."
msgstr "pa_mainloop_new() 失æã"
-#: ../src/utils/pacat.c:1054
+#: ../src/utils/pacat.c:1095
msgid "io_new() failed."
msgstr "io_new() 失æã"
-#: ../src/utils/pacat.c:1061
-#: ../src/utils/pactl.c:1279
+#: ../src/utils/pacat.c:1102 ../src/utils/pactl.c:1376
msgid "pa_context_new() failed."
msgstr "pa_context_new() 失æã"
-#: ../src/utils/pacat.c:1069
-#: ../src/utils/pactl.c:1285
+#: ../src/utils/pacat.c:1110 ../src/utils/pactl.c:1382
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() 失æï¼%s"
-#: ../src/utils/pacat.c:1075
+#: ../src/utils/pacat.c:1116
msgid "pa_context_rttime_new() failed."
msgstr "pa_context_rttime_new() 失æã"
-#: ../src/utils/pacat.c:1082
-#: ../src/utils/pactl.c:1290
+#: ../src/utils/pacat.c:1123 ../src/utils/pactl.c:1387
msgid "pa_mainloop_run() failed."
msgstr "pa_mainloop_run() 失æã"
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
#, c-format
msgid "fork(): %s\n"
msgstr "fork(): %s\n"
-#: ../src/utils/pasuspender.c:92
+#: ../src/utils/pasuspender.c:90
#, c-format
msgid "execvp(): %s\n"
msgstr "execvp(): %s\n"
-#: ../src/utils/pasuspender.c:109
+#: ../src/utils/pasuspender.c:107
#, c-format
msgid "Failure to suspend: %s\n"
msgstr "æªè½æ«åï¼%s\n"
-#: ../src/utils/pasuspender.c:124
+#: ../src/utils/pasuspender.c:122
#, c-format
msgid "Failure to resume: %s\n"
msgstr "æªè½æ¢å¾©ï¼%s\n"
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
#, c-format
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "è¦åï¼é³æ伺æå¨ä¸¦éæ¬æ©ï¼ä¸ææ«åã\n"
-#: ../src/utils/pasuspender.c:159
+#: ../src/utils/pasuspender.c:157
#, c-format
msgid "Connection failure: %s\n"
msgstr "é£ç·å¤±æï¼%s\n"
-#: ../src/utils/pasuspender.c:176
+#: ../src/utils/pasuspender.c:174
#, c-format
msgid "Got SIGINT, exiting.\n"
msgstr "åå¾ SIGINTï¼æ£å¨éåºã\n"
-#: ../src/utils/pasuspender.c:194
+#: ../src/utils/pasuspender.c:192
#, c-format
msgid "WARNING: Child process terminated by signal %u\n"
msgstr "è¦åï¼åç¨åºå·²è¢«è¨è %u æçµæ¢\n"
-#: ../src/utils/pasuspender.c:212
+#: ../src/utils/pasuspender.c:210
#, c-format
msgid ""
"%s [options] ... \n"
"\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 ""
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pasuspender.c:246
#, c-format
msgid ""
"pasuspender %s\n"
@@ -1421,50 +1493,61 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pasuspender.c:275
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() 失æã\n"
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pasuspender.c:288
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() 失æã\n"
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pasuspender.c:296
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() 失æã\n"
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:134
#, c-format
msgid "Failed to get statistics: %s"
msgstr "æªè½åå¾çµ±è¨ï¼%s"
-#: ../src/utils/pactl.c:141
+#: ../src/utils/pactl.c:140
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:144
+#: ../src/utils/pactl.c:143
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:147
+#: ../src/utils/pactl.c:146
#, c-format
msgid "Sample cache size: %s\n"
msgstr "å樣快å大å°ï¼%s\n"
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:155
#, c-format
msgid "Failed to get server information: %s"
msgstr "æªè½åå¾ä¼ºæå¨è³è¨ï¼%s"
-#: ../src/utils/pactl.c:164
+#: ../src/utils/pactl.c:160
+#, c-format
+msgid ""
+"Server String: %s\n"
+"Library Protocol Version: %u\n"
+"Server Protocol Version: %u\n"
+"Is Local: %s\n"
+"Client Index: %u\n"
+"Tile Size: %zu\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:176
#, c-format
msgid ""
-"User name: %s\n"
+"User Name: %s\n"
"Host Name: %s\n"
"Server Name: %s\n"
"Server Version: %s\n"
@@ -1472,15 +1555,15 @@ msgid ""
"Default Channel Map: %s\n"
"Default Sink: %s\n"
"Default Source: %s\n"
-"Cookie: %08x\n"
+"Cookie: %04x:%04x\n"
msgstr ""
-#: ../src/utils/pactl.c:205
+#: ../src/utils/pactl.c:218
#, c-format
msgid "Failed to get sink information: %s"
msgstr "æªè½åå¾ sink è³è¨ï¼%s"
-#: ../src/utils/pactl.c:221
+#: ../src/utils/pactl.c:234
#, c-format
msgid ""
"Sink #%u\n"
@@ -1502,24 +1585,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:268
-#: ../src/utils/pactl.c:360
+#: ../src/utils/pactl.c:281 ../src/utils/pactl.c:373
#, c-format
msgid "\tPorts:\n"
msgstr ""
-#: ../src/utils/pactl.c:274
-#: ../src/utils/pactl.c:366
+#: ../src/utils/pactl.c:287 ../src/utils/pactl.c:379
#, c-format
msgid "\tActive Port: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:297
+#: ../src/utils/pactl.c:310
#, c-format
msgid "Failed to get source information: %s"
msgstr "æªè½åå¾ä¾æºè³è¨ï¼%s"
-#: ../src/utils/pactl.c:313
+#: ../src/utils/pactl.c:326
#, c-format
msgid ""
"Source #%u\n"
@@ -1541,28 +1622,20 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:345
-#: ../src/utils/pactl.c:401
-#: ../src/utils/pactl.c:436
-#: ../src/utils/pactl.c:473
-#: ../src/utils/pactl.c:532
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:543
-#: ../src/utils/pactl.c:587
-#: ../src/utils/pactl.c:588
-#: ../src/utils/pactl.c:594
-#: ../src/utils/pactl.c:637
-#: ../src/utils/pactl.c:638
-#: ../src/utils/pactl.c:645
+#: ../src/utils/pactl.c:358 ../src/utils/pactl.c:414 ../src/utils/pactl.c:449
+#: ../src/utils/pactl.c:486 ../src/utils/pactl.c:545 ../src/utils/pactl.c:546
+#: ../src/utils/pactl.c:556 ../src/utils/pactl.c:600 ../src/utils/pactl.c:601
+#: ../src/utils/pactl.c:607 ../src/utils/pactl.c:650 ../src/utils/pactl.c:651
+#: ../src/utils/pactl.c:658
msgid "n/a"
msgstr "n/a"
-#: ../src/utils/pactl.c:375
+#: ../src/utils/pactl.c:388
#, c-format
msgid "Failed to get module information: %s"
msgstr "æªè½åå¾æ¨¡çµè³è¨ï¼%s"
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:406
#, c-format
msgid ""
"Module #%u\n"
@@ -1573,12 +1646,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:412
+#: ../src/utils/pactl.c:425
#, c-format
msgid "Failed to get client information: %s"
msgstr "æªè½åå¾å®¢æ¶ç«¯è³è¨ï¼%s"
-#: ../src/utils/pactl.c:430
+#: ../src/utils/pactl.c:443
#, c-format
msgid ""
"Client #%u\n"
@@ -1588,12 +1661,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:447
+#: ../src/utils/pactl.c:460
#, c-format
msgid "Failed to get card information: %s"
msgstr "æªè½åå¾é³æå¡è³è¨ï¼%s"
-#: ../src/utils/pactl.c:465
+#: ../src/utils/pactl.c:478
#, c-format
msgid ""
"Card #%u\n"
@@ -1604,22 +1677,22 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:492
#, c-format
msgid "\tProfiles:\n"
msgstr "\tå人è¨å®æªï¼\n"
-#: ../src/utils/pactl.c:485
+#: ../src/utils/pactl.c:498
#, c-format
msgid "\tActive Profile: %s\n"
msgstr "\tåç¨çå人è¨å®æªï¼%s\n"
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:509
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "æªè½åå¾ sink 輸å
¥è³è¨ï¼%s"
-#: ../src/utils/pactl.c:515
+#: ../src/utils/pactl.c:528
#, c-format
msgid ""
"Sink Input #%u\n"
@@ -1640,12 +1713,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:554
+#: ../src/utils/pactl.c:567
#, c-format
msgid "Failed to get source output information: %s"
msgstr "æªè½åå¾ä¾æºè¼¸åºè³è¨ï¼%s"
-#: ../src/utils/pactl.c:574
+#: ../src/utils/pactl.c:587
#, c-format
msgid ""
"Source Output #%u\n"
@@ -1662,12 +1735,12 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:605
+#: ../src/utils/pactl.c:618
#, c-format
msgid "Failed to get sample information: %s"
msgstr "æªè½åå¾å樣è³è¨ï¼%s"
-#: ../src/utils/pactl.c:623
+#: ../src/utils/pactl.c:636
#, c-format
msgid ""
"Sample #%u\n"
@@ -1685,26 +1758,79 @@ msgid ""
"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:653
-#: ../src/utils/pactl.c:663
+#: ../src/utils/pactl.c:666 ../src/utils/pactl.c:676
#, c-format
msgid "Failure: %s"
msgstr "失æï¼%s"
-#: ../src/utils/pactl.c:687
+#: ../src/utils/pactl.c:700
#, c-format
msgid "Failed to upload sample: %s"
msgstr "æªè½ä¸å³æ¨£æ¬ï¼%s"
-#: ../src/utils/pactl.c:704
+#: ../src/utils/pactl.c:717
msgid "Premature end of file"
msgstr "æªå®æçæªæ¡çµå°¾"
-#: ../src/utils/pactl.c:863
+#: ../src/utils/pactl.c:737
+msgid "new"
+msgstr ""
+
+#: ../src/utils/pactl.c:740
+msgid "change"
+msgstr ""
+
+#: ../src/utils/pactl.c:743
+msgid "remove"
+msgstr ""
+
+#: ../src/utils/pactl.c:746 ../src/utils/pactl.c:781
+msgid "unknown"
+msgstr ""
+
+#: ../src/utils/pactl.c:754
+msgid "sink"
+msgstr ""
+
+#: ../src/utils/pactl.c:757
+msgid "source"
+msgstr ""
+
+#: ../src/utils/pactl.c:760
+msgid "sink-input"
+msgstr ""
+
+#: ../src/utils/pactl.c:763
+msgid "source-output"
+msgstr ""
+
+#: ../src/utils/pactl.c:766
+msgid "module"
+msgstr ""
+
+#: ../src/utils/pactl.c:769
+msgid "client"
+msgstr ""
+
+#: ../src/utils/pactl.c:772
+msgid "sample-cache"
+msgstr ""
+
+#: ../src/utils/pactl.c:775 ../src/utils/pactl.c:778
+#, fuzzy
+msgid "server"
+msgstr "ç¡æç伺æå¨"
+
+#: ../src/utils/pactl.c:787
+#, c-format
+msgid "Event '%s' on %s #%u\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:955
msgid "Got SIGINT, exiting."
msgstr "åå¾ SIGINTï¼æ£å¨éåºã"
-#: ../src/utils/pactl.c:869
+#: ../src/utils/pactl.c:961
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1728,15 +1854,18 @@ msgid ""
"%s [options] set-sink-mute SINK 1|0\n"
"%s [options] set-source-mute SOURCE 1|0\n"
"%s [options] set-sink-input-mute SINKINPUT 1|0\n"
+"%s [options] subscribe\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:933
+#: ../src/utils/pactl.c:1026
#, c-format
msgid ""
"pactl %s\n"
@@ -1744,104 +1873,104 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:979
+#: ../src/utils/pactl.c:1072
msgid "Please specify a sample file to load"
msgstr "è«æ¨å®è¦è¼å
¥çå樣æª"
-#: ../src/utils/pactl.c:992
+#: ../src/utils/pactl.c:1085
msgid "Failed to open sound file."
msgstr "æªè½éåé³ææªã"
-#: ../src/utils/pactl.c:1004
+#: ../src/utils/pactl.c:1097
msgid "Warning: Failed to determine sample specification from file."
msgstr "è¦åï¼æªè½å¾æªæ¡å¾ç¥å樣è¦æ ¼ã"
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1107
msgid "You have to specify a sample name to play"
msgstr ""
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1119
msgid "You have to specify a sample name to remove"
msgstr ""
-#: ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1128
msgid "You have to specify a sink input index and a sink"
msgstr ""
-#: ../src/utils/pactl.c:1045
+#: ../src/utils/pactl.c:1138
msgid "You have to specify a source output index and a source"
msgstr ""
-#: ../src/utils/pactl.c:1060
+#: ../src/utils/pactl.c:1153
msgid "You have to specify a module name and arguments."
msgstr ""
-#: ../src/utils/pactl.c:1080
+#: ../src/utils/pactl.c:1173
msgid "You have to specify a module index"
msgstr ""
-#: ../src/utils/pactl.c:1090
-msgid "You may not specify more than one sink. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1183
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
-#: ../src/utils/pactl.c:1103
-msgid "You may not specify more than one source. You have to specify a boolean value."
+#: ../src/utils/pactl.c:1196
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value."
msgstr ""
-#: ../src/utils/pactl.c:1115
+#: ../src/utils/pactl.c:1208
msgid "You have to specify a card name/index and a profile name"
msgstr ""
-#: ../src/utils/pactl.c:1126
+#: ../src/utils/pactl.c:1219
msgid "You have to specify a sink name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1137
+#: ../src/utils/pactl.c:1230
msgid "You have to specify a source name/index and a port name"
msgstr ""
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1242
msgid "You have to specify a sink name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1154
-#: ../src/utils/pactl.c:1171
-#: ../src/utils/pactl.c:1193
-#: ../src/utils/pactl.c:1209
-#: ../src/utils/pactl.c:1226
-#: ../src/utils/pactl.c:1248
+#: ../src/utils/pactl.c:1247 ../src/utils/pactl.c:1264
+#: ../src/utils/pactl.c:1286 ../src/utils/pactl.c:1302
+#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1341
msgid "Invalid volume specification"
msgstr ""
-#: ../src/utils/pactl.c:1166
+#: ../src/utils/pactl.c:1259
msgid "You have to specify a source name/index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1183
+#: ../src/utils/pactl.c:1276
msgid "You have to specify a sink input index and a volume"
msgstr ""
-#: ../src/utils/pactl.c:1188
+#: ../src/utils/pactl.c:1281
msgid "Invalid sink input index"
msgstr ""
-#: ../src/utils/pactl.c:1204
+#: ../src/utils/pactl.c:1297
msgid "You have to specify a sink name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1221
+#: ../src/utils/pactl.c:1314
msgid "You have to specify a source name/index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1238
+#: ../src/utils/pactl.c:1331
msgid "You have to specify a sink input index and a mute boolean"
msgstr ""
-#: ../src/utils/pactl.c:1243
+#: ../src/utils/pactl.c:1336
msgid "Invalid sink input index specification"
msgstr ""
-#: ../src/utils/pactl.c:1262
+#: ../src/utils/pactl.c:1359
msgid "No valid command specified."
msgstr "æ²ææå®ææçå½ä»¤ã"
@@ -1852,7 +1981,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 ""
@@ -1916,101 +2046,106 @@ msgstr "æªè½è¼å
¥ cookie è³æ\n"
msgid "Not yet implemented.\n"
msgstr "å°æªå¯¦ä½ã\n"
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:65
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
-#: ../src/utils/pacmd.c:74
+#: ../src/utils/pacmd.c:70
#, c-format
msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
msgstr ""
-#: ../src/utils/pacmd.c:91
+#: ../src/utils/pacmd.c:87
#, c-format
msgid "connect(): %s"
msgstr "connect(): %s"
-#: ../src/utils/pacmd.c:99
+#: ../src/utils/pacmd.c:95
msgid "Failed to kill PulseAudio daemon."
msgstr "æªè½çµæ PulseAudio å¹å¾ç¨å¼ã"
-#: ../src/utils/pacmd.c:107
+#: ../src/utils/pacmd.c:103
msgid "Daemon not responding."
msgstr "å¹å¾ç¨å¼æ²æåæã"
-#: ../src/utils/pacmd.c:161
+#: ../src/utils/pacmd.c:178
#, c-format
msgid "poll(): %s"
msgstr "poll(): %s"
-#: ../src/utils/pacmd.c:171
-#: ../src/utils/pacmd.c:188
+#: ../src/utils/pacmd.c:189 ../src/utils/pacmd.c:209
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:207
-#: ../src/utils/pacmd.c:223
+#: ../src/utils/pacmd.c:231 ../src/utils/pacmd.c:249
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
-#: ../src/pulsecore/lock-autospawn.c:136
-#: ../src/pulsecore/lock-autospawn.c:219
+#: ../src/pulsecore/lock-autospawn.c:134 ../src/pulsecore/lock-autospawn.c:217
msgid "Cannot access autospawn lock."
msgstr ""
-#: ../src/modules/alsa/alsa-sink.c:530
-#: ../src/modules/alsa/alsa-sink.c:689
+#: ../src/modules/alsa/alsa-sink.c:530 ../src/modules/alsa/alsa-sink.c:689
#, c-format
msgid ""
-"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
-#: ../src/modules/alsa/alsa-source.c:506
-#: ../src/modules/alsa/alsa-source.c:656
+#: ../src/modules/alsa/alsa-source.c:506 ../src/modules/alsa/alsa-source.c:656
#, c-format
msgid ""
-"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:152
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2228
-#: ../src/modules/alsa/alsa-mixer.c:2931
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2262
+#: ../src/modules/alsa/alsa-mixer.c:2936
msgid "Off"
msgstr "éé"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2184
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2204
msgid "High Fidelity Playback (A2DP)"
msgstr "é«å³çææ¾è£ç½® (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2198
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2218
msgid "High Fidelity Capture (A2DP)"
msgstr "é«å³çæ·åè£ç½® (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2213
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2233
msgid "Telephony Duplex (HSP/HFP)"
msgstr "é»è©±éå·¥ (HSP/HFP)"
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2247
+msgid "Handsfree Gateway"
+msgstr ""
+
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "PulseAudio é³æ伺æå¨"
-#: ../src/modules/module-rygel-media-server.c:569
-#: ../src/modules/module-rygel-media-server.c:583
+#: ../src/modules/module-rygel-media-server.c:592
+#: ../src/modules/module-rygel-media-server.c:606
msgid "Output Devices"
msgstr "輸åºè£ç½®"
-#: ../src/modules/module-rygel-media-server.c:570
-#: ../src/modules/module-rygel-media-server.c:584
+#: ../src/modules/module-rygel-media-server.c:593
+#: ../src/modules/module-rygel-media-server.c:607
msgid "Input Devices"
msgstr "輸å
¥è£ç½®"
-#: ../src/modules/module-rygel-media-server.c:774
+#: ../src/modules/module-rygel-media-server.c:797
msgid "Audio on @HOSTNAME@"
msgstr "é³æä½æ¼ @HOSTNAME@"
@@ -2074,134 +2209,159 @@ msgstr "æè²å¨"
msgid "No Amplifier"
msgstr "ç¡æè²å¨"
-#: ../src/modules/alsa/alsa-mixer.c:1773
+#: ../src/modules/alsa/alsa-mixer.c:1716
+#, fuzzy
+msgid "Bass Boost"
+msgstr "å éå¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1717
+#, fuzzy
+msgid "No Bass Boost"
+msgstr "ç¡å éå¨"
+
+#: ../src/modules/alsa/alsa-mixer.c:1718
+msgid "Speaker"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-mixer.c:1719
+#, fuzzy
+msgid "Headphones"
+msgstr "é¡æ¯é æ´å¼éº¥å
風"
+
+#: ../src/modules/alsa/alsa-mixer.c:1777
msgid "Analog Input"
msgstr "é¡æ¯è¼¸å
¥"
-#: ../src/modules/alsa/alsa-mixer.c:1774
+#: ../src/modules/alsa/alsa-mixer.c:1778
msgid "Analog Microphone"
msgstr "é¡æ¯éº¥å
風"
-#: ../src/modules/alsa/alsa-mixer.c:1775
+#: ../src/modules/alsa/alsa-mixer.c:1779
msgid "Analog Line-In"
msgstr "é¡æ¯ç·è·¯è¼¸å
¥"
-#: ../src/modules/alsa/alsa-mixer.c:1776
+#: ../src/modules/alsa/alsa-mixer.c:1780
msgid "Analog Radio"
msgstr "é¡æ¯ç¡ç·é»"
-#: ../src/modules/alsa/alsa-mixer.c:1777
+#: ../src/modules/alsa/alsa-mixer.c:1781
msgid "Analog Video"
msgstr "é¡æ¯è¦è¨"
-#: ../src/modules/alsa/alsa-mixer.c:1778
+#: ../src/modules/alsa/alsa-mixer.c:1782
msgid "Analog Output"
msgstr "é¡æ¯è¼¸åº"
-#: ../src/modules/alsa/alsa-mixer.c:1779
+#: ../src/modules/alsa/alsa-mixer.c:1783
msgid "Analog Headphones"
msgstr "é¡æ¯é æ´å¼éº¥å
風"
-#: ../src/modules/alsa/alsa-mixer.c:1780
+#: ../src/modules/alsa/alsa-mixer.c:1784
msgid "Analog Output (LFE)"
msgstr "é¡æ¯è¼¸åº (LFE)"
-#: ../src/modules/alsa/alsa-mixer.c:1781
+#: ../src/modules/alsa/alsa-mixer.c:1785
msgid "Analog Mono Output"
msgstr "é¡æ¯å®è²é輸åº"
-#: ../src/modules/alsa/alsa-mixer.c:1981
+#: ../src/modules/alsa/alsa-mixer.c:1786
+#, fuzzy
+msgid "Analog Speakers"
+msgstr "é¡æ¯ç«é«è²"
+
+#: ../src/modules/alsa/alsa-mixer.c:1986
#, c-format
msgid "%s+%s"
msgstr "%s+%s"
-#: ../src/modules/alsa/alsa-mixer.c:1984
-#: ../src/modules/alsa/alsa-mixer.c:3404
+#: ../src/modules/alsa/alsa-mixer.c:1989 ../src/modules/alsa/alsa-mixer.c:3409
#, c-format
msgid "%s / %s"
msgstr "%s / %s"
-#: ../src/modules/alsa/alsa-mixer.c:2790
+#: ../src/modules/alsa/alsa-mixer.c:2795
msgid "Analog Mono"
msgstr "é¡æ¯å®è²é"
-#: ../src/modules/alsa/alsa-mixer.c:2791
+#: ../src/modules/alsa/alsa-mixer.c:2796
msgid "Analog Stereo"
msgstr "é¡æ¯ç«é«è²"
-#: ../src/modules/alsa/alsa-mixer.c:2792
+#: ../src/modules/alsa/alsa-mixer.c:2797
msgid "Analog Surround 2.1"
msgstr "é¡æ¯ç°ç¹è² 2.1"
-#: ../src/modules/alsa/alsa-mixer.c:2793
+#: ../src/modules/alsa/alsa-mixer.c:2798
msgid "Analog Surround 3.0"
msgstr "é¡æ¯ç°ç¹è² 3.0"
-#: ../src/modules/alsa/alsa-mixer.c:2794
+#: ../src/modules/alsa/alsa-mixer.c:2799
msgid "Analog Surround 3.1"
msgstr "é¡æ¯ç°ç¹è² 3.1"
-#: ../src/modules/alsa/alsa-mixer.c:2795
+#: ../src/modules/alsa/alsa-mixer.c:2800
msgid "Analog Surround 4.0"
msgstr "é¡æ¯ç°ç¹è² 4.0"
-#: ../src/modules/alsa/alsa-mixer.c:2796
+#: ../src/modules/alsa/alsa-mixer.c:2801
msgid "Analog Surround 4.1"
msgstr "é¡æ¯ç°ç¹è² 4.1"
-#: ../src/modules/alsa/alsa-mixer.c:2797
+#: ../src/modules/alsa/alsa-mixer.c:2802
msgid "Analog Surround 5.0"
msgstr "é¡æ¯ç°ç¹è² 5.0"
-#: ../src/modules/alsa/alsa-mixer.c:2798
+#: ../src/modules/alsa/alsa-mixer.c:2803
msgid "Analog Surround 5.1"
msgstr "é¡æ¯ç°ç¹è² 5.1"
-#: ../src/modules/alsa/alsa-mixer.c:2799
+#: ../src/modules/alsa/alsa-mixer.c:2804
msgid "Analog Surround 6.0"
msgstr "é¡æ¯ç°ç¹è² 6.0"
-#: ../src/modules/alsa/alsa-mixer.c:2800
+#: ../src/modules/alsa/alsa-mixer.c:2805
msgid "Analog Surround 6.1"
msgstr "é¡æ¯ç°ç¹è² 6.1"
-#: ../src/modules/alsa/alsa-mixer.c:2801
+#: ../src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Surround 7.0"
msgstr "é¡æ¯ç°ç¹è² 7.0"
-#: ../src/modules/alsa/alsa-mixer.c:2802
+#: ../src/modules/alsa/alsa-mixer.c:2807
msgid "Analog Surround 7.1"
msgstr "é¡æ¯ç°ç¹è² 7.1"
-#: ../src/modules/alsa/alsa-mixer.c:2803
+#: ../src/modules/alsa/alsa-mixer.c:2808
msgid "Digital Stereo (IEC958)"
msgstr "æ¸ä½ç«é«è² (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2804
+#: ../src/modules/alsa/alsa-mixer.c:2809
msgid "Digital Surround 4.0 (IEC958)"
msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958)"
-#: ../src/modules/alsa/alsa-mixer.c:2805
+#: ../src/modules/alsa/alsa-mixer.c:2810
msgid "Digital Surround 4.0 (IEC958/AC3)"
msgstr "æ¸ä½ç°ç¹è² 4.0 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2806
+#: ../src/modules/alsa/alsa-mixer.c:2811
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "æ¸ä½ç°ç¹è² 5.1 (IEC958/AC3)"
-#: ../src/modules/alsa/alsa-mixer.c:2807
+#: ../src/modules/alsa/alsa-mixer.c:2812
msgid "Digital Stereo (HDMI)"
msgstr "æ¸ä½ç«é«è² (HDMI)"
-#: ../src/modules/alsa/alsa-mixer.c:2928
+#: ../src/modules/alsa/alsa-mixer.c:2933
msgid "Analog Mono Duplex"
msgstr "é¡æ¯å®è²ééå·¥"
-#: ../src/modules/alsa/alsa-mixer.c:2929
+#: ../src/modules/alsa/alsa-mixer.c:2934
msgid "Analog Stereo Duplex"
msgstr "é¡æ¯ç«é«è²éå·¥"
-#: ../src/modules/alsa/alsa-mixer.c:2930
+#: ../src/modules/alsa/alsa-mixer.c:2935
msgid "Digital Stereo Duplex (IEC958)"
msgstr "æ¸ä½ç«é«è²éå·¥ (IEC958)"
+#~ msgid "Low Frequency Emmiter"
+#~ msgstr "ä½é »çæè²å¨"
--
hooks/post-receive
PulseAudio Sound Server
More information about the pulseaudio-commits
mailing list