Merge branch 'master' of git://0pointer.de/pulseaudio into dbus-work

Conflicts:
	src/Makefile.am
This commit is contained in:
Tanu Kaskinen 2009-08-24 14:43:11 +03:00
commit 2f3fc2f1d6
100 changed files with 4986 additions and 2224 deletions

View file

@ -47,9 +47,9 @@ case $(uname) in
esac
if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then
echo "Activating pre-commit hook."
cp -pv .git/hooks/pre-commit.sample .git/hooks/pre-commit
chmod -v +x .git/hooks/pre-commit
cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \
chmod +x .git/hooks/pre-commit && \
echo "Activated pre-commit hook."
fi
if [ -f .tarball-version ]; then

View file

@ -940,12 +940,6 @@ AC_SUBST(AVAHI_LIBS)
AC_SUBST(HAVE_AVAHI)
AM_CONDITIONAL([HAVE_AVAHI], [test "x$HAVE_AVAHI" = x1])
### LIBOIL ####
PKG_CHECK_MODULES(LIBOIL, [ liboil-0.3 >= 0.3.0 ])
AC_SUBST(LIBOIL_CFLAGS)
AC_SUBST(LIBOIL_LIBS)
### JACK (optional) ####
AC_ARG_ENABLE([jack],

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pulseaudio.as\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-08 12:35+0530\n"
"Last-Translator: Amitakhya Phukan <aphukan@fedoraproject.org>\n"
"Language-Team: Assamese <fedora-trans-as@redhat.com>\n"
@ -16,7 +16,7 @@ msgstr ""
"X-Generator: Lokalize 0.3\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -70,11 +70,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "আভ্যন্তৰীণ অ'ডিঅ'"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "মোডেম"
@ -322,11 +322,16 @@ msgid "Using state directory %s."
msgstr "অৱস্থাসূচক পঞ্জিকা %s ব্যৱহাৰ কৰা হৈছে ।"
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "ৰান-টাইম পঞ্জিকা %s ব্যৱহাৰ কৰা হৈছে ।"
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "প্ৰণালী মোডত চলিছে: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -336,15 +341,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ব্যৰ্থ ।"
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "নতুন high-resolution timers পোৱা হয়! অভিনন্দন!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -352,28 +357,28 @@ msgstr ""
"শ্ৰীমান, আপোনাৰ কাৰ্ণেল পূৰণি! high-resolution timer সক্ৰিয় থকা Linux ক আজি "
"উপদেশ দিয়া হয়!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() ব্যৰ্থ ।"
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "ডেমন আৰম্ভ কৰিবলৈ ব্যৰ্থ ।"
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"তুলি লোৱা মডিউল নোহোৱাকে ডেমন আৰম্ভ কৰা হৈছে, কোনো কাম সঞ্চালন কৰা সম্ভৱ নহয় ।"
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "ডেমন আৰম্ভ কৰা সম্পূৰ্ণ ।"
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "ডেমন বন্ধ কৰাৰ প্ৰক্ৰিয়া আৰম্ভ কৰা হৈছে ।"
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "ডেমন বন্ধ কৰা হৈছে ।"
@ -630,72 +635,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "পাথ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] লগ লক্ষ্য '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] লগৰ স্তৰ '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] resample পদ্ধতি '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] এই স্থাপত্যত rlimit সমৰ্থিত নহয় ।"
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] চানেকিৰ বিন্যাস '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] চানেকিৰ মাত্ৰা '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] চানেকিৰ চেনেল '%s' বৈধ নহয়"
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] চেনেল মেপ '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] অংশৰ সংখ্যা '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] অংশৰ মাপ '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] nice স্তৰ '%s' বৈধ নহয় ।"
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "বিন্যাস নথিপত্ৰ খুলিবলৈ ব্যৰ্থ: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -703,7 +708,7 @@ msgstr ""
"নিৰ্ধাৰিত অবিকল্পিত চেনেল মেপত নিৰ্ধাৰিত অবিকল্পিত চেনেলৰ সংখ্যাতকে বেলেগ সংখ্যক "
"চেনেল আছে ।"
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### চিহ্নিত বিন্যাস নথিপত্ৰৰ পৰা পঢ়া হ'ব: %s ###\n"
@ -925,7 +930,7 @@ msgstr "ওপৰত পিছত বাওঁফালে"
msgid "Top Rear Right"
msgstr "ওপৰত পিছত সোঁফালে"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1055,27 +1060,27 @@ msgstr "অনুপস্থিত বাস্তবায়ন"
msgid "Client forked"
msgstr "গ্ৰাহক ফৰ্ক কৰা হৈছে"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2227,7 +2232,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn লক প্ৰয়োগ কৰিবলৈ ব্যৰ্থ ।"
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2243,7 +2248,7 @@ msgstr ""
"POLLOUT নিৰ্ধাৰিত হোৱাৰি পিছতো আমি উথিলো -- কিন্তু তাৰ পিছৰ snd_pcm_avail() এ "
"দিলে বা অন্য এটা মান < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-08 16:21+0530\n"
"Last-Translator: Runa Bhattacharjee <runab@fedoraproject.org>\n"
"Language-Team: Bengali INDIA <fedora-trans-bn_in@redhat.com>\n"
@ -17,7 +17,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -71,11 +71,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "অভ্যন্তরীণ অডিও"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "মোডেম"
@ -326,11 +326,16 @@ msgid "Using state directory %s."
msgstr "অবস্থাসূচক ডিরেক্টরি %s ব্যবহার করা হচ্ছে।"
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "রান-টাইম ডিরেক্টরি %s ব্যবহার করা হচ্ছে।"
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "সিস্টেম মোডে চলছে: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -340,42 +345,42 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ব্যর্থ।"
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "উচ্চ-রেসোলিউশনের নতুন টাইমার উপলব্ধ রয়েছে! পরীক্ষা করে দেখুন!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "উচ্চ-রেসোলিউশনের নতুন টাইমার সহ Linux সক্রিয় করা বাঞ্ছনীয়!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() ব্যর্থ।"
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "ডেমন আরম্ভ করতে ব্যর্থ।"
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"লোড করা মডিউল বিনা ডেমন আরম্ভ করা হয়েছে এবং কোনো কর্ম সঞ্চালন করা সম্ভব নয়।"
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "ডেমন আরম্ভ করা হয়েছে।"
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "ডেমন বন্ধ করার প্রক্রিয়া আরম্ভ করা হয়েছে।"
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "ডেমন বন্ধ করা হয়েছে।"
@ -641,72 +646,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "পাথ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] লগ টার্গেট '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] লগের স্তর '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] রি-স্যাম্পেল পদ্ধতি '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] এই প্ল্যাটফর্মে rlimit সমর্থিত নয়।"
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] স্যাম্পেলের বিন্যাস '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] স্যাম্পেলের মাত্রা '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] স্যাম্পেলের চ্যানেল '%s' বৈধ নয়"
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] চ্যানেল ম্যাপ '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] অংশ সংখ্যা '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] অংশের মাপ '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] nice স্তর '%s' বৈধ নয়।"
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "কনফিগারেশন ফাইল খুলতে ব্যর্থ: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -714,7 +719,7 @@ msgstr ""
"ডিফল্ট চ্যানেল ম্যাপের মধ্যে অন্তর্ভুক্ত চ্যানেলের সংখ্যা ও চ্যানেলের ডিফল্ট সংখ্যার মধ্যে "
"গরমিল।"
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### চিহ্নিত কনফিগারেশন ফাইল থেকে পড়া হবে: %s ###\n"
@ -936,7 +941,7 @@ msgstr "উপরে পিছনে বাঁদিকে"
msgid "Top Rear Right"
msgstr "উপরে পিছনে ডানদিকে"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1066,27 +1071,27 @@ msgstr "অনুপস্থিত বাস্তবায়ন"
msgid "Client forked"
msgstr "ক্লায়েন্ট ফর্ক করা হয়েছে"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f গিবিবাইট"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f মিবিবাইট"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f কিবিবাইট"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u বাইট"
@ -2239,7 +2244,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn লক প্রয়োগ করতে ব্যর্থ।"
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2256,7 +2261,7 @@ msgstr ""
"POLLOUT set দ্বারা চেতাবনী সৃষ্টি হয়েছে -- পরবর্তী snd_pcm_avail() থেকে 0 অথবা < "
"min_avail-র থেকে কম অন্য একটি মান প্রাপ্ত হয়েছে।"
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -23,7 +23,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-07-18 11:40+0100\n"
"Last-Translator: Tomàs Bigordà <t0mynoker@gmail.com>\n"
"Language-Team: Catalan <fedora@softcatala.net>\n"
@ -31,7 +31,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -93,11 +93,11 @@ msgstr ""
"pulgin=<nom del connector ladspa> label=<etiqueta del connector ladspa> "
"control=<llista separada per comes dels valors de control d'entrada>"
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Audio intern"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Mòdem"
@ -353,11 +353,16 @@ msgid "Using state directory %s."
msgstr "S'està utilitzant el directori d'estat %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "S'està utilitzant el directori d'execució %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "S'està executant en mode sistema: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -373,15 +378,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:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "S'ha produït un error en pa_pid_file_create()."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Estan disponibles els temporitzadors frescos d'alta resolució."
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -389,27 +394,27 @@ msgstr ""
"Es recomana la utilització d'un nucli amb els temporitzadors d'alta "
"resolució habilitats."
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "S'ha produït un error en pa_core_new()."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "S'ha produït un error en inicialitzar el dimoni."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "S'ha completat la inicialització del dimoni."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "S'ha iniciat l'aturada del dimoni."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "S'ha aturat el dimoni."
@ -679,72 +684,72 @@ msgstr "Advertència d'obsolescència: %s\n"
msgid "Path: %s\n"
msgstr "Ruta: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destí de registre incorrecte '%s'"
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nivell de registre incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Mètode de remostreig incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Format de mostra incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Velocitat de mostreig '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canals de mostreig incorrectes '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canals incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Nombre de fragments incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Mida de fragment incorrecta '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Nivell de prioritat incorrecte '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Error en obrir el fitxer de configuració: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -752,7 +757,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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lectura del fitxer de configuració: %s ###\n"
@ -974,7 +979,7 @@ msgstr "Superior posterior esquerra"
msgid "Top Rear Right"
msgstr "Superior posterior dreta"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1104,27 +1109,27 @@ msgstr "Manca la implementació"
msgid "Client forked"
msgstr "Client bifurcat"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2299,7 +2304,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "No s'ha pogut accedir al bloqueig d'autospawn."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2316,7 +2321,7 @@ msgstr ""
"Ens han aixecat amb POLLOUT activat -- tanmateix una crida posterior a "
"snd_pcm_avail() ha retornat 0 o un altre valor < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-08-17 01:58+0200\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -77,11 +77,11 @@ msgstr ""
"modulu ladspa> label=<popisek zásuvného modulu ladspa> control=<čárkou "
"oddělený seznam hodnot ovládání vstupu>"
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Vnitřní zvukový systém"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -329,11 +329,16 @@ msgid "Using state directory %s."
msgstr "Používán stavový adresář %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Používán běhový adresář %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Běží v systémovém režimu: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -349,16 +354,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:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() selhalo."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
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:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -366,27 +371,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:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() selhalo."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Selhalo spuštění démona."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Spuštění démona dokončeno."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Vypínání démona spuštěno."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Démon ukončen."
@ -647,72 +652,72 @@ msgstr "VAROVÁNÍ ZASTARALOSTI: %s\n"
msgid "Path: %s\n"
msgstr "Cesta: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Neplatný protokolovací cíl \"%s\"."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Neplatná protokolovací úroveň \"%s\"."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Neplatná metoda převzorkování \"%s\"."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Neplatné rlimit \"%s\"."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Neplatný vzorkovací formát \"%s\"."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Neplatná vzorkovací frekvence \"%s\"."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Neplatné vzorkovací kanály \"%s\"."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Neplatná mapa kanálů \"%s\"."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Neplatný počet fragmentů \"%s\"."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Neplatná velikost fragmentu \"%s\"."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Neplatná úroveň nice \"%s\"."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Nezdařilo se otevřít konfigurační soubor: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -720,7 +725,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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Čtení z konfiguračního souboru: %s ###\n"
@ -942,7 +947,7 @@ msgstr "Horní zadní levý"
msgid "Top Rear Right"
msgstr "Horní zadní pravý"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1072,27 +1077,27 @@ msgstr "Scházející implementace"
msgid "Client forked"
msgstr "Klient rozvětven"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2227,7 +2232,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Nelze přistoupit k zámku automatického spouštění."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2244,7 +2249,7 @@ msgstr ""
"Probudilo nás nastavení POLLOUT - nicméně následné snd_pcm_avail() vrátilo 0 "
"či jinou hodnotu < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-18 12:43+0100\n"
"Last-Translator: Fabian Affolter <fab@fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de@redhat.com>\n"
@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: German\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -76,11 +76,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Internes Audio"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -328,11 +328,16 @@ msgid "Using state directory %s."
msgstr "Nutze Zustands-Verzeichnis %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Nutze Laufzeit-Verzeichnis %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Laufe im System-Modus: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -342,41 +347,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() fehlgeschlagen."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
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:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() fehlgeschlagen."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Konnte Daemon nicht initialisieren."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon verweigert Ausführung, da keine Module geladen."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Start des Daemons abgeschlossen."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Herunterfahren des Daemon gestartet."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Daemon beendet."
@ -630,72 +635,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Pfad: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Ungültiges Log-Ziel '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Ungültige Log-Stufe '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Ungültige Resample-Methode '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Ungültiges rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Ungültiges Sample-Format '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Ungültige Sample-Kanäle '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Ungültige Kanal-Zuordnung '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Ungültige Anzahl von Fragmenten '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Ungültige Fragmentgröße '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Ungültige Nice-Stufe '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Öffnen der Konfigurationsdatei fehlgeschlagen : %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -703,7 +708,7 @@ msgstr ""
"Die angegebene Standard-Kanalzuordnung hat eine andere Anzahl von Kanälen "
"als die angegebene Standard-Kanal-Anzahl."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lese von Konfigurationsdatei: %s ###\n"
@ -925,7 +930,7 @@ msgstr "Oben Hinten Links"
msgid "Top Rear Right"
msgstr "Oben Hinten Rechts"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1055,27 +1060,27 @@ msgstr "Fehlende Implementation"
msgid "Client forked"
msgstr "Client geteilt"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2217,7 +2222,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Fehler beim Zugriff auf Autostart -Sperre."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2228,7 +2233,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-18 12:55+0100\n"
"Last-Translator: Fabian Affolter <fab@fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de@redhat.com>\n"
@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: Swiss German\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -75,11 +75,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Internes Audio"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -330,11 +330,16 @@ msgid "Using state directory %s."
msgstr "Nutze Zustands-Verzeichnis %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Nutze Laufzeit-Verzeichnis %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Laufe im System-Modus: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -344,41 +349,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() fehlgeschlagen."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
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:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() fehlgeschlagen."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Konnte Daemon nicht initialisieren."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon verweigert Ausführung, da keine Module geladen."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Start des Daemons abgeschlossen."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Herunterfahren des Daemon gestartet."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Daemon beendet."
@ -632,72 +637,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Pfad: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Ungültiges Log-Ziel '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Ungültige Log-Stufe '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Ungültige Resample-Methode '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Ungültiges rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Ungültiges Sample-Format '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Ungültige Sample-Kanäle '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Ungültige Kanal-Zuordnung '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Ungültige Anzahl von Fragmenten '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Ungültige Fragmentgrösse '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Ungültige Nice-Stufe '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Öffnen der Konfigurationsdatei fehlgeschlagen : %s"
#: ../src/daemon/daemon-conf.c:546
#: ../src/daemon/daemon-conf.c:562
#, fuzzy
msgid ""
"The specified default channel map has a different number of channels than "
@ -706,7 +711,7 @@ msgstr ""
"Die angegebene Standard-Kanalzuordnung hat eine andere Anzahl von Kanälen "
"als die angegebene Standard-Kanal-Anzahl."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lese von Konfigurationsdatei: %s ###\n"
@ -928,7 +933,7 @@ msgstr "Oben Hinten Links"
msgid "Top Rear Right"
msgstr "Oben Hinten Rechts"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1059,27 +1064,27 @@ msgstr "Fehlende Implementation"
msgid "Client forked"
msgstr "Client geforket"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2224,7 +2229,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Fehler beim Zugriff auf Autostart -Sperre."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2242,7 +2247,7 @@ msgstr ""
"von snd_pcm_avail() liefert 0 oder einen anderen Wert zurück, der < "
"min_avail ist."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: el\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2008-08-22 19:40+0300\n"
"Last-Translator: Dimitris Glezos <dimitris@glezos.com>\n"
"Language-Team: Greek <fedora-trans-el@redhat.com>\n"
@ -16,7 +16,7 @@ msgstr ""
"X-Generator: KAider 0.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -61,11 +61,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr ""
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr ""
@ -312,10 +312,15 @@ msgstr ""
#: ../src/daemon/main.c:777
#, c-format
msgid "Using modules directory %s."
msgstr ""
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr ""
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -325,15 +330,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr ""
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -341,27 +346,27 @@ msgstr ""
"Δικέ μου, ο πυρήνας σου είναι για τα μπάζα! Η πρόταση του σεφ σήμερα είναι "
"Linux με ενεργοποιημένα τα high-resolution timers!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr ""
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr ""
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr ""
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr ""
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr ""
@ -547,78 +552,78 @@ msgstr ""
msgid "Path: %s\n"
msgstr ""
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr ""
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@ -839,7 +844,7 @@ msgstr ""
msgid "Top Rear Right"
msgstr ""
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -969,27 +974,27 @@ msgstr ""
msgid "Client forked"
msgstr ""
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr ""
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr ""
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr ""
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr ""
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr ""
@ -1925,7 +1930,7 @@ msgstr ""
msgid "Cannot access autospawn lock."
msgstr ""
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -1936,7 +1941,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -8,16 +8,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"PO-Revision-Date: 2009-08-10 14:36-0300\n"
"Last-Translator: Héctor Daniel Cabrera <h.daniel.cabrera@gmail.com>\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-08-23 09:50-0300\n"
"Last-Translator: Domingo Becker <domingobecker@gmail.com>\n"
"Language-Team: Fedora Spanish <fedora-trans-es@redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Spanish\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -80,11 +80,11 @@ msgstr ""
"complemento ladspa> control=<lista separada por comas de valores de control "
"de entrada>"
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Audio Interno"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Módem"
@ -338,10 +338,15 @@ msgstr "Utilizando directorio de estado %s."
#: ../src/daemon/main.c:777
#, c-format
msgid "Using modules directory %s."
msgstr "Utilizando directorio de módulos %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Ejecutándose en modo de sistema: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -358,17 +363,17 @@ msgstr ""
"obtener una explicación acerca de por qué es una mala idea utilizar el modo "
"sistema."
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "Ha fallado pa_pid_file_create()."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
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:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -376,29 +381,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:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "Falló pa_core_new()."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Fallo al intentar iniciar el demonio."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "El demonio se inició completamente."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Comienza a apagarse el demonio."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "El demonio se ha apagado."
@ -665,72 +670,72 @@ msgstr "ADVERTENCIA DE COMPATIBILIDAD: %s\n"
msgid "Path: %s\n"
msgstr "Ruta: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destino de log inválido '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nivel de log inválido '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Método de remuestreo inválido '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Rlimit inválido '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato de muestra inválido '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Tasa de muestra inválida '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canales de muestra inválidos '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canal inválido '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Cantidad de fragmentoa inválidos '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Tamaño inválido de fragmento '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Nivel de nice inválido '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, 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:546
#: ../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."
@ -738,15 +743,14 @@ msgstr ""
"El mapa de canal predeterminado especificado tiene un número de canales "
"distinto al especificado como predeterminado."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Leyendo desde el archivo de confioguración: %s ###\n"
#: ../src/daemon/caps.c:62
#, fuzzy
msgid "Cleaning up privileges."
msgstr "Abandonando privilegios de root."
msgstr "Abandonando privilegios."
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@ -960,7 +964,7 @@ msgstr "Posterior izquierdo superior"
msgid "Top Rear Right"
msgstr "Posterior derecho superior"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1090,27 +1094,27 @@ msgstr "Falta implementación"
msgid "Client forked"
msgstr "Cliente iniciado"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2251,9 +2255,9 @@ msgid "Daemon not responding."
msgstr "El demonio no responde."
#: ../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
@ -2269,7 +2273,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "No se puede acceder al candado de autogeneración."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2286,7 +2290,7 @@ msgstr ""
"Nos despertaron con POLLOUT puesto -- sin embargo, una llamada a "
"snd_pcm_avail() devolvió 0 u otro valor < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-05 16:24+0300\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini@cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu@lokalisointi.org>\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -72,11 +72,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Sisäinen äänentoisto"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modeemi"
@ -330,11 +330,16 @@ msgid "Using state directory %s."
msgstr "Käytetään tilahakemistoa %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Käytetään ajonaikaista hakemistoa %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Suoritetaan järjestelmätilassa: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -344,15 +349,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() epäonnistui."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Korkean tarkkuuden ajastimet käytettävissä."
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -360,29 +365,29 @@ msgstr ""
"Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
"suositeltava!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() epäonnistui."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Taustaprosessin alustus epäonnistui."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Taustaprosessin käynnistys valmis."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Taustaprosessin sulkeminen käynnistetty."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Taustaprosessi lopetettu."
@ -653,72 +658,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Polku: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../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:232
#: ../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:248
#: ../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:271
#: ../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:278
#: ../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:294
#: ../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:312
#: ../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:336
#: ../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:354
#: ../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:372
#: ../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:390
#: ../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:408
#: ../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:530
#: ../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:546
#: ../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."
@ -726,7 +731,7 @@ msgstr ""
"Kanavien oletusmäärä ja oletuskanavakartan kanavien määrä poikkeavat "
"toisistaan."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Luettu asetustiedostosta: %s ###\n"
@ -948,7 +953,7 @@ msgstr "Vasen ylä taka"
msgid "Top Rear Right"
msgstr "Oikea ylä taka"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1078,27 +1083,27 @@ msgstr "Puuttuva toteutus"
msgid "Client forked"
msgstr "Asiakasohjelma haarautui"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %u kan. %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2250,7 +2255,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Automaattisen käynnistyksen lukkoa ei voida käyttää."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2267,7 +2272,7 @@ msgstr ""
"asetettuna, snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, "
"joka on < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio trunk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-26 17:22+0200\n"
"Last-Translator: Corentin Perard <corentin.perard@gmail.com>\n"
"Language-Team: French <fedora-trans-fr@redhat.com>\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -77,11 +77,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Audio interne"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -336,11 +336,16 @@ msgid "Using state directory %s."
msgstr "Utilisation du répertoire d'état %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Utilisation du répertoire d'exécution %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Exécution en mode système : %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -350,16 +355,16 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "Échec de pa_pid_file_create()."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
"De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -367,27 +372,27 @@ msgstr ""
"Eh mec, ton noyau il pue ! La recommandation d'aujourd'hui du patron est "
"d'activer les horloges à haute résolution sur ton Linux."
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "Échec de pa_core_new()."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Échec lors de l'initialisation du démon"
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Démarrage du démon effectué."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Fermeture du démon initiée."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Démon terminé."
@ -663,72 +668,72 @@ 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:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Cible du journal « %s » invalide."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Niveau du journal « %s » invalide."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Méthode de rééchantillonnage « %s » invalide."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit « %s » invalide."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Format d'échantillon « %s » invalide."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canaux d'échantillonnage « %s » invalide."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Plan de canaux « %s » invalide."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Nombre de fragments « %s » invalide."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Taille du fragment « %s » invalide."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Niveau de priorité (nice) « %s » invalide."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, 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:546
#: ../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."
@ -736,7 +741,7 @@ 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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lecture à partir du fichier de configuration : %s ###\n"
@ -958,7 +963,7 @@ msgstr "Arrière gauche haut"
msgid "Top Rear Right"
msgstr "Arrière droit haut"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1088,27 +1093,27 @@ msgstr "Implantation manquante"
msgid "Client forked"
msgstr "Le client s'est divisé (Client forked)"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f Gio"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f Mio"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f Kio"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2289,7 +2294,7 @@ msgstr "write() : %s"
msgid "Cannot access autospawn lock."
msgstr "Impossible d'accèder au verrou autonome."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2306,7 +2311,7 @@ msgstr ""
"le jeu POLLOUT -- cependant un snd_pcm_avail() ultérieur a retourné 0 ou une "
"autre valeur < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-07 14:27+0530\n"
"Last-Translator: Sweta Kothari <swkothar@redhat.com>\n"
"Language-Team: Gujarati\n"
@ -17,7 +17,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -73,11 +73,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "આંતરિક ઓડિયો"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "મોડેમ"
@ -326,11 +326,16 @@ msgid "Using state directory %s."
msgstr "સ્થિતિ ડિરેક્ટરી %s ને વાપરી રહ્યા છે."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "રનટાઇમ ડિરેક્ટરી %s ને વાપરી રહ્યા છે."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "સિસ્ટમ સ્થિતિમાં ચાલી રહ્યુ છે: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -340,15 +345,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() નિષ્ફળ."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "તાજુ high-resolution ટાઇમરો ઉપલ્બધ છે! બોન એપેટાઇટ!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -356,27 +361,27 @@ msgstr ""
"મિત્ર, તમારુ કર્નલમાં ગડબડ છે! રસોઇયાનું આજે ભલામણ એ સક્રિય થયેલ high-resolution "
"ટાઇમરો સાથે Linux નું છે!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() નિષ્ફળ."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "ડિમનને શરૂ કરવામાં નિષ્ફળ."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "કોઇપણ લોડ થયેલ મોડ્યુલો વગર ડિમનને શરૂ કરો, કામ કરવા માટે ફરી શરૂ કરી રહ્યા છે."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "ડિમન પારંભ કરવાનું સમાપ્ત છે."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "ડિમનને બંધ કરવાનું પ્રારંભ થયેલ છે."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "ડિમનનો અંત આવેલ છે."
@ -632,79 +637,79 @@ msgstr ""
msgid "Path: %s\n"
msgstr "પાથ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] અયોગ્ય લોગ લક્ષ્ય '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] અયોગ્ય લોગ સ્તર '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] અયોગ્ય resample પદ્દતિ '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] અયોગ્ય rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit એ આ પ્લેટફોર્મ પર આધારભૂત નથી."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] અયોગ્ય નમૂના બંધારણ '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] અયોગ્ય નમૂના દર '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] અયોગ્ય નમૂના ચેનલો '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] અયોગ્ય ચેનલ મેપ '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] અયોગ્ય ફ્રેગમેન્ટોનાં નંબર '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] અયોગ્ય ફ્રેગમેન્ટ માપ '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] અયોગ્ય સારુ સ્તર '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "રૂપરેખાંકન ફાઇલને ખોલવાનું નિષ્ફળ: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### રૂપરેખાંકન ફાઇલમાંથી વાંચો: %s ###\n"
@ -926,7 +931,7 @@ msgstr "ઉપર રિઅર ડાબે"
msgid "Top Rear Right"
msgstr "ઉપર રિઅર જમણે"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1056,27 +1061,27 @@ msgstr "ગુમ થયેલ અમલીકરણ"
msgid "Client forked"
msgstr "ક્લાઇન્ટમાં ફાટા પડેલ છે"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2227,7 +2232,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn તાળાને દાખલ કરી શકાતુ નથી."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2244,7 +2249,7 @@ msgstr ""
"POLLOUT સુયોજન સાથે આપણે જાગેલ હતા -- છતાંપણ ના પછીનું snd_pcm_avail() ને 0 પાછો મળે "
"છે અથવા બીજી કિંમત < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-06-08 12:01+0530\n"
"Last-Translator: Rajesh Ranjan <rajesh672@gmail.com>\n"
"Language-Team: Hindi <hindi.sf.net>\n"
@ -20,7 +20,7 @@ msgstr ""
"\n"
"\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -75,11 +75,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "आंतरिक ऑडियो"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "मॉडेम"
@ -326,11 +326,16 @@ msgid "Using state directory %s."
msgstr "स्टेट निर्देशिका %s का प्रयोग कर रहा है."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "रनटाइम निर्देशिका %s का प्रयोग कर रहा है."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "तंत्र मोड में चल रहा है: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -340,42 +345,42 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() विफल."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ताज़ा उच्च विभेदन टाइमर उपलब्ध! आनंद लें!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
"आपका कर्नेल बुरी स्थिति में है! सलाह है कि उच्च विभेदन युक्त लिनक्स सक्रिय किया जाना चाहिए!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() विफल."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "डेमॉन आरंभ करने में विफल."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "बिना लोड मॉड्यूल के डेमॉन आरंभ, काम करने से अस्वीकार कर रहा है."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "डेमॉन आरंभन पूर्ण."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "डेमॉन बन्द किया जाना आरंभ."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "डेमॉन अवरोधित."
@ -632,72 +637,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "पथ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] अवैध लॉग लक्ष्य '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] अवैध लॉग स्तर '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] अवैध पुनः नमूना विधि '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] अवैध rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit इस प्लेटफॉर्म पर समर्थित नहीं."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] अवैध प्रतिदर्श प्रारूप '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] अवैध प्रतिदर्श दर '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] अवैध प्रतिदर्श चैनल '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] अवैध चैनल मानचित्र '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] टुकड़े '%s' की अवैध संख्या."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] अवैध खंड आकार '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] अवैध नाइस स्तर '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "विन्यास फ़ाइल खोलने में विफल: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -705,7 +710,7 @@ msgstr ""
"निर्दिष्ट तयशुदा चैनल मानचित्र के पास चैनल की भिन्न संख्या है चैनल की तयशुदा निर्दिष्ट संख्या "
"के बनिस्पत."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### विन्यास फ़ाइल से पढ़ें: %s ###\n"
@ -927,7 +932,7 @@ msgstr "ऊपर पश्च बायाँ"
msgid "Top Rear Right"
msgstr "ऊपर पश्च दायाँ"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1057,27 +1062,27 @@ msgstr "अनुपस्थित कार्यान्वयन"
msgid "Client forked"
msgstr "क्लाएंट विभाजित"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2233,7 +2238,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn लॉक की पहुँच नहीं ले सकता है."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2250,7 +2255,7 @@ msgstr ""
"हमें POLLOUT सेट के साथ तैयार किया गया है -- हालांकि परवर्ती snd_pcm_avail() ने 0 या "
"दूसरा मान < min_avail दिया."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-20 22:34+0200\n"
"Last-Translator: mario_santagiuliana <mario at marionline.it>\n"
"Language-Team: Italian <fedora-trans-it at redhat.com>\n"
@ -19,7 +19,7 @@ msgstr ""
"X-Generator: Lokalize 0.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -74,11 +74,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Audio interno"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -335,11 +335,16 @@ msgid "Using state directory %s."
msgstr "In uso directory di stato %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "In uso directory di runtime %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "In esecuzione in modalità sistema: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -349,17 +354,17 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() non riuscita."
# io mi domando e dico..... mah!
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
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:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -367,27 +372,27 @@ msgstr ""
"Hey, questo kernel è andato a male! Lo chef oggi raccomanda Linux con i "
"timer high-resolution abilitati!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() non riuscita."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Inizializzazione del demone non riuscita."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Completato l'avvio del demone."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Iniziato l'arresto del demone."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Demone terminato."
@ -678,73 +683,73 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Percorso: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destinazione di registro \"%s\" non valida."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Livello di registro \"%s\" non valido."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Metodo di ricampionamento \"%s\" non valido."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit \"%s\" non valido."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato di campionamento \"%s\" non valido."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Frequenza di campionamento '%s' non valida."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canali di campionamento \"%s\" non validi."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mappa del canale \"%s\" non valida."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Numero di frammenti \"%s\" non valido."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Dimensione dei frammenti \"%s\" non valida."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Livello di nice \"%s\" non valido."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Apertura del file di configurazione non riuscita: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -752,7 +757,7 @@ msgstr ""
"La mappa del canale predefinita specificata presenta un numero diverso di "
"canali rispetto a quello predefinito specificato."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lettura dal file di configurazione: %s ###\n"
@ -976,7 +981,7 @@ msgstr "Superiore posteriore sinistro"
msgid "Top Rear Right"
msgstr "Superiore posteriore destro"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1106,27 +1111,27 @@ msgstr "Implementazione mancante"
msgid "Client forked"
msgstr "Fork del client"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s ch %u %u Hz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2318,7 +2323,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Impossibile accedere al lock di autospawn."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2335,7 +2340,7 @@ msgstr ""
"Ci si è alzati con impostato POLLOUT -- come sempre un subsequent "
"snd_pcm_avail() ritorna 0 o un altro valore < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-07 11:13+0530\n"
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
"Language-Team: Kannada <en@li.org>\n"
@ -17,7 +17,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -71,11 +71,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "ಆಂತರಿಕ ಆಡಿಯೊ"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "ಮಾಡೆಮ್:"
@ -331,11 +331,16 @@ msgid "Using state directory %s."
msgstr "ಸ್ಥಿತಿ ಕೋಶ %s ಅನ್ನು ಬಳಸಿಕೊಂಡು."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "ಚಲಾವಣಾಸಮಯ(ರನ್‌ಟೈಮ್) ಕೋಶ %s ಅನ್ನು ಬಳಸಿಕೊಂಡು."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "ವ್ಯವಸ್ಥೆಯ ಕ್ರಮದಲ್ಲಿ ಚಲಾಯಿಸಲಾಗುತ್ತಿದೆ: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -345,15 +350,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ವಿಫಲಗೊಂಡಿದೆ."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ತಾಜಾ ರೆಸಲ್ಯೂಶನ್ ಟೈಮರ್ ಲಭ್ಯವಿದೆ! Bon appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -361,27 +366,27 @@ msgstr ""
"ಮಹಾಶಯರೆ, ನಿಮ್ಮ ಕರ್ನಲ್ ಕೊಳೆತುಹೋಗಿದೆ! ಅತ್ಯುತ್ತಮ ರೆಸಲ್ಯೂಶನ್ ಟೈಮರ್ ಅನ್ನು ಶಕ್ತಗೊಳಿಸಲಾದ "
"ಲಿನಕ್ಸನ್ನು ಬಳಸುವಂತೆ ಅಡುಗೆಯವರು ಸಲಹೆ ಮಾಡುತ್ತಿದ್ದಾರೆ!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() ವಿಫಲಗೊಂಡಿದೆ."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "ಡೀಮನ್ ಅನ್ನು ಆರಂಭಿಸಲು ವಿಫಲಗೊಂಡಿದೆ."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ಲೋಡ್ ಮಾಡಲಾದ ಯಾವುದೆ ಡೀಮನ್ ಇಲ್ಲದೆ ಆರಂಭಗೊಂಡಿದೆ, ಕೆಲಸ ಮಾಡಲು ನಿರಾಕರಿಸಿದೆ."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "ಡೀಮನ್ ಆರಂಭಗೊಳಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "ಡೀಮನ್ ಸ್ಥಗಿತಗೊಳಿಕೆಯನ್ನು ಆರಂಭಿಸಲಾಗಿದೆ."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "ಡೀಮನ್ ಅನ್ನು ಅಂತ್ಯಗೊಳಿಸಲಾಗಿದೆ."
@ -643,72 +648,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "ಮಾರ್ಗ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ದಾಖಲೆ ಗುರಿ '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ದಾಖಲೆ ಮಟ್ಟ '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ಮರುನಮೂನೆ ವಿಧಾನ '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ಗೆ ಈ ಪ್ಲಾಟ್‌ಫಾರ್ಮಿನಲ್ಲಿ ಬೆಂಬಲವಿಲ್ಲ."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ನಮೂನೆ ರಚನೆ '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ನಮೂನೆ ದರ '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ನಮೂನೆ ಚಾನಲ್‌ಗಳು '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ಚಾನಲ್ ನಕ್ಷೆ '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ಅಮಾನ್ತವಾದ ಫ್ರಾಗ್ಮೆಂಟುಗಳ ಸಂಖ್ಯೆ '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ಫ್ರಾಗ್ಮೆಂಟ್ ಗಾತ್ರ '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ನೈಸ್‌ ಹಂತ '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ಸಂರಚನಾ ಕಡತವನ್ನು ತೆರೆಯಲು ವಿಫಲಗೊಂಡಿದೆ: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -716,7 +721,7 @@ msgstr ""
"ಸೂಚಿಸಲಾದ ಪೂರ್ವನಿಯೋಜಿತ ಚಾನಲ್ ನಕ್ಷೆಯು ಪೂರ್ವನಿಯೋಜಿತ ಚಾನಲ್‌ಗಳ ಸಂಖ್ಯೆಗಳಿಗಿಂತ ವಿಭಿನ್ನವಾದ "
"ಮಾರ್ಗಗಳ ಸಂಖ್ಯೆಯನ್ನು ಹೊಂದಿದೆ."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ಸಂರಚನಾ ಕಡತದಿಂದ ಓದು: %s ###\n"
@ -938,7 +943,7 @@ msgstr "ಮೇಲಿನ ಹಿಂಬದಿಯ ಎಡಭಾಗ"
msgid "Top Rear Right"
msgstr "ಮೇಲಿನ ಹಿಂಬದಿಯ ಬಲಭಾಗ"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1068,27 +1073,27 @@ msgstr "ಅನ್ವಯಿಸುವಿಕೆಯು ಕಾಣಿಸುತ್ತ
msgid "Client forked"
msgstr "ಕ್ಲೈಂಟ್ ಅನ್ನು ಫೋರ್ಕ್ ಮಾಡಲಾಗಿದೆ"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2243,7 +2248,7 @@ msgstr "ಬರೆ(): %s"
msgid "Cannot access autospawn lock."
msgstr "ಸ್ವಯಂಹೆಚ್ಚಿಸುವಿಕೆಯ ಲಾಕ್ ಅನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2258,7 +2263,7 @@ msgstr ""
"ವಿಕಸನಗಾರರ ಗಮನಕ್ಕೆ ತನ್ನಿ.POLLOUT ಸೆಟ್‌ನಿಂದ ನಾವು ಎಚ್ಚೆತ್ತುಗೊಂಡಿದ್ದೇವೆ -- ಆದರೆ ನಂತರದ "
"snd_pcm_avail() 0 ಅಥವ min_avail ಕ್ಕಿಂತ ಚಿಕ್ಕದಾದ ಇನ್ನೊಂದು ಮೌಲ್ಯವನ್ನು ಮರಳಿಸಿದೆ."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -61,11 +61,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr ""
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr ""
@ -312,10 +312,15 @@ msgstr ""
#: ../src/daemon/main.c:777
#, c-format
msgid "Using modules directory %s."
msgstr ""
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr ""
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -325,41 +330,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr ""
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr ""
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr ""
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr ""
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr ""
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr ""
@ -545,78 +550,78 @@ msgstr ""
msgid "Path: %s\n"
msgstr ""
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr ""
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@ -837,7 +842,7 @@ msgstr ""
msgid "Top Rear Right"
msgstr ""
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -967,27 +972,27 @@ msgstr ""
msgid "Client forked"
msgstr ""
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr ""
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr ""
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr ""
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr ""
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr ""
@ -1923,7 +1928,7 @@ msgstr ""
msgid "Cannot access autospawn lock."
msgstr ""
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -1934,7 +1939,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-06 13:43+0530\n"
"Last-Translator: Sandeep Shedmake <sandeep.shedmake@gmail.com>\n"
"Language-Team: marathi\n"
@ -17,7 +17,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -71,11 +71,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "आंतरीक ऑडिओ"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "मोडेम"
@ -322,11 +322,16 @@ msgid "Using state directory %s."
msgstr "स्थिती डिरेक्ट्री %s वापरत आहे."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "रनटाईम डिरेक्ट्री %s वापरत आहे."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "प्रणाली पद्धतीत कार्यरत: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -336,15 +341,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() अपयशी."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "नवीन उच्च-बिंदूता टाइमर उपलब्ध! Bon appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -352,27 +357,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() अपयशी."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "डिमन प्रारंभ करण्यास अपयशी."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "विना विभाग दाखल केल्यास डिमन प्रारंभ झाले, कार्य करण्यास नकार."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "डिमन स्टार्टअप पूर्ण झाले."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "डिमन पूर्णपणे बंद करण्यास प्रारंभ केले."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "डिमन नष्ट केले."
@ -629,72 +634,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "मार्ग: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] अवैध लॉग लक्ष्य '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] अवैध लॉग स्तर '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] अवैध पुन्ह सॅम्पल पद्धत '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] अवैध rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit या प्लॅटफॉर्म वर समर्थीत नाही."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] अवैध सॅम्पल स्वरूप '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] अवैध सॅम्पल दर '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] अवैध सॅम्पल मार्ग '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] अवैध मार्ग मॅप '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] अवैध तुकडे '%s' यांची एकूण संख्या."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] अवैध तुकड्याचे आकार '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] अवैध nice स्तर '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "संयोजना फाइल उघडण्यास अपयशी: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -702,7 +707,7 @@ msgstr ""
"निश्चित मुलभूत वाहिनी मॅपकडे निश्चित एकूण मुलभूत वाहिनी पेक्षा वेगळे वाहिनी संख्या "
"समाविष्टीत आहे."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### संयोजना फाइल: %s पासून वाचा ###\n"
@ -924,7 +929,7 @@ msgstr "वरील पाठीमागचे डावे"
msgid "Top Rear Right"
msgstr "वरील पाठीमागचे उजवे"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1054,27 +1059,27 @@ msgstr "लागू केले आहे असे आढळले नाह
msgid "Client forked"
msgstr "क्लाऐंट विभाजीत केले"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2230,7 +2235,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn कुलूप करीता प्रवेश प्राप्य अशक्य."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2245,7 +2250,7 @@ msgstr ""
"POLLOUT द्वारे सज्ज होणे शक्य आहे -- तरी परस्पर snd_pcm_avail() ने 0 पूरविले किंवा इतर "
"मूल्य < min_avail असावे."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-15 21:04+0200\n"
"Last-Translator: Geert Warrink <geert.warrink@onsnet.nu>\n"
"Language-Team: Dutch <nl@li.org>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -74,11 +74,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Intern geluid"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -327,11 +327,16 @@ msgid "Using state directory %s."
msgstr "Verbruik van state map %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Gebruik van runtime map %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Draaiend in systeem mode: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -341,15 +346,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() mislukte."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Verse high-resolution timers beschikbaar! Smakelijk eten!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -357,27 +362,27 @@ msgstr ""
"Kerel, je kernel stinkt! De aanbeveling van de chef is vandaag Linux met "
"aangezette high-resolution timers!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() mislukte."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Initialiseren van de daemon mislukte."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon opgestart zonder geladen modules, dat werkt niet."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Daemon opstarten is klaar."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Daemon afsluiten is begonnen."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Daemon is afgesloten."
@ -644,78 +649,78 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Pad: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr ""
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@ -936,7 +941,7 @@ msgstr "boven achter links"
msgid "Top Rear Right"
msgstr "boven achter rechts"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1066,27 +1071,27 @@ msgstr "Implementatie ontbreekt"
msgid "Client forked"
msgstr "Client afgesplitst"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2030,7 +2035,7 @@ msgstr ""
msgid "Cannot access autospawn lock."
msgstr ""
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2041,7 +2046,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-09 13:16+0530\n"
"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
@ -23,7 +23,7 @@ msgstr ""
"\n"
"\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -80,11 +80,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "ଆଭ୍ୟନ୍ତରୀଣ ଧ୍ୱନି"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "ମଡେମ"
@ -332,11 +332,16 @@ msgid "Using state directory %s."
msgstr "ସ୍ଥିତି ଡିରେକ୍ଟୋରୀ %s କୁ ବ୍ୟବହାର କରି।"
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "ପ୍ରଚଳିତ ଡିରେକ୍ଟୋରୀ %s କୁ ବ୍ୟବହାର କରୁଅଛି।"
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "ତନ୍ତ୍ର ଧାରାରେ ଚାଲୁଅଛି: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -346,15 +351,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ବିଫଳ ହୋଇଛି।"
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ସତେଜ ଉଚ୍ଚ-ବିଭେଦନ ସମୟ ମାପକ ଉପଲବ୍ଧ! Bon appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -362,27 +367,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() ବିଫଳ ହୋଇଛି।"
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "ଡେମନକୁ ଆରମ୍ଭ କରିବାରେ ବିଫଳ।"
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ଧାରଣ ହୋଇଥିବା ଏକକାଂଶଗୁଡ଼ିକ ବିନା ଡେମନ ଆରମ୍ଭ ହୋଇଛି, କାର୍ଯ୍ୟ କରିବାକୁ ବାରଣ କରୁଅଛି।"
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "ଡେମନ ଆରମ୍ଭ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି।"
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "ଡେମନ ବନ୍ଦକୁ ଆରମ୍ଭ କରାଯାଇଛି।"
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "ଡେମନକୁ ସମାପ୍ତ କରାଯାଇଛି।"
@ -638,72 +643,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "ପଥ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ଅବୈଧ ଲଗ ଲକ୍ଷ୍ଯସ୍ଥଳ '%s'।"
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ଅବୈଧ ଲଗ ସ୍ତର%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ଅବୈଧ ପୁନଃ ମିଶ୍ରଣ ଧାରା '%s'।"
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ଅବୈଧ rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ଏହି ପ୍ଲାଟଫର୍ମରେ ସମର୍ଥିତ ନୁହଁ।"
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ଅବୈଧ ନମୁନା ଶୈଳୀ '%s'।"
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ଅବୈଧ ନମୁନା ହାର '%s'।"
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ଅବୈଧ ନମୁନା ଚ୍ୟାନେଲ '%s'।"
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ଅବୈଧ ଚ୍ୟାନେଲ ମ୍ୟାପ '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ଅବୈଧ ସଂଖ୍ୟକ ଖଣ୍ଡଗୁଡ଼ିକ '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ଅବୈଧ ଖଣ୍ଡ ଆକାର '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ଅବୈଧ ସୁନ୍ଦର ସ୍ତର '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ବିନ୍ୟାସ ଫାଇଲ ଖୋଲିବାରେ ବିଫଳ: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -711,7 +716,7 @@ msgstr ""
"ନିର୍ଦ୍ଦିଷ୍ଟିତ ପୂର୍ବନିର୍ଦ୍ଧାରିତ ଚ୍ୟାନେଲ ମ୍ୟାପରେ ପୂର୍ବନିର୍ଦ୍ଧାରିତ ସଂଖ୍ୟକ ଚ୍ୟାନେଲ ବ୍ୟତିତ ଭିନ୍ନ ସଂଖ୍ୟକ "
"ଚ୍ୟାନେଲ ଉଲ୍ଲେଖ ଅଛି।"
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ବିନ୍ୟାସ ଫାଇଲରୁ ପଢ଼ନ୍ତୁ: %s ###\n"
@ -933,7 +938,7 @@ msgstr "ଉପର ପଛ ବାମ ପାଖ"
msgid "Top Rear Right"
msgstr "ଉପର ପଛ ଡ଼ାହାଣ ପାଖ"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1063,27 +1068,27 @@ msgstr "ଅନୁପସ୍ଥିତ ପ୍ରୟୋଗ"
msgid "Client forked"
msgstr "ଗ୍ରାହକ ଶାଖାଯୁକ୍ତ ହୋଇଛି"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2234,7 +2239,7 @@ msgstr "ଲେଖନ୍ତୁ(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn ଅପରିବର୍ତ୍ତନୀୟତାକୁ ଅଭିଗମ୍ୟ କରିହେଉ ନାହିଁ"
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2251,7 +2256,7 @@ msgstr ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pa\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-06-06 07:38+0530\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
"Language-Team: American English <punjabi-users@lists.sf.net>\n"
@ -19,7 +19,7 @@ msgstr ""
"X-Generator: Lokalize 0.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -70,11 +70,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "ਅੰਦਰੂਨੀ ਆਡੀਓ"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "ਮਾਡਮ"
@ -320,11 +320,16 @@ msgid "Using state directory %s."
msgstr "ਸਟੇਟ ਡਾਇਰੈਕਟਰੀ %s ਦੀ ਵਰਤੋਂ।"
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "ਰਨਟਾਈਮ ਡਾਇਰੈਕਟਰੀ %s ਦੀ ਵਰਤੋਂ।"
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "ਸਿਸਟਮ ਮੋਡ ਵਿੱਚ ਚੱਲ ਰਿਹਾ ਹੈ: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -334,42 +339,42 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ਫੇਲ੍ਹ ਹੈ।"
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "ਤਾਜ਼ੀ ਹਾਈ-ਰੈਜ਼ੋਲੂਸ਼ਨ ਟਾਈਮਰ ਉਪਲੱਬਧ ਹੈ! Bon appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
"ਮਿੱਤਰਾ, ਤੇਰਾ ਕਰਨਲ ਪੁਰਾਣਾ ਹੈ! ਚੀਫ ਦੀ ਅੱਜ ਦੀ ਸਿਫਾਰਸ਼ ਹਾਈ-ਰੈਜ਼ੋਲੂਸ਼ਨ ਟਾਈਮਰ ਯੋਗ ਨਾਲ ਲੀਨਕਸ ਹੈ!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() ਫੇਲ੍ਹ ਹੈ।"
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "ਡੈਮਨ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਫੇਲ੍ਹ।"
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ਡੈਮਨ ਸ਼ੁਰੂਆਤੀ ਬਿਨਾਂ ਕਿਸੇ ਲੋਡ ਕੀਤੇ ਮੈਡਿਊਲ, ਕੰਮ ਕਰਨ ਤੋਂ ਰੋਕ ਰਿਹਾ ਹੈ।"
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "ਡੈਮਨ ਸ਼ੁਰੂਆਤੀ ਮੁਕੰਮਲ।"
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "ਡੈਮਨ ਬੰਦ ਕਰਨਾ ਸ਼ੁਰੂ ਹੋ ਗਿਆ।"
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "ਡੈਮਨ ਬੰਦ ਹੋ ਗਿਆ।"
@ -626,78 +631,78 @@ msgstr ""
msgid "Path: %s\n"
msgstr "ਪਾਥ: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ਗਲਤ ਲਾਗ ਟਾਰਗੇਟ '%s'।"
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] ਗਲਤੀ ਲਾਗ ਲੈਵਲ '%s'।"
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵੀਂ ਰੀਸੈਂਪਲ ਢੰਗ '%s'।"
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵੀਂ rlimit '%s'।"
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit ਨੂੰ ਇਸ ਪਲੇਟਫਾਰਮ ਤੇ ਸਹਿਯੋਗ ਨਹੀਂ ਹੈ।"
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵਾਂ ਸੈਂਪਲ ਫਾਰਮੈਟ '%s'।"
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵਾਂ ਸੈਂਪਲ ਰੇਟ '%s'।"
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵਾਂ ਸੈਂਪਲ ਚੈਨਲ '%s'।"
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵਾਂ ਚੈਨਲ ਮੈਪ '%s'।"
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] ਫਰੈਗਮੈਂਟਾਂ ਦਾ ਅਢੁੱਕਵਾਂ ਨੰਬਰ '%s'।"
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵਾਂ ਫਰੈਗਮੈਂਟ ਅਕਾਰ '%s'।"
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] ਅਢੁੱਕਵਾਂ nice ਲੈਵਲ '%s'।"
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ਸੰਰਚਨਾ ਫਾਇਲ ਖੋਲ੍ਹਣ ਵਿੱਚ ਫੇਲ੍ਹ: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ਸੰਰਚਨਾ ਫਾਇਲ ਵਿੱਚੋਂ ਪੜਿਆ: %s ###\n"
@ -919,7 +924,7 @@ msgstr "ਉੱਤੇ ਪਿੱਛੇ ਖੱਬੇ"
msgid "Top Rear Right"
msgstr "ਉੱਤੇ ਪਿੱਛੇ ਸੱਜੇ"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1049,27 +1054,27 @@ msgstr "ਗੈਰ-ਮੌਜੂਦ ਨਿਰਧਾਰਨ"
msgid "Client forked"
msgstr "ਕਲਾਇਟ ਅੱਡ ਕੀਤਾ"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2221,7 +2226,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn ਲਾਕ ਵਰਤ ਨਹੀਂ ਸਕਦਾ।"
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2238,7 +2243,7 @@ msgstr ""
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
"returned 0 or another value < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

149
po/pl.po
View file

@ -5,15 +5,15 @@ msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"PO-Revision-Date: 2009-07-28 21:54+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-08-22 12:12+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -72,11 +72,11 @@ msgstr ""
"kanałów> plugin=<nazwa wtyczki ladspa> label=<etykieta wtyczki ladspa> "
"control=<lista wartości kontroli wejścia oddzielona przecinkami>"
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Wewnętrzny dźwięk"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -331,10 +331,15 @@ msgstr "Używanie folderu stanu %s."
#: ../src/daemon/main.c:777
#, c-format
msgid "Using modules directory %s."
msgstr "Używanie folderu modułów %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Uruchamianie w trybie systemowym: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -350,15 +355,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:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() nie powiodło się."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Świeże zegary o wysokiej rozdzielczości! Smacznego!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -366,27 +371,27 @@ msgstr ""
"Koleś, twoje jądro śmierdzi! Szef kuchni poleca dzisiaj Linuksa w włączonymi "
"zegarami o wysokiej rozdzielczości!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() nie powiodło się."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Zainicjowanie demona nie powiodło się."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Uruchamianie demona bez żadnych wczytanych modułów, odmawianie pracy."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Zakończono uruchamianie demona."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Zainicjowano wyłączenie demona."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Demon został zniszczony."
@ -652,72 +657,72 @@ msgstr "OSTRZEŻENIE O PRZESTARZAŁOŚCI: %s\n"
msgid "Path: %s\n"
msgstr "Ścieżka: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Nieprawidłowy dziennik docelowy \"%s\"."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nieprawidłowy poziom dziennika \"%s\"."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Nieprawidłowa metoda resamplingu \"%s\"."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Nieprawidłowy rlimit \"%s\"."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Nieprawidłowy format próbki \"%s\"."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Nieprawidłowa częstotliwość próbki \"%s\"."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Nieprawidłowe kanały próbki \"%s\"."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Nieprawidłowa mapa kanałów \"%s\"."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Nieprawidłowa liczba fragmentów \"%s\"."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Nieprawidłowy rozmiar fragmentu \"%s\"."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Nieprawidłowy poziom nice \"%s\"."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Otwarcie pliku konfiguracji nie powiodło się: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -725,15 +730,14 @@ msgstr ""
"Podana domyślna mapa kanałów ma inną liczbę kanałów niż podana domyślna "
"liczba kanałów."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Odczytano z pliku konfiguracji: %s ###\n"
#: ../src/daemon/caps.c:62
#, fuzzy
msgid "Cleaning up privileges."
msgstr "Porzucanie uprawnień roota."
msgstr "Czyszczenie uprawnień."
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@ -947,7 +951,7 @@ msgstr "Górny tylny lewy"
msgid "Top Rear Right"
msgstr "Górny tylny prawy"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1077,27 +1081,27 @@ msgstr "Brak implementacji"
msgid "Client forked"
msgstr "Rozdzielono klienta"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2225,9 +2229,9 @@ msgid "Daemon not responding."
msgstr "Demon nie odpowiada."
#: ../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
@ -2243,7 +2247,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Nie można uzyskać dostępu do blokady automatycznego wznawiania."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2260,7 +2264,7 @@ msgstr ""
"Wybudzono za pomocą ustawienia POLLOUT - ale jednoczesne wywołanie "
"snd_pcm_avail() zwróciło zero lub inną wartość < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "
@ -2293,64 +2297,3 @@ msgstr "Duplex telefoniczny (HSP/HFP)"
#: ../src/modules/reserve-wrap.c:151
msgid "PulseAudio Sound Server"
msgstr "Serwer dźwięku PulseAudio"
#~ msgid "select(): %s"
#~ msgstr "select(): %s"
#~ msgid "Cannot connect to system bus: %s"
#~ msgstr "Nie można połączyć się z magistralą systemową: %s"
#~ msgid "Cannot get caller from PID: %s"
#~ msgstr "Nie można uzyskać obiektu caller z PID: %s"
#~ msgid "Cannot set UID on caller object."
#~ msgstr "Nie można ustawić UID obiektu caller."
#~ msgid "Failed to get CK session."
#~ msgstr "Uzyskanie sesji CK nie powiodło się."
#~ msgid "Cannot set UID on session object."
#~ msgstr "Nie można ustawić UID obiektowi sesji."
#~ msgid "Cannot allocate PolKitAction."
#~ msgstr "Nie można przydzielić PolKitAction."
#~ msgid "Cannot set action_id"
#~ msgstr "Nie można ustawić action_id"
#~ msgid "Cannot allocate PolKitContext."
#~ msgstr "Nie można przydzielić PolKitContext."
#~ msgid "Cannot initialize PolKitContext: %s"
#~ msgstr "Nie można zainicjować PolKitContext: %s"
#~ msgid "Could not determine whether caller is authorized: %s"
#~ msgstr "Nie można ustalić, czy obiekt caller jest upoważniony: %s"
#~ msgid "Cannot obtain auth: %s"
#~ msgstr "Nie można uzyskać upoważnienia: %s"
#~ msgid "PolicyKit responded with '%s'"
#~ msgstr "PolicyKit zwróciło \"%s\""
#~ msgid ""
#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
#~ "daemon"
#~ msgstr ""
#~ "Szeregowanie o wysokim priorytecie (ujemny poziom nice Uniksa) dla demona "
#~ "PulseAudio"
#~ msgid "Real-time scheduling for the PulseAudio daemon"
#~ msgstr "Szeregowanie w czasie rzeczywistym dla demona PulseAudio"
#~ msgid ""
#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
#~ msgstr ""
#~ "Polityka systemu uniemożliwia PulseAudio uzyskanie szeregowania o wysokim "
#~ "priorytecie."
#~ msgid ""
#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
#~ msgstr ""
#~ "Polityka systemu uniemożliwia PulseAudio uzyskanie szeregowania w czasie "
#~ "rzeczywistym."

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Rui Gouveia <rui.gouveia@globaltek.pt>\n"
"Language-Team: pt <fedora-trans-pt@redhat.com>\n"
@ -12,7 +12,7 @@ msgstr ""
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: PORTUGAL\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, fuzzy, c-format
msgid "%s %s"
msgstr "%s %s"
@ -70,11 +70,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Áudio Interno"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -326,11 +326,16 @@ msgid "Using state directory %s."
msgstr "A manter o estado no directório %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Execução a utilizar o directório %s"
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Execução em modo de sistema: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -340,15 +345,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() falhou."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timer \"frescos\" de alta resolução disponíveis. Bom apetite!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -356,27 +361,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:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() falhou."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Falha ao inicializar serviço."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Arranque do serviço completo."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Encerramento do serviço iniciado."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Serviço terminado."
@ -646,72 +651,72 @@ msgstr "Aviso de Impressão"
msgid "Path: %s\n"
msgstr "Caminho: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] ficheiro registo de destino inválido '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, 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:248
#: ../src/daemon/daemon-conf.c:264
#, fuzzy, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "nome do método de acesso"
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit inválido '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato da amostra inválido '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, fuzzy, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "Taxa de amostragem em kHz"
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, fuzzy, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "Número de canais de audio"
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, fuzzy, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "Activar mapa de _radar"
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, 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:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Tamanho do fragmento inválido '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] nível nice inválido '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Falha ao abrir ficheiro de configuração: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -719,7 +724,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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Ler configuração a partir do ficheiro: %s ###\n"
@ -941,7 +946,7 @@ msgstr "Topo Traseira Esquerda"
msgid "Top Rear Right"
msgstr "Topo Traseira Direita"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1071,27 +1076,27 @@ msgstr "Implementação em falta"
msgid "Client forked"
msgstr "Cliente efectuou um fork"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2058,7 +2063,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Impossível aceder ao lock \"autospawn\"."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2075,7 +2080,7 @@ msgstr ""
"Fomos acordados pelo conjunto POLLOUT -- contudo uma chamada a seguir de "
"snd_pcm_avail() retornou 0 ou outro valor < min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"PO-Revision-Date: 2009-08-08 19:02-0300\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-08-21 11:25-0300\n"
"Last-Translator: Igor Pires Soares <igor@projetofedora.org>\n"
"Language-Team: Brazilian-Portuguese <fedora-trans-pt_br@redhat.com>\n"
"MIME-Version: 1.0\n"
@ -19,7 +19,7 @@ msgstr ""
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: Brazil\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -81,11 +81,11 @@ msgstr ""
"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/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Áudio interno"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -113,17 +113,17 @@ msgstr "Saindo."
#: ../src/daemon/main.c:186
#, c-format
msgid "Failed to find user '%s'."
msgstr "Falha em encontrar o usuário '%s'."
msgstr "Falha ao localizar o usuário \"%s\"."
#: ../src/daemon/main.c:191
#, c-format
msgid "Failed to find group '%s'."
msgstr "Falha em encontrar o grupo '%s'."
msgstr "Falha ao localizar o grupo \"%s\"."
#: ../src/daemon/main.c:195
#, c-format
msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
msgstr "Usuário '%s' (UID %lu) e grupo '%s' (GID %lu) encontrados."
msgstr "Usuário \"%s\" (UID %lu) e grupo \"%s\" (GID %lu) localizados."
#: ../src/daemon/main.c:200
#, c-format
@ -133,27 +133,27 @@ msgstr "O GID do usuário'%s' e do grupo '%s' não combinam."
#: ../src/daemon/main.c:205
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "O diretório Home do usuário '%s' não é '%s', ignorando."
msgstr "O diretório pessoal do usuário \"%s\" não é \"%s\", ignorando."
#: ../src/daemon/main.c:208 ../src/daemon/main.c:213
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Falha em criar '%s': %s"
msgstr "Falha ao criar \"%s\": %s"
#: ../src/daemon/main.c:220
#, c-format
msgid "Failed to change group list: %s"
msgstr "Falha em alterar a lista de grupos: %s"
msgstr "Falha ao alterar a lista de grupos: %s"
#: ../src/daemon/main.c:236
#, c-format
msgid "Failed to change GID: %s"
msgstr "Falha em mudar o GID: %s"
msgstr "Falha ao alterar o GID: %s"
#: ../src/daemon/main.c:252
#, c-format
msgid "Failed to change UID: %s"
msgstr "Falha em mudar o UID: %s"
msgstr "Falha ao alterar o UID: %s"
#: ../src/daemon/main.c:266
msgid "Successfully dropped root privileges."
@ -337,11 +337,16 @@ msgid "Using state directory %s."
msgstr "Usando o diretório de estado %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Usando o diretório de runtime %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Executando em modo do sistema: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -357,15 +362,15 @@ msgstr ""
"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:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() falhou."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timers de alta resolução frequinhos disponíveis! Bon appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -373,28 +378,28 @@ msgstr ""
"Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de "
"alta resolução habilitados!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() falhou."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Falha em iniciar o daemon."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "A partida dos Daemon está completa."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "O encerramento do Daemon foi iniciado."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Daemon terminado."
@ -661,72 +666,72 @@ msgstr "AVISO DE OBSOLESCÊNCIA: %s\n"
msgid "Path: %s\n"
msgstr "Caminho: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Alvo do log inválido '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nível de log inválido '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Método de reamostragem inválido '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit inválido '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Formato de amostragem inválido '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Taxa de amostragem inválida '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canais de amostragem inválidos'%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Mapa de canais \"%s\" inválido."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, 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:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Tamanho de fragmentos inválido '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Número de nice inválido'%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Falha em abrir o arquivo de configuração: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -734,15 +739,14 @@ 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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lido do arquivo de configuração: %s ###\n"
#: ../src/daemon/caps.c:62
#, fuzzy
msgid "Cleaning up privileges."
msgstr "Descartando os privilégios de root."
msgstr "Limpando privilégios."
#: ../src/daemon/pulseaudio.desktop.in.h:1
msgid "PulseAudio Sound System"
@ -956,7 +960,7 @@ msgstr "Posterior Superior Esquerdo"
msgid "Top Rear Right"
msgstr "Posterior Superior Direito"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1086,27 +1090,27 @@ msgstr "Implementação faltando"
msgid "Client forked"
msgstr "Cliente bifurcado"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2243,9 +2247,9 @@ msgid "Daemon not responding."
msgstr "O daemon não responde."
#: ../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
@ -2261,7 +2265,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Não foi possível acessar a trava de autogeração."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2278,7 +2282,7 @@ msgstr ""
"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:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-07 23:02+0100\n"
"Last-Translator: Miloš Komarčević <kmilos@gmail.com>\n"
"Language-Team: Serbian <fedora-trans-sr@redhat.com>\n"
@ -19,7 +19,7 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Lokalize 0.3\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -76,11 +76,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Унутрашњи звук"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Модем"
@ -331,11 +331,16 @@ msgid "Using state directory %s."
msgstr "Користи се %s директоријум стања."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Користи се %s извршни директоријум."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Покренуто у системском режиму: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -345,15 +350,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "Неуспела функција pa_pid_file_create()."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Доступни су нови бројачи високе резолуције! Пријатно!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -361,27 +366,27 @@ msgstr ""
"Ваше језгро није добро подешено за pulseaudio! Препоручује Вам се да "
"користите Linux језгро са омогућеним бројачима високе резолуције."
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "Неуспела функција pa_core_new()."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Неуспешно покретање демона."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Демон је покренут без иједног учитаног модула, одбија да ради."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Покретање демона успешно."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Покренуто гашење демона."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Рад демона је прекинут."
@ -647,72 +652,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Путања: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Неисправан циљни дневник „%s“."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Неисправан ниво опширности у дневнику „%s“."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Неисправан начин дискретизације „%s“."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Неисправан rlimit „%s“."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit није подржан на овој платформи."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Неисправан формат узорка „%s“."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Неисправна учестаност дискретизације „%s“."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Неисправни канали узорка „%s“."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Неисправна мапа канала „%s“."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Неисправан број одломака „%s“."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Неисправна величина одломка „%s“."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Неисправан ниво приоритета „%s“."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Неуспело отварање датотеке подешавања: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -720,7 +725,7 @@ msgstr ""
"Наведена мапа канала има нема исти број канала као што је наведено у "
"подразумеваном броју канала."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Прочитај из датотеке подешавања: %s ###\n"
@ -942,7 +947,7 @@ msgstr "Горњи позадински леви"
msgid "Top Rear Right"
msgstr "Горњи позадински десни"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1073,27 +1078,27 @@ msgstr "Није одрађено"
msgid "Client forked"
msgstr "Клијент израчван"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2244,7 +2249,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Није могуће приступити датотеци закључавања за самоумножавање."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2261,7 +2266,7 @@ msgstr ""
"Пробуђени смо са постављеним POLLOUT-ом -- али следећи snd_pcm_avail() је "
"вратио 0 или неку другу вредност мању од min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-07 23:02+0100\n"
"Last-Translator: Miloš Komarčević <kmilos@gmail.com>\n"
"Language-Team: Serbian <fedora-trans-sr@redhat.com>\n"
@ -19,7 +19,7 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Lokalize 0.3\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -76,11 +76,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Unutrašnji zvuk"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Modem"
@ -332,11 +332,16 @@ msgid "Using state directory %s."
msgstr "Koristi se %s direktorijum stanja."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Koristi se %s izvršni direktorijum."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Pokrenuto u sistemskom režimu: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -346,15 +351,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "Neuspela funkcija pa_pid_file_create()."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Dostupni su novi brojači visoke rezolucije! Prijatno!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -362,27 +367,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:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "Neuspela funkcija pa_core_new()."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Neuspešno pokretanje demona."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
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:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Pokretanje demona uspešno."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Pokrenuto gašenje demona."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Rad demona je prekinut."
@ -648,72 +653,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Putanja: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Neispravan ciljni dnevnik „%s“."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Neispravan nivo opširnosti u dnevniku „%s“."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Neispravan način diskretizacije „%s“."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Neispravan rlimit „%s“."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, 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:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Neispravan format uzorka „%s“."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Neispravna učestanost diskretizacije „%s“."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Neispravni kanali uzorka „%s“."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Neispravna mapa kanala „%s“."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Neispravan broj odlomaka „%s“."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Neispravna veličina odlomka „%s“."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Neispravan nivo prioriteta „%s“."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Neuspelo otvaranje datoteke podešavanja: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -721,7 +726,7 @@ msgstr ""
"Navedena mapa kanala ima nema isti broj kanala kao što je navedeno u "
"podrazumevanom broju kanala."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Pročitaj iz datoteke podešavanja: %s ###\n"
@ -943,7 +948,7 @@ msgstr "Gornji pozadinski levi"
msgid "Top Rear Right"
msgstr "Gornji pozadinski desni"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1074,27 +1079,27 @@ msgstr "Nije odrađeno"
msgid "Client forked"
msgstr "Klijent izračvan"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2246,7 +2251,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Nije moguće pristupiti datoteci zaključavanja za samoumnožavanje."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2263,7 +2268,7 @@ msgstr ""
"Probuđeni smo sa postavljenim POLLOUT-om -- ali sledeći snd_pcm_avail() je "
"vratio 0 ili neku drugu vrednost manju od min_avail."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2008-09-05 18:24+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -60,12 +60,12 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
#, fuzzy
msgid "Internal Audio"
msgstr "Internt fel"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr ""
@ -316,10 +316,15 @@ msgstr ""
#: ../src/daemon/main.c:777
#, c-format
msgid "Using modules directory %s."
msgstr ""
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr ""
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -329,41 +334,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() misslyckades."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() misslyckades."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr ""
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr ""
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr ""
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr ""
@ -552,78 +557,78 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Sökväg: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr ""
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr ""
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Misslyckades med att öppna konfigurationsfil: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr ""
@ -845,7 +850,7 @@ msgstr ""
msgid "Top Rear Right"
msgstr ""
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
#, fuzzy
@ -976,27 +981,27 @@ msgstr ""
msgid "Client forked"
msgstr ""
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr ""
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr ""
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr ""
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr ""
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr ""
@ -1951,7 +1956,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr ""
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -1962,7 +1967,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-12 05:02+0530\n"
"Last-Translator: I. Felix <ifelix@redhat.com>\n"
"Language-Team: Tamil <fedora-trans-ta@redhat.com>\n"
@ -34,7 +34,7 @@ msgstr ""
"\n"
"\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -91,11 +91,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "உட்புற ஆடியோ"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "மாதிரி"
@ -342,11 +342,16 @@ msgid "Using state directory %s."
msgstr "%s நிலை அடைவினை பயன்படுத்துகிறது."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "ஓடும்நேரம் %s அடைவை பயன்படுத்துகிறது."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "கணினியின் முறைமையில் இயங்குகிறது: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -356,15 +361,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() தோல்வியுற்றது."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "உயர்ந்த திரைத்திறன் நேரம்காட்டி கிடைக்கிளது! Bon appetit!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -372,27 +377,27 @@ msgstr ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() தோல்வியுற்றது."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "டோமோனை ஆரம்பிப்பதில் தோல்வி."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "டீமான் துவக்கம் எந்த தொகுதிகளும் ஏற்றப்படாமல், வேலையை நிராகரிக்கிறது."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "டோமோன் துவக்குவது முடிவடைந்தது."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "டோமோன் பணிநிறுத்தம் முனைகிறது."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "டோமோன் நீக்கப்பட்டுது."
@ -649,72 +654,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "பாதை: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] தவறான பதிவு இலக்கு '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] தவறான பதிவு இலக்கு '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] தவறான மறுமாதிரி முறை '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] தவறான rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit இந்த தளத்தில் துணைபுரியவில்லை."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] தவறான மாதிரி முறை '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] தவறான மாதிரி விலை '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] தவறான மாதிரி சேனல்கள் '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] தவறான சேனல் படம் '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] பகுப்பு '%s'க்கு தவறான எண்"
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] தவறான பகுப்பு அளவு '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] தவறான நல்ல நிலை '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "கட்டமைக்கப்பட்ட கோப்பினை திறப்பதில் தோல்வி: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -722,7 +727,7 @@ msgstr ""
"குறிப்பிட்ட முன்னிருப்பு சேனல் மேப் வேறுபட்ட சேனல்களின் எண்ணிக்கையை குறிப்பிட்ட "
"முன்னிருப்பு சேனல்களின் எண்ணிக்கையை விட கொண்டுள்ளது"
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### கட்டமைப்பு கோப்பிலிருந்து வாசிக்கவும்: %s ###\n"
@ -944,7 +949,7 @@ msgstr "மேலே பின் இடது"
msgid "Top Rear Right"
msgstr "மேலே பின் வலது"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1074,27 +1079,27 @@ msgstr "விடுபட்ட செயல்பாடு"
msgid "Client forked"
msgstr "கிளையன் நீக்கப்பட்டது"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2252,7 +2257,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "autospawn பூட்டை அணுக முடியவில்லை."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2263,7 +2268,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx.te\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-08 18:21+0530\n"
"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
"Language-Team: Telugu <en@li.org>\n"
@ -21,7 +21,7 @@ msgstr ""
"\n"
"\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -74,11 +74,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "అంతర్గత ఆడియో"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "మోడెమ్"
@ -324,11 +324,16 @@ msgid "Using state directory %s."
msgstr "స్థితి డైరెక్టరీను వుపయోగించుచున్నది %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "రన్‌టైమ్ డైరెక్టరీను వుపయోగించుచున్నది %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "సిస్టమ్ రీతినందు వుపయోగించుచున్నది: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -338,41 +343,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() విఫలమైంది."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "తాజా అధిక-తీవ్రత కాలసూచికలు అందుబాటులో వున్నాయి! బాన్ ఎపటైట్!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "మిత్రమా, నీ కెర్నల్ చెడిపోయింది! అధిక-తీవ్రత కాలసూచకిలను చేతనము చేయమని సూచించడమైనది!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new() విఫలమైంది."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "డెమోన్ సిద్దముచేయుటకు విఫలమైంది."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "ఏవిధమైన మాడ్యూళ్ళు లోడవకుండా డెమోన్ ప్రారంభము, పనిచేయుటకు తిరస్కరించబడింది."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "డెమోన్ ప్రారంభము పూర్తైనది."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "డెమోన్ మూసివేత సిద్దముచేయబడింది."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "డెమోన్ అంతముచేయబడింది."
@ -629,72 +634,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "పాత్: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] చెల్లని లాగ్ లక్ష్యము '%s'."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] చెల్లని లాగ్ స్థాయి '%s'."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] చెల్లని పునఃవుదాహరణ పద్దతి '%s'."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] చెల్లని rlimit '%s'."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit అనునది ఈ ప్లాట్‌ఫాం నందు మద్దతివ్వబడదు."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] చెల్లని మాదిరి ఫార్మాట్ '%s'."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] చెల్లని మాదిరి రేటు '%s'."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] చెల్లని మాదిరి చానళ్ళు '%s'."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] చెల్లని ఛానల్ మాప్ '%s'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] చెల్లని ముక్కలు సంఖ్య '%s'."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] చెల్లని ముక్క పరిమాణము '%s'."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] చెల్లని సాదా స్థాయి '%s'."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "ఆకృతీకరణ దస్త్రమును తెరుచుటకు విఫలమైంది: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -702,7 +707,7 @@ msgstr ""
"తెలుపబడిన అప్రమేయ ప్రాసారమార్గం మాప్ తెలుపబడిన అప్రమేయ ప్రసారమార్గముల కన్నా విభిన్న ప్రసారమార్గముల "
"సంఖ్యను కలిగివుంది."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### ఆకృతీకరణ దస్త్రమునుండి చదువుము: %s ###\n"
@ -924,7 +929,7 @@ msgstr "పైన వెనుక ఎడమవైపు"
msgid "Top Rear Right"
msgstr "పైన వెనుక కుడివైపున"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1054,27 +1059,27 @@ msgstr "తప్పిపోయిన యింప్లిమెంటేష
msgid "Client forked"
msgstr "కక్షిదారి పోర్క్ చేసిన"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2228,7 +2233,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "ఆటోస్పాన్ తాళంను యాక్సిస్ చేయలేదు."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2244,7 +2249,7 @@ msgstr ""
"మనము POLLOUT అమర్పు ద్వారా జాగరూక పరచబడినాము -- ఏమైనప్పటికి snd_pcm_avail() అనునది 0 ను "
"యిస్తుంది లేదా వేరొక విలువ < min_avail యిస్తుంది."
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-18 11:13+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation@linux.org.ua>\n"
@ -17,7 +17,7 @@ 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:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -74,11 +74,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "Вбудоване аудіо"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "Модем"
@ -335,11 +335,16 @@ msgid "Using state directory %s."
msgstr "Каталог стану: %s."
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "Каталог запуску: %s."
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "Запуску у загальносистемному режимі: %s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -349,15 +354,15 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "Спроба виконання pa_pid_file_create() зазнала невдачі."
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Доступні свіжі високоточні таймери! Смачного!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@ -365,29 +370,29 @@ msgstr ""
"Чувак, твоє ядро — лайно! Круті пацани рекомендують Linux з увімкненими "
"високоточними таймерами!"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "Спроба виконання pa_core_new() зазнала невдачі."
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "Не вдалося ініціалізувати фонову службу."
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"Запуск фонової служби без жодного завантаженого модуля, служба не буде "
"працездатною."
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "Запуск фонової служби завершено."
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "Ініційовано завершення роботи фонової служби."
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "Виконання фонової служби перервано."
@ -661,72 +666,72 @@ msgstr ""
msgid "Path: %s\n"
msgstr "Шлях: %s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Некоректний журнал «%s»."
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Некоректний рівень журналювання «%s»."
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Некоректний метод зміни частотних характеристик «%s»."
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] Некоректне значення rlimit «%s»."
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit не підтримується на цій платформі."
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Некоректний формат фрагмента «%s»."
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Некоректна частота вибірки «%s»."
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Некоректні канали фрагмента «%s»."
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] Некоректна карта каналів «%s»'."
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Некоректна кількість фрагментів «%s»."
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Некоректний розмір фрагмента «%s»."
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Некоректний рівень nice «%s»."
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Не вдалося відкрити файл налаштувань: %s"
#: ../src/daemon/daemon-conf.c:546
#: ../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."
@ -734,7 +739,7 @@ msgstr ""
"У вказаній типовій карті каналів визначається інша кількість каналів, ніж "
"типова кількість каналів."
#: ../src/daemon/daemon-conf.c:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Прочитано з файла налаштувань: %s ###\n"
@ -956,7 +961,7 @@ msgstr "Верхній задній лівий"
msgid "Top Rear Right"
msgstr "Верхній задній правий"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1086,27 +1091,27 @@ msgstr "Відсутня реалізація"
msgid "Client forked"
msgstr "Клієнт розгалужено"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uкан. %uГц"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f ГБ"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f МБ"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f кБ"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u Б"
@ -2267,7 +2272,7 @@ msgstr "write(): %s"
msgid "Cannot access autospawn lock."
msgstr "Не вдалося зняти блокування автоматичного розгалуження."
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2278,7 +2283,7 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

View file

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-19 04:16+0200\n"
"POT-Creation-Date: 2009-08-24 03:31+0200\n"
"PO-Revision-Date: 2009-04-06 10:26+1000\n"
"Last-Translator: Leah Liu <lliu@redhat.com>\n"
"Language-Team: Simplified Chinese <zh@li.org>\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2666
#: ../src/modules/alsa/alsa-util.c:775 ../src/pulsecore/sink.c:2676
#, c-format
msgid "%s %s"
msgstr ""
@ -71,11 +71,11 @@ msgid ""
"input control values>"
msgstr ""
#: ../src/pulsecore/sink.c:2650
#: ../src/pulsecore/sink.c:2660
msgid "Internal Audio"
msgstr "内部音频"
#: ../src/pulsecore/sink.c:2655
#: ../src/pulsecore/sink.c:2665
msgid "Modem"
msgstr "调制解调器"
@ -321,11 +321,16 @@ msgid "Using state directory %s."
msgstr "正在使用状态文件夹%s。"
#: ../src/daemon/main.c:777
#, fuzzy, c-format
msgid "Using modules directory %s."
msgstr "正在使用运行时文件夹%s。"
#: ../src/daemon/main.c:779
#, c-format
msgid "Running in system mode: %s"
msgstr "正在以系统模式运行:%s"
#: ../src/daemon/main.c:780
#: ../src/daemon/main.c:782
msgid ""
"OK, so you are running PA in system mode. Please note that you most likely "
"shouldn't be doing that.\n"
@ -335,41 +340,41 @@ msgid ""
"explanation why system mode is usually a bad idea."
msgstr ""
#: ../src/daemon/main.c:797
#: ../src/daemon/main.c:799
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create()失败。"
#: ../src/daemon/main.c:807
#: ../src/daemon/main.c:809
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "新鲜的高分辨率计时器开锅了!吃个饱!"
#: ../src/daemon/main.c:809
#: ../src/daemon/main.c:811
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "老兄你的内核真臭现在流行的是启用了高分辩率计分器的Linux"
#: ../src/daemon/main.c:827
#: ../src/daemon/main.c:832
msgid "pa_core_new() failed."
msgstr "pa_core_new()失败。"
#: ../src/daemon/main.c:889
#: ../src/daemon/main.c:892
msgid "Failed to initialize daemon."
msgstr "后台程序初始化失败。"
#: ../src/daemon/main.c:894
#: ../src/daemon/main.c:897
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "后台程序启动未加载任何模块,拒绝工作。"
#: ../src/daemon/main.c:911
#: ../src/daemon/main.c:914
msgid "Daemon startup complete."
msgstr "后台程序启动完成。"
#: ../src/daemon/main.c:917
#: ../src/daemon/main.c:920
msgid "Daemon shutdown initiated."
msgstr "开始关闭后台程序。"
#: ../src/daemon/main.c:939
#: ../src/daemon/main.c:942
msgid "Daemon terminated."
msgstr "后台程序已终止。"
@ -610,78 +615,78 @@ msgstr ""
msgid "Path: %s\n"
msgstr "路径:%s\n"
#: ../src/daemon/daemon-conf.c:216
#: ../src/daemon/daemon-conf.c:232
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] 无效的日志目标'%s'。"
#: ../src/daemon/daemon-conf.c:232
#: ../src/daemon/daemon-conf.c:248
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] 无效的日志级别'%s'。"
#: ../src/daemon/daemon-conf.c:248
#: ../src/daemon/daemon-conf.c:264
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] 无效的重采样方法'%s'。"
#: ../src/daemon/daemon-conf.c:271
#: ../src/daemon/daemon-conf.c:287
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] 无效的rlimit '%s'。"
#: ../src/daemon/daemon-conf.c:278
#: ../src/daemon/daemon-conf.c:294
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] 此平台不支持rlimit。"
#: ../src/daemon/daemon-conf.c:294
#: ../src/daemon/daemon-conf.c:310
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] 无效的样品格式'%s'。"
#: ../src/daemon/daemon-conf.c:312
#: ../src/daemon/daemon-conf.c:328
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] 无效的样品率'%s'。"
#: ../src/daemon/daemon-conf.c:336
#: ../src/daemon/daemon-conf.c:352
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] 无效的样品通道'%s'。"
#: ../src/daemon/daemon-conf.c:354
#: ../src/daemon/daemon-conf.c:370
#, c-format
msgid "[%s:%u] Invalid channel map '%s'."
msgstr "[%s:%u] 无效频道地图 '%s'。"
#: ../src/daemon/daemon-conf.c:372
#: ../src/daemon/daemon-conf.c:388
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] 无效的分段数'%s'。"
#: ../src/daemon/daemon-conf.c:390
#: ../src/daemon/daemon-conf.c:406
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] 无效的分段大小'%s'。"
#: ../src/daemon/daemon-conf.c:408
#: ../src/daemon/daemon-conf.c:424
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] 无效的nice level '%s'。"
#: ../src/daemon/daemon-conf.c:530
#: ../src/daemon/daemon-conf.c:546
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "打开配置文件失败:%s"
#: ../src/daemon/daemon-conf.c:546
#: ../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:622
#: ../src/daemon/daemon-conf.c:638
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### 从配置文件读取:%s ###\n"
@ -903,7 +908,7 @@ msgstr "上左后"
msgid "Top Rear Right"
msgstr "上右后"
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:171
#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:170
#: ../src/pulse/volume.c:285 ../src/pulse/volume.c:311
#: ../src/pulse/volume.c:331 ../src/pulse/volume.c:361
msgid "(invalid)"
@ -1033,27 +1038,27 @@ msgstr "缺少部署"
msgid "Client forked"
msgstr "客户端分支"
#: ../src/pulse/sample.c:173
#: ../src/pulse/sample.c:172
#, c-format
msgid "%s %uch %uHz"
msgstr "%s %uch %uHz"
#: ../src/pulse/sample.c:185
#: ../src/pulse/sample.c:184
#, c-format
msgid "%0.1f GiB"
msgstr "%0.1f GiB"
#: ../src/pulse/sample.c:187
#: ../src/pulse/sample.c:186
#, c-format
msgid "%0.1f MiB"
msgstr "%0.1f MiB"
#: ../src/pulse/sample.c:189
#: ../src/pulse/sample.c:188
#, c-format
msgid "%0.1f KiB"
msgstr "%0.1f KiB"
#: ../src/pulse/sample.c:191
#: ../src/pulse/sample.c:190
#, c-format
msgid "%u B"
msgstr "%u B"
@ -2187,7 +2192,7 @@ msgstr "write()%s"
msgid "Cannot access autospawn lock."
msgstr "不能访问autospawn锁。"
#: ../src/modules/alsa/alsa-sink.c:451 ../src/modules/alsa/alsa-sink.c:608
#: ../src/modules/alsa/alsa-sink.c:526 ../src/modules/alsa/alsa-sink.c:684
#, c-format
msgid ""
"ALSA woke us up to write new data to the device, but there was actually "
@ -2203,7 +2208,7 @@ msgstr ""
"提醒我们设置 POLLOUT -- 但结果是 snd_pcm_avail() 返回 0 或者另一个小于最小可"
"用值的数值。"
#: ../src/modules/alsa/alsa-source.c:431 ../src/modules/alsa/alsa-source.c:580
#: ../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 "

1
src/.gitignore vendored
View file

@ -1,3 +1,4 @@
usergroup-test
sigbus-test
TAGS
alsa-time-test

View file

@ -74,6 +74,7 @@ AM_CFLAGS = \
$(LIBSAMPLERATE_CFLAGS) \
$(LIBSNDFILE_CFLAGS) \
$(LIBSPEEX_CFLAGS) \
-DPA_BUILDDIR=\"$(abs_builddir)\" \
-DPA_DLSEARCHPATH=\"$(modlibexecdir)\" \
-DPA_DEFAULT_CONFIG_DIR=\"$(PA_DEFAULT_CONFIG_DIR)\" \
-DPA_BINARY=\"$(PA_BINARY)\" \
@ -83,8 +84,8 @@ AM_CFLAGS = \
-DAO_REQUIRE_CAS \
-DPULSE_LOCALEDIR=\"$(pulselocaledir)\" \
-DPA_MACHINE_ID=\"$(localstatedir)/lib/dbus/machine-id\" \
-DPA_ALSA_PATHS_DIR=\"$(alsapathsdir)\" \
-DPA_ALSA_PROFILE_SETS_DIR=\"$(alsaprofilesetsdir)\"
-DPA_ALSA_PATHS_DIR=\"$(alsapathsdir)\" \
-DPA_ALSA_PROFILE_SETS_DIR=\"$(alsaprofilesetsdir)\"
AM_LIBADD = $(PTHREAD_LIBS) $(INTLLIBS)
AM_LDADD = $(PTHREAD_LIBS) $(INTLLIBS)
@ -280,7 +281,8 @@ TESTS = \
proplist-test \
lock-autospawn-test \
prioq-test \
sigbus-test
sigbus-test \
usergroup-test
TESTS_BINARIES = \
mainloop-test \
@ -318,7 +320,8 @@ TESTS_BINARIES = \
stripnul \
lock-autospawn-test \
prioq-test \
sigbus-test
sigbus-test \
usergroup-test
if HAVE_SIGXCPU
#TESTS += \
@ -557,6 +560,11 @@ alsa_time_test_LDADD = $(AM_LDADD)
alsa_time_test_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS)
alsa_time_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(ASOUNDLIB_LIBS)
usergroup_test_SOURCES = tests/usergroup-test.c
usergroup_test_LDADD = $(AM_LDADD) libpulsecore-@PA_MAJORMINORMICRO@.la
usergroup_test_CFLAGS = $(AM_CFLAGS)
usergroup_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
###################################
# Common library #
###################################
@ -621,6 +629,7 @@ libpulsecommon_@PA_MAJORMINORMICRO@_la_SOURCES = \
pulsecore/tagstruct.c pulsecore/tagstruct.h \
pulsecore/time-smoother.c pulsecore/time-smoother.h \
pulsecore/tokenizer.c pulsecore/tokenizer.h \
pulsecore/usergroup.c pulsecore/usergroup.h \
pulsecore/sndfile-util.c pulsecore/sndfile-util.h \
pulsecore/winsock.h
@ -823,10 +832,14 @@ libpulsecore_@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/remap.c pulsecore/remap.h \
pulsecore/remap_mmx.c \
pulsecore/resampler.c pulsecore/resampler.h \
pulsecore/rtpoll.c pulsecore/rtpoll.h \
pulsecore/sample-util.c pulsecore/sample-util.h \
pulsecore/cpu-arm.c pulsecore/cpu-x86.c \
pulsecore/svolume_c.c pulsecore/svolume_arm.c\
pulsecore/svolume_mmx.c pulsecore/svolume_sse.c \
pulsecore/sconv-s16be.c pulsecore/sconv-s16be.h \
pulsecore/sconv-s16le.c pulsecore/sconv-s16le.h \
pulsecore/sconv.c pulsecore/sconv.h \

View file

@ -385,11 +385,6 @@ int pa_cmdline_parse(pa_daemon_conf *conf, int argc, char *const argv [], int *d
pa_xfree(conf->script_commands);
conf->script_commands = pa_strbuf_tostring_free(buf);
if (!conf->script_commands) {
pa_xfree(conf->script_commands);
conf->script_commands = NULL;
}
*d = optind;
return 0;

View file

@ -136,9 +136,25 @@ static const pa_daemon_conf default_conf = {
};
pa_daemon_conf* pa_daemon_conf_new(void) {
pa_daemon_conf *c = pa_xnewdup(pa_daemon_conf, &default_conf, 1);
pa_daemon_conf *c;
c = pa_xnewdup(pa_daemon_conf, &default_conf, 1);
#if defined(__linux__) && !defined(__OPTIMIZE__)
/* We abuse __OPTIMIZE__ as a check whether we are a debug build
* or not. If we are and are run from the build tree then we
* override the search path to point to our build tree */
if (pa_run_from_build_tree()) {
pa_log_notice("Detected that we are run from the build tree, fixing search path.");
c->dl_search_path = pa_xstrdup(PA_BUILDDIR "/.libs/");
} else
#endif
c->dl_search_path = pa_xstrdup(PA_DLSEARCHPATH);
c->dl_search_path = pa_xstrdup(PA_DLSEARCHPATH);
return c;
}

View file

@ -39,8 +39,6 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <liboil/liboil.h>
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
@ -95,6 +93,8 @@
#ifdef HAVE_DBUS
#include <pulsecore/dbus-shared.h>
#endif
#include <pulsecore/cpu-arm.h>
#include <pulsecore/cpu-x86.h>
#include "cmdline.h"
#include "cpulimit.h"
@ -804,6 +804,8 @@ int main(int argc, char *argv[]) {
pa_log_info(_("Using state directory %s."), s);
pa_xfree(s);
pa_log_info(_("Using modules directory %s."), conf->dl_search_path);
pa_log_info(_("Running in system mode: %s"), pa_yes_no(pa_in_system_mode()));
if (pa_in_system_mode())
@ -851,6 +853,9 @@ int main(int argc, char *argv[]) {
pa_memtrap_install();
pa_cpu_init_x86();
pa_cpu_init_arm();
pa_assert_se(mainloop = pa_mainloop_new());
if (!(c = pa_core_new(pa_mainloop_get_api(mainloop), !conf->disable_shm, conf->shm_size))) {
@ -893,8 +898,6 @@ int main(int argc, char *argv[]) {
win32_timer = pa_mainloop_get_api(mainloop)->rtclock_time_new(pa_mainloop_get_api(mainloop), pa_gettimeofday(&win32_tv), message_cb, NULL);
#endif
oil_init();
if (!conf->no_cpu_limit)
pa_assert_se(pa_cpu_limit_init(pa_mainloop_get_api(mainloop)) == 0);

View file

@ -929,7 +929,7 @@ static int element_zero_volume(pa_alsa_element *e, snd_mixer_t *m) {
int pa_alsa_path_select(pa_alsa_path *p, snd_mixer_t *m) {
pa_alsa_element *e;
int r;
int r = 0;
pa_assert(m);
pa_assert(p);
@ -1849,7 +1849,12 @@ pa_alsa_path* pa_alsa_path_new(const char *fname, pa_alsa_direction_t direction)
items[1].data = &p->description;
items[2].data = &p->name;
fn = pa_maybe_prefix_path(fname, PA_ALSA_PATHS_DIR);
fn = pa_maybe_prefix_path(fname,
#if defined(__linux__) && !defined(__OPTIMIZE__)
pa_run_from_build_tree() ? PA_BUILDDIR "/modules/alsa/mixer/paths/" :
#endif
PA_ALSA_PATHS_DIR);
r = pa_config_parse(fn, NULL, items, p);
pa_xfree(fn);
@ -3110,7 +3115,12 @@ pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel
if (!fname)
fname = "default.conf";
fn = pa_maybe_prefix_path(fname, PA_ALSA_PROFILE_SETS_DIR);
fn = pa_maybe_prefix_path(fname,
#if defined(__linux__) && !defined(__OPTIMIZE__)
pa_run_from_build_tree() ? PA_BUILDDIR "/modules/alsa/mixer/profile-sets/" :
#endif
PA_ALSA_PROFILE_SETS_DIR);
r = pa_config_parse(fn, NULL, items, ps);
pa_xfree(fn);

View file

@ -62,11 +62,21 @@
/* #define DEBUG_TIMING */
#define DEFAULT_DEVICE "default"
#define DEFAULT_TSCHED_BUFFER_USEC (2*PA_USEC_PER_SEC) /* 2s -- Overall buffer size */
#define DEFAULT_TSCHED_WATERMARK_USEC (20*PA_USEC_PER_MSEC) /* 20ms -- Fill up when only this much is left in the buffer */
#define TSCHED_WATERMARK_STEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms -- On underrun, increase watermark by this */
#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms -- Sleep at least 10ms on each iteration */
#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms -- Wakeup at least this long before the buffer runs empty*/
#define DEFAULT_TSCHED_BUFFER_USEC (2*PA_USEC_PER_SEC) /* 2s -- Overall buffer size */
#define DEFAULT_TSCHED_WATERMARK_USEC (20*PA_USEC_PER_MSEC) /* 20ms -- Fill up when only this much is left in the buffer */
#define TSCHED_WATERMARK_INC_STEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms -- On underrun, increase watermark by this */
#define TSCHED_WATERMARK_DEC_STEP_USEC (5*PA_USEC_PER_MSEC) /* 5ms -- When everything's great, decrease watermark by this */
#define TSCHED_WATERMARK_VERIFY_AFTER_USEC (20*PA_USEC_PER_SEC) /* 20s -- How long after a drop out recheck if things are good now */
#define TSCHED_WATERMARK_INC_THRESHOLD_USEC (1*PA_USEC_PER_MSEC) /* 3ms -- If the buffer level ever below this theshold, increase the watermark */
#define TSCHED_WATERMARK_DEC_THRESHOLD_USEC (100*PA_USEC_PER_MSEC) /* 100ms -- If the buffer level didn't drop below this theshold in the verification time, decrease the watermark */
#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms -- Sleep at least 10ms on each iteration */
#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms -- Wakeup at least this long before the buffer runs empty*/
#define SMOOTHER_MIN_INTERVAL (2*PA_USEC_PER_MSEC) /* 2ms -- min smoother update interval */
#define SMOOTHER_MAX_INTERVAL (200*PA_USEC_PER_MSEC) /* 200ms -- max smoother update inteval */
#define VOLUME_ACCURACY (PA_VOLUME_NORM/100) /* don't require volume adjustments to be perfectly correct. don't necessarily extend granularity in software unless the differences get greater than this level */
@ -96,7 +106,12 @@ struct userdata {
hwbuf_unused,
min_sleep,
min_wakeup,
watermark_step;
watermark_inc_step,
watermark_dec_step,
watermark_inc_threshold,
watermark_dec_threshold;
pa_usec_t watermark_dec_not_before;
unsigned nfragments;
pa_memchunk memchunk;
@ -115,6 +130,8 @@ struct userdata {
pa_smoother *smoother;
uint64_t write_count;
uint64_t since_start;
pa_usec_t smoother_interval;
pa_usec_t last_smoother_update;
pa_reserve_wrapper *reserve;
pa_hook_slot *reserve_slot;
@ -243,6 +260,7 @@ static void fix_min_sleep_wakeup(struct userdata *u) {
size_t max_use, max_use_2;
pa_assert(u);
pa_assert(u->use_tsched);
max_use = u->hwbuf_size - u->hwbuf_unused;
max_use_2 = pa_frame_align(max_use/2, &u->sink->sample_spec);
@ -257,6 +275,7 @@ static void fix_min_sleep_wakeup(struct userdata *u) {
static void fix_tsched_watermark(struct userdata *u) {
size_t max_use;
pa_assert(u);
pa_assert(u->use_tsched);
max_use = u->hwbuf_size - u->hwbuf_unused;
@ -267,7 +286,7 @@ static void fix_tsched_watermark(struct userdata *u) {
u->tsched_watermark = u->min_wakeup;
}
static void adjust_after_underrun(struct userdata *u) {
static void increase_watermark(struct userdata *u) {
size_t old_watermark;
pa_usec_t old_min_latency, new_min_latency;
@ -276,31 +295,64 @@ static void adjust_after_underrun(struct userdata *u) {
/* First, just try to increase the watermark */
old_watermark = u->tsched_watermark;
u->tsched_watermark = PA_MIN(u->tsched_watermark * 2, u->tsched_watermark + u->watermark_step);
u->tsched_watermark = PA_MIN(u->tsched_watermark * 2, u->tsched_watermark + u->watermark_inc_step);
fix_tsched_watermark(u);
if (old_watermark != u->tsched_watermark) {
pa_log_notice("Increasing wakeup watermark to %0.2f ms",
(double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
pa_log_info("Increasing wakeup watermark to %0.2f ms",
(double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
return;
}
/* Hmm, we cannot increase the watermark any further, hence let's raise the latency */
old_min_latency = u->sink->thread_info.min_latency;
new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_STEP_USEC);
new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_INC_STEP_USEC);
new_min_latency = PA_MIN(new_min_latency, u->sink->thread_info.max_latency);
if (old_min_latency != new_min_latency) {
pa_log_notice("Increasing minimal latency to %0.2f ms",
(double) new_min_latency / PA_USEC_PER_MSEC);
pa_log_info("Increasing minimal latency to %0.2f ms",
(double) new_min_latency / PA_USEC_PER_MSEC);
pa_sink_set_latency_range_within_thread(u->sink, new_min_latency, u->sink->thread_info.max_latency);
return;
}
/* When we reach this we're officialy fucked! */
}
static void decrease_watermark(struct userdata *u) {
size_t old_watermark;
pa_usec_t now;
pa_assert(u);
pa_assert(u->use_tsched);
now = pa_rtclock_now();
if (u->watermark_dec_not_before <= 0)
goto restart;
if (u->watermark_dec_not_before > now)
return;
old_watermark = u->tsched_watermark;
if (u->tsched_watermark < u->watermark_dec_step)
u->tsched_watermark = u->tsched_watermark / 2;
else
u->tsched_watermark = PA_MAX(u->tsched_watermark / 2, u->tsched_watermark - u->watermark_dec_step);
fix_tsched_watermark(u);
if (old_watermark != u->tsched_watermark)
pa_log_info("Decreasing wakeup watermark to %0.2f ms",
(double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
/* We don't change the latency range*/
restart:
u->watermark_dec_not_before = now + TSCHED_WATERMARK_VERIFY_AFTER_USEC;
}
static void hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*process_usec) {
pa_usec_t usec, wm;
@ -308,6 +360,7 @@ static void hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*p
pa_assert(process_usec);
pa_assert(u);
pa_assert(u->use_tsched);
usec = pa_sink_get_requested_latency_within_thread(u->sink);
@ -355,7 +408,7 @@ static int try_recover(struct userdata *u, const char *call, int err) {
return 0;
}
static size_t check_left_to_play(struct userdata *u, size_t n_bytes) {
static size_t check_left_to_play(struct userdata *u, size_t n_bytes, pa_bool_t on_timeout) {
size_t left_to_play;
/* We use <= instead of < for this check here because an underrun
@ -363,34 +416,55 @@ static size_t check_left_to_play(struct userdata *u, size_t n_bytes) {
* it is removed from the buffer. This is particularly important
* when block transfer is used. */
if (n_bytes <= u->hwbuf_size) {
if (n_bytes <= u->hwbuf_size)
left_to_play = u->hwbuf_size - n_bytes;
else {
#ifdef DEBUG_TIMING
pa_log_debug("%0.2f ms left to play", (double) pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
#endif
} else {
/* We got a dropout. What a mess! */
left_to_play = 0;
#ifdef DEBUG_TIMING
PA_DEBUG_TRAP;
#endif
if (!u->first && !u->after_rewind) {
if (!u->first && !u->after_rewind)
if (pa_log_ratelimit())
pa_log_info("Underrun!");
}
if (u->use_tsched)
adjust_after_underrun(u);
#ifdef DEBUG_TIMING
pa_log_debug("%0.2f ms left to play; inc threshold = %0.2f ms; dec threshold = %0.2f ms",
(double) pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) / PA_USEC_PER_MSEC,
(double) pa_bytes_to_usec(u->watermark_inc_threshold, &u->sink->sample_spec) / PA_USEC_PER_MSEC,
(double) pa_bytes_to_usec(u->watermark_dec_threshold, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
#endif
if (u->use_tsched) {
pa_bool_t reset_not_before = TRUE;
if (!u->first && !u->after_rewind) {
if (left_to_play < u->watermark_inc_threshold)
increase_watermark(u);
else if (left_to_play > u->watermark_dec_threshold) {
reset_not_before = FALSE;
/* We decrease the watermark only if have actually
* been woken up by a timeout. If something else woke
* us up it's too easy to fulfill the deadlines... */
if (on_timeout)
decrease_watermark(u);
}
}
if (reset_not_before)
u->watermark_dec_not_before = 0;
}
return left_to_play;
}
static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled, pa_bool_t on_timeout) {
pa_bool_t work_done = TRUE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_play;
@ -425,7 +499,8 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
pa_log_debug("avail: %lu", (unsigned long) n_bytes);
#endif
left_to_play = check_left_to_play(u, n_bytes);
left_to_play = check_left_to_play(u, n_bytes, on_timeout);
on_timeout = FALSE;
if (u->use_tsched)
@ -560,7 +635,7 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
return work_done ? 1 : 0;
}
static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled, pa_bool_t on_timeout) {
pa_bool_t work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_play;
@ -586,7 +661,8 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
}
n_bytes = (size_t) n * u->frame_size;
left_to_play = check_left_to_play(u, n_bytes);
left_to_play = check_left_to_play(u, n_bytes, on_timeout);
on_timeout = FALSE;
if (u->use_tsched)
@ -723,18 +799,27 @@ static void update_smoother(struct userdata *u) {
now1 = pa_timespec_load(&htstamp);
}
/* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
if (now1 <= 0)
now1 = pa_rtclock_now();
/* check if the time since the last update is bigger than the interval */
if (u->last_smoother_update > 0)
if (u->last_smoother_update + u->smoother_interval > now1)
return;
position = (int64_t) u->write_count - ((int64_t) delay * (int64_t) u->frame_size);
if (PA_UNLIKELY(position < 0))
position = 0;
/* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
if (now1 <= 0)
now1 = pa_rtclock_now();
now2 = pa_bytes_to_usec((uint64_t) position, &u->sink->sample_spec);
pa_smoother_put(u->smoother, now1, now2);
u->last_smoother_update = now1;
/* exponentially increase the update interval up to the MAX limit */
u->smoother_interval = PA_MIN (u->smoother_interval * 2, SMOOTHER_MAX_INTERVAL);
}
static pa_usec_t sink_get_latency(struct userdata *u) {
@ -906,11 +991,12 @@ static int unsuspend(struct userdata *u) {
u->write_count = 0;
pa_smoother_reset(u->smoother, pa_rtclock_now(), TRUE);
u->smoother_interval = SMOOTHER_MIN_INTERVAL;
u->last_smoother_update = 0;
u->first = TRUE;
u->since_start = 0;
pa_log_info("Resumed successfully...");
return 0;
@ -1263,15 +1349,16 @@ static void thread_func(void *userdata) {
if (PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
int work_done;
pa_usec_t sleep_usec = 0;
pa_bool_t on_timeout = pa_rtpoll_timer_elapsed(u->rtpoll);
if (PA_UNLIKELY(u->sink->thread_info.rewind_requested))
if (process_rewind(u) < 0)
goto fail;
if (u->use_mmap)
work_done = mmap_write(u, &sleep_usec, revents & POLLOUT);
work_done = mmap_write(u, &sleep_usec, revents & POLLOUT, on_timeout);
else
work_done = unix_write(u, &sleep_usec, revents & POLLOUT);
work_done = unix_write(u, &sleep_usec, revents & POLLOUT, on_timeout);
if (work_done < 0)
goto fail;
@ -1622,6 +1709,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
5,
pa_rtclock_now(),
TRUE);
u->smoother_interval = SMOOTHER_MIN_INTERVAL;
dev_id = pa_modargs_get_value(
ma, "device_id",
@ -1771,7 +1859,6 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
u->fragment_size = frag_size = (uint32_t) (period_frames * frame_size);
u->nfragments = nfrags;
u->hwbuf_size = u->fragment_size * nfrags;
u->tsched_watermark = pa_usec_to_bytes_round_up(pa_bytes_to_usec_round_up(tsched_watermark, &requested_ss), &u->sink->sample_spec);
pa_cvolume_mute(&u->hardware_volume, u->sink->sample_spec.channels);
pa_log_info("Using %u fragments of size %lu bytes, buffer time is %0.2fms",
@ -1782,7 +1869,13 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
pa_sink_set_max_rewind(u->sink, u->hwbuf_size);
if (u->use_tsched) {
u->watermark_step = pa_usec_to_bytes(TSCHED_WATERMARK_STEP_USEC, &u->sink->sample_spec);
u->tsched_watermark = pa_usec_to_bytes_round_up(pa_bytes_to_usec_round_up(tsched_watermark, &requested_ss), &u->sink->sample_spec);
u->watermark_inc_step = pa_usec_to_bytes(TSCHED_WATERMARK_INC_STEP_USEC, &u->sink->sample_spec);
u->watermark_dec_step = pa_usec_to_bytes(TSCHED_WATERMARK_DEC_STEP_USEC, &u->sink->sample_spec);
u->watermark_inc_threshold = pa_usec_to_bytes_round_up(TSCHED_WATERMARK_INC_THRESHOLD_USEC, &u->sink->sample_spec);
u->watermark_dec_threshold = pa_usec_to_bytes_round_up(TSCHED_WATERMARK_DEC_THRESHOLD_USEC, &u->sink->sample_spec);
fix_min_sleep_wakeup(u);
fix_tsched_watermark(u);
@ -1796,6 +1889,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
} else
pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->hwbuf_size, &ss));
reserve_update(u);
if (update_sw_params(u) < 0)

View file

@ -59,11 +59,22 @@
/* #define DEBUG_TIMING */
#define DEFAULT_DEVICE "default"
#define DEFAULT_TSCHED_BUFFER_USEC (2*PA_USEC_PER_SEC) /* 2s */
#define DEFAULT_TSCHED_WATERMARK_USEC (20*PA_USEC_PER_MSEC) /* 20ms */
#define TSCHED_WATERMARK_STEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms */
#define DEFAULT_TSCHED_BUFFER_USEC (2*PA_USEC_PER_SEC) /* 2s */
#define DEFAULT_TSCHED_WATERMARK_USEC (20*PA_USEC_PER_MSEC) /* 20ms */
#define TSCHED_WATERMARK_INC_STEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
#define TSCHED_WATERMARK_DEC_STEP_USEC (5*PA_USEC_PER_MSEC) /* 5ms */
#define TSCHED_WATERMARK_VERIFY_AFTER_USEC (20*PA_USEC_PER_SEC) /* 20s */
#define TSCHED_WATERMARK_INC_THRESHOLD_USEC (1*PA_USEC_PER_MSEC) /* 3ms */
#define TSCHED_WATERMARK_DEC_THRESHOLD_USEC (100*PA_USEC_PER_MSEC) /* 100ms */
#define TSCHED_WATERMARK_STEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms */
#define SMOOTHER_MIN_INTERVAL (2*PA_USEC_PER_MSEC) /* 2ms */
#define SMOOTHER_MAX_INTERVAL (200*PA_USEC_PER_MSEC) /* 200ms */
#define VOLUME_ACCURACY (PA_VOLUME_NORM/100)
@ -93,7 +104,12 @@ struct userdata {
hwbuf_unused,
min_sleep,
min_wakeup,
watermark_step;
watermark_inc_step,
watermark_dec_step,
watermark_inc_threshold,
watermark_dec_threshold;
pa_usec_t watermark_dec_not_before;
unsigned nfragments;
@ -108,6 +124,8 @@ struct userdata {
pa_smoother *smoother;
uint64_t read_count;
pa_usec_t smoother_interval;
pa_usec_t last_smoother_update;
pa_reserve_wrapper *reserve;
pa_hook_slot *reserve_slot;
@ -236,6 +254,7 @@ static int reserve_monitor_init(struct userdata *u, const char *dname) {
static void fix_min_sleep_wakeup(struct userdata *u) {
size_t max_use, max_use_2;
pa_assert(u);
pa_assert(u->use_tsched);
max_use = u->hwbuf_size - u->hwbuf_unused;
max_use_2 = pa_frame_align(max_use/2, &u->source->sample_spec);
@ -250,6 +269,7 @@ static void fix_min_sleep_wakeup(struct userdata *u) {
static void fix_tsched_watermark(struct userdata *u) {
size_t max_use;
pa_assert(u);
pa_assert(u->use_tsched);
max_use = u->hwbuf_size - u->hwbuf_unused;
@ -260,7 +280,7 @@ static void fix_tsched_watermark(struct userdata *u) {
u->tsched_watermark = u->min_wakeup;
}
static void adjust_after_overrun(struct userdata *u) {
static void increase_watermark(struct userdata *u) {
size_t old_watermark;
pa_usec_t old_min_latency, new_min_latency;
@ -269,36 +289,72 @@ static void adjust_after_overrun(struct userdata *u) {
/* First, just try to increase the watermark */
old_watermark = u->tsched_watermark;
u->tsched_watermark = PA_MIN(u->tsched_watermark * 2, u->tsched_watermark + u->watermark_step);
u->tsched_watermark = PA_MIN(u->tsched_watermark * 2, u->tsched_watermark + u->watermark_inc_step);
fix_tsched_watermark(u);
if (old_watermark != u->tsched_watermark) {
pa_log_notice("Increasing wakeup watermark to %0.2f ms",
(double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
pa_log_info("Increasing wakeup watermark to %0.2f ms",
(double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
return;
}
/* Hmm, we cannot increase the watermark any further, hence let's raise the latency */
old_min_latency = u->source->thread_info.min_latency;
new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_STEP_USEC);
new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_INC_STEP_USEC);
new_min_latency = PA_MIN(new_min_latency, u->source->thread_info.max_latency);
if (old_min_latency != new_min_latency) {
pa_log_notice("Increasing minimal latency to %0.2f ms",
(double) new_min_latency / PA_USEC_PER_MSEC);
pa_log_info("Increasing minimal latency to %0.2f ms",
(double) new_min_latency / PA_USEC_PER_MSEC);
pa_source_set_latency_range_within_thread(u->source, new_min_latency, u->source->thread_info.max_latency);
return;
}
/* When we reach this we're officialy fucked! */
}
static void decrease_watermark(struct userdata *u) {
size_t old_watermark;
pa_usec_t now;
pa_assert(u);
pa_assert(u->use_tsched);
now = pa_rtclock_now();
if (u->watermark_dec_not_before <= 0)
goto restart;
if (u->watermark_dec_not_before > now)
return;
old_watermark = u->tsched_watermark;
if (u->tsched_watermark < u->watermark_dec_step)
u->tsched_watermark = u->tsched_watermark / 2;
else
u->tsched_watermark = PA_MAX(u->tsched_watermark / 2, u->tsched_watermark - u->watermark_dec_step);
fix_tsched_watermark(u);
if (old_watermark != u->tsched_watermark)
pa_log_info("Decreasing wakeup watermark to %0.2f ms",
(double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
/* We don't change the latency range*/
restart:
u->watermark_dec_not_before = now + TSCHED_WATERMARK_VERIFY_AFTER_USEC;
}
static pa_usec_t hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*process_usec) {
pa_usec_t wm, usec;
pa_assert(sleep_usec);
pa_assert(process_usec);
pa_assert(u);
pa_assert(u->use_tsched);
usec = pa_source_get_requested_latency_within_thread(u->source);
@ -347,7 +403,7 @@ static int try_recover(struct userdata *u, const char *call, int err) {
return 0;
}
static size_t check_left_to_record(struct userdata *u, size_t n_bytes) {
static size_t check_left_to_record(struct userdata *u, size_t n_bytes, pa_bool_t on_timeout) {
size_t left_to_record;
size_t rec_space = u->hwbuf_size - u->hwbuf_unused;
@ -356,14 +412,11 @@ static size_t check_left_to_record(struct userdata *u, size_t n_bytes) {
* it is removed from the buffer. This is particularly important
* when block transfer is used. */
if (n_bytes <= rec_space) {
if (n_bytes <= rec_space)
left_to_record = rec_space - n_bytes;
else {
#ifdef DEBUG_TIMING
pa_log_debug("%0.2f ms left to record", (double) pa_bytes_to_usec(left_to_record, &u->source->sample_spec) / PA_USEC_PER_MSEC);
#endif
} else {
/* We got a dropout. What a mess! */
left_to_record = 0;
#ifdef DEBUG_TIMING
@ -372,15 +425,36 @@ static size_t check_left_to_record(struct userdata *u, size_t n_bytes) {
if (pa_log_ratelimit())
pa_log_info("Overrun!");
}
if (u->use_tsched)
adjust_after_overrun(u);
#ifdef DEBUG_TIMING
pa_log_debug("%0.2f ms left to record", (double) pa_bytes_to_usec(left_to_record, &u->source->sample_spec) / PA_USEC_PER_MSEC);
#endif
if (u->use_tsched) {
pa_bool_t reset_not_before = TRUE;
if (left_to_record < u->watermark_inc_threshold)
increase_watermark(u);
else if (left_to_record > u->watermark_dec_threshold) {
reset_not_before = FALSE;
/* We decrease the watermark only if have actually been
* woken up by a timeout. If something else woke us up
* it's too easy to fulfill the deadlines... */
if (on_timeout)
decrease_watermark(u);
}
if (reset_not_before)
u->watermark_dec_not_before = 0;
}
return left_to_record;
}
static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled, pa_bool_t on_timeout) {
pa_bool_t work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_record;
@ -412,7 +486,8 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
pa_log_debug("avail: %lu", (unsigned long) n_bytes);
#endif
left_to_record = check_left_to_record(u, n_bytes);
left_to_record = check_left_to_record(u, n_bytes, on_timeout);
on_timeout = FALSE;
if (u->use_tsched)
if (!polled &&
@ -538,7 +613,7 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
return work_done ? 1 : 0;
}
static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled, pa_bool_t on_timeout) {
int work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_record;
@ -565,7 +640,8 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
}
n_bytes = (size_t) n * u->frame_size;
left_to_record = check_left_to_record(u, n_bytes);
left_to_record = check_left_to_record(u, n_bytes, on_timeout);
on_timeout = FALSE;
if (u->use_tsched)
if (!polled &&
@ -691,15 +767,23 @@ static void update_smoother(struct userdata *u) {
now1 = pa_timespec_load(&htstamp);
}
position = u->read_count + ((uint64_t) delay * (uint64_t) u->frame_size);
/* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
if (now1 <= 0)
now1 = pa_rtclock_now();
/* check if the time since the last update is bigger than the interval */
if (u->last_smoother_update > 0)
if (u->last_smoother_update + u->smoother_interval > now1)
return;
position = u->read_count + ((uint64_t) delay * (uint64_t) u->frame_size);
now2 = pa_bytes_to_usec(position, &u->source->sample_spec);
pa_smoother_put(u->smoother, now1, now2);
u->last_smoother_update = now1;
/* exponentially increase the update interval up to the MAX limit */
u->smoother_interval = PA_MIN (u->smoother_interval * 2, SMOOTHER_MAX_INTERVAL);
}
static pa_usec_t source_get_latency(struct userdata *u) {
@ -862,6 +946,8 @@ static int unsuspend(struct userdata *u) {
u->read_count = 0;
pa_smoother_reset(u->smoother, pa_rtclock_now(), TRUE);
u->smoother_interval = SMOOTHER_MIN_INTERVAL;
u->last_smoother_update = 0;
pa_log_info("Resumed successfully...");
@ -1143,11 +1229,12 @@ static void thread_func(void *userdata) {
if (PA_SOURCE_IS_OPENED(u->source->thread_info.state)) {
int work_done;
pa_usec_t sleep_usec = 0;
pa_bool_t on_timeout = pa_rtpoll_timer_elapsed(u->rtpoll);
if (u->use_mmap)
work_done = mmap_read(u, &sleep_usec, revents & POLLIN);
work_done = mmap_read(u, &sleep_usec, revents & POLLIN, on_timeout);
else
work_done = unix_read(u, &sleep_usec, revents & POLLIN);
work_done = unix_read(u, &sleep_usec, revents & POLLIN, on_timeout);
if (work_done < 0)
goto fail;
@ -1469,6 +1556,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
5,
pa_rtclock_now(),
FALSE);
u->smoother_interval = SMOOTHER_MIN_INTERVAL;
dev_id = pa_modargs_get_value(
ma, "device_id",
@ -1616,7 +1704,6 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
u->fragment_size = frag_size = (uint32_t) (period_frames * frame_size);
u->nfragments = nfrags;
u->hwbuf_size = u->fragment_size * nfrags;
u->tsched_watermark = pa_usec_to_bytes_round_up(pa_bytes_to_usec_round_up(tsched_watermark, &requested_ss), &u->source->sample_spec);
pa_cvolume_mute(&u->hardware_volume, u->source->sample_spec.channels);
pa_log_info("Using %u fragments of size %lu bytes, buffer time is %0.2fms",
@ -1624,7 +1711,13 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
(double) pa_bytes_to_usec(u->hwbuf_size, &ss) / PA_USEC_PER_MSEC);
if (u->use_tsched) {
u->watermark_step = pa_usec_to_bytes(TSCHED_WATERMARK_STEP_USEC, &u->source->sample_spec);
u->tsched_watermark = pa_usec_to_bytes_round_up(pa_bytes_to_usec_round_up(tsched_watermark, &requested_ss), &u->source->sample_spec);
u->watermark_inc_step = pa_usec_to_bytes(TSCHED_WATERMARK_INC_STEP_USEC, &u->source->sample_spec);
u->watermark_dec_step = pa_usec_to_bytes(TSCHED_WATERMARK_DEC_STEP_USEC, &u->source->sample_spec);
u->watermark_inc_threshold = pa_usec_to_bytes_round_up(TSCHED_WATERMARK_INC_THRESHOLD_USEC, &u->source->sample_spec);
u->watermark_dec_threshold = pa_usec_to_bytes_round_up(TSCHED_WATERMARK_DEC_THRESHOLD_USEC, &u->source->sample_spec);
fix_min_sleep_wakeup(u);
fix_tsched_watermark(u);

View file

@ -41,9 +41,12 @@ volume = merge
override-map.1 = lfe
override-map.2 = lfe,lfe
; 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.
[Element Headphone]
switch = off
volume = off
switch = mute
volume = zero
[Element Speaker]
switch = mute

View file

@ -38,9 +38,12 @@ volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
; 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.
[Element Headphone]
switch = off
volume = off
switch = mute
volume = zero
[Element Speaker]
switch = mute

View file

@ -37,9 +37,12 @@ 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.
[Element Headphone]
switch = off
volume = off
switch = mute
volume = zero
[Element Speaker]
switch = mute

View file

@ -52,9 +52,6 @@ PA_MODULE_LOAD_ONCE(TRUE);
#define MAX_MODULES 10
#define BUF_MAX 2048
/* #undef PA_GCONF_HELPER */
/* #define PA_GCONF_HELPER "/home/lennart/projects/pulseaudio/src/gconf-helper" */
struct module_item {
char *name;
char *args;
@ -343,7 +340,11 @@ int pa__init(pa_module*m) {
u->io_event = NULL;
u->buf_fill = 0;
if ((u->fd = pa_start_child_for_read(PA_GCONF_HELPER, NULL, &u->pid)) < 0)
if ((u->fd = pa_start_child_for_read(
#if defined(__linux__) && !defined(__OPTIMIZE__)
pa_run_from_build_tree() ? PA_BUILDDIR "/.libs/gconf-helper" :
#endif
PA_GCONF_HELPER, NULL, &u->pid)) < 0)
goto fail;
u->io_event = m->core->mainloop->io_new(

View file

@ -1161,6 +1161,8 @@ int pa__init(pa_module*m) {
pa_channel_map slaves_map;
pa_bool_t is_first_slave = TRUE;
pa_sample_spec_init(&slaves_spec);
while ((n = pa_split(slaves, ",", &split_state))) {
pa_sink *slave_sink;

View file

@ -99,7 +99,7 @@ static const char* const valid_modargs[] = {
};
/* 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) {
@ -130,7 +130,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);
@ -145,7 +145,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);
@ -160,7 +160,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);
@ -176,6 +176,34 @@ 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);
}
/* 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;
@ -390,8 +418,31 @@ 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);
}
/* 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) {
@ -731,7 +782,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) {
@ -739,10 +792,12 @@ int pa__init(pa_module*m) {
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->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);
@ -775,6 +830,8 @@ 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);

View file

@ -302,8 +302,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);
}
int pa__init(pa_module*m) {

View file

@ -60,6 +60,7 @@
#include <pulsecore/thread-mq.h>
#include <pulsecore/rtpoll.h>
#include <pulsecore/thread.h>
#include <pulsecore/time-smoother.h>
#include "module-solaris-symdef.h"
@ -110,6 +111,8 @@ struct userdata {
uint32_t prev_playback_samples, prev_record_samples;
int32_t minimum_request;
pa_smoother *smoother;
};
static const char* const valid_modargs[] = {
@ -133,6 +136,9 @@ static const char* const valid_modargs[] = {
#define MAX_RENDER_HZ (300)
/* This render rate limit imposes a minimum latency, but without it we waste too much CPU time. */
#define MAX_BUFFER_SIZE (128 * 1024)
/* An attempt to buffer more than 128 KB causes write() to fail with errno == EAGAIN. */
static uint64_t get_playback_buffered_bytes(struct userdata *u) {
audio_info_t info;
uint64_t played_bytes;
@ -145,7 +151,12 @@ static uint64_t get_playback_buffered_bytes(struct userdata *u) {
/* Handle wrap-around of the device's sample counter, which is a uint_32. */
if (u->prev_playback_samples > info.play.samples) {
/* Unfortunately info.play.samples can sometimes go backwards, even before it wraps! */
/*
* Unfortunately info.play.samples can sometimes go backwards, even before it wraps!
* The bug seems to be absent on Solaris x86 nv117 with audio810 driver, at least on this (UP) machine.
* The bug is present on a different (SMP) machine running Solaris x86 nv103 with audioens driver.
* An earlier revision of this file mentions the same bug independently (unknown configuration).
*/
if (u->prev_playback_samples + info.play.samples < 240000) {
++u->play_samples_msw;
} else {
@ -155,6 +166,8 @@ static uint64_t get_playback_buffered_bytes(struct userdata *u) {
u->prev_playback_samples = info.play.samples;
played_bytes = (((uint64_t)u->play_samples_msw << 32) + info.play.samples) * u->frame_size;
pa_smoother_put(u->smoother, pa_rtclock_now(), pa_bytes_to_usec(played_bytes, &u->sink->sample_spec));
return u->written_bytes - played_bytes;
}
@ -387,6 +400,8 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
pa_smoother_pause(u->smoother, pa_rtclock_now());
if (!u->source || u->source_suspended) {
if (suspend(u) < 0)
return -1;
@ -398,6 +413,8 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
case PA_SINK_RUNNING:
if (u->sink->thread_info.state == PA_SINK_SUSPENDED) {
pa_smoother_resume(u->smoother, pa_rtclock_now(), TRUE);
if (!u->source || u->source_suspended) {
if (unsuspend(u) < 0)
return -1;
@ -479,7 +496,7 @@ static void sink_set_volume(pa_sink *s) {
if (u->fd >= 0) {
AUDIO_INITINFO(&info);
info.play.gain = pa_cvolume_max(&s->virtual_volume) * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
info.play.gain = pa_cvolume_max(&s->real_volume) * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
assert(info.play.gain <= AUDIO_MAX_GAIN);
if (ioctl(u->fd, AUDIO_SETINFO, &info) < 0) {
@ -501,8 +518,7 @@ static void sink_get_volume(pa_sink *s) {
if (ioctl(u->fd, AUDIO_GETINFO, &info) < 0)
pa_log("AUDIO_SETINFO: %s", pa_cstrerror(errno));
else
pa_cvolume_set(&s->virtual_volume, s->sample_spec.channels,
info.play.gain * PA_VOLUME_NORM / AUDIO_MAX_GAIN);
pa_cvolume_set(&s->real_volume, s->sample_spec.channels, info.play.gain * PA_VOLUME_NORM / AUDIO_MAX_GAIN);
}
}
@ -515,7 +531,7 @@ static void source_set_volume(pa_source *s) {
if (u->fd >= 0) {
AUDIO_INITINFO(&info);
info.play.gain = pa_cvolume_max(&s->virtual_volume) * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
info.play.gain = pa_cvolume_max(&s->volume) * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
assert(info.play.gain <= AUDIO_MAX_GAIN);
if (ioctl(u->fd, AUDIO_SETINFO, &info) < 0) {
@ -537,8 +553,7 @@ static void source_get_volume(pa_source *s) {
if (ioctl(u->fd, AUDIO_GETINFO, &info) < 0)
pa_log("AUDIO_SETINFO: %s", pa_cstrerror(errno));
else
pa_cvolume_set(&s->virtual_volume, s->sample_spec.channels,
info.play.gain * PA_VOLUME_NORM / AUDIO_MAX_GAIN);
pa_cvolume_set(&s->volume, s->sample_spec.channels, info.play.gain * PA_VOLUME_NORM / AUDIO_MAX_GAIN);
}
}
@ -606,11 +621,13 @@ static void thread_func(void *userdata) {
pa_thread_mq_install(&u->thread_mq);
pa_smoother_set_time_offset(u->smoother, pa_rtclock_now());
for (;;) {
/* Render some data and write it to the dsp */
if (u->sink && PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
pa_usec_t xtime0;
pa_usec_t xtime0, ysleep_interval, xsleep_interval;
uint64_t buffered_bytes;
if (u->sink->thread_info.rewind_requested)
@ -629,12 +646,15 @@ static void thread_func(void *userdata) {
info.play.error = 0;
if (ioctl(u->fd, AUDIO_SETINFO, &info) < 0)
pa_log("AUDIO_SETINFO: %s", pa_cstrerror(errno));
pa_smoother_reset(u->smoother, pa_rtclock_now(), TRUE);
}
for (;;) {
void *p;
ssize_t w;
size_t len;
int write_type = 1;
/*
* Since we cannot modify the size of the output buffer we fake it
@ -652,38 +672,31 @@ static void thread_func(void *userdata) {
break;
if (u->memchunk.length < len)
pa_sink_render(u->sink, u->sink->thread_info.max_request, &u->memchunk);
pa_sink_render(u->sink, len - u->memchunk.length, &u->memchunk);
len = PA_MIN(u->memchunk.length, len);
p = pa_memblock_acquire(u->memchunk.memblock);
w = pa_write(u->fd, (uint8_t*) p + u->memchunk.index, u->memchunk.length, NULL);
w = pa_write(u->fd, (uint8_t*) p + u->memchunk.index, len, &write_type);
pa_memblock_release(u->memchunk.memblock);
if (w <= 0) {
switch (errno) {
case EINTR:
continue;
case EAGAIN:
/* If the buffer_size is too big, we get EAGAIN. Avoiding that limit by trial and error
* is not ideal, but I don't know how to get the system to tell me what the limit is.
*/
u->buffer_size = u->buffer_size * 18 / 25;
u->buffer_size -= u->buffer_size % u->frame_size;
u->buffer_size = PA_MAX(u->buffer_size, 2 * u->minimum_request);
pa_sink_set_max_request_within_thread(u->sink, u->buffer_size);
pa_sink_set_max_rewind_within_thread(u->sink, u->buffer_size);
pa_log("EAGAIN. Buffer size is now %u bytes (%llu buffered)", u->buffer_size, buffered_bytes);
break;
default:
pa_log("Failed to write data to DSP: %s", pa_cstrerror(errno));
goto fail;
if (errno == EINTR) {
continue;
} else if (errno == EAGAIN) {
/* We may have realtime priority so yield the CPU to ensure that fd can become writable again. */
pa_log_debug("EAGAIN with %llu bytes buffered.", buffered_bytes);
break;
} else {
pa_log("Failed to write data to DSP: %s", pa_cstrerror(errno));
goto fail;
}
} else {
pa_assert(w % u->frame_size == 0);
u->written_bytes += w;
u->memchunk.length -= w;
u->memchunk.index += w;
u->memchunk.length -= w;
if (u->memchunk.length <= 0) {
pa_memblock_unref(u->memchunk.memblock);
pa_memchunk_reset(&u->memchunk);
@ -691,7 +704,9 @@ static void thread_func(void *userdata) {
}
}
pa_rtpoll_set_timer_absolute(u->rtpoll, xtime0 + pa_bytes_to_usec(buffered_bytes / 2, &u->sink->sample_spec));
ysleep_interval = pa_bytes_to_usec(buffered_bytes / 2, &u->sink->sample_spec);
xsleep_interval = pa_smoother_translate(u->smoother, xtime0, ysleep_interval);
pa_rtpoll_set_timer_absolute(u->rtpoll, xtime0 + PA_MIN(xsleep_interval, ysleep_interval));
} else
pa_rtpoll_set_timer_disabled(u->rtpoll);
@ -797,7 +812,7 @@ static void sig_callback(pa_mainloop_api *api, pa_signal_event*e, int sig, void
pa_log_debug("caught signal");
if (u->sink) {
pa_sink_get_volume(u->sink, TRUE, FALSE);
pa_sink_get_volume(u->sink, TRUE);
pa_sink_get_mute(u->sink, TRUE);
}
@ -812,7 +827,7 @@ int pa__init(pa_module *m) {
pa_channel_map map;
pa_modargs *ma = NULL;
uint32_t buffer_length_msec;
int fd;
int fd = -1;
pa_sink_new_data sink_new_data;
pa_source_new_data source_new_data;
char const *name;
@ -838,6 +853,9 @@ int pa__init(pa_module *m) {
u = pa_xnew0(struct userdata, 1);
if (!(u->smoother = pa_smoother_new(PA_USEC_PER_SEC, PA_USEC_PER_SEC * 2, TRUE, TRUE, 10, pa_rtclock_now(), TRUE)))
goto fail;
/*
* For a process (or several processes) to use the same audio device for both
* record and playback at the same time, the device's mixer must be enabled.
@ -861,7 +879,13 @@ int pa__init(pa_module *m) {
}
u->buffer_size = pa_usec_to_bytes(1000 * buffer_length_msec, &ss);
if (u->buffer_size < 2 * u->minimum_request) {
pa_log("supplied buffer size argument is too small");
pa_log("buffer_length argument cannot be smaller than %u",
(unsigned)(pa_bytes_to_usec(2 * u->minimum_request, &ss) / 1000));
goto fail;
}
if (u->buffer_size > MAX_BUFFER_SIZE) {
pa_log("buffer_length argument cannot be greater than %u",
(unsigned)(pa_bytes_to_usec(MAX_BUFFER_SIZE, &ss) / 1000));
goto fail;
}
@ -924,6 +948,7 @@ int pa__init(pa_module *m) {
pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
pa_source_set_rtpoll(u->source, u->rtpoll);
pa_source_set_fixed_latency(u->source, pa_bytes_to_usec(u->buffer_size, &u->source->sample_spec));
u->source->get_volume = source_get_volume;
u->source->set_volume = source_set_volume;
@ -966,15 +991,15 @@ int pa__init(pa_module *m) {
pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
pa_sink_set_rtpoll(u->sink, u->rtpoll);
pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->buffer_size, &u->sink->sample_spec));
pa_sink_set_max_request(u->sink, u->buffer_size);
pa_sink_set_max_rewind(u->sink, u->buffer_size);
u->sink->get_volume = sink_get_volume;
u->sink->set_volume = sink_set_volume;
u->sink->get_mute = sink_get_mute;
u->sink->set_mute = sink_set_mute;
u->sink->refresh_volume = u->sink->refresh_muted = TRUE;
pa_sink_set_max_request(u->sink, u->buffer_size);
pa_sink_set_max_rewind(u->sink, u->buffer_size);
} else
u->sink = NULL;
@ -1075,6 +1100,9 @@ void pa__done(pa_module *m) {
if (u->fd >= 0)
close(u->fd);
if (u->smoother)
pa_smoother_free(u->smoother);
pa_xfree(u->device_name);
pa_xfree(u);

View file

@ -25,6 +25,7 @@
#include <errno.h>
#include <limits.h>
#include <dirent.h>
#include <sys/inotify.h>
#include <libudev.h>
@ -45,8 +46,9 @@ PA_MODULE_USAGE(
struct device {
char *path;
pa_bool_t accessible;
pa_bool_t need_verify;
char *card_name;
char *args;
uint32_t module;
};
@ -78,6 +80,7 @@ static void device_free(struct device *d) {
pa_xfree(d->path);
pa_xfree(d->card_name);
pa_xfree(d->args);
pa_xfree(d);
}
@ -96,30 +99,166 @@ static const char *path_get_card_id(const char *path) {
return e + 5;
}
static pa_bool_t is_card_busy(const char *id) {
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;
int r;
pa_assert(id);
card_path = pa_sprintf_malloc("/proc/asound/card%s", id);
if (!(card_dir = opendir(card_path))) {
pa_log_warn("Failed to open %s: %s", card_path, pa_cstrerror(errno));
goto fail;
}
len = offsetof(struct dirent, d_name) + fpathconf(dirfd(card_dir), _PC_NAME_MAX) + 1;
space = pa_xmalloc(len);
for (;;) {
de = NULL;
if ((r = readdir_r(card_dir, space, &de)) != 0) {
pa_log_warn("readdir_r() failed: %s", pa_cstrerror(r));
goto fail;
}
if (!de)
break;
if (!pa_startswith(de->d_name, "pcm"))
continue;
pa_xfree(pcm_path);
pcm_path = pa_sprintf_malloc("%s/%s", card_path, de->d_name);
if (pcm_dir)
closedir(pcm_dir);
if (!(pcm_dir = opendir(pcm_path))) {
pa_log_warn("Failed to open %s: %s", pcm_path, pa_cstrerror(errno));
continue;
}
for (;;) {
char line[32];
if ((r = readdir_r(pcm_dir, space, &de)) != 0) {
pa_log_warn("readdir_r() failed: %s", pa_cstrerror(r));
goto fail;
}
if (!de)
break;
if (!pa_startswith(de->d_name, "sub"))
continue;
pa_xfree(sub_status);
sub_status = pa_sprintf_malloc("%s/%s/status", pcm_path, de->d_name);
if (status_file)
fclose(status_file);
if (!(status_file = fopen(sub_status, "r"))) {
pa_log_warn("Failed to open %s: %s", sub_status, pa_cstrerror(errno));
continue;
}
if (!(fgets(line, sizeof(line)-1, status_file))) {
pa_log_warn("Failed to read from %s: %s", sub_status, pa_cstrerror(errno));
continue;
}
if (!pa_streq(line, "closed\n")) {
busy = TRUE;
break;
}
}
}
fail:
pa_xfree(card_path);
pa_xfree(pcm_path);
pa_xfree(sub_status);
pa_xfree(space);
if (card_dir)
closedir(card_dir);
if (pcm_dir)
closedir(pcm_dir);
if (status_file)
fclose(status_file);
return busy;
}
static void verify_access(struct userdata *u, struct device *d) {
char *cd;
pa_card *card;
pa_bool_t accessible;
pa_assert(u);
pa_assert(d);
if (!(card = pa_namereg_get(u->core, d->card_name, PA_NAMEREG_CARD)))
return;
cd = pa_sprintf_malloc("%s/snd/controlC%s", udev_get_dev_path(u->udev), path_get_card_id(d->path));
d->accessible = access(cd, W_OK) >= 0;
pa_log_info("%s is accessible: %s", cd, pa_yes_no(d->accessible));
accessible = access(cd, R_OK|W_OK) >= 0;
pa_log_debug("%s is accessible: %s", cd, pa_yes_no(accessible));
pa_xfree(cd);
pa_card_suspend(card, !d->accessible, PA_SUSPEND_SESSION);
if (d->module == PA_INVALID_INDEX) {
/* If we are not loaded, try to load */
if (accessible) {
pa_module *m;
pa_bool_t busy;
/* Check if any of the PCM devices that belong to this
* card are currently busy. If they are, don't try to load
* right now, to make sure the probing phase can
* successfully complete. When the current user of the
* device closes it we will get another notification via
* inotify and can then recheck. */
busy = is_card_busy(path_get_card_id(d->path));
pa_log_debug("%s is busy: %s", d->path, pa_yes_no(busy));
if (!busy) {
pa_log_debug("Loading module-alsa-card with arguments '%s'", d->args);
m = pa_module_load(u->core, "module-alsa-card", d->args);
if (m) {
d->module = m->index;
pa_log_info("Card %s (%s) module loaded.", d->path, d->card_name);
} else
pa_log_info("Card %s (%s) failed to load module.", d->path, d->card_name);
}
}
} else {
/* If we are already loaded update suspend status with
* accessible boolean */
if ((card = pa_namereg_get(u->core, d->card_name, PA_NAMEREG_CARD)))
pa_card_suspend(card, !accessible, PA_SUSPEND_SESSION);
}
}
static void card_changed(struct userdata *u, struct udev_device *dev) {
struct device *d;
const char *path;
const char *t;
char *card_name, *args;
pa_module *m;
char *n;
pa_assert(u);
@ -135,44 +274,33 @@ static void card_changed(struct userdata *u, struct udev_device *dev) {
return;
}
d = pa_xnew0(struct device, 1);
d->path = pa_xstrdup(path);
d->module = PA_INVALID_INDEX;
if (!(t = udev_device_get_property_value(dev, "PULSE_NAME")))
if (!(t = udev_device_get_property_value(dev, "ID_ID")))
if (!(t = udev_device_get_property_value(dev, "ID_PATH")))
t = path_get_card_id(path);
n = pa_namereg_make_valid_name(t);
card_name = pa_sprintf_malloc("alsa_card.%s", n);
args = pa_sprintf_malloc("device_id=\"%s\" "
"name=\"%s\" "
"card_name=\"%s\" "
"tsched=%s "
"ignore_dB=%s "
"card_properties=\"module-udev-detect.discovered=1\"",
path_get_card_id(path),
n,
card_name,
pa_yes_no(u->use_tsched),
pa_yes_no(u->ignore_dB));
pa_log_debug("Loading module-alsa-card with arguments '%s'", args);
m = pa_module_load(u->core, "module-alsa-card", args);
pa_xfree(args);
if (m) {
pa_log_info("Card %s (%s) added.", path, n);
d = pa_xnew(struct device, 1);
d->path = pa_xstrdup(path);
d->card_name = card_name;
d->module = m->index;
d->accessible = TRUE;
pa_hashmap_put(u->devices, d->path, d);
} else
pa_xfree(card_name);
d->card_name = pa_sprintf_malloc("alsa_card.%s", n);
d->args = pa_sprintf_malloc("device_id=\"%s\" "
"name=\"%s\" "
"card_name=\"%s\" "
"tsched=%s "
"ignore_dB=%s "
"card_properties=\"module-udev-detect.discovered=1\"",
path_get_card_id(path),
n,
d->card_name,
pa_yes_no(u->use_tsched),
pa_yes_no(u->ignore_dB));
pa_xfree(n);
pa_hashmap_put(u->devices, d->path, d);
verify_access(u, d);
}
static void remove_card(struct userdata *u, struct udev_device *dev) {
@ -185,7 +313,10 @@ static void remove_card(struct userdata *u, struct udev_device *dev) {
return;
pa_log_info("Card %s removed.", d->path);
pa_module_unload_request_by_index(u->core, d->module, TRUE);
if (d->module != PA_INVALID_INDEX)
pa_module_unload_request_by_index(u->core, d->module, TRUE);
device_free(d);
}
@ -262,6 +393,34 @@ fail:
u->udev_io = NULL;
}
static pa_bool_t pcm_node_belongs_to_device(
struct device *d,
const char *node) {
char *cd;
pa_bool_t b;
cd = pa_sprintf_malloc("pcmC%sD", path_get_card_id(d->path));
b = pa_startswith(node, cd);
pa_xfree(cd);
return b;
}
static pa_bool_t control_node_belongs_to_device(
struct device *d,
const char *node) {
char *cd;
pa_bool_t b;
cd = pa_sprintf_malloc("controlC%s", path_get_card_id(d->path));
b = pa_streq(node, cd);
pa_xfree(cd);
return b;
}
static void inotify_cb(
pa_mainloop_api*a,
pa_io_event* e,
@ -275,10 +434,13 @@ static void inotify_cb(
} buf;
struct userdata *u = userdata;
static int type = 0;
pa_bool_t verify = FALSE, deleted = FALSE;
pa_bool_t deleted = FALSE;
struct device *d;
void *state;
for (;;) {
ssize_t r;
struct inotify_event *event;
pa_zero(buf);
if ((r = pa_read(fd, &buf, sizeof(buf), &type)) <= 0) {
@ -290,22 +452,51 @@ static void inotify_cb(
goto fail;
}
if ((buf.e.mask & IN_CLOSE_WRITE) && pa_startswith(buf.e.name, "pcmC"))
verify = TRUE;
event = &buf.e;
while (r > 0) {
size_t len;
if ((buf.e.mask & (IN_DELETE_SELF|IN_MOVE_SELF)))
deleted = TRUE;
if ((size_t) r < sizeof(struct inotify_event)) {
pa_log("read() too short.");
goto fail;
}
len = sizeof(struct inotify_event) + event->len;
if ((size_t) r < len) {
pa_log("Payload missing.");
goto fail;
}
/* From udev we get the guarantee that the control
* device's ACL is changed last. To avoid races when ACLs
* are changed we hence watch only the control device */
if (((event->mask & IN_ATTRIB) && pa_startswith(event->name, "controlC")))
PA_HASHMAP_FOREACH(d, u->devices, state)
if (control_node_belongs_to_device(d, event->name))
d->need_verify = TRUE;
/* ALSA doesn't really give us any guarantee on the closing
* order, so let's simply hope */
if (((event->mask & IN_CLOSE_WRITE) && pa_startswith(event->name, "pcmC")))
PA_HASHMAP_FOREACH(d, u->devices, state)
if (pcm_node_belongs_to_device(d, event->name))
d->need_verify = TRUE;
/* /dev/snd/ might have been removed */
if ((event->mask & (IN_DELETE_SELF|IN_MOVE_SELF)))
deleted = TRUE;
event = (struct inotify_event*) ((uint8_t*) event + len);
r -= len;
}
}
if (verify) {
struct device *d;
void *state;
pa_log_debug("Verifying access.");
PA_HASHMAP_FOREACH(d, u->devices, state)
PA_HASHMAP_FOREACH(d, u->devices, state)
if (d->need_verify) {
d->need_verify = FALSE;
verify_access(u, d);
}
}
if (!deleted)
return;
@ -335,7 +526,7 @@ static int setup_inotify(struct userdata *u) {
}
dev_snd = pa_sprintf_malloc("%s/snd", udev_get_dev_path(u->udev));
r = inotify_add_watch(u->inotify_fd, dev_snd, IN_CLOSE_WRITE|IN_DELETE_SELF|IN_MOVE_SELF);
r = inotify_add_watch(u->inotify_fd, dev_snd, IN_ATTRIB|IN_CLOSE_WRITE|IN_DELETE_SELF|IN_MOVE_SELF);
pa_xfree(dev_snd);
if (r < 0) {
@ -449,7 +640,7 @@ int pa__init(pa_module *m) {
udev_enumerate_unref(enumerate);
pa_log_info("Loaded %u modules.", pa_hashmap_size(u->devices));
pa_log_info("Found %u cards.", pa_hashmap_size(u->devices));
pa_modargs_free(ma);

View file

@ -56,7 +56,9 @@ pa_glib_mainloop *pa_glib_mainloop_new(GMainContext *c);
/** Free the GLIB main loop object */
void pa_glib_mainloop_free(pa_glib_mainloop* g);
/** Return the abstract main loop API vtable for the GLIB main loop object */
/** Return the abstract main loop API vtable for the GLIB main loop
object. No need of freeing the API as it is owned by the loop and
it is destroyed when this dies */
pa_mainloop_api* pa_glib_mainloop_get_api(pa_glib_mainloop *g);
PA_C_DECL_END

View file

@ -108,7 +108,9 @@ int pa_mainloop_iterate(pa_mainloop *m, int block, int *retval);
/** Run unlimited iterations of the main loop object until the main loop's quit() routine is called. */
int pa_mainloop_run(pa_mainloop *m, int *retval);
/** Return the abstract main loop abstraction layer vtable for this main loop. */
/** Return the abstract main loop abstraction layer vtable for this
main loop. No need of freeing the API as it is owned by the loop
and it is destroyed when this dies */
pa_mainloop_api* pa_mainloop_get_api(pa_mainloop*m);
/** Shutdown the main loop */

View file

@ -36,28 +36,27 @@
#include "sample.h"
static const size_t size_table[] = {
[PA_SAMPLE_U8] = 1,
[PA_SAMPLE_ULAW] = 1,
[PA_SAMPLE_ALAW] = 1,
[PA_SAMPLE_S16LE] = 2,
[PA_SAMPLE_S16BE] = 2,
[PA_SAMPLE_FLOAT32LE] = 4,
[PA_SAMPLE_FLOAT32BE] = 4,
[PA_SAMPLE_S32LE] = 4,
[PA_SAMPLE_S32BE] = 4,
[PA_SAMPLE_S24LE] = 3,
[PA_SAMPLE_S24BE] = 3,
[PA_SAMPLE_S24_32LE] = 4,
[PA_SAMPLE_S24_32BE] = 4
};
size_t pa_sample_size_of_format(pa_sample_format_t f) {
static const size_t table[] = {
[PA_SAMPLE_U8] = 1,
[PA_SAMPLE_ULAW] = 1,
[PA_SAMPLE_ALAW] = 1,
[PA_SAMPLE_S16LE] = 2,
[PA_SAMPLE_S16BE] = 2,
[PA_SAMPLE_FLOAT32LE] = 4,
[PA_SAMPLE_FLOAT32BE] = 4,
[PA_SAMPLE_S32LE] = 4,
[PA_SAMPLE_S32BE] = 4,
[PA_SAMPLE_S24LE] = 3,
[PA_SAMPLE_S24BE] = 3,
[PA_SAMPLE_S24_32LE] = 4,
[PA_SAMPLE_S24_32BE] = 4
};
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return table[f];
return size_table[f];
}
size_t pa_sample_size(const pa_sample_spec *spec) {
@ -65,35 +64,35 @@ size_t pa_sample_size(const pa_sample_spec *spec) {
pa_assert(spec);
pa_return_val_if_fail(pa_sample_spec_valid(spec), 0);
return pa_sample_size_of_format(spec->format);
return size_table[spec->format];
}
size_t pa_frame_size(const pa_sample_spec *spec) {
pa_assert(spec);
pa_return_val_if_fail(pa_sample_spec_valid(spec), 0);
return pa_sample_size(spec) * spec->channels;
return size_table[spec->format] * spec->channels;
}
size_t pa_bytes_per_second(const pa_sample_spec *spec) {
pa_assert(spec);
pa_return_val_if_fail(pa_sample_spec_valid(spec), 0);
return spec->rate*pa_frame_size(spec);
return spec->rate * size_table[spec->format] * spec->channels;
}
pa_usec_t pa_bytes_to_usec(uint64_t length, const pa_sample_spec *spec) {
pa_assert(spec);
pa_return_val_if_fail(pa_sample_spec_valid(spec), 0);
return (((pa_usec_t) (length / pa_frame_size(spec)) * PA_USEC_PER_SEC) / spec->rate);
return (((pa_usec_t) (length / (size_table[spec->format] * spec->channels)) * PA_USEC_PER_SEC) / spec->rate);
}
size_t pa_usec_to_bytes(pa_usec_t t, const pa_sample_spec *spec) {
pa_assert(spec);
pa_return_val_if_fail(pa_sample_spec_valid(spec), 0);
return (size_t) (((t * spec->rate) / PA_USEC_PER_SEC)) * pa_frame_size(spec);
return (size_t) (((t * spec->rate) / PA_USEC_PER_SEC)) * (size_table[spec->format] * spec->channels);
}
pa_sample_spec* pa_sample_spec_init(pa_sample_spec *spec) {
@ -109,12 +108,12 @@ pa_sample_spec* pa_sample_spec_init(pa_sample_spec *spec) {
int pa_sample_spec_valid(const pa_sample_spec *spec) {
pa_assert(spec);
if (spec->rate <= 0 ||
if (PA_UNLIKELY (spec->rate <= 0 ||
spec->rate > PA_RATE_MAX ||
spec->channels <= 0 ||
spec->channels > PA_CHANNELS_MAX ||
spec->format >= PA_SAMPLE_MAX ||
spec->format < 0)
spec->format < 0))
return 0;
return 1;

View file

@ -299,7 +299,9 @@ void pa_threaded_mainloop_accept(pa_threaded_mainloop *m);
/** Return the return value as specified with the main loop's quit() routine. */
int pa_threaded_mainloop_get_retval(pa_threaded_mainloop *m);
/** Return the abstract main loop abstraction layer vtable for this main loop. */
/** Return the abstract main loop abstraction layer vtable for this
main loop. No need of freeing the API as it is owned by the loop
and it is destroyed when this dies */
pa_mainloop_api* pa_threaded_mainloop_get_api(pa_threaded_mainloop*m);
/** Returns non-zero when called from withing the event loop thread. \since 0.9.7 */

View file

@ -61,38 +61,40 @@
#include <pulsecore/log.h>
#include <pulsecore/core-util.h>
#include <pulsecore/macro.h>
#include <pulsecore/usergroup.h>
#include "util.h"
char *pa_get_user_name(char *s, size_t l) {
const char *p;
char *name = NULL;
#ifdef OS_IS_WIN32
char buf[1024];
#endif
#ifdef HAVE_PWD_H
struct passwd pw, *r;
struct passwd *r;
#endif
pa_assert(s);
pa_assert(l > 0);
if (!(p = (getuid() == 0 ? "root" : NULL)) &&
!(p = getenv("USER")) &&
!(p = getenv("LOGNAME")) &&
!(p = getenv("USERNAME"))) {
if ((p = (getuid() == 0 ? "root" : NULL)) ||
(p = getenv("USER")) ||
(p = getenv("LOGNAME")) ||
(p = getenv("USERNAME")))
{
name = pa_strlcpy(s, p, l);
} else {
#ifdef HAVE_PWD_H
#ifdef HAVE_GETPWUID_R
if (getpwuid_r(getuid(), &pw, buf, sizeof(buf), &r) != 0 || !r) {
#else
/* XXX Not thread-safe, but needed on OSes (e.g. FreeBSD 4.X)
* that do not support getpwuid_r. */
if ((r = getpwuid(getuid())) == NULL) {
#endif
if ((r = pa_getpwuid_malloc(getuid())) == NULL) {
pa_snprintf(s, l, "%lu", (unsigned long) getuid());
return s;
}
p = r->pw_name;
name = pa_strlcpy(s, r->pw_name, l);
pa_getpwuid_free(r);
#elif defined(OS_IS_WIN32) /* HAVE_PWD_H */
DWORD size = sizeof(buf);
@ -102,7 +104,7 @@ char *pa_get_user_name(char *s, size_t l) {
return NULL;
}
p = buf;
name = pa_strlcpy(s, buf, l);
#else /* HAVE_PWD_H */
@ -110,7 +112,7 @@ char *pa_get_user_name(char *s, size_t l) {
#endif /* HAVE_PWD_H */
}
return pa_strlcpy(s, p, l);
return name;
}
char *pa_get_host_name(char *s, size_t l) {
@ -126,11 +128,10 @@ char *pa_get_host_name(char *s, size_t l) {
}
char *pa_get_home_dir(char *s, size_t l) {
char *e;
char *e, *dir;
#ifdef HAVE_PWD_H
char buf[1024];
struct passwd pw, *r;
struct passwd *r;
#endif
pa_assert(s);
@ -143,22 +144,19 @@ char *pa_get_home_dir(char *s, size_t l) {
return pa_strlcpy(s, e, l);
#ifdef HAVE_PWD_H
errno = 0;
#ifdef HAVE_GETPWUID_R
if (getpwuid_r(getuid(), &pw, buf, sizeof(buf), &r) != 0 || !r) {
#else
/* XXX Not thread-safe, but needed on OSes (e.g. FreeBSD 4.X)
* that do not support getpwuid_r. */
if ((r = getpwuid(getuid())) == NULL) {
#endif
if ((r = pa_getpwuid_malloc(getuid())) == NULL) {
if (!errno)
errno = ENOENT;
return NULL;
}
return pa_strlcpy(s, r->pw_dir, l);
dir = pa_strlcpy(s, r->pw_dir, l);
pa_getpwuid_free(r);
return dir;
#else /* HAVE_PWD_H */
errno = ENOENT;

View file

@ -115,6 +115,7 @@
#include <pulsecore/macro.h>
#include <pulsecore/thread.h>
#include <pulsecore/strbuf.h>
#include <pulsecore/usergroup.h>
#include "core-util.h"
@ -969,54 +970,24 @@ fail:
/* Check whether the specified GID and the group name match */
static int is_group(gid_t gid, const char *name) {
struct group group, *result = NULL;
long n;
void *data;
struct group *group = NULL;
int r = -1;
#ifdef HAVE_GETGRGID_R
#ifdef _SC_GETGR_R_SIZE_MAX
n = sysconf(_SC_GETGR_R_SIZE_MAX);
#else
n = -1;
#endif
if (n <= 0)
n = 512;
data = pa_xmalloc((size_t) n);
errno = 0;
if (getgrgid_r(gid, &group, data, (size_t) n, &result) < 0 || !result) {
pa_log("getgrgid_r(%u): %s", (unsigned) gid, pa_cstrerror(errno));
if (!(group = pa_getgrgid_malloc(gid)))
{
if (!errno)
errno = ENOENT;
pa_log("pa_getgrgid_malloc(%u): %s", gid, pa_cstrerror(errno));
goto finish;
}
r = strcmp(name, result->gr_name) == 0;
r = strcmp(name, group->gr_name) == 0;
finish:
pa_xfree(data);
#else
/* XXX Not thread-safe, but needed on OSes (e.g. FreeBSD 4.X) that do not
* support getgrgid_r. */
errno = 0;
if (!(result = getgrgid(gid))) {
pa_log("getgrgid(%u): %s", gid, pa_cstrerror(errno));
if (!errno)
errno = ENOENT;
goto finish;
}
r = strcmp(name, result->gr_name) == 0;
finish:
#endif
pa_getgrgid_free(group);
return r;
}
@ -1065,38 +1036,12 @@ finish:
/* Check whether the specifc user id is a member of the specified group */
int pa_uid_in_group(uid_t uid, const char *name) {
char *g_buf, *p_buf;
long g_n, p_n;
struct group grbuf, *gr;
struct group *group = NULL;
char **i;
int r = -1;
#ifdef _SC_GETGR_R_SIZE_MAX
g_n = sysconf(_SC_GETGR_R_SIZE_MAX);
#else
g_n = -1;
#endif
if (g_n <= 0)
g_n = 512;
g_buf = pa_xmalloc((size_t) g_n);
#ifdef _SC_GETPW_R_SIZE_MAX
p_n = sysconf(_SC_GETPW_R_SIZE_MAX);
#else
p_n = -1;
#endif
if (p_n <= 0)
p_n = 512;
p_buf = pa_xmalloc((size_t) p_n);
errno = 0;
#ifdef HAVE_GETGRNAM_R
if (getgrnam_r(name, &grbuf, g_buf, (size_t) g_n, &gr) != 0 || !gr)
#else
if (!(gr = getgrnam(name)))
#endif
if (!(group = pa_getgrnam_malloc(name)))
{
if (!errno)
errno = ENOENT;
@ -1104,25 +1049,24 @@ int pa_uid_in_group(uid_t uid, const char *name) {
}
r = 0;
for (i = gr->gr_mem; *i; i++) {
struct passwd pwbuf, *pw;
for (i = group->gr_mem; *i; i++) {
struct passwd *pw = NULL;
#ifdef HAVE_GETPWNAM_R
if (getpwnam_r(*i, &pwbuf, p_buf, (size_t) p_n, &pw) != 0 || !pw)
#else
if (!(pw = getpwnam(*i)))
#endif
errno = 0;
if (!(pw = pa_getpwnam_malloc(*i)))
continue;
if (pw->pw_uid == uid) {
if (pw->pw_uid == uid)
r = 1;
pa_getpwnam_free(pw);
if (r == 1)
break;
}
}
finish:
pa_xfree(g_buf);
pa_xfree(p_buf);
pa_getgrnam_free(group);
return r;
}
@ -1130,26 +1074,10 @@ finish:
/* Get the GID of a gfiven group, return (gid_t) -1 on failure. */
gid_t pa_get_gid_of_group(const char *name) {
gid_t ret = (gid_t) -1;
char *g_buf;
long g_n;
struct group grbuf, *gr;
#ifdef _SC_GETGR_R_SIZE_MAX
g_n = sysconf(_SC_GETGR_R_SIZE_MAX);
#else
g_n = -1;
#endif
if (g_n <= 0)
g_n = 512;
g_buf = pa_xmalloc((size_t) g_n);
struct group *gr = NULL;
errno = 0;
#ifdef HAVE_GETGRNAM_R
if (getgrnam_r(name, &grbuf, g_buf, (size_t) g_n, &gr) != 0 || !gr)
#else
if (!(gr = getgrnam(name)))
#endif
if (!(gr = pa_getgrnam_malloc(name)))
{
if (!errno)
errno = ENOENT;
@ -1159,7 +1087,7 @@ gid_t pa_get_gid_of_group(const char *name) {
ret = gr->gr_gid;
finish:
pa_xfree(g_buf);
pa_getgrnam_free(gr);
return ret;
}
@ -2295,7 +2223,7 @@ int pa_close_all(int except_fd, ...) {
va_end(ap);
r = pa_close_allv(p);
free(p);
pa_xfree(p);
return r;
}
@ -2890,3 +2818,22 @@ void pa_reset_personality(void) {
#endif
}
#if defined(__linux__) && !defined(__OPTIMIZE__)
pa_bool_t pa_run_from_build_tree(void) {
char *rp;
pa_bool_t b = FALSE;
/* We abuse __OPTIMIZE__ as a check whether we are a debug build
* or not. */
if ((rp = pa_readlink("/proc/self/exe"))) {
b = pa_startswith(rp, PA_BUILDDIR);
pa_xfree(rp);
}
return b;
}
#endif

View file

@ -250,4 +250,8 @@ size_t pa_pipe_buf(int fd);
void pa_reset_personality(void);
#if defined(__linux__) && !defined(__OPTIMIZE__)
pa_bool_t pa_run_from_build_tree(void);
#endif
#endif

View file

@ -47,7 +47,7 @@
#include "core.h"
static PA_DEFINE_CHECK_TYPE(pa_core, pa_msgobject);
PA_DEFINE_PUBLIC_CLASS(pa_core, pa_msgobject);
static int core_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk) {
pa_core *c = PA_CORE(o);

View file

@ -174,7 +174,7 @@ struct pa_core {
pa_hook hooks[PA_CORE_HOOK_MAX];
};
PA_DECLARE_CLASS(pa_core);
PA_DECLARE_PUBLIC_CLASS(pa_core);
#define PA_CORE(o) pa_core_cast(o)
enum {

139
src/pulsecore/cpu-arm.c Normal file
View file

@ -0,0 +1,139 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pulse/xmalloc.h>
#include <pulsecore/log.h>
#include "cpu-arm.h"
#if defined (__arm__) && defined (__linux__)
#define MAX_BUFFER 4096
static char *
get_cpuinfo_line (char *cpuinfo, const char *tag) {
char *line, *end, *colon;
if (!(line = strstr (cpuinfo, tag)))
return NULL;
if (!(end = strchr (line, '\n')))
return NULL;
if (!(colon = strchr (line, ':')))
return NULL;
if (++colon >= end)
return NULL;
return pa_xstrndup (colon, end - colon);
}
static char *get_cpuinfo(void) {
char *cpuinfo;
int n, fd;
cpuinfo = pa_xmalloc(MAX_BUFFER);
if ((fd = open("/proc/cpuinfo", O_RDONLY)) < 0) {
pa_xfree(cpuinfo);
return NULL;
}
if ((n = pa_read(fd, cpuinfo, MAX_BUFFER-1)) < 0) {
pa_xfree(cpuinfo);
pa_close(fd);
return NULL;
}
cpuinfo[n] = 0;
pa_close(fd);
return cpuinfo;
}
#endif /* defined (__arm__) && defined (__linux__) */
void pa_cpu_init_arm (void) {
#if defined (__arm__)
#if defined (__linux__)
char *cpuinfo, *line;
int arch;
pa_cpu_arm_flag_t flags = 0;
/* We need to read the CPU flags from /proc/cpuinfo because there is no user
* space support to get the CPU features. This only works on linux AFAIK. */
if (!(cpuinfo = get_cpuinfo ())) {
pa_log ("Can't read cpuinfo");
return;
}
/* get the CPU architecture */
if ((line = get_cpuinfo_line (cpuinfo, "CPU architecture"))) {
arch = strtoul (line, NULL, 0);
if (arch >= 6)
flags |= PA_CPU_ARM_V6;
if (arch >= 7)
flags |= PA_CPU_ARM_V7;
pa_xfree(line);
}
/* get the CPU features */
if ((line = get_cpuinfo_line (cpuinfo, "Features"))) {
char *state = NULL, *current;
while ((current = pa_split_spaces (line, &state))) {
if (!strcmp (current, "vfp"))
flags |= PA_CPU_ARM_VFP;
else if (!strcmp (current, "edsp"))
flags |= PA_CPU_ARM_EDSP;
else if (!strcmp (current, "neon"))
flags |= PA_CPU_ARM_NEON;
else if (!strcmp (current, "vfpv3"))
flags |= PA_CPU_ARM_VFPV3;
pa_xfree(current);
}
}
pa_xfree(cpuinfo);
pa_log_info ("CPU flags: %s%s%s%s%s%s",
(flags & PA_CPU_ARM_V6) ? "V6 " : "",
(flags & PA_CPU_ARM_V7) ? "V7 " : "",
(flags & PA_CPU_ARM_VFP) ? "VFP " : "",
(flags & PA_CPU_ARM_EDSP) ? "EDSP " : "",
(flags & PA_CPU_ARM_NEON) ? "NEON " : "",
(flags & PA_CPU_ARM_VFPV3) ? "VFPV3 " : "");
#else /* defined (__linux__) */
pa_log ("ARM cpu features not yet supported on this OS");
#endif /* defined (__linux__) */
if (flags & PA_CPU_ARM_V6)
pa_volume_func_init_arm (flags);
#endif /* defined (__arm__) */
}

42
src/pulsecore/cpu-arm.h Normal file
View file

@ -0,0 +1,42 @@
#ifndef foocpuarmhfoo
#define foocpuarmhfoo
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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_arm_flag {
PA_CPU_ARM_V6 = (1 << 0),
PA_CPU_ARM_V7 = (1 << 1),
PA_CPU_ARM_VFP = (1 << 2),
PA_CPU_ARM_EDSP = (1 << 3),
PA_CPU_ARM_NEON = (1 << 4),
PA_CPU_ARM_VFPV3 = (1 << 5)
} pa_cpu_arm_flag_t;
void pa_cpu_init_arm (void);
/* some optimized functions */
void pa_volume_func_init_arm(pa_cpu_arm_flag_t flags);
#endif /* foocpuarmhfoo */

122
src/pulsecore/cpu-x86.c Normal file
View file

@ -0,0 +1,122 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdint.h>
#include <pulsecore/log.h>
#include "cpu-x86.h"
#if defined (__i386__) || defined (__amd64__)
static void
get_cpuid (uint32_t op, uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d)
{
__asm__ __volatile__ (
" push %%"PA_REG_b" \n\t"
" cpuid \n\t"
" mov %%ebx, %%esi \n\t"
" pop %%"PA_REG_b" \n\t"
: "=a" (*a), "=S" (*b), "=c" (*c), "=d" (*d)
: "0" (op)
);
}
#endif
void pa_cpu_init_x86 (void) {
#if defined (__i386__) || defined (__amd64__)
uint32_t eax, ebx, ecx, edx;
uint32_t level;
pa_cpu_x86_flag_t flags = 0;
/* get standard level */
get_cpuid (0x00000000, &level, &ebx, &ecx, &edx);
if (level >= 1) {
get_cpuid (0x00000001, &eax, &ebx, &ecx, &edx);
if (edx & (1<<23))
flags |= PA_CPU_X86_MMX;
if (edx & (1<<25))
flags |= PA_CPU_X86_SSE;
if (edx & (1<<26))
flags |= PA_CPU_X86_SSE2;
if (ecx & (1<<0))
flags |= PA_CPU_X86_SSE3;
if (ecx & (1<<9))
flags |= PA_CPU_X86_SSSE3;
if (ecx & (1<<19))
flags |= PA_CPU_X86_SSE4_1;
if (ecx & (1<<20))
flags |= PA_CPU_X86_SSE4_2;
}
/* get extended level */
get_cpuid (0x80000000, &level, &ebx, &ecx, &edx);
if (level >= 0x80000001) {
get_cpuid (0x80000001, &eax, &ebx, &ecx, &edx);
if (edx & (1<<22))
flags |= PA_CPU_X86_MMXEXT;
if (edx & (1<<23))
flags |= PA_CPU_X86_MMX;
if (edx & (1<<30))
flags |= PA_CPU_X86_3DNOWEXT;
if (edx & (1<<31))
flags |= PA_CPU_X86_3DNOW;
}
pa_log_info ("CPU flags: %s%s%s%s%s%s%s%s%s%s",
(flags & PA_CPU_X86_MMX) ? "MMX " : "",
(flags & PA_CPU_X86_SSE) ? "SSE " : "",
(flags & PA_CPU_X86_SSE2) ? "SSE2 " : "",
(flags & PA_CPU_X86_SSE3) ? "SSE3 " : "",
(flags & PA_CPU_X86_SSSE3) ? "SSSE3 " : "",
(flags & PA_CPU_X86_SSE4_1) ? "SSE4_1 " : "",
(flags & PA_CPU_X86_SSE4_2) ? "SSE4_2 " : "",
(flags & PA_CPU_X86_MMXEXT) ? "MMXEXT " : "",
(flags & PA_CPU_X86_3DNOW) ? "3DNOW " : "",
(flags & PA_CPU_X86_3DNOWEXT) ? "3DNOWEXT " : "");
/* activate various optimisations */
if (flags & PA_CPU_X86_MMX) {
pa_volume_func_init_mmx (flags);
pa_remap_func_init_mmx (flags);
}
if (flags & PA_CPU_X86_SSE)
pa_volume_func_init_sse (flags);
#endif /* defined (__i386__) || defined (__amd64__) */
}

68
src/pulsecore/cpu-x86.h Normal file
View file

@ -0,0 +1,68 @@
#ifndef foocpux86hfoo
#define foocpux86hfoo
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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 */

View file

@ -26,22 +26,22 @@
#include "msgobject.h"
PA_DEFINE_CHECK_TYPE(pa_msgobject, pa_object);
PA_DEFINE_PUBLIC_CLASS(pa_msgobject, pa_object);
pa_msgobject *pa_msgobject_new_internal(size_t size, const char *type_name, int (*check_type)(const char *type_name)) {
pa_msgobject *pa_msgobject_new_internal(size_t size, const char *type_id, pa_bool_t (*check_type)(const char *type_name)) {
pa_msgobject *o;
pa_assert(size > sizeof(pa_msgobject));
pa_assert(type_name);
pa_assert(type_id);
if (!check_type)
check_type = pa_msgobject_check_type;
pa_assert(check_type(type_name));
pa_assert(check_type("pa_object"));
pa_assert(check_type("pa_msgobject"));
pa_assert(check_type(type_id));
pa_assert(check_type(pa_object_type_id));
pa_assert(check_type(pa_msgobject_type_id));
o = PA_MSGOBJECT(pa_object_new_internal(size, type_name, check_type));
o = PA_MSGOBJECT(pa_object_new_internal(size, type_id, check_type));
o->process_msg = NULL;
return o;
}

View file

@ -38,15 +38,13 @@ struct pa_msgobject {
int (*process_msg)(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk);
};
pa_msgobject *pa_msgobject_new_internal(size_t size, const char *type_name, int (*check_type)(const char *type_name));
pa_msgobject *pa_msgobject_new_internal(size_t size, const char *type_id, pa_bool_t (*check_type)(const char *type_name));
int pa_msgobject_check_type(const char *type);
#define pa_msgobject_new(type) ((type*) pa_msgobject_new_internal(sizeof(type), #type, type##_check_type))
#define pa_msgobject_new(type) ((type*) pa_msgobject_new_internal(sizeof(type), type##_type_id, type##_check_type))
#define pa_msgobject_free ((void (*) (pa_msgobject* o)) pa_object_free)
#define PA_MSGOBJECT(o) pa_msgobject_cast(o)
PA_DECLARE_CLASS(pa_msgobject);
PA_DECLARE_PUBLIC_CLASS(pa_msgobject);
#endif

View file

@ -28,21 +28,23 @@
#include "object.h"
pa_object *pa_object_new_internal(size_t size, const char *type_name, int (*check_type)(const char *type_name)) {
const char pa_object_type_id[] = "pa_object";
pa_object *pa_object_new_internal(size_t size, const char *type_id, pa_bool_t (*check_type)(const char *type_id)) {
pa_object *o;
pa_assert(size > sizeof(pa_object));
pa_assert(type_name);
pa_assert(type_id);
if (!check_type)
check_type = pa_object_check_type;
pa_assert(check_type(type_name));
pa_assert(check_type("pa_object"));
pa_assert(check_type(type_id));
pa_assert(check_type(pa_object_type_id));
o = pa_xmalloc(size);
PA_REFCNT_INIT(o);
o->type_name = type_name;
o->type_id = type_id;
o->free = pa_object_free;
o->check_type = check_type;
@ -65,8 +67,8 @@ void pa_object_unref(pa_object *o) {
}
}
int pa_object_check_type(const char *type_name) {
pa_assert(type_name);
pa_bool_t pa_object_check_type(const char *type_id) {
pa_assert(type_id);
return pa_streq(type_name, "pa_object");
return type_id == pa_object_type_id;
}

View file

@ -34,21 +34,23 @@ typedef struct pa_object pa_object;
struct pa_object {
PA_REFCNT_DECLARE;
const char *type_name;
const char *type_id;
void (*free)(pa_object *o);
int (*check_type)(const char *type_name);
pa_bool_t (*check_type)(const char *type_name);
};
pa_object *pa_object_new_internal(size_t size, const char *type_name, int (*check_type)(const char *type_name));
#define pa_object_new(type) ((type*) pa_object_new_internal(sizeof(type), #type, type##_check_type)
pa_object *pa_object_new_internal(size_t size, const char *type_id, pa_bool_t (*check_type)(const char *type_id));
#define pa_object_new(type) ((type*) pa_object_new_internal(sizeof(type), type##_type_id, type##_check_type)
#define pa_object_free ((void (*) (pa_object* _obj)) pa_xfree)
int pa_object_check_type(const char *type);
pa_bool_t pa_object_check_type(const char *type_id);
static inline int pa_object_isinstance(void *o) {
extern const char pa_object_type_id[];
static inline pa_bool_t pa_object_isinstance(void *o) {
pa_object *obj = (pa_object*) o;
return obj ? obj->check_type("pa_object") : 0;
return obj ? obj->check_type(pa_object_type_id) : TRUE;
}
pa_object *pa_object_ref(pa_object *o);
@ -60,7 +62,7 @@ static inline int pa_object_refcnt(pa_object *o) {
static inline pa_object* pa_object_cast(void *o) {
pa_object *obj = (pa_object*) o;
pa_assert(!obj || obj->check_type("pa_object"));
pa_assert(!obj || obj->check_type(pa_object_type_id));
return obj;
}
@ -68,10 +70,10 @@ static inline pa_object* pa_object_cast(void *o) {
#define PA_OBJECT(o) pa_object_cast(o)
#define PA_DECLARE_CLASS(c) \
static inline int c##_isinstance(void *o) { \
#define PA_DECLARE_CLASS_COMMON(c) \
static inline pa_bool_t c##_isinstance(void *o) { \
pa_object *obj = (pa_object*) o; \
return obj ? obj->check_type(#c) : 1; \
return obj ? obj->check_type(c##_type_id) : TRUE; \
} \
static inline c* c##_cast(void *o) { \
pa_assert(c##_isinstance(o)); \
@ -91,12 +93,27 @@ static inline pa_object* pa_object_cast(void *o) {
} \
struct __stupid_useless_struct_to_allow_trailing_semicolon
#define PA_DEFINE_CHECK_TYPE(c, parent) \
int c##_check_type(const char *type) { \
pa_assert(type); \
if (strcmp(type, #c) == 0) \
return 1; \
return parent##_check_type(type); \
#define PA_DECLARE_PUBLIC_CLASS(c) \
extern const char c##_type_id[]; \
PA_DECLARE_CLASS_COMMON(c); \
pa_bool_t c##_check_type(const char *type_id)
#define PA_DEFINE_PUBLIC_CLASS(c, parent) \
const char c##_type_id[] = #c; \
pa_bool_t c##_check_type(const char *type_id) { \
if (type_id == c##_type_id) \
return TRUE; \
return parent##_check_type(type_id); \
} \
struct __stupid_useless_struct_to_allow_trailing_semicolon
#define PA_DEFINE_PRIVATE_CLASS(c, parent) \
static const char c##_type_id[] = #c; \
PA_DECLARE_CLASS_COMMON(c); \
static pa_bool_t c##_check_type(const char *type_id) { \
if (type_id == c##_type_id) \
return TRUE; \
return parent##_check_type(type_id); \
} \
struct __stupid_useless_struct_to_allow_trailing_semicolon

View file

@ -47,9 +47,8 @@ enum {
MEMBLOCKQ_STREAM_MESSAGE_UNLINK,
};
PA_DECLARE_CLASS(memblockq_stream);
PA_DEFINE_PRIVATE_CLASS(memblockq_stream, pa_msgobject);
#define MEMBLOCKQ_STREAM(o) (memblockq_stream_cast(o))
static PA_DEFINE_CHECK_TYPE(memblockq_stream, pa_msgobject);
static void memblockq_stream_unlink(memblockq_stream *u) {
pa_assert(u);

View file

@ -120,9 +120,8 @@ typedef struct connection {
pa_time_event *auth_timeout_event;
} connection;
PA_DECLARE_CLASS(connection);
PA_DEFINE_PRIVATE_CLASS(connection, pa_msgobject);
#define CONNECTION(o) (connection_cast(o))
static PA_DEFINE_CHECK_TYPE(connection, pa_msgobject);
struct pa_esound_protocol {
PA_REFCNT_DECLARE;

View file

@ -98,17 +98,15 @@ typedef struct record_stream {
pa_usec_t current_source_latency;
} record_stream;
PA_DECLARE_CLASS(record_stream);
#define RECORD_STREAM(o) (record_stream_cast(o))
static PA_DEFINE_CHECK_TYPE(record_stream, pa_msgobject);
PA_DEFINE_PRIVATE_CLASS(record_stream, pa_msgobject);
typedef struct output_stream {
pa_msgobject parent;
} output_stream;
PA_DECLARE_CLASS(output_stream);
#define OUTPUT_STREAM(o) (output_stream_cast(o))
static PA_DEFINE_CHECK_TYPE(output_stream, pa_msgobject);
PA_DEFINE_PRIVATE_CLASS(output_stream, pa_msgobject);
typedef struct playback_stream {
output_stream parent;
@ -138,9 +136,8 @@ typedef struct playback_stream {
uint64_t playing_for, underrun_for;
} playback_stream;
PA_DECLARE_CLASS(playback_stream);
#define PLAYBACK_STREAM(o) (playback_stream_cast(o))
static PA_DEFINE_CHECK_TYPE(playback_stream, output_stream);
PA_DEFINE_PRIVATE_CLASS(playback_stream, output_stream);
typedef struct upload_stream {
output_stream parent;
@ -156,9 +153,8 @@ typedef struct upload_stream {
pa_proplist *proplist;
} upload_stream;
PA_DECLARE_CLASS(upload_stream);
#define UPLOAD_STREAM(o) (upload_stream_cast(o))
static PA_DEFINE_CHECK_TYPE(upload_stream, output_stream);
PA_DEFINE_PRIVATE_CLASS(upload_stream, output_stream);
struct pa_native_connection {
pa_msgobject parent;
@ -176,9 +172,8 @@ struct pa_native_connection {
pa_time_event *auth_timeout_event;
};
PA_DECLARE_CLASS(pa_native_connection);
#define PA_NATIVE_CONNECTION(o) (pa_native_connection_cast(o))
static PA_DEFINE_CHECK_TYPE(pa_native_connection, pa_msgobject);
PA_DEFINE_PRIVATE_CLASS(pa_native_connection, pa_msgobject);
struct pa_native_protocol {
PA_REFCNT_DECLARE;

View file

@ -69,9 +69,8 @@ typedef struct connection {
} playback;
} connection;
PA_DECLARE_CLASS(connection);
PA_DEFINE_PRIVATE_CLASS(connection, pa_msgobject);
#define CONNECTION(o) (connection_cast(o))
static PA_DEFINE_CHECK_TYPE(connection, pa_msgobject);
struct pa_simple_protocol {
PA_REFCNT_DECLARE;

204
src/pulsecore/remap.c Normal file
View file

@ -0,0 +1,204 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@collabora.co.uk.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 <string.h>
#include <pulse/sample.h>
#include <pulsecore/log.h>
#include <pulsecore/macro.h>
#include "remap.h"
static void remap_mono_to_stereo_c (pa_remap_t *m, void *dst, const void *src, unsigned n) {
unsigned i;
switch (*m->format) {
case PA_SAMPLE_FLOAT32NE:
{
float *d, *s;
d = (float *) dst;
s = (float *) src;
for (i = n >> 2; i; i--) {
d[0] = d[1] = s[0];
d[2] = d[3] = s[1];
d[4] = d[5] = s[2];
d[6] = d[7] = s[3];
s += 4;
d += 8;
}
for (i = n & 3; i; i--) {
d[0] = d[1] = s[0];
s++;
d += 2;
}
break;
}
case PA_SAMPLE_S16NE:
{
int16_t *d, *s;
d = (int16_t *) dst;
s = (int16_t *) src;
for (i = n >> 2; i; i--) {
d[0] = d[1] = s[0];
d[2] = d[3] = s[1];
d[4] = d[5] = s[2];
d[6] = d[7] = s[3];
s += 4;
d += 8;
}
for (i = n & 3; i; i--) {
d[0] = d[1] = s[0];
s++;
d += 2;
}
break;
}
default:
pa_assert_not_reached();
}
}
static void remap_channels_matrix_c (pa_remap_t *m, void *dst, const void *src, unsigned n) {
unsigned oc, ic, i;
unsigned n_ic, n_oc;
n_ic = m->i_ss->channels;
n_oc = m->o_ss->channels;
switch (*m->format) {
case PA_SAMPLE_FLOAT32NE:
{
float *d, *s;
memset(dst, 0, n * sizeof (float) * n_oc);
for (oc = 0; oc < n_oc; oc++) {
for (ic = 0; ic < n_ic; ic++) {
float vol;
vol = m->map_table_f[oc][ic];
if (vol <= 0.0)
continue;
d = (float *)dst + oc;
s = (float *)src + ic;
if (vol >= 1.0) {
for (i = n; i > 0; i--, s += n_ic, d += n_oc)
*d += *s;
} else {
for (i = n; i > 0; i--, s += n_ic, d += n_oc)
*d += *s * vol;
}
}
}
break;
}
case PA_SAMPLE_S16NE:
{
int16_t *d, *s;
memset(dst, 0, n * sizeof (int16_t) * n_oc);
for (oc = 0; oc < n_oc; oc++) {
for (ic = 0; ic < n_ic; ic++) {
int32_t vol;
vol = m->map_table_i[oc][ic];
if (vol <= 0)
continue;
d = (int16_t *)dst + oc;
s = (int16_t *)src + ic;
if (vol >= 0x10000) {
for (i = n; i > 0; i--, s += n_ic, d += n_oc)
*d += *s;
} else {
for (i = n; i > 0; i--, s += n_ic, d += n_oc)
*d += (int16_t) (((int32_t)*s * vol) >> 16);
}
}
}
break;
}
default:
pa_assert_not_reached();
}
}
/* set the function that will execute the remapping based on the matrices */
static void init_remap_c (pa_remap_t *m) {
unsigned n_oc, n_ic;
n_oc = m->o_ss->channels;
n_ic = m->i_ss->channels;
/* find some common channel remappings, fall back to full matrix operation. */
if (n_ic == 1 && n_oc == 2 &&
m->map_table_f[0][0] >= 1.0 && m->map_table_f[1][0] >= 1.0) {
m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_c;
pa_log_info("Using mono to stereo remapping");
} else {
m->do_remap = (pa_do_remap_func_t) remap_channels_matrix_c;
pa_log_info("Using generic matrix remapping");
}
}
/* default C implementation */
static pa_init_remap_func_t remap_func = init_remap_c;
void pa_init_remap (pa_remap_t *m) {
pa_assert (remap_func);
m->do_remap = NULL;
/* call the installed remap init function */
remap_func (m);
if (m->do_remap == NULL) {
/* nothing was installed, fallback to C version */
init_remap_c (m);
}
}
pa_init_remap_func_t pa_get_init_remap_func(void) {
return remap_func;
}
void pa_set_init_remap_func(pa_init_remap_func_t func) {
remap_func = func;
}

48
src/pulsecore/remap.h Normal file
View file

@ -0,0 +1,48 @@
#ifndef fooremapfoo
#define fooremapfoo
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@collabora.co.uk.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.
***/
#include <pulse/sample.h>
typedef struct pa_remap pa_remap_t;
typedef void (*pa_do_remap_func_t) (pa_remap_t *m, void *d, const void *s, unsigned n);
struct pa_remap {
pa_sample_format_t *format;
pa_sample_spec *i_ss, *o_ss;
float map_table_f[PA_CHANNELS_MAX][PA_CHANNELS_MAX];
int32_t map_table_i[PA_CHANNELS_MAX][PA_CHANNELS_MAX];
pa_do_remap_func_t do_remap;
};
void pa_init_remap (pa_remap_t *m);
/* custom installation of init functions */
typedef void (*pa_init_remap_func_t) (pa_remap_t *m);
pa_init_remap_func_t pa_get_init_remap_func(void);
void pa_set_init_remap_func(pa_init_remap_func_t func);
#endif /* fooremapfoo */

148
src/pulsecore/remap_mmx.c Normal file
View file

@ -0,0 +1,148 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@collabora.co.uk.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 <string.h>
#include <pulse/sample.h>
#include <pulsecore/log.h>
#include <pulsecore/macro.h>
#include "cpu-x86.h"
#include "remap.h"
#define LOAD_SAMPLES \
" movq (%1), %%mm0 \n\t" \
" movq 8(%1), %%mm2 \n\t" \
" movq 16(%1), %%mm4 \n\t" \
" movq 24(%1), %%mm6 \n\t" \
" movq %%mm0, %%mm1 \n\t" \
" movq %%mm2, %%mm3 \n\t" \
" movq %%mm4, %%mm5 \n\t" \
" movq %%mm6, %%mm7 \n\t"
#define UNPACK_SAMPLES(s) \
" punpckl"#s" %%mm0, %%mm0 \n\t" \
" punpckh"#s" %%mm1, %%mm1 \n\t" \
" punpckl"#s" %%mm2, %%mm2 \n\t" \
" punpckh"#s" %%mm3, %%mm3 \n\t" \
" punpckl"#s" %%mm4, %%mm4 \n\t" \
" punpckh"#s" %%mm5, %%mm5 \n\t" \
" punpckl"#s" %%mm6, %%mm6 \n\t" \
" punpckh"#s" %%mm7, %%mm7 \n\t" \
#define STORE_SAMPLES \
" movq %%mm0, (%0) \n\t" \
" movq %%mm1, 8(%0) \n\t" \
" movq %%mm2, 16(%0) \n\t" \
" movq %%mm3, 24(%0) \n\t" \
" movq %%mm4, 32(%0) \n\t" \
" movq %%mm5, 40(%0) \n\t" \
" movq %%mm6, 48(%0) \n\t" \
" movq %%mm7, 56(%0) \n\t" \
" add $32, %1 \n\t" \
" add $64, %0 \n\t"
#define HANDLE_SINGLE(s) \
" movd (%1), %%mm0 \n\t" \
" movq %%mm0, %%mm1 \n\t" \
" punpckl"#s" %%mm0, %%mm0 \n\t" \
" movq %%mm0, (%0) \n\t" \
" add $4, %1 \n\t" \
" add $8, %0 \n\t"
#define MONO_TO_STEREO(s) \
" mov %3, %2 \n\t" \
" sar $3, %2 \n\t" \
" cmp $0, %2 \n\t" \
" je 2f \n\t" \
"1: \n\t" \
LOAD_SAMPLES \
UNPACK_SAMPLES(s) \
STORE_SAMPLES \
" dec %2 \n\t" \
" jne 1b \n\t" \
"2: \n\t" \
" mov %3, %2 \n\t" \
" and $7, %2 \n\t" \
" je 4f \n\t" \
"3: \n\t" \
HANDLE_SINGLE(s) \
" dec %2 \n\t" \
" jne 3b \n\t" \
"4: \n\t" \
" emms \n\t"
static void remap_mono_to_stereo_mmx (pa_remap_t *m, void *dst, const void *src, unsigned n) {
pa_reg_x86 temp;
switch (*m->format) {
case PA_SAMPLE_FLOAT32NE:
{
__asm__ __volatile__ (
MONO_TO_STEREO(dq) /* do doubles to quads */
: "+r" (dst), "+r" (src), "=&r" (temp)
: "r" ((pa_reg_x86)n)
: "cc"
);
break;
}
case PA_SAMPLE_S16NE:
{
__asm__ __volatile__ (
MONO_TO_STEREO(wd) /* do words to doubles */
: "+r" (dst), "+r" (src), "=&r" (temp)
: "r" ((pa_reg_x86)n)
: "cc"
);
break;
}
default:
pa_assert_not_reached();
}
}
/* set the function that will execute the remapping based on the matrices */
static void init_remap_mmx (pa_remap_t *m) {
unsigned n_oc, n_ic;
n_oc = m->o_ss->channels;
n_ic = m->i_ss->channels;
/* find some common channel remappings, fall back to full matrix operation. */
if (n_ic == 1 && n_oc == 2 &&
m->map_table_f[0][0] >= 1.0 && m->map_table_f[1][0] >= 1.0) {
m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_mmx;
pa_log_info("Using MMX mono to stereo remapping");
}
}
void pa_remap_func_init_mmx (pa_cpu_x86_flag_t flags) {
#if defined (__i386__) || defined (__amd64__)
pa_log_info("Initialising MMX optimized remappers.");
pa_set_init_remap_func ((pa_init_remap_func_t) init_remap_mmx);
#endif /* defined (__i386__) || defined (__amd64__) */
}

View file

@ -31,9 +31,6 @@
#include <speex/speex_resampler.h>
#include <liboil/liboilfuncs.h>
#include <liboil/liboil.h>
#include <pulse/xmalloc.h>
#include <pulsecore/sconv.h>
#include <pulsecore/log.h>
@ -43,6 +40,7 @@
#include "ffmpeg/avcodec.h"
#include "resampler.h"
#include "remap.h"
/* Number of samples of extra space we allow the resamplers to return */
#define EXTRA_FRAMES 128
@ -64,7 +62,7 @@ struct pa_resampler {
pa_convert_func_t to_work_format_func;
pa_convert_func_t from_work_format_func;
float map_table[PA_CHANNELS_MAX][PA_CHANNELS_MAX];
pa_remap_t remap;
pa_bool_t map_required;
void (*impl_free)(pa_resampler *r);
@ -214,6 +212,11 @@ pa_resampler* pa_resampler_new(
r->i_ss = *a;
r->o_ss = *b;
/* set up the remap structure */
r->remap.i_ss = &r->i_ss;
r->remap.o_ss = &r->o_ss;
r->remap.format = &r->work_format;
if (am)
r->i_cm = *am;
else if (!pa_channel_map_init_auto(&r->i_cm, r->i_ss.channels, PA_CHANNEL_MAP_DEFAULT))
@ -580,32 +583,41 @@ static int front_rear_side(pa_channel_position_t p) {
static void calc_map_table(pa_resampler *r) {
unsigned oc, ic;
unsigned n_oc, n_ic;
pa_bool_t ic_connected[PA_CHANNELS_MAX];
pa_bool_t remix;
pa_strbuf *s;
char *t;
pa_remap_t *m;
pa_assert(r);
if (!(r->map_required = (r->i_ss.channels != r->o_ss.channels || (!(r->flags & PA_RESAMPLER_NO_REMAP) && !pa_channel_map_equal(&r->i_cm, &r->o_cm)))))
return;
memset(r->map_table, 0, sizeof(r->map_table));
m = &r->remap;
n_oc = r->o_ss.channels;
n_ic = r->i_ss.channels;
memset(m->map_table_f, 0, sizeof(m->map_table_f));
memset(m->map_table_i, 0, sizeof(m->map_table_i));
memset(ic_connected, 0, sizeof(ic_connected));
remix = (r->flags & (PA_RESAMPLER_NO_REMAP|PA_RESAMPLER_NO_REMIX)) == 0;
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
pa_bool_t oc_connected = FALSE;
pa_channel_position_t b = r->o_cm.map[oc];
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
pa_channel_position_t a = r->i_cm.map[ic];
if (r->flags & PA_RESAMPLER_NO_REMAP) {
/* We shall not do any remapping. Hence, just check by index */
if (ic == oc)
r->map_table[oc][ic] = 1.0;
m->map_table_f[oc][ic] = 1.0;
continue;
}
@ -614,7 +626,7 @@ static void calc_map_table(pa_resampler *r) {
/* We shall not do any remixing. Hence, just check by name */
if (a == b)
r->map_table[oc][ic] = 1.0;
m->map_table_f[oc][ic] = 1.0;
continue;
}
@ -689,7 +701,7 @@ static void calc_map_table(pa_resampler *r) {
*/
if (a == b || a == PA_CHANNEL_POSITION_MONO || b == PA_CHANNEL_POSITION_MONO) {
r->map_table[oc][ic] = 1.0;
m->map_table_f[oc][ic] = 1.0;
oc_connected = TRUE;
ic_connected[ic] = TRUE;
@ -707,14 +719,14 @@ static void calc_map_table(pa_resampler *r) {
/* We are not connected and on the left side, let's
* average all left side input channels. */
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_left(r->i_cm.map[ic]))
n++;
if (n > 0)
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_left(r->i_cm.map[ic])) {
r->map_table[oc][ic] = 1.0f / (float) n;
m->map_table_f[oc][ic] = 1.0f / (float) n;
ic_connected[ic] = TRUE;
}
@ -728,14 +740,14 @@ static void calc_map_table(pa_resampler *r) {
/* We are not connected and on the right side, let's
* average all right side input channels. */
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_right(r->i_cm.map[ic]))
n++;
if (n > 0)
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_right(r->i_cm.map[ic])) {
r->map_table[oc][ic] = 1.0f / (float) n;
m->map_table_f[oc][ic] = 1.0f / (float) n;
ic_connected[ic] = TRUE;
}
@ -749,14 +761,14 @@ static void calc_map_table(pa_resampler *r) {
/* We are not connected and at the center. Let's
* average all center input channels. */
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_center(r->i_cm.map[ic]))
n++;
if (n > 0) {
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_center(r->i_cm.map[ic])) {
r->map_table[oc][ic] = 1.0f / (float) n;
m->map_table_f[oc][ic] = 1.0f / (float) n;
ic_connected[ic] = TRUE;
}
} else {
@ -766,14 +778,14 @@ static void calc_map_table(pa_resampler *r) {
n = 0;
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_left(r->i_cm.map[ic]) || on_right(r->i_cm.map[ic]))
n++;
if (n > 0)
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
if (on_left(r->i_cm.map[ic]) || on_right(r->i_cm.map[ic])) {
r->map_table[oc][ic] = 1.0f / (float) n;
m->map_table_f[oc][ic] = 1.0f / (float) n;
ic_connected[ic] = TRUE;
}
@ -787,12 +799,12 @@ static void calc_map_table(pa_resampler *r) {
/* We are not connected and an LFE. Let's average all
* channels for LFE. */
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (!(r->flags & PA_RESAMPLER_NO_LFE))
r->map_table[oc][ic] = 1.0f / (float) r->i_ss.channels;
m->map_table_f[oc][ic] = 1.0f / (float) n_ic;
else
r->map_table[oc][ic] = 0;
m->map_table_f[oc][ic] = 0;
/* Please note that a channel connected to LFE
* doesn't really count as connected. */
@ -808,7 +820,7 @@ static void calc_map_table(pa_resampler *r) {
ic_unconnected_center = 0,
ic_unconnected_lfe = 0;
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
pa_channel_position_t a = r->i_cm.map[ic];
if (ic_connected[ic])
@ -831,20 +843,20 @@ static void calc_map_table(pa_resampler *r) {
* the left side by .9 and add in our averaged unconnected
* channels multplied by .1 */
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
if (!on_left(r->o_cm.map[oc]))
continue;
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (ic_connected[ic]) {
r->map_table[oc][ic] *= .9f;
m->map_table_f[oc][ic] *= .9f;
continue;
}
if (on_left(r->i_cm.map[ic]))
r->map_table[oc][ic] = .1f / (float) ic_unconnected_left;
m->map_table_f[oc][ic] = .1f / (float) ic_unconnected_left;
}
}
}
@ -856,20 +868,20 @@ static void calc_map_table(pa_resampler *r) {
* the right side by .9 and add in our averaged unconnected
* channels multplied by .1 */
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
if (!on_right(r->o_cm.map[oc]))
continue;
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (ic_connected[ic]) {
r->map_table[oc][ic] *= .9f;
m->map_table_f[oc][ic] *= .9f;
continue;
}
if (on_right(r->i_cm.map[ic]))
r->map_table[oc][ic] = .1f / (float) ic_unconnected_right;
m->map_table_f[oc][ic] = .1f / (float) ic_unconnected_right;
}
}
}
@ -882,20 +894,20 @@ static void calc_map_table(pa_resampler *r) {
* the center side by .9 and add in our averaged unconnected
* channels multplied by .1 */
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
if (!on_center(r->o_cm.map[oc]))
continue;
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (ic_connected[ic]) {
r->map_table[oc][ic] *= .9f;
m->map_table_f[oc][ic] *= .9f;
continue;
}
if (on_center(r->i_cm.map[ic])) {
r->map_table[oc][ic] = .1f / (float) ic_unconnected_center;
m->map_table_f[oc][ic] = .1f / (float) ic_unconnected_center;
mixed_in = TRUE;
}
}
@ -913,7 +925,7 @@ static void calc_map_table(pa_resampler *r) {
it into left and right. Using .375 and 0.75 as
factors. */
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (ic_connected[ic])
continue;
@ -921,7 +933,7 @@ static void calc_map_table(pa_resampler *r) {
if (!on_center(r->i_cm.map[ic]))
continue;
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
if (!on_left(r->o_cm.map[oc]) && !on_right(r->o_cm.map[oc]))
continue;
@ -932,7 +944,7 @@ static void calc_map_table(pa_resampler *r) {
}
}
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
if (!on_left(r->o_cm.map[oc]) && !on_right(r->o_cm.map[oc]))
continue;
@ -942,7 +954,7 @@ static void calc_map_table(pa_resampler *r) {
}
}
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
if (!on_left(r->o_cm.map[oc]) && !on_right(r->o_cm.map[oc]))
continue;
@ -950,10 +962,10 @@ static void calc_map_table(pa_resampler *r) {
if (ncenter[oc] <= 0)
continue;
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (ic_connected[ic]) {
r->map_table[oc][ic] *= .75f;
m->map_table_f[oc][ic] *= .75f;
continue;
}
@ -961,7 +973,7 @@ static void calc_map_table(pa_resampler *r) {
continue;
if (!found_frs[ic] || front_rear_side(r->i_cm.map[ic]) == front_rear_side(r->o_cm.map[oc]))
r->map_table[oc][ic] = .375f / (float) ncenter[oc];
m->map_table_f[oc][ic] = .375f / (float) ncenter[oc];
}
}
}
@ -972,40 +984,46 @@ static void calc_map_table(pa_resampler *r) {
/* OK, so there is an unconnected LFE channel. Let's mix
* it into all channels, with factor 0.375 */
for (ic = 0; ic < r->i_ss.channels; ic++) {
for (ic = 0; ic < n_ic; ic++) {
if (!on_lfe(r->i_cm.map[ic]))
continue;
for (oc = 0; oc < r->o_ss.channels; oc++)
r->map_table[oc][ic] = 0.375f / (float) ic_unconnected_lfe;
for (oc = 0; oc < n_oc; oc++)
m->map_table_f[oc][ic] = 0.375f / (float) ic_unconnected_lfe;
}
}
}
/* make an 16:16 int version of the matrix */
for (oc = 0; oc < n_oc; oc++)
for (ic = 0; ic < n_ic; ic++)
m->map_table_i[oc][ic] = (int32_t) (m->map_table_f[oc][ic] * 0x10000);
s = pa_strbuf_new();
pa_strbuf_printf(s, " ");
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
pa_strbuf_printf(s, " I%02u ", ic);
pa_strbuf_puts(s, "\n +");
for (ic = 0; ic < r->i_ss.channels; ic++)
for (ic = 0; ic < n_ic; ic++)
pa_strbuf_printf(s, "------");
pa_strbuf_puts(s, "\n");
for (oc = 0; oc < r->o_ss.channels; oc++) {
for (oc = 0; oc < n_oc; oc++) {
pa_strbuf_printf(s, "O%02u |", oc);
for (ic = 0; ic < r->i_ss.channels; ic++)
pa_strbuf_printf(s, " %1.3f", r->map_table[oc][ic]);
for (ic = 0; ic < n_ic; ic++)
pa_strbuf_printf(s, " %1.3f", m->map_table_f[oc][ic]);
pa_strbuf_puts(s, "\n");
}
pa_log_debug("Channel matrix:\n%s", t = pa_strbuf_tostring_free(s));
pa_xfree(t);
/* initialize the remapping function */
pa_init_remap (m);
}
static pa_memchunk* convert_to_work_format(pa_resampler *r, pa_memchunk *input) {
@ -1045,41 +1063,10 @@ static pa_memchunk* convert_to_work_format(pa_resampler *r, pa_memchunk *input)
return &r->buf1;
}
static void vectoradd_s16_with_fraction(
int16_t *d, int dstr,
const int16_t *s1, int sstr1,
const int16_t *s2, int sstr2,
int n,
float s3, float s4) {
int32_t i3, i4;
i3 = (int32_t) (s3 * 0x10000);
i4 = (int32_t) (s4 * 0x10000);
for (; n > 0; n--) {
int32_t a, b;
a = *s1;
b = *s2;
a = (a * i3) / 0x10000;
b = (b * i4) / 0x10000;
*d = (int16_t) (a + b);
s1 = (const int16_t*) ((const uint8_t*) s1 + sstr1);
s2 = (const int16_t*) ((const uint8_t*) s2 + sstr2);
d = (int16_t*) ((uint8_t*) d + dstr);
}
}
static pa_memchunk *remap_channels(pa_resampler *r, pa_memchunk *input) {
unsigned in_n_samples, out_n_samples, n_frames;
int i_skip, o_skip;
unsigned oc;
void *src, *dst;
pa_remap_t *remap;
pa_assert(r);
pa_assert(input);
@ -1108,76 +1095,14 @@ static pa_memchunk *remap_channels(pa_resampler *r, pa_memchunk *input) {
src = ((uint8_t*) pa_memblock_acquire(input->memblock) + input->index);
dst = pa_memblock_acquire(r->buf2.memblock);
memset(dst, 0, r->buf2.length);
remap = &r->remap;
o_skip = (int) (r->w_sz * r->o_ss.channels);
i_skip = (int) (r->w_sz * r->i_ss.channels);
switch (r->work_format) {
case PA_SAMPLE_FLOAT32NE:
for (oc = 0; oc < r->o_ss.channels; oc++) {
unsigned ic;
static const float one = 1.0;
for (ic = 0; ic < r->i_ss.channels; ic++) {
if (r->map_table[oc][ic] <= 0.0)
continue;
oil_vectoradd_f32(
(float*) dst + oc, o_skip,
(float*) dst + oc, o_skip,
(float*) src + ic, i_skip,
(int) n_frames,
&one, &r->map_table[oc][ic]);
}
}
break;
case PA_SAMPLE_S16NE:
for (oc = 0; oc < r->o_ss.channels; oc++) {
unsigned ic;
for (ic = 0; ic < r->i_ss.channels; ic++) {
if (r->map_table[oc][ic] <= 0.0)
continue;
if (r->map_table[oc][ic] >= 1.0) {
static const int16_t one = 1;
oil_vectoradd_s16(
(int16_t*) dst + oc, o_skip,
(int16_t*) dst + oc, o_skip,
(int16_t*) src + ic, i_skip,
(int) n_frames,
&one, &one);
} else
vectoradd_s16_with_fraction(
(int16_t*) dst + oc, o_skip,
(int16_t*) dst + oc, o_skip,
(int16_t*) src + ic, i_skip,
(int) n_frames,
1.0f, r->map_table[oc][ic]);
}
}
break;
default:
pa_assert_not_reached();
}
pa_assert (remap->do_remap);
remap->do_remap (remap, dst, src, n_frames);
pa_memblock_release(input->memblock);
pa_memblock_release(r->buf2.memblock);
r->buf2.length = out_n_samples * r->w_sz;
return &r->buf2;
}
@ -1469,7 +1394,7 @@ static void trivial_resample(pa_resampler *r, const pa_memchunk *input, unsigned
pa_assert(o_index * fz < pa_memblock_get_length(output->memblock));
oil_memcpy((uint8_t*) dst + fz * o_index,
memcpy((uint8_t*) dst + fz * o_index,
(uint8_t*) src + fz * j, (int) fz);
}

View file

@ -63,6 +63,7 @@ struct pa_rtpoll {
pa_bool_t running:1;
pa_bool_t rebuild_needed:1;
pa_bool_t quit:1;
pa_bool_t timer_elapsed:1;
#ifdef DEBUG_TIMING
pa_usec_t timestamp;
@ -94,26 +95,14 @@ PA_STATIC_FLIST_DECLARE(items, 0, pa_xfree);
pa_rtpoll *pa_rtpoll_new(void) {
pa_rtpoll *p;
p = pa_xnew(pa_rtpoll, 1);
p = pa_xnew0(pa_rtpoll, 1);
p->n_pollfd_alloc = 32;
p->pollfd = pa_xnew(struct pollfd, p->n_pollfd_alloc);
p->pollfd2 = pa_xnew(struct pollfd, p->n_pollfd_alloc);
p->n_pollfd_used = 0;
pa_zero(p->next_elapse);
p->timer_enabled = FALSE;
p->running = FALSE;
p->scan_for_dead = FALSE;
p->rebuild_needed = FALSE;
p->quit = FALSE;
PA_LLIST_HEAD_INIT(pa_rtpoll_item, p->items);
#ifdef DEBUG_TIMING
p->timestamp = pa_rtclock_now();
p->slept = p->awake = 0;
#endif
return p;
@ -229,6 +218,7 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
pa_assert(!p->running);
p->running = TRUE;
p->timer_elapsed = FALSE;
/* First, let's do some work */
for (i = p->items; i && i->priority < PA_RTPOLL_NEVER; i = i->next) {
@ -286,7 +276,7 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait_op) {
if (p->rebuild_needed)
rtpoll_rebuild(p);
memset(&timeout, 0, sizeof(timeout));
pa_zero(timeout);
/* Calculate timeout */
if (wait_op && !p->quit && p->timer_enabled) {
@ -314,9 +304,11 @@ 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 = 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;
#ifdef DEBUG_TIMING
{
pa_usec_t now = pa_rtclock_now();
@ -628,3 +620,9 @@ void pa_rtpoll_quit(pa_rtpoll *p) {
p->quit = TRUE;
}
pa_bool_t pa_rtpoll_timer_elapsed(pa_rtpoll *p) {
pa_assert(p);
return p->timer_elapsed;
}

View file

@ -73,6 +73,10 @@ void pa_rtpoll_set_timer_absolute(pa_rtpoll *p, pa_usec_t usec);
void pa_rtpoll_set_timer_relative(pa_rtpoll *p, pa_usec_t usec);
void pa_rtpoll_set_timer_disabled(pa_rtpoll *p);
/* Return TRUE when the elapsed timer was the reason for
* the last pa_rtpoll_run() invocation to finish */
pa_bool_t pa_rtpoll_timer_elapsed(pa_rtpoll *p);
/* A new fd wakeup item for pa_rtpoll */
pa_rtpoll_item *pa_rtpoll_item_new(pa_rtpoll *p, pa_rtpoll_priority_t prio, unsigned n_fds);
void pa_rtpoll_item_free(pa_rtpoll_item *i);

View file

@ -30,9 +30,6 @@
#include <stdio.h>
#include <errno.h>
#include <liboil/liboilfuncs.h>
#include <liboil/liboil.h>
#include <pulse/timeval.h>
#include <pulsecore/log.h>
@ -106,24 +103,36 @@ void* pa_silence_memory(void *p, size_t length, const pa_sample_spec *spec) {
return p;
}
#define VOLUME_PADDING 32
static void calc_linear_integer_volume(int32_t linear[], const pa_cvolume *volume) {
unsigned channel;
unsigned channel, nchannels, padding;
pa_assert(linear);
pa_assert(volume);
for (channel = 0; channel < volume->channels; channel++)
nchannels = volume->channels;
for (channel = 0; channel < nchannels; channel++)
linear[channel] = (int32_t) lrint(pa_sw_volume_to_linear(volume->values[channel]) * 0x10000);
for (padding = 0; padding < VOLUME_PADDING; padding++, channel++)
linear[channel] = linear[padding];
}
static void calc_linear_float_volume(float linear[], const pa_cvolume *volume) {
unsigned channel;
unsigned channel, nchannels, padding;
pa_assert(linear);
pa_assert(volume);
for (channel = 0; channel < volume->channels; channel++)
nchannels = volume->channels;
for (channel = 0; channel < nchannels; channel++)
linear[channel] = (float) pa_sw_volume_to_linear(volume->values[channel]);
for (padding = 0; padding < VOLUME_PADDING; padding++, channel++)
linear[channel] = linear[padding];
}
static void calc_linear_integer_stream_volumes(pa_mix_info streams[], unsigned nstreams, const pa_cvolume *volume, const pa_sample_spec *spec) {
@ -690,6 +699,28 @@ size_t pa_mix(
return length;
}
typedef union {
float f;
uint32_t i;
} volume_val;
typedef void (*pa_calc_volume_func_t) (void *volumes, const pa_cvolume *volume);
static const pa_calc_volume_func_t calc_volume_table[] = {
[PA_SAMPLE_U8] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_ALAW] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_ULAW] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S16LE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S16BE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_FLOAT32LE] = (pa_calc_volume_func_t) calc_linear_float_volume,
[PA_SAMPLE_FLOAT32BE] = (pa_calc_volume_func_t) calc_linear_float_volume,
[PA_SAMPLE_S32LE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S32BE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S24LE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S24BE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S24_32LE] = (pa_calc_volume_func_t) calc_linear_integer_volume,
[PA_SAMPLE_S24_32BE] = (pa_calc_volume_func_t) calc_linear_integer_volume
};
void pa_volume_memchunk(
pa_memchunk*c,
@ -697,6 +728,8 @@ void pa_volume_memchunk(
const pa_cvolume *volume) {
void *ptr;
volume_val linear[PA_CHANNELS_MAX + VOLUME_PADDING];
pa_do_volume_func_t do_volume;
pa_assert(c);
pa_assert(spec);
@ -714,337 +747,19 @@ void pa_volume_memchunk(
return;
}
if (spec->format < 0 || spec->format > PA_SAMPLE_MAX) {
pa_log_warn(" Unable to change volume of format %s.", pa_sample_format_to_string(spec->format));
return;
}
do_volume = pa_get_volume_func (spec->format);
pa_assert(do_volume);
calc_volume_table[spec->format] ((void *)linear, volume);
ptr = (uint8_t*) pa_memblock_acquire(c->memblock) + c->index;
switch (spec->format) {
case PA_SAMPLE_S16NE: {
int16_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (int16_t*) ptr + c->length/sizeof(int16_t);
for (channel = 0, d = ptr; d < e; d++) {
int32_t t, hi, lo;
/* Multiplying the 32bit volume factor with the 16bit
* sample might result in an 48bit value. We want to
* do without 64 bit integers and hence do the
* multiplication independantly for the HI and LO part
* of the volume. */
hi = linear[channel] >> 16;
lo = linear[channel] & 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 >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S16RE: {
int16_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (int16_t*) ptr + c->length/sizeof(int16_t);
for (channel = 0, d = ptr; d < e; d++) {
int32_t t, hi, lo;
hi = linear[channel] >> 16;
lo = linear[channel] & 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 >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S32NE: {
int32_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (int32_t*) ptr + c->length/sizeof(int32_t);
for (channel = 0, d = ptr; d < e; d++) {
int64_t t;
t = (int64_t)(*d);
t = (t * linear[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*d = (int32_t) t;
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S32RE: {
int32_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (int32_t*) ptr + c->length/sizeof(int32_t);
for (channel = 0, d = ptr; d < e; d++) {
int64_t t;
t = (int64_t) PA_INT32_SWAP(*d);
t = (t * linear[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*d = PA_INT32_SWAP((int32_t) t);
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S24NE: {
uint8_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint8_t*) ptr + c->length;
for (channel = 0, d = ptr; d < e; d += 3) {
int64_t t;
t = (int64_t)((int32_t) (PA_READ24NE(d) << 8));
t = (t * linear[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
PA_WRITE24NE(d, ((uint32_t) (int32_t) t) >> 8);
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S24RE: {
uint8_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint8_t*) ptr + c->length;
for (channel = 0, d = ptr; d < e; d += 3) {
int64_t t;
t = (int64_t)((int32_t) (PA_READ24RE(d) << 8));
t = (t * linear[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
PA_WRITE24RE(d, ((uint32_t) (int32_t) t) >> 8);
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S24_32NE: {
uint32_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint32_t*) ptr + c->length/sizeof(uint32_t);
for (channel = 0, d = ptr; d < e; d++) {
int64_t t;
t = (int64_t) ((int32_t) (*d << 8));
t = (t * linear[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*d = ((uint32_t) ((int32_t) t)) >> 8;
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_S24_32RE: {
uint32_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint32_t*) ptr + c->length/sizeof(uint32_t);
for (channel = 0, d = ptr; d < e; d++) {
int64_t t;
t = (int64_t) ((int32_t) (PA_UINT32_SWAP(*d) << 8));
t = (t * linear[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*d = PA_UINT32_SWAP(((uint32_t) ((int32_t) t)) >> 8);
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_U8: {
uint8_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint8_t*) ptr + c->length;
for (channel = 0, d = ptr; d < e; d++) {
int32_t t, hi, lo;
hi = linear[channel] >> 16;
lo = linear[channel] & 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 >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_ULAW: {
uint8_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint8_t*) ptr + c->length;
for (channel = 0, d = ptr; d < e; d++) {
int32_t t, hi, lo;
hi = linear[channel] >> 16;
lo = linear[channel] & 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 >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_ALAW: {
uint8_t *d, *e;
unsigned channel;
int32_t linear[PA_CHANNELS_MAX];
calc_linear_integer_volume(linear, volume);
e = (uint8_t*) ptr + c->length;
for (channel = 0, d = ptr; d < e; d++) {
int32_t t, hi, lo;
hi = linear[channel] >> 16;
lo = linear[channel] & 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 >= spec->channels))
channel = 0;
}
break;
}
case PA_SAMPLE_FLOAT32NE: {
float *d;
int skip;
unsigned n;
unsigned channel;
d = ptr;
skip = (int) (spec->channels * sizeof(float));
n = (unsigned) (c->length/sizeof(float)/spec->channels);
for (channel = 0; channel < spec->channels; channel ++) {
float v, *t;
if (PA_UNLIKELY(volume->values[channel] == PA_VOLUME_NORM))
continue;
v = (float) pa_sw_volume_to_linear(volume->values[channel]);
t = d + channel;
oil_scalarmult_f32(t, skip, t, skip, &v, (int) n);
}
break;
}
case PA_SAMPLE_FLOAT32RE: {
float *d, *e;
unsigned channel;
float linear[PA_CHANNELS_MAX];
calc_linear_float_volume(linear, volume);
e = (float*) ptr + c->length/sizeof(float);
for (channel = 0, d = ptr; d < e; d++) {
float t;
t = PA_FLOAT32_SWAP(*d);
t *= linear[channel];
*d = PA_FLOAT32_SWAP(t);
if (PA_UNLIKELY(++channel >= spec->channels))
channel = 0;
}
break;
}
default:
pa_log_warn(" Unable to change volume of format %s.", pa_sample_format_to_string(spec->format));
/* If we cannot change the volume, we just don't do it */
}
do_volume (ptr, (void *)linear, spec->channels, c->length);
pa_memblock_release(c->memblock);
}
@ -1090,7 +805,7 @@ void pa_interleave(const void *src[], unsigned channels, void *dst, size_t ss, u
d = (uint8_t*) dst + c * ss;
for (j = 0; j < n; j ++) {
oil_memcpy(d, s, (int) ss);
memcpy(d, s, (int) ss);
s = (uint8_t*) s + ss;
d = (uint8_t*) d + fs;
}
@ -1118,7 +833,7 @@ void pa_deinterleave(const void *src, void *dst[], unsigned channels, size_t ss,
d = dst[c];
for (j = 0; j < n; j ++) {
oil_memcpy(d, s, (int) ss);
memcpy(d, s, (int) ss);
s = (uint8_t*) s + fs;
d = (uint8_t*) d + ss;
}
@ -1227,10 +942,15 @@ void pa_sample_clamp(pa_sample_format_t format, void *dst, size_t dstr, const vo
s = src; d = dst;
if (format == PA_SAMPLE_FLOAT32NE) {
for (; n > 0; n--) {
float f;
float minus_one = -1.0, plus_one = 1.0;
oil_clip_f32(d, (int) dstr, s, (int) sstr, (int) n, &minus_one, &plus_one);
f = *s;
*d = PA_CLAMP_UNLIKELY(f, -1.0f, 1.0f);
s = (const float*) ((const uint8_t*) s + sstr);
d = (float*) ((uint8_t*) d + dstr);
}
} else {
pa_assert(format == PA_SAMPLE_FLOAT32RE);

View file

@ -86,6 +86,11 @@ void pa_memchunk_dump_to_file(pa_memchunk *c, const char *fn);
void pa_memchunk_sine(pa_memchunk *c, pa_mempool *pool, unsigned rate, unsigned freq);
typedef void (*pa_do_volume_func_t) (void *samples, void *volumes, unsigned channels, unsigned length);
pa_do_volume_func_t pa_get_volume_func(pa_sample_format_t f);
void pa_set_volume_func(pa_sample_format_t f, pa_do_volume_func_t func);
#define PA_CHANNEL_POSITION_MASK_LEFT \
(PA_CHANNEL_POSITION_MASK(PA_CHANNEL_POSITION_FRONT_LEFT) \
| PA_CHANNEL_POSITION_MASK(PA_CHANNEL_POSITION_REAR_LEFT) \

View file

@ -28,8 +28,6 @@
#include <inttypes.h>
#include <stdio.h>
#include <liboil/liboilfuncs.h>
#include <pulsecore/sconv.h>
#include <pulsecore/macro.h>
#include <pulsecore/log.h>
@ -86,17 +84,13 @@ void pa_sconv_s16le_to_float32ne(unsigned n, const int16_t *a, float *b) {
pa_assert(b);
#if SWAP_WORDS == 1
for (; n > 0; n--) {
int16_t s = *(a++);
*(b++) = ((float) INT16_FROM(s))/(float) 0x7FFF;
}
#else
{
static const double add = 0, factor = 1.0/0x7FFF;
oil_scaleconv_f32_s16(b, a, (int) n, &add, &factor);
}
for (; n > 0; n--)
*(b++) = ((float) (*(a++)))/(float) 0x7FFF;
#endif
}
@ -105,17 +99,13 @@ void pa_sconv_s32le_to_float32ne(unsigned n, const int32_t *a, float *b) {
pa_assert(b);
#if SWAP_WORDS == 1
for (; n > 0; n--) {
int32_t s = *(a++);
*(b++) = (float) (((double) INT32_FROM(s))/0x7FFFFFFF);
}
#else
{
static const double add = 0, factor = 1.0/0x7FFFFFFF;
oil_scaleconv_f32_s32(b, a, (int) n, &add, &factor);
}
for (; n > 0; n--)
*(b++) = (float) (((double) (*(a++)))/0x7FFFFFFF);
#endif
}
@ -124,7 +114,6 @@ void pa_sconv_s16le_from_float32ne(unsigned n, const float *a, int16_t *b) {
pa_assert(b);
#if SWAP_WORDS == 1
for (; n > 0; n--) {
int16_t s;
float v = *(a++);
@ -133,12 +122,13 @@ void pa_sconv_s16le_from_float32ne(unsigned n, const float *a, int16_t *b) {
s = (int16_t) lrintf(v * 0x7FFF);
*(b++) = INT16_TO(s);
}
#else
{
static const double add = 0, factor = 0x7FFF;
oil_scaleconv_s16_f32(b, a, (int) n, &add, &factor);
}
for (; n > 0; n--) {
float v = *(a++);
v = PA_CLAMP_UNLIKELY(v, -1.0f, 1.f);
*(b++) = (int16_t) lrintf(v * 0x7FFF);
}
#endif
}
@ -147,7 +137,6 @@ void pa_sconv_s32le_from_float32ne(unsigned n, const float *a, int32_t *b) {
pa_assert(b);
#if SWAP_WORDS == 1
for (; n > 0; n--) {
int32_t s;
float v = *(a++);
@ -156,12 +145,13 @@ void pa_sconv_s32le_from_float32ne(unsigned n, const float *a, int32_t *b) {
s = (int32_t) lrint((double) v * (double) 0x7FFFFFFF);
*(b++) = INT32_TO(s);
}
#else
{
static const double add = 0, factor = 0x7FFFFFFF;
oil_scaleconv_s32_f32(b, a, (int) n, &add, &factor);
}
for (; n > 0; n--) {
float v = *(a++);
v = PA_CLAMP_UNLIKELY(v, -1.0f, 1.0f);
*(b++) = (int32_t) lrint((double) v * (double) 0x7FFFFFFF);
}
#endif
}

View file

@ -27,9 +27,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <liboil/liboilfuncs.h>
#include <liboil/liboil.h>
#include <pulsecore/g711.h>
#include <pulsecore/macro.h>
@ -41,32 +38,31 @@
/* u8 */
static void u8_to_float32ne(unsigned n, const uint8_t *a, float *b) {
static const double add = -1, factor = 1.0/128.0;
pa_assert(a);
pa_assert(b);
oil_scaleconv_f32_u8(b, a, (int) n, &add, &factor);
for (; n > 0; n--, a++, b++)
*b = (*a * 1.0/128.0) - 1.0;
}
static void u8_from_float32ne(unsigned n, const float *a, uint8_t *b) {
static const double add = 128, factor = 127.0;
pa_assert(a);
pa_assert(b);
oil_scaleconv_u8_f32(b, a, (int) n, &add, &factor);
for (; n > 0; n--, a++, b++) {
float v;
v = (*a * 127.0) + 128.0;
v = PA_CLAMP_UNLIKELY (v, 0.0, 255.0);
*b = rint (v);
}
}
static void u8_to_s16ne(unsigned n, const uint8_t *a, int16_t *b) {
static const int16_t add = -0x80, factor = 0x100;
pa_assert(a);
pa_assert(b);
oil_conv_s16_u8(b, 2, a, 1, (int) n);
oil_scalaradd_s16(b, 2, b, 2, &add, (int) n);
oil_scalarmult_s16(b, 2, b, 2, &factor, (int) n);
for (; n > 0; n--, a++, b++)
*b = (((int16_t)*a) - 128) << 8;
}
static void u8_from_s16ne(unsigned n, const int16_t *a, uint8_t *b) {
@ -84,7 +80,7 @@ static void float32ne_to_float32ne(unsigned n, const float *a, float *b) {
pa_assert(a);
pa_assert(b);
oil_memcpy(b, a, (int) (sizeof(float) * n));
memcpy(b, a, (int) (sizeof(float) * n));
}
static void float32re_to_float32ne(unsigned n, const float *a, float *b) {
@ -101,7 +97,7 @@ static void s16ne_to_s16ne(unsigned n, const int16_t *a, int16_t *b) {
pa_assert(a);
pa_assert(b);
oil_memcpy(b, a, (int) (sizeof(int16_t) * n));
memcpy(b, a, (int) (sizeof(int16_t) * n));
}
static void s16re_to_s16ne(unsigned n, const int16_t *a, int16_t *b) {
@ -188,98 +184,130 @@ static void alaw_from_s16ne(unsigned n, const int16_t *a, uint8_t *b) {
*b = st_13linear2alaw(*a >> 3);
}
pa_convert_func_t pa_get_convert_to_float32ne_function(pa_sample_format_t f) {
static pa_convert_func_t to_float32ne_table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_to_float32ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_to_float32ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_to_float32ne,
[PA_SAMPLE_S16LE] = (pa_convert_func_t) pa_sconv_s16le_to_float32ne,
[PA_SAMPLE_S16BE] = (pa_convert_func_t) pa_sconv_s16be_to_float32ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_to_float32ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_to_float32ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_to_float32ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_to_float32ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_to_float32ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_to_float32ne,
[PA_SAMPLE_FLOAT32NE] = (pa_convert_func_t) float32ne_to_float32ne,
[PA_SAMPLE_FLOAT32RE] = (pa_convert_func_t) float32re_to_float32ne,
};
static const pa_convert_func_t table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_to_float32ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_to_float32ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_to_float32ne,
[PA_SAMPLE_S16LE] = (pa_convert_func_t) pa_sconv_s16le_to_float32ne,
[PA_SAMPLE_S16BE] = (pa_convert_func_t) pa_sconv_s16be_to_float32ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_to_float32ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_to_float32ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_to_float32ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_to_float32ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_to_float32ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_to_float32ne,
[PA_SAMPLE_FLOAT32NE] = (pa_convert_func_t) float32ne_to_float32ne,
[PA_SAMPLE_FLOAT32RE] = (pa_convert_func_t) float32re_to_float32ne,
};
pa_convert_func_t pa_get_convert_to_float32ne_function(pa_sample_format_t f) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return table[f];
return to_float32ne_table[f];
}
void pa_set_convert_to_float32ne_function(pa_sample_format_t f, pa_convert_func_t func) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
to_float32ne_table[f] = func;
}
static pa_convert_func_t from_float32ne_table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_from_float32ne,
[PA_SAMPLE_S16LE] = (pa_convert_func_t) pa_sconv_s16le_from_float32ne,
[PA_SAMPLE_S16BE] = (pa_convert_func_t) pa_sconv_s16be_from_float32ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_from_float32ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_from_float32ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_from_float32ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_from_float32ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_from_float32ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_from_float32ne,
[PA_SAMPLE_FLOAT32NE] = (pa_convert_func_t) float32ne_to_float32ne,
[PA_SAMPLE_FLOAT32RE] = (pa_convert_func_t) float32re_to_float32ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_from_float32ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_from_float32ne
};
pa_convert_func_t pa_get_convert_from_float32ne_function(pa_sample_format_t f) {
static const pa_convert_func_t table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_from_float32ne,
[PA_SAMPLE_S16LE] = (pa_convert_func_t) pa_sconv_s16le_from_float32ne,
[PA_SAMPLE_S16BE] = (pa_convert_func_t) pa_sconv_s16be_from_float32ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_from_float32ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_from_float32ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_from_float32ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_from_float32ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_from_float32ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_from_float32ne,
[PA_SAMPLE_FLOAT32NE] = (pa_convert_func_t) float32ne_to_float32ne,
[PA_SAMPLE_FLOAT32RE] = (pa_convert_func_t) float32re_to_float32ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_from_float32ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_from_float32ne
};
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return from_float32ne_table[f];
}
void pa_set_convert_from_float32ne_function(pa_sample_format_t f, pa_convert_func_t func) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return table[f];
from_float32ne_table[f] = func;
}
static pa_convert_func_t to_s16ne_table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_to_s16ne,
[PA_SAMPLE_S16NE] = (pa_convert_func_t) s16ne_to_s16ne,
[PA_SAMPLE_S16RE] = (pa_convert_func_t) s16re_to_s16ne,
[PA_SAMPLE_FLOAT32BE] = (pa_convert_func_t) pa_sconv_float32be_to_s16ne,
[PA_SAMPLE_FLOAT32LE] = (pa_convert_func_t) pa_sconv_float32le_to_s16ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_to_s16ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_to_s16ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_to_s16ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_to_s16ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_to_s16ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_to_s16ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_to_s16ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_to_s16ne
};
pa_convert_func_t pa_get_convert_to_s16ne_function(pa_sample_format_t f) {
static const pa_convert_func_t table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_to_s16ne,
[PA_SAMPLE_S16NE] = (pa_convert_func_t) s16ne_to_s16ne,
[PA_SAMPLE_S16RE] = (pa_convert_func_t) s16re_to_s16ne,
[PA_SAMPLE_FLOAT32BE] = (pa_convert_func_t) pa_sconv_float32be_to_s16ne,
[PA_SAMPLE_FLOAT32LE] = (pa_convert_func_t) pa_sconv_float32le_to_s16ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_to_s16ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_to_s16ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_to_s16ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_to_s16ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_to_s16ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_to_s16ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_to_s16ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_to_s16ne
};
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return to_s16ne_table[f];
}
void pa_set_convert_to_s16ne_function(pa_sample_format_t f, pa_convert_func_t func) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return table[f];
to_s16ne_table[f] = func;
}
static pa_convert_func_t from_s16ne_table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_from_s16ne,
[PA_SAMPLE_S16NE] = (pa_convert_func_t) s16ne_to_s16ne,
[PA_SAMPLE_S16RE] = (pa_convert_func_t) s16re_to_s16ne,
[PA_SAMPLE_FLOAT32BE] = (pa_convert_func_t) pa_sconv_float32be_from_s16ne,
[PA_SAMPLE_FLOAT32LE] = (pa_convert_func_t) pa_sconv_float32le_from_s16ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_from_s16ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_from_s16ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_from_s16ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_from_s16ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_from_s16ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_from_s16ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_from_s16ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_from_s16ne,
};
pa_convert_func_t pa_get_convert_from_s16ne_function(pa_sample_format_t f) {
static const pa_convert_func_t table[] = {
[PA_SAMPLE_U8] = (pa_convert_func_t) u8_from_s16ne,
[PA_SAMPLE_S16NE] = (pa_convert_func_t) s16ne_to_s16ne,
[PA_SAMPLE_S16RE] = (pa_convert_func_t) s16re_to_s16ne,
[PA_SAMPLE_FLOAT32BE] = (pa_convert_func_t) pa_sconv_float32be_from_s16ne,
[PA_SAMPLE_FLOAT32LE] = (pa_convert_func_t) pa_sconv_float32le_from_s16ne,
[PA_SAMPLE_S32BE] = (pa_convert_func_t) pa_sconv_s32be_from_s16ne,
[PA_SAMPLE_S32LE] = (pa_convert_func_t) pa_sconv_s32le_from_s16ne,
[PA_SAMPLE_S24BE] = (pa_convert_func_t) pa_sconv_s24be_from_s16ne,
[PA_SAMPLE_S24LE] = (pa_convert_func_t) pa_sconv_s24le_from_s16ne,
[PA_SAMPLE_S24_32BE] = (pa_convert_func_t) pa_sconv_s24_32be_from_s16ne,
[PA_SAMPLE_S24_32LE] = (pa_convert_func_t) pa_sconv_s24_32le_from_s16ne,
[PA_SAMPLE_ALAW] = (pa_convert_func_t) alaw_from_s16ne,
[PA_SAMPLE_ULAW] = (pa_convert_func_t) ulaw_from_s16ne,
};
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return from_s16ne_table[f];
}
void pa_set_convert_from_s16ne_function(pa_sample_format_t f, pa_convert_func_t func) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return table[f];
from_s16ne_table[f] = func;
}

View file

@ -33,4 +33,10 @@ pa_convert_func_t pa_get_convert_from_float32ne_function(pa_sample_format_t f) P
pa_convert_func_t pa_get_convert_to_s16ne_function(pa_sample_format_t f) PA_GCC_PURE;
pa_convert_func_t pa_get_convert_from_s16ne_function(pa_sample_format_t f) PA_GCC_PURE;
void pa_set_convert_to_float32ne_function(pa_sample_format_t f, pa_convert_func_t func);
void pa_set_convert_from_float32ne_function(pa_sample_format_t f, pa_convert_func_t func);
void pa_set_convert_to_s16ne_function(pa_sample_format_t f, pa_convert_func_t func);
void pa_set_convert_from_s16ne_function(pa_sample_format_t f, pa_convert_func_t func);
#endif

View file

@ -44,7 +44,7 @@
#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);
@ -126,6 +126,8 @@ static void reset_callbacks(pa_sink_input *i) {
i->state_change = NULL;
i->may_move_to = NULL;
i->send_event = NULL;
i->volume_changed = NULL;
i->mute_changed = NULL;
}
/* Called from main context */
@ -485,7 +487,10 @@ static void sink_input_free(pa_object *o) {
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.render_memblockq)
pa_memblockq_free(i->thread_info.render_memblockq);
@ -968,7 +973,10 @@ void pa_sink_input_set_volume(pa_sink_input *i, const pa_cvolume *volume, pa_boo
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 */
/* 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);
}
@ -999,6 +1007,11 @@ void pa_sink_input_set_mute(pa_sink_input *i, pa_bool_t mute, pa_bool_t save) {
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);
/* 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);
}
@ -1263,6 +1276,10 @@ int pa_sink_input_finish_move(pa_sink_input *i, pa_sink *dest, pa_bool_t save) {
/* Notify everyone */
pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_MOVE_FINISH], i);
if (i->volume_changed)
i->volume_changed(i);
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
return 0;

View file

@ -192,8 +192,16 @@ struct pa_sink_input {
pa_bool_t (*may_move_to) (pa_sink_input *i, pa_sink *s); /* may be NULL */
/* If non-NULL this function is used to dispatch asynchronous
* control events. */
void (*send_event)(pa_sink_input *i, const char *event, pa_proplist* data);
* control events. Called from main context. */
void (*send_event)(pa_sink_input *i, const char *event, pa_proplist* data); /* may be NULL */
/* If non-NULL this function is called whenever the sink input
* volume changes. Called from main context */
void (*volume_changed)(pa_sink_input *i); /* may be NULL */
/* If non-NULL this function is called whenever the sink input
* mute status changes. Called from main context */
void (*mute_changed)(pa_sink_input *i); /* may be NULL */
struct {
pa_sink_input_state_t state;
@ -227,7 +235,7 @@ struct pa_sink_input {
void *userdata;
};
PA_DECLARE_CLASS(pa_sink_input);
PA_DECLARE_PUBLIC_CLASS(pa_sink_input);
#define PA_SINK_INPUT(o) pa_sink_input_cast(o)
enum {

View file

@ -52,7 +52,7 @@
#define ABSOLUTE_MAX_LATENCY (10*PA_USEC_PER_SEC)
#define DEFAULT_FIXED_LATENCY (250*PA_USEC_PER_MSEC)
static PA_DEFINE_CHECK_TYPE(pa_sink, pa_msgobject);
PA_DEFINE_PUBLIC_CLASS(pa_sink, pa_msgobject);
static void sink_free(pa_object *s);
@ -1380,9 +1380,14 @@ static void propagate_reference_volume(pa_sink *s) {
pa_cvolume_remap(&remapped, &s->channel_map, &i->channel_map);
pa_sw_cvolume_multiply(&i->volume, &remapped, &i->reference_ratio);
/* The reference volume changed, let's tell people so */
if (!pa_cvolume_equal(&old_volume, &i->volume))
/* The volume changed, let's tell people so */
if (!pa_cvolume_equal(&old_volume, &i->volume)) {
if (i->volume_changed)
i->volume_changed(i);
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
}
}
}
@ -1522,8 +1527,13 @@ static void propagate_real_volume(pa_sink *s, const pa_cvolume *old_real_volume)
pa_sw_cvolume_multiply(&i->volume, &remapped, &i->reference_ratio);
/* Notify if something changed */
if (!pa_cvolume_equal(&old_volume, &i->volume))
if (!pa_cvolume_equal(&old_volume, &i->volume)) {
if (i->volume_changed)
i->volume_changed(i);
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
}
}
}

View file

@ -191,7 +191,7 @@ struct pa_sink {
void *userdata;
};
PA_DECLARE_CLASS(pa_sink);
PA_DECLARE_PUBLIC_CLASS(pa_sink);
#define PA_SINK(s) (pa_sink_cast(s))
typedef enum pa_sink_message {

View file

@ -64,9 +64,8 @@ enum {
FILE_STREAM_MESSAGE_UNLINK
};
PA_DECLARE_CLASS(file_stream);
PA_DEFINE_PRIVATE_CLASS(file_stream, pa_msgobject);
#define FILE_STREAM(o) (file_stream_cast(o))
static PA_DEFINE_CHECK_TYPE(file_stream, pa_msgobject);
/* Called from main context */
static void file_stream_unlink(file_stream *u) {

View file

@ -41,7 +41,7 @@
#define MEMBLOCKQ_MAXLENGTH (32*1024*1024)
static PA_DEFINE_CHECK_TYPE(pa_source_output, pa_msgobject);
PA_DEFINE_PUBLIC_CLASS(pa_source_output, pa_msgobject);
static void source_output_free(pa_object* mo);
@ -359,8 +359,6 @@ static void source_output_free(pa_object* mo) {
pa_log_info("Freeing output %u \"%s\"", o->index, pa_strnull(pa_proplist_gets(o->proplist, PA_PROP_MEDIA_NAME)));
pa_assert(!o->thread_info.attached);
if (o->thread_info.delay_memblockq)
pa_memblockq_free(o->thread_info.delay_memblockq);

View file

@ -182,7 +182,7 @@ struct pa_source_output {
void *userdata;
};
PA_DECLARE_CLASS(pa_source_output);
PA_DECLARE_PUBLIC_CLASS(pa_source_output);
#define PA_SOURCE_OUTPUT(o) pa_source_output_cast(o)
enum {

View file

@ -46,7 +46,7 @@
#define ABSOLUTE_MAX_LATENCY (10*PA_USEC_PER_SEC)
#define DEFAULT_FIXED_LATENCY (250*PA_USEC_PER_MSEC)
static PA_DEFINE_CHECK_TYPE(pa_source, pa_msgobject);
PA_DEFINE_PUBLIC_CLASS(pa_source, pa_msgobject);
static void source_free(pa_object *o);

View file

@ -158,7 +158,7 @@ struct pa_source {
void *userdata;
};
PA_DECLARE_CLASS(pa_source);
PA_DECLARE_PUBLIC_CLASS(pa_source);
#define PA_SOURCE(s) pa_source_cast(s)
typedef enum pa_source_message {

195
src/pulsecore/svolume_arm.c Normal file
View file

@ -0,0 +1,195 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <pulse/timeval.h>
#include <pulsecore/random.h>
#include <pulsecore/macro.h>
#include <pulsecore/g711.h>
#include <pulsecore/core-util.h>
#include "cpu-arm.h"
#include "sample-util.h"
#include "endianmacros.h"
#if defined (__arm__)
#define MOD_INC() \
" subs r0, r6, %2 \n\t" \
" addcs r0, %1 \n\t" \
" movcs r6, r0 \n\t"
static void
pa_volume_s16ne_arm (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
int32_t *ve;
channels = PA_MAX (4U, channels);
ve = volumes + channels;
__asm__ __volatile__ (
" mov r6, %1 \n\t"
" mov %3, %3, LSR #1 \n\t" /* length /= sizeof (int16_t) */
" tst %3, #1 \n\t" /* check for odd samples */
" beq 2f \n\t"
"1: \n\t"
" ldr r0, [r6], #4 \n\t" /* odd samples volumes */
" ldrh r2, [%0] \n\t"
" smulwb r0, r0, r2 \n\t"
" ssat r0, #16, r0 \n\t"
" strh r0, [%0], #2 \n\t"
MOD_INC()
"2: \n\t"
" mov %3, %3, LSR #1 \n\t"
" tst %3, #1 \n\t" /* check for odd samples */
" beq 4f \n\t"
"3: \n\t"
" ldrd r2, [r6], #8 \n\t" /* 2 samples at a time */
" ldr r0, [%0] \n\t"
" smulwt r2, r2, r0 \n\t"
" smulwb r3, r3, r0 \n\t"
" ssat r2, #16, r2 \n\t"
" ssat r3, #16, r3 \n\t"
" pkhbt r0, r3, r2, LSL #16 \n\t"
" str r0, [%0], #4 \n\t"
MOD_INC()
"4: \n\t"
" movs %3, %3, LSR #1 \n\t"
" beq 6f \n\t"
"5: \n\t"
" ldrd r2, [r6], #8 \n\t" /* 4 samples at a time */
" ldrd r4, [r6], #8 \n\t"
" ldrd r0, [%0] \n\t"
" smulwt r2, r2, r0 \n\t"
" smulwb r3, r3, r0 \n\t"
" smulwt r4, r4, r1 \n\t"
" smulwb r5, r5, r1 \n\t"
" ssat r2, #16, r2 \n\t"
" ssat r3, #16, r3 \n\t"
" ssat r4, #16, r4 \n\t"
" ssat r5, #16, r5 \n\t"
" pkhbt r0, r3, r2, LSL #16 \n\t"
" pkhbt r1, r5, r4, LSL #16 \n\t"
" strd r0, [%0], #8 \n\t"
MOD_INC()
" subs %3, %3, #1 \n\t"
" bne 5b \n\t"
"6: \n\t"
: "+r" (samples), "+r" (volumes), "+r" (ve), "+r" (length)
:
: "r6", "r5", "r4", "r3", "r2", "r1", "r0", "cc"
);
}
#undef RUN_TEST
#ifdef RUN_TEST
#define CHANNELS 2
#define SAMPLES 1023
#define TIMES 1000
#define PADDING 16
static void run_test (void) {
int16_t samples[SAMPLES];
int16_t samples_ref[SAMPLES];
int16_t samples_orig[SAMPLES];
int32_t volumes[CHANNELS + PADDING];
int i, j, padding;
pa_do_volume_func_t func;
pa_usec_t start, stop;
func = pa_get_volume_func (PA_SAMPLE_S16NE);
printf ("checking ARM %zd\n", sizeof (samples));
pa_random (samples, sizeof (samples));
memcpy (samples_ref, samples, sizeof (samples));
memcpy (samples_orig, samples, sizeof (samples));
for (i = 0; i < CHANNELS; i++)
volumes[i] = rand() >> 1;
for (padding = 0; padding < PADDING; padding++, i++)
volumes[i] = volumes[padding];
func (samples_ref, volumes, CHANNELS, sizeof (samples));
pa_volume_s16ne_arm (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],
samples_orig[i], volumes[i % CHANNELS]);
}
}
start = pa_rtclock_now();
for (j = 0; j < TIMES; j++) {
memcpy (samples, samples_orig, sizeof (samples));
pa_volume_s16ne_arm (samples, volumes, CHANNELS, sizeof (samples));
}
stop = pa_rtclock_now();
pa_log_info("ARM: %llu usec.", (long long unsigned int) (stop - start));
start = pa_rtclock_now();
for (j = 0; j < TIMES; j++) {
memcpy (samples_ref, samples_orig, sizeof (samples));
func (samples_ref, volumes, CHANNELS, sizeof (samples));
}
stop = pa_rtclock_now();
pa_log_info("ref: %llu usec.", (long long unsigned int) (stop - start));
}
#endif
#endif /* defined (__arm__) */
void pa_volume_func_init_arm (pa_cpu_arm_flag_t flags) {
#if defined (__arm__)
pa_log_info("Initialising ARM optimized functions.");
#ifdef RUN_TEST
run_test ();
#endif
pa_set_volume_func (PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_arm);
#endif /* defined (__arm__) */
}

335
src/pulsecore/svolume_c.c Normal file
View file

@ -0,0 +1,335 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
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/macro.h>
#include <pulsecore/g711.h>
#include <pulsecore/core-util.h>
#include "sample-util.h"
#include "endianmacros.h"
static void
pa_volume_u8_c (uint8_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
for (channel = 0; length; length--) {
int32_t t, hi, lo;
hi = volumes[channel] >> 16;
lo = volumes[channel] & 0xFFFF;
t = (int32_t) *samples - 0x80;
t = ((t * lo) >> 16) + (t * hi);
t = PA_CLAMP_UNLIKELY(t, -0x80, 0x7F);
*samples++ = (uint8_t) (t + 0x80);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_alaw_c (uint8_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
for (channel = 0; length; length--) {
int32_t t, hi, lo;
hi = volumes[channel] >> 16;
lo = volumes[channel] & 0xFFFF;
t = (int32_t) st_alaw2linear16(*samples);
t = ((t * lo) >> 16) + (t * hi);
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
*samples++ = (uint8_t) st_13linear2alaw((int16_t) t >> 3);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_ulaw_c (uint8_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
for (channel = 0; length; length--) {
int32_t t, hi, lo;
hi = volumes[channel] >> 16;
lo = volumes[channel] & 0xFFFF;
t = (int32_t) st_ulaw2linear16(*samples);
t = ((t * lo) >> 16) + (t * hi);
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
*samples++ = (uint8_t) st_14linear2ulaw((int16_t) t >> 2);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s16ne_c (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (int16_t);
for (channel = 0; length; length--) {
int32_t t, hi, lo;
/* Multiplying the 32bit volume factor with the 16bit
* sample might result in an 48bit value. We want to
* do without 64 bit integers and hence do the
* multiplication independantly for the HI and LO part
* of the volume. */
hi = volumes[channel] >> 16;
lo = volumes[channel] & 0xFFFF;
t = (int32_t)(*samples);
t = ((t * lo) >> 16) + (t * hi);
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
*samples++ = (int16_t) t;
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s16re_c (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (int16_t);
for (channel = 0; length; length--) {
int32_t t, hi, lo;
hi = volumes[channel] >> 16;
lo = volumes[channel] & 0xFFFF;
t = (int32_t) PA_INT16_SWAP(*samples);
t = ((t * lo) >> 16) + (t * hi);
t = PA_CLAMP_UNLIKELY(t, -0x8000, 0x7FFF);
*samples++ = PA_INT16_SWAP((int16_t) t);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_float32ne_c (float *samples, float *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (float);
for (channel = 0; length; length--) {
*samples++ *= volumes[channel];
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_float32re_c (float *samples, float *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (float);
for (channel = 0; length; length--) {
float t;
t = PA_FLOAT32_SWAP(*samples);
t *= volumes[channel];
*samples++ = PA_FLOAT32_SWAP(t);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s32ne_c (int32_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (int32_t);
for (channel = 0; length; length--) {
int64_t t;
t = (int64_t)(*samples);
t = (t * volumes[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*samples++ = (int32_t) t;
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s32re_c (int32_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (int32_t);
for (channel = 0; length; length--) {
int64_t t;
t = (int64_t) PA_INT32_SWAP(*samples);
t = (t * volumes[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*samples++ = PA_INT32_SWAP((int32_t) t);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s24ne_c (uint8_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
uint8_t *e;
e = samples + length;
for (channel = 0; samples < e; samples += 3) {
int64_t t;
t = (int64_t)((int32_t) (PA_READ24NE(samples) << 8));
t = (t * volumes[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
PA_WRITE24NE(samples, ((uint32_t) (int32_t) t) >> 8);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s24re_c (uint8_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
uint8_t *e;
e = samples + length;
for (channel = 0; samples < e; samples += 3) {
int64_t t;
t = (int64_t)((int32_t) (PA_READ24RE(samples) << 8));
t = (t * volumes[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
PA_WRITE24RE(samples, ((uint32_t) (int32_t) t) >> 8);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s24_32ne_c (uint32_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (uint32_t);
for (channel = 0; length; length--) {
int64_t t;
t = (int64_t) ((int32_t) (*samples << 8));
t = (t * volumes[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*samples++ = ((uint32_t) ((int32_t) t)) >> 8;
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static void
pa_volume_s24_32re_c (uint32_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
unsigned channel;
length /= sizeof (uint32_t);
for (channel = 0; length; length--) {
int64_t t;
t = (int64_t) ((int32_t) (PA_UINT32_SWAP(*samples) << 8));
t = (t * volumes[channel]) >> 16;
t = PA_CLAMP_UNLIKELY(t, -0x80000000LL, 0x7FFFFFFFLL);
*samples++ = PA_UINT32_SWAP(((uint32_t) ((int32_t) t)) >> 8);
if (PA_UNLIKELY(++channel >= channels))
channel = 0;
}
}
static pa_do_volume_func_t do_volume_table[] =
{
[PA_SAMPLE_U8] = (pa_do_volume_func_t) pa_volume_u8_c,
[PA_SAMPLE_ALAW] = (pa_do_volume_func_t) pa_volume_alaw_c,
[PA_SAMPLE_ULAW] = (pa_do_volume_func_t) pa_volume_ulaw_c,
[PA_SAMPLE_S16NE] = (pa_do_volume_func_t) pa_volume_s16ne_c,
[PA_SAMPLE_S16RE] = (pa_do_volume_func_t) pa_volume_s16re_c,
[PA_SAMPLE_FLOAT32NE] = (pa_do_volume_func_t) pa_volume_float32ne_c,
[PA_SAMPLE_FLOAT32RE] = (pa_do_volume_func_t) pa_volume_float32re_c,
[PA_SAMPLE_S32NE] = (pa_do_volume_func_t) pa_volume_s32ne_c,
[PA_SAMPLE_S32RE] = (pa_do_volume_func_t) pa_volume_s32re_c,
[PA_SAMPLE_S24NE] = (pa_do_volume_func_t) pa_volume_s24ne_c,
[PA_SAMPLE_S24RE] = (pa_do_volume_func_t) pa_volume_s24re_c,
[PA_SAMPLE_S24_32NE] = (pa_do_volume_func_t) pa_volume_s24_32ne_c,
[PA_SAMPLE_S24_32RE] = (pa_do_volume_func_t) pa_volume_s24_32re_c
};
pa_do_volume_func_t pa_get_volume_func(pa_sample_format_t f) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
return do_volume_table[f];
}
void pa_set_volume_func(pa_sample_format_t f, pa_do_volume_func_t func) {
pa_assert(f >= 0);
pa_assert(f < PA_SAMPLE_MAX);
do_volume_table[f] = func;
}

313
src/pulsecore/svolume_mmx.c Normal file
View file

@ -0,0 +1,313 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <pulse/timeval.h>
#include <pulsecore/random.h>
#include <pulsecore/macro.h>
#include <pulsecore/g711.h>
#include <pulsecore/core-util.h>
#include "cpu-x86.h"
#include "sample-util.h"
#include "endianmacros.h"
#if defined (__i386__) || defined (__amd64__)
/* in s: 2 int16_t samples
* in v: 2 int32_t volumes, fixed point 16:16
* out s: contains scaled and clamped int16_t samples.
*
* We calculate the high 32 bits of a 32x16 multiply which we then
* clamp to 16 bits. The calulcation is:
*
* vl = (v & 0xffff)
* vh = (v >> 16)
* s = ((s * vl) >> 16) + (s * vh);
*
* For the first multiply we have to do a sign correction as we need to
* multiply a signed int with an unsigned int. Hacker's delight 8-3 gives a
* simple formula to correct the sign of the high word after the signed
* multiply.
*/
#define VOLUME_32x16(s,v) /* .. | vh | vl | */ \
" pxor %%mm4, %%mm4 \n\t" /* .. | 0 | 0 | */ \
" punpcklwd %%mm4, "#s" \n\t" /* .. | 0 | p0 | */ \
" pcmpgtw "#v", %%mm4 \n\t" /* .. | 0 | s(vl) | */ \
" pand "#s", %%mm4 \n\t" /* .. | 0 | (p0) | (vl >> 15) & p */ \
" movq %%mm6, %%mm5 \n\t" /* .. | ffff | 0 | */ \
" pand "#v", %%mm5 \n\t" /* .. | vh | 0 | */ \
" por %%mm5, %%mm4 \n\t" /* .. | vh | (p0) | */ \
" pmulhw "#s", "#v" \n\t" /* .. | 0 | vl*p0 | */ \
" paddw %%mm4, "#v" \n\t" /* .. | vh | vl*p0 | vh + sign correct */ \
" pslld $16, "#s" \n\t" /* .. | p0 | 0 | */ \
" por %%mm7, "#s" \n\t" /* .. | p0 | 1 | */ \
" pmaddwd "#s", "#v" \n\t" /* .. | p0 * v0 | */ \
" packssdw "#v", "#v" \n\t" /* .. | p1*v1 | p0*v0 | */
/* approximately advances %3 = (%3 + a) % b. This function requires that
* a <= b. */
#define MOD_ADD(a,b) \
" add "#a", %3 \n\t" \
" mov %3, %4 \n\t" \
" sub "#b", %4 \n\t" \
" cmovae %4, %3 \n\t"
/* swap 16 bits */
#define SWAP_16(s) \
" movq "#s", %%mm4 \n\t" /* .. | h l | */ \
" psrlw $8, %%mm4 \n\t" /* .. | 0 h | */ \
" psllw $8, "#s" \n\t" /* .. | l 0 | */ \
" por %%mm4, "#s" \n\t" /* .. | l h | */
/* swap 2 registers 16 bits for better pairing */
#define SWAP_16_2(s1,s2) \
" movq "#s1", %%mm4 \n\t" /* .. | h l | */ \
" movq "#s2", %%mm5 \n\t" \
" psrlw $8, %%mm4 \n\t" /* .. | 0 h | */ \
" psrlw $8, %%mm5 \n\t" \
" psllw $8, "#s1" \n\t" /* .. | l 0 | */ \
" psllw $8, "#s2" \n\t" \
" por %%mm4, "#s1" \n\t" /* .. | l h | */ \
" por %%mm5, "#s2" \n\t"
static void
pa_volume_s16ne_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
pa_reg_x86 channel, temp;
/* the max number of samples we process at a time, this is also the max amount
* we overread the volume array, which should have enough padding. */
channels = PA_MAX (4U, channels);
__asm__ __volatile__ (
" xor %3, %3 \n\t"
" sar $1, %2 \n\t" /* length /= sizeof (int16_t) */
" pcmpeqw %%mm6, %%mm6 \n\t" /* .. | ffff | ffff | */
" pcmpeqw %%mm7, %%mm7 \n\t" /* .. | ffff | ffff | */
" pslld $16, %%mm6 \n\t" /* .. | ffff | 0 | */
" psrld $31, %%mm7 \n\t" /* .. | 0 | 1 | */
" test $1, %2 \n\t" /* check for odd samples */
" je 2f \n\t"
" movd (%1, %3, 4), %%mm0 \n\t" /* | v0h | v0l | */
" movw (%0), %w4 \n\t" /* .. | p0 | */
" movd %4, %%mm1 \n\t"
VOLUME_32x16 (%%mm1, %%mm0)
" movd %%mm0, %4 \n\t" /* .. | p0*v0 | */
" movw %w4, (%0) \n\t"
" add $2, %0 \n\t"
MOD_ADD ($1, %5)
"2: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 2 samples at a time */
" test $1, %2 \n\t" /* check for odd samples */
" je 4f \n\t"
"3: \n\t" /* do samples in groups of 2 */
" movq (%1, %3, 4), %%mm0 \n\t" /* | v1h | v1l | v0h | v0l | */
" movd (%0), %%mm1 \n\t" /* .. | p1 | p0 | */
VOLUME_32x16 (%%mm1, %%mm0)
" movd %%mm0, (%0) \n\t" /* .. | p1*v1 | p0*v0 | */
" add $4, %0 \n\t"
MOD_ADD ($2, %5)
"4: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 4 samples at a time */
" cmp $0, %2 \n\t"
" je 6f \n\t"
"5: \n\t" /* do samples in groups of 4 */
" movq (%1, %3, 4), %%mm0 \n\t" /* | v1h | v1l | v0h | v0l | */
" movq 8(%1, %3, 4), %%mm2 \n\t" /* | v3h | v3l | v2h | v2l | */
" movd (%0), %%mm1 \n\t" /* .. | p1 | p0 | */
" movd 4(%0), %%mm3 \n\t" /* .. | p3 | p2 | */
VOLUME_32x16 (%%mm1, %%mm0)
VOLUME_32x16 (%%mm3, %%mm2)
" movd %%mm0, (%0) \n\t" /* .. | p1*v1 | p0*v0 | */
" movd %%mm2, 4(%0) \n\t" /* .. | p3*v3 | p2*v2 | */
" add $8, %0 \n\t"
MOD_ADD ($4, %5)
" dec %2 \n\t"
" jne 5b \n\t"
"6: \n\t"
" emms \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
: "r" ((pa_reg_x86)channels)
: "cc"
);
}
static void
pa_volume_s16re_mmx (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
pa_reg_x86 channel, temp;
/* the max number of samples we process at a time, this is also the max amount
* we overread the volume array, which should have enough padding. */
channels = PA_MAX (4U, channels);
__asm__ __volatile__ (
" xor %3, %3 \n\t"
" sar $1, %2 \n\t" /* length /= sizeof (int16_t) */
" pcmpeqw %%mm6, %%mm6 \n\t" /* .. | ffff | ffff | */
" pcmpeqw %%mm7, %%mm7 \n\t" /* .. | ffff | ffff | */
" pslld $16, %%mm6 \n\t" /* .. | ffff | 0 | */
" psrld $31, %%mm7 \n\t" /* .. | 0 | 1 | */
" test $1, %2 \n\t" /* check for odd samples */
" je 2f \n\t"
" movd (%1, %3, 4), %%mm0 \n\t" /* | v0h | v0l | */
" movw (%0), %w4 \n\t" /* .. | p0 | */
" rorw $8, %w4 \n\t"
" movd %4, %%mm1 \n\t"
VOLUME_32x16 (%%mm1, %%mm0)
" movd %%mm0, %4 \n\t" /* .. | p0*v0 | */
" rorw $8, %w4 \n\t"
" movw %w4, (%0) \n\t"
" add $2, %0 \n\t"
MOD_ADD ($1, %5)
"2: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 2 samples at a time */
" test $1, %2 \n\t" /* check for odd samples */
" je 4f \n\t"
"3: \n\t" /* do samples in groups of 2 */
" movq (%1, %3, 4), %%mm0 \n\t" /* | v1h | v1l | v0h | v0l | */
" movd (%0), %%mm1 \n\t" /* .. | p1 | p0 | */
SWAP_16 (%%mm1)
VOLUME_32x16 (%%mm1, %%mm0)
SWAP_16 (%%mm0)
" movd %%mm0, (%0) \n\t" /* .. | p1*v1 | p0*v0 | */
" add $4, %0 \n\t"
MOD_ADD ($2, %5)
"4: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 4 samples at a time */
" cmp $0, %2 \n\t"
" je 6f \n\t"
"5: \n\t" /* do samples in groups of 4 */
" movq (%1, %3, 4), %%mm0 \n\t" /* | v1h | v1l | v0h | v0l | */
" movq 8(%1, %3, 4), %%mm2 \n\t" /* | v3h | v3l | v2h | v2l | */
" movd (%0), %%mm1 \n\t" /* .. | p1 | p0 | */
" movd 4(%0), %%mm3 \n\t" /* .. | p3 | p2 | */
SWAP_16_2 (%%mm1, %%mm3)
VOLUME_32x16 (%%mm1, %%mm0)
VOLUME_32x16 (%%mm3, %%mm2)
SWAP_16_2 (%%mm0, %%mm2)
" movd %%mm0, (%0) \n\t" /* .. | p1*v1 | p0*v0 | */
" movd %%mm2, 4(%0) \n\t" /* .. | p3*v3 | p2*v2 | */
" add $8, %0 \n\t"
MOD_ADD ($4, %5)
" dec %2 \n\t"
" jne 5b \n\t"
"6: \n\t"
" emms \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" ((pa_reg_x86)channel), "=&r" (temp)
: "r" ((pa_reg_x86)channels)
: "cc"
);
}
#undef RUN_TEST
#ifdef RUN_TEST
#define CHANNELS 2
#define SAMPLES 1021
#define TIMES 1000
#define PADDING 16
static void run_test (void) {
int16_t samples[SAMPLES];
int16_t samples_ref[SAMPLES];
int16_t samples_orig[SAMPLES];
int32_t volumes[CHANNELS + PADDING];
int i, j, padding;
pa_do_volume_func_t func;
pa_usec_t start, stop;
func = pa_get_volume_func (PA_SAMPLE_S16NE);
printf ("checking MMX %zd\n", sizeof (samples));
pa_random (samples, sizeof (samples));
memcpy (samples_ref, samples, sizeof (samples));
memcpy (samples_orig, samples, sizeof (samples));
for (i = 0; i < CHANNELS; i++)
volumes[i] = rand() >> 1;
for (padding = 0; padding < PADDING; padding++, i++)
volumes[i] = volumes[padding];
func (samples_ref, volumes, CHANNELS, sizeof (samples));
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],
samples_orig[i], volumes[i % CHANNELS]);
}
}
start = pa_rtclock_now();
for (j = 0; j < TIMES; j++) {
memcpy (samples, samples_orig, sizeof (samples));
pa_volume_s16ne_mmx (samples, volumes, CHANNELS, sizeof (samples));
}
stop = pa_rtclock_now();
pa_log_info("MMX: %llu usec.", (long long unsigned int)(stop - start));
start = pa_rtclock_now();
for (j = 0; j < TIMES; j++) {
memcpy (samples_ref, samples_orig, sizeof (samples));
func (samples_ref, volumes, CHANNELS, sizeof (samples));
}
stop = pa_rtclock_now();
pa_log_info("ref: %llu usec.", (long long unsigned int)(stop - start));
}
#endif
#endif /* defined (__i386__) || defined (__amd64__) */
void pa_volume_func_init_mmx (pa_cpu_x86_flag_t flags) {
#if defined (__i386__) || defined (__amd64__)
pa_log_info("Initialising MMX optimized functions.");
#ifdef RUN_TEST
run_test ();
#endif
pa_set_volume_func (PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_mmx);
pa_set_volume_func (PA_SAMPLE_S16RE, (pa_do_volume_func_t) pa_volume_s16re_mmx);
#endif /* defined (__i386__) || defined (__amd64__) */
}

314
src/pulsecore/svolume_sse.c Normal file
View file

@ -0,0 +1,314 @@
/***
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2009 Wim Taymans <wim.taymans@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.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <pulse/timeval.h>
#include <pulsecore/random.h>
#include <pulsecore/macro.h>
#include <pulsecore/g711.h>
#include <pulsecore/core-util.h>
#include "cpu-x86.h"
#include "sample-util.h"
#include "endianmacros.h"
#if defined (__i386__) || defined (__amd64__)
#define VOLUME_32x16(s,v) /* .. | vh | vl | */ \
" pxor %%xmm4, %%xmm4 \n\t" /* .. | 0 | 0 | */ \
" punpcklwd %%xmm4, "#s" \n\t" /* .. | 0 | p0 | */ \
" pcmpgtw "#s", %%xmm4 \n\t" /* .. | 0 | s(p0) | */ \
" pand "#v", %%xmm4 \n\t" /* .. | 0 | (vl) | */ \
" movdqa "#s", %%xmm5 \n\t" \
" pmulhuw "#v", "#s" \n\t" /* .. | 0 | vl*p0 | */ \
" psubd %%xmm4, "#s" \n\t" /* .. | 0 | vl*p0 | + sign correct */ \
" psrld $16, "#v" \n\t" /* .. | p0 | 0 | */ \
" pmaddwd %%xmm5, "#v" \n\t" /* .. | p0 * vh | */ \
" paddd "#s", "#v" \n\t" /* .. | p0 * v0 | */ \
" packssdw "#v", "#v" \n\t" /* .. | p1*v1 | p0*v0 | */
#define MOD_ADD(a,b) \
" add "#a", %3 \n\t" /* channel += inc */ \
" mov %3, %4 \n\t" \
" sub "#b", %4 \n\t" /* tmp = channel - channels */ \
" cmovae %4, %3 \n\t" /* if (tmp >= 0) channel = tmp */
/* swap 16 bits */
#define SWAP_16(s) \
" movdqa "#s", %%xmm4 \n\t" /* .. | h l | */ \
" psrlw $8, %%xmm4 \n\t" /* .. | 0 h | */ \
" psllw $8, "#s" \n\t" /* .. | l 0 | */ \
" por %%xmm4, "#s" \n\t" /* .. | l h | */
/* swap 2 registers 16 bits for better pairing */
#define SWAP_16_2(s1,s2) \
" movdqa "#s1", %%xmm4 \n\t" /* .. | h l | */ \
" movdqa "#s2", %%xmm5 \n\t" \
" psrlw $8, %%xmm4 \n\t" /* .. | 0 h | */ \
" psrlw $8, %%xmm5 \n\t" \
" psllw $8, "#s1" \n\t" /* .. | l 0 | */ \
" psllw $8, "#s2" \n\t" \
" por %%xmm4, "#s1" \n\t" /* .. | l h | */ \
" por %%xmm5, "#s2" \n\t"
static void
pa_volume_s16ne_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
pa_reg_x86 channel, temp;
/* the max number of samples we process at a time, this is also the max amount
* we overread the volume array, which should have enough padding. */
channels = PA_MAX (8U, channels);
__asm__ __volatile__ (
" xor %3, %3 \n\t"
" sar $1, %2 \n\t" /* length /= sizeof (int16_t) */
" test $1, %2 \n\t" /* check for odd samples */
" je 2f \n\t"
" movd (%1, %3, 4), %%xmm0 \n\t" /* | v0h | v0l | */
" movw (%0), %w4 \n\t" /* .. | p0 | */
" movd %4, %%xmm1 \n\t"
VOLUME_32x16 (%%xmm1, %%xmm0)
" movd %%xmm0, %4 \n\t" /* .. | p0*v0 | */
" movw %w4, (%0) \n\t"
" add $2, %0 \n\t"
MOD_ADD ($1, %5)
"2: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 2 samples at a time */
" test $1, %2 \n\t"
" je 4f \n\t"
"3: \n\t" /* do samples in groups of 2 */
" movq (%1, %3, 4), %%xmm0 \n\t" /* | v1h | v1l | v0h | v0l | */
" movd (%0), %%xmm1 \n\t" /* .. | p1 | p0 | */
VOLUME_32x16 (%%xmm1, %%xmm0)
" movd %%xmm0, (%0) \n\t" /* .. | p1*v1 | p0*v0 | */
" add $4, %0 \n\t"
MOD_ADD ($2, %5)
"4: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 4 samples at a time */
" test $1, %2 \n\t"
" je 6f \n\t"
/* FIXME, we can do aligned access of the volume values if we can guarantee
* that the array is 16 bytes aligned, we probably have to do the odd values
* after this then. */
"5: \n\t" /* do samples in groups of 4 */
" movdqu (%1, %3, 4), %%xmm0 \n\t" /* | v3h | v3l .. v0h | v0l | */
" movq (%0), %%xmm1 \n\t" /* .. | p3 .. p0 | */
VOLUME_32x16 (%%xmm1, %%xmm0)
" movq %%xmm0, (%0) \n\t" /* .. | p3*v3 .. p0*v0 | */
" add $8, %0 \n\t"
MOD_ADD ($4, %5)
"6: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 8 samples at a time */
" cmp $0, %2 \n\t"
" je 8f \n\t"
"7: \n\t" /* do samples in groups of 8 */
" movdqu (%1, %3, 4), %%xmm0 \n\t" /* | v3h | v3l .. v0h | v0l | */
" movdqu 16(%1, %3, 4), %%xmm2 \n\t" /* | v7h | v7l .. v4h | v4l | */
" movq (%0), %%xmm1 \n\t" /* .. | p3 .. p0 | */
" movq 8(%0), %%xmm3 \n\t" /* .. | p7 .. p4 | */
VOLUME_32x16 (%%xmm1, %%xmm0)
VOLUME_32x16 (%%xmm3, %%xmm2)
" movq %%xmm0, (%0) \n\t" /* .. | p3*v3 .. p0*v0 | */
" movq %%xmm2, 8(%0) \n\t" /* .. | p7*v7 .. p4*v4 | */
" add $16, %0 \n\t"
MOD_ADD ($8, %5)
" dec %2 \n\t"
" jne 7b \n\t"
"8: \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
: "r" ((pa_reg_x86)channels)
: "cc"
);
}
static void
pa_volume_s16re_sse (int16_t *samples, int32_t *volumes, unsigned channels, unsigned length)
{
pa_reg_x86 channel, temp;
/* the max number of samples we process at a time, this is also the max amount
* we overread the volume array, which should have enough padding. */
channels = PA_MAX (8U, channels);
__asm__ __volatile__ (
" xor %3, %3 \n\t"
" sar $1, %2 \n\t" /* length /= sizeof (int16_t) */
" test $1, %2 \n\t" /* check for odd samples */
" je 2f \n\t"
" movd (%1, %3, 4), %%xmm0 \n\t" /* | v0h | v0l | */
" movw (%0), %w4 \n\t" /* .. | p0 | */
" rorw $8, %w4 \n\t"
" movd %4, %%xmm1 \n\t"
VOLUME_32x16 (%%xmm1, %%xmm0)
" movd %%xmm0, %4 \n\t" /* .. | p0*v0 | */
" rorw $8, %w4 \n\t"
" movw %w4, (%0) \n\t"
" add $2, %0 \n\t"
MOD_ADD ($1, %5)
"2: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 2 samples at a time */
" test $1, %2 \n\t"
" je 4f \n\t"
"3: \n\t" /* do samples in groups of 2 */
" movq (%1, %3, 4), %%xmm0 \n\t" /* | v1h | v1l | v0h | v0l | */
" movd (%0), %%xmm1 \n\t" /* .. | p1 | p0 | */
SWAP_16 (%%xmm1)
VOLUME_32x16 (%%xmm1, %%xmm0)
SWAP_16 (%%xmm0)
" movd %%xmm0, (%0) \n\t" /* .. | p1*v1 | p0*v0 | */
" add $4, %0 \n\t"
MOD_ADD ($2, %5)
"4: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 4 samples at a time */
" test $1, %2 \n\t"
" je 6f \n\t"
/* FIXME, we can do aligned access of the volume values if we can guarantee
* that the array is 16 bytes aligned, we probably have to do the odd values
* after this then. */
"5: \n\t" /* do samples in groups of 4 */
" movdqu (%1, %3, 4), %%xmm0 \n\t" /* | v3h | v3l .. v0h | v0l | */
" movq (%0), %%xmm1 \n\t" /* .. | p3 .. p0 | */
SWAP_16 (%%xmm1)
VOLUME_32x16 (%%xmm1, %%xmm0)
SWAP_16 (%%xmm0)
" movq %%xmm0, (%0) \n\t" /* .. | p3*v3 .. p0*v0 | */
" add $8, %0 \n\t"
MOD_ADD ($4, %5)
"6: \n\t"
" sar $1, %2 \n\t" /* prepare for processing 8 samples at a time */
" cmp $0, %2 \n\t"
" je 8f \n\t"
"7: \n\t" /* do samples in groups of 8 */
" movdqu (%1, %3, 4), %%xmm0 \n\t" /* | v3h | v3l .. v0h | v0l | */
" movdqu 16(%1, %3, 4), %%xmm2 \n\t" /* | v7h | v7l .. v4h | v4l | */
" movq (%0), %%xmm1 \n\t" /* .. | p3 .. p0 | */
" movq 8(%0), %%xmm3 \n\t" /* .. | p7 .. p4 | */
SWAP_16_2 (%%xmm1, %%xmm3)
VOLUME_32x16 (%%xmm1, %%xmm0)
VOLUME_32x16 (%%xmm3, %%xmm2)
SWAP_16_2 (%%xmm0, %%xmm2)
" movq %%xmm0, (%0) \n\t" /* .. | p3*v3 .. p0*v0 | */
" movq %%xmm2, 8(%0) \n\t" /* .. | p7*v7 .. p4*v4 | */
" add $16, %0 \n\t"
MOD_ADD ($8, %5)
" dec %2 \n\t"
" jne 7b \n\t"
"8: \n\t"
: "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
: "r" ((pa_reg_x86)channels)
: "cc"
);
}
#undef RUN_TEST
#ifdef RUN_TEST
#define CHANNELS 2
#define SAMPLES 1021
#define TIMES 1000
#define PADDING 16
static void run_test (void) {
int16_t samples[SAMPLES];
int16_t samples_ref[SAMPLES];
int16_t samples_orig[SAMPLES];
int32_t volumes[CHANNELS + PADDING];
int i, j, padding;
pa_do_volume_func_t func;
pa_usec_t start, stop;
func = pa_get_volume_func (PA_SAMPLE_S16NE);
printf ("checking SSE %zd\n", sizeof (samples));
pa_random (samples, sizeof (samples));
memcpy (samples_ref, samples, sizeof (samples));
memcpy (samples_orig, samples, sizeof (samples));
for (i = 0; i < CHANNELS; i++)
volumes[i] = rand() >> 1;
for (padding = 0; padding < PADDING; padding++, i++)
volumes[i] = volumes[padding];
func (samples_ref, volumes, CHANNELS, sizeof (samples));
pa_volume_s16ne_sse (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],
samples_orig[i], volumes[i % CHANNELS]);
}
}
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));
}
stop = pa_rtclock_now();
pa_log_info("SSE: %llu usec.", (long long unsigned int)(stop - start));
start = pa_rtclock_now();
for (j = 0; j < TIMES; j++) {
memcpy (samples_ref, samples_orig, sizeof (samples));
func (samples_ref, volumes, CHANNELS, sizeof (samples));
}
stop = pa_rtclock_now();
pa_log_info("ref: %llu usec.", (long long unsigned int)(stop - start));
}
#endif
#endif /* defined (__i386__) || defined (__amd64__) */
void pa_volume_func_init_sse (pa_cpu_x86_flag_t flags) {
#if defined (__i386__) || defined (__amd64__)
pa_log_info("Initialising SSE optimized functions.");
#ifdef RUN_TEST
run_test ();
#endif
pa_set_volume_func (PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_sse);
pa_set_volume_func (PA_SAMPLE_S16RE, (pa_do_volume_func_t) pa_volume_s16re_sse);
#endif /* defined (__i386__) || defined (__amd64__) */
}

372
src/pulsecore/usergroup.c Normal file
View file

@ -0,0 +1,372 @@
/***
This file is part of PulseAudio.
Copyright 2009 Ted Percival
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with PulseAudio; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <sys/types.h>
#include <errno.h>
#ifdef HAVE_PWD_H
#include <pwd.h>
#endif
#ifdef HAVE_GRP_H
#include <grp.h>
#endif
#include <pulse/xmalloc.h>
#include <pulsecore/macro.h>
#include "usergroup.h"
#ifdef HAVE_GRP_H
/* Returns a suitable starting size for a getgrnam_r() or getgrgid_r() buffer,
plus the size of a struct group.
*/
static size_t starting_getgr_buflen(void) {
size_t full_size;
long n;
#ifdef _SC_GETGR_R_SIZE_MAX
n = sysconf(_SC_GETGR_R_SIZE_MAX);
#else
n = -1;
#endif
if (n <= 0)
n = 512;
full_size = (size_t) n + sizeof(struct group);
if (full_size < (size_t) n) /* check for integer overflow */
return (size_t) n;
return full_size;
}
/* Returns a suitable starting size for a getpwnam_r() or getpwuid_r() buffer,
plus the size of a struct passwd.
*/
static size_t starting_getpw_buflen(void) {
long n;
size_t full_size;
#ifdef _SC_GETPW_R_SIZE_MAX
n = sysconf(_SC_GETPW_R_SIZE_MAX);
#else
n = -1;
#endif
if (n <= 0)
n = 512;
full_size = (size_t) n + sizeof(struct passwd);
if (full_size < (size_t) n) /* check for integer overflow */
return (size_t) n;
return full_size;
}
/* Given a memory allocation (*bufptr) and its length (*buflenptr),
double the size of the allocation, updating the given buffer and length
arguments. This function should be used in conjunction with the pa_*alloc
and pa_xfree functions.
Unlike realloc(), this function does *not* retain the original buffer's
contents.
Returns 0 on success, nonzero on error. The error cause is indicated by
errno.
*/
static int expand_buffer_trashcontents(void **bufptr, size_t *buflenptr) {
size_t newlen;
if (!bufptr || !*bufptr || !buflenptr) {
errno = EINVAL;
return -1;
}
newlen = *buflenptr * 2;
if (newlen < *buflenptr) {
errno = EOVERFLOW;
return -1;
}
/* Don't bother retaining memory contents; free & alloc anew */
pa_xfree(*bufptr);
*bufptr = pa_xmalloc(newlen);
*buflenptr = newlen;
return 0;
}
#ifdef HAVE_GETGRGID_R
/* Thread-safe getgrgid() replacement.
Returned value should be freed using pa_getgrgid_free() when the caller is
finished with the returned group data.
API is the same as getgrgid(), errors are indicated by a NULL return;
consult errno for the error cause (zero it before calling).
*/
struct group *pa_getgrgid_malloc(gid_t gid) {
size_t buflen, getgr_buflen;
int err;
void *buf;
void *getgr_buf;
struct group *result = NULL;
buflen = starting_getgr_buflen();
buf = pa_xmalloc(buflen);
getgr_buflen = buflen - sizeof(struct group);
getgr_buf = (char *)buf + sizeof(struct group);
while ((err = getgrgid_r(gid, (struct group *)buf, getgr_buf,
getgr_buflen, &result)) == ERANGE)
{
if (expand_buffer_trashcontents(&buf, &buflen))
break;
getgr_buflen = buflen - sizeof(struct group);
getgr_buf = (char *)buf + sizeof(struct group);
}
if (err || !result) {
result = NULL;
if (buf) {
pa_xfree(buf);
buf = NULL;
}
}
pa_assert(result == buf || result == NULL);
return result;
}
void pa_getgrgid_free(struct group *grp) {
pa_xfree(grp);
}
#else /* !HAVE_GETGRGID_R */
struct group *pa_getgrgid_malloc(gid_t gid) {
return getgrgid(gid);
}
void pa_getgrgid_free(struct group *grp) {
/* nothing */
return;
}
#endif /* !HAVE_GETGRGID_R */
#ifdef HAVE_GETGRNAM_R
/* Thread-safe getgrnam() function.
Returned value should be freed using pa_getgrnam_free() when the caller is
finished with the returned group data.
API is the same as getgrnam(), errors are indicated by a NULL return;
consult errno for the error cause (zero it before calling).
*/
struct group *pa_getgrnam_malloc(const char *name) {
size_t buflen, getgr_buflen;
int err;
void *buf;
void *getgr_buf;
struct group *result = NULL;
buflen = starting_getgr_buflen();
buf = pa_xmalloc(buflen);
getgr_buflen = buflen - sizeof(struct group);
getgr_buf = (char *)buf + sizeof(struct group);
while ((err = getgrnam_r(name, (struct group *)buf, getgr_buf,
getgr_buflen, &result)) == ERANGE)
{
if (expand_buffer_trashcontents(&buf, &buflen))
break;
getgr_buflen = buflen - sizeof(struct group);
getgr_buf = (char *)buf + sizeof(struct group);
}
if (err || !result) {
result = NULL;
if (buf) {
pa_xfree(buf);
buf = NULL;
}
}
pa_assert(result == buf || result == NULL);
return result;
}
void pa_getgrnam_free(struct group *group) {
pa_xfree(group);
}
#else /* !HAVE_GETGRNAM_R */
struct group *pa_getgrnam_malloc(const char *name) {
return getgrnam(name);
}
void pa_getgrnam_free(struct group *group) {
/* nothing */
return;
}
#endif /* HAVE_GETGRNAM_R */
#endif /* HAVE_GRP_H */
#ifdef HAVE_PWD_H
#ifdef HAVE_GETPWNAM_R
/* Thread-safe getpwnam() function.
Returned value should be freed using pa_getpwnam_free() when the caller is
finished with the returned passwd data.
API is the same as getpwnam(), errors are indicated by a NULL return;
consult errno for the error cause (zero it before calling).
*/
struct passwd *pa_getpwnam_malloc(const char *name) {
size_t buflen, getpw_buflen;
int err;
void *buf;
void *getpw_buf;
struct passwd *result = NULL;
buflen = starting_getpw_buflen();
buf = pa_xmalloc(buflen);
getpw_buflen = buflen - sizeof(struct passwd);
getpw_buf = (char *)buf + sizeof(struct passwd);
while ((err = getpwnam_r(name, (struct passwd *)buf, getpw_buf,
getpw_buflen, &result)) == ERANGE)
{
if (expand_buffer_trashcontents(&buf, &buflen))
break;
getpw_buflen = buflen - sizeof(struct passwd);
getpw_buf = (char *)buf + sizeof(struct passwd);
}
if (err || !result) {
result = NULL;
if (buf) {
pa_xfree(buf);
buf = NULL;
}
}
pa_assert(result == buf || result == NULL);
return result;
}
void pa_getpwnam_free(struct passwd *passwd) {
pa_xfree(passwd);
}
#else /* !HAVE_GETPWNAM_R */
struct passwd *pa_getpwnam_malloc(const char *name) {
return getpwnam(name);
}
void pa_getpwnam_free(struct passwd *passwd) {
/* nothing */
return;
}
#endif /* !HAVE_GETPWNAM_R */
#ifdef HAVE_GETPWUID_R
/* Thread-safe getpwuid() function.
Returned value should be freed using pa_getpwuid_free() when the caller is
finished with the returned group data.
API is the same as getpwuid(), errors are indicated by a NULL return;
consult errno for the error cause (zero it before calling).
*/
struct passwd *pa_getpwuid_malloc(uid_t uid) {
size_t buflen, getpw_buflen;
int err;
void *buf;
void *getpw_buf;
struct passwd *result = NULL;
buflen = starting_getpw_buflen();
buf = pa_xmalloc(buflen);
getpw_buflen = buflen - sizeof(struct passwd);
getpw_buf = (char *)buf + sizeof(struct passwd);
while ((err = getpwuid_r(uid, (struct passwd *)buf, getpw_buf,
getpw_buflen, &result)) == ERANGE)
{
if (expand_buffer_trashcontents(&buf, &buflen))
break;
getpw_buflen = buflen - sizeof(struct passwd);
getpw_buf = (char *)buf + sizeof(struct passwd);
}
if (err || !result) {
result = NULL;
if (buf) {
pa_xfree(buf);
buf = NULL;
}
}
pa_assert(result == buf || result == NULL);
return result;
}
void pa_getpwuid_free(struct passwd *passwd) {
pa_xfree(passwd);
}
#else /* !HAVE_GETPWUID_R */
struct passwd *pa_getpwuid_malloc(uid_t uid) {
return getpwuid(uid);
}
void pa_getpwuid_free(struct passwd *passwd) {
/* nothing */
return;
}
#endif /* !HAVE_GETPWUID_R */
#endif /* HAVE_PWD_H */

51
src/pulsecore/usergroup.h Normal file
View file

@ -0,0 +1,51 @@
#ifndef foousergrouphfoo
#define foousergrouphfoo
/***
This file is part of PulseAudio.
Copyright 2009 Ted Percival
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with PulseAudio; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
***/
#include <sys/types.h>
#ifndef PACKAGE
#error "Please include config.h before including this file!"
#endif
#ifdef HAVE_GRP_H
struct group *pa_getgrgid_malloc(gid_t gid);
void pa_getgrgid_free(struct group *grp);
struct group *pa_getgrnam_malloc(const char *name);
void pa_getgrnam_free(struct group *group);
#endif /* HAVE_GRP_H */
#ifdef HAVE_PWD_H
struct passwd *pa_getpwuid_malloc(uid_t uid);
void pa_getpwuid_free(struct passwd *passwd);
struct passwd *pa_getpwnam_malloc(const char *name);
void pa_getpwnam_free(struct passwd *passwd);
#endif /* HAVE_PWD_H */
#endif /* foousergrouphfoo */

View file

@ -34,8 +34,6 @@
#include <pulsecore/memblock.h>
#include <pulsecore/sample-util.h>
#include <liboil/liboil.h>
const pa_envelope_def ramp_down = {
.n_points = 2,
.points_x = { 100*PA_USEC_PER_MSEC, 300*PA_USEC_PER_MSEC },
@ -202,7 +200,6 @@ int main(int argc, char *argv[]) {
.values = { PA_VOLUME_NORM, PA_VOLUME_NORM/2 }
};
oil_init();
pa_log_set_level(PA_LOG_DEBUG);
pa_assert_se(pool = pa_mempool_new(FALSE, 0));

View file

@ -32,8 +32,6 @@
#include <pulsecore/memblock.h>
#include <pulsecore/sample-util.h>
#include <liboil/liboil.h>
static float swap_float(float a) {
uint32_t *b = (uint32_t*) &a;
*b = PA_UINT32_SWAP(*b);
@ -211,7 +209,6 @@ int main(int argc, char *argv[]) {
pa_sample_spec a;
pa_cvolume v;
oil_init();
pa_log_set_level(PA_LOG_DEBUG);
pa_assert_se(pool = pa_mempool_new(FALSE, 0));

View file

@ -32,8 +32,6 @@
#include <pulsecore/memblock.h>
#include <pulsecore/sample-util.h>
#include <liboil/liboil.h>
int main(int argc, char *argv[]) {
static const pa_channel_map maps[] = {
@ -55,7 +53,6 @@ int main(int argc, char *argv[]) {
unsigned i, j;
pa_mempool *pool;
oil_init();
pa_log_set_level(PA_LOG_DEBUG);
pa_assert_se(pool = pa_mempool_new(FALSE, 0));

View file

@ -32,8 +32,6 @@
#include <pulsecore/memblock.h>
#include <pulsecore/sample-util.h>
#include <liboil/liboil.h>
static void dump_block(const pa_sample_spec *ss, const pa_memchunk *chunk) {
void *d;
unsigned i;
@ -248,7 +246,6 @@ int main(int argc, char *argv[]) {
pa_sample_spec a, b;
pa_cvolume v;
oil_init();
pa_log_set_level(PA_LOG_DEBUG);
pa_assert_se(pool = pa_mempool_new(FALSE, 0));

161
src/tests/usergroup-test.c Normal file
View file

@ -0,0 +1,161 @@
/***
This file is part of PulseAudio.
Copyright 2009 Ted Percival
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with PulseAudio; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
***/
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>
#include <grp.h>
#include <errno.h>
#include <pulsecore/usergroup.h>
static int load_reference_structs(struct group **gr, struct passwd **pw) {
setpwent();
*pw = getpwent();
endpwent();
setgrent();
*gr = getgrent();
endgrent();
return (*gr && *pw) ? 0 : 1;
}
static int compare_group(const struct group *a, const struct group *b) {
char **amem, **bmem;
if (strcmp(a->gr_name, b->gr_name)) {
fprintf(stderr, "Group name mismatch: [%s] [%s]\n",
a->gr_name, b->gr_name);
return 1;
}
if (strcmp(a->gr_passwd, b->gr_passwd)) {
fprintf(stderr, "Group password mismatch: [%s] [%s]\n",
a->gr_passwd, b->gr_passwd);
return 1;
}
if (a->gr_gid != b->gr_gid) {
fprintf(stderr, "Gid mismatch: [%lu] [%lu]\n",
(unsigned long) a->gr_gid, (unsigned long) b->gr_gid);
return 1;
}
/* XXX: Assuming the group ordering is identical. */
for (amem = a->gr_mem, bmem = b->gr_mem; *amem && *bmem; ++amem, ++bmem) {
if (strcmp(*amem, *bmem)) {
fprintf(stderr, "Group member mismatch: [%s] [%s]\n",
*amem, *bmem);
return 1;
}
}
if (*amem || *bmem) {
fprintf(stderr, "Mismatched group count\n");
return 1;
}
return 0;
}
static int compare_passwd(const struct passwd *a, const struct passwd *b) {
if (strcmp(a->pw_name, b->pw_name)) {
fprintf(stderr, "pw_name mismatch: [%s] [%s]\n", a->pw_name, b->pw_name);
return 1;
}
if (strcmp(a->pw_passwd, b->pw_passwd)) {
fprintf(stderr, "pw_passwd mismatch: [%s] [%s]\n", a->pw_passwd, b->pw_passwd);
return 1;
}
if (a->pw_uid != b->pw_uid) {
fprintf(stderr, "pw_uid mismatch: [%lu] [%lu]\n",
(unsigned long) a->pw_uid, (unsigned long) b->pw_uid);
return 1;
}
if (a->pw_gid != b->pw_gid) {
fprintf(stderr, "pw_gid mismatch: [%lu] [%lu]\n",
(unsigned long) a->pw_gid, (unsigned long) b->pw_gid);
return 1;
}
if (strcmp(a->pw_gecos, b->pw_gecos)) {
fprintf(stderr, "pw_gecos mismatch: [%s] [%s]\n", a->pw_gecos, b->pw_gecos);
return 1;
}
if (strcmp(a->pw_dir, b->pw_dir)) {
fprintf(stderr, "pw_dir mismatch: [%s] [%s]\n", a->pw_dir, b->pw_dir);
return 1;
}
if (strcmp(a->pw_shell, b->pw_shell)) {
fprintf(stderr, "pw_shell mismatch: [%s] [%s]\n", a->pw_shell, b->pw_shell);
return 1;
}
return 0;
}
int main(int argc, char *argv[]) {
struct group *gr;
struct passwd *pw;
int err;
struct group *reference_group = NULL;
struct passwd *reference_passwd = NULL;
err = load_reference_structs(&reference_group, &reference_passwd);
if (err)
return 77;
errno = 0;
gr = pa_getgrgid_malloc(reference_group->gr_gid);
if (compare_group(reference_group, gr))
return 1;
pa_getgrgid_free(gr);
errno = 0;
gr = pa_getgrnam_malloc(reference_group->gr_name);
if (compare_group(reference_group, gr))
return 1;
pa_getgrnam_free(gr);
errno = 0;
pw = pa_getpwuid_malloc(reference_passwd->pw_uid);
if (compare_passwd(reference_passwd, pw))
return 1;
pa_getpwuid_free(pw);
errno = 0;
pw = pa_getpwnam_malloc(reference_passwd->pw_name);
if (compare_passwd(reference_passwd, pw))
return 1;
pa_getpwnam_free(pw);
return 0;
}