po/sk.po | 413 +++++++++++------------- src/modules/bluetooth/module-bluetooth-policy.c | 209 ++++++++++++ 2 files changed, 401 insertions(+), 221 deletions(-)
New commits: commit e4fa17ddffaadc7a9ad5c4625ba57486c26c8767 Author: DuÅ¡an Kazik Kazik <[email protected]> Date: Thu Jul 28 12:20:40 2016 +0530 i18n: Update Polish translation diff --git a/po/sk.po b/po/sk.po index 68756aa..730c234 100644 --- a/po/sk.po +++ b/po/sk.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PulseAudio master\n" "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?" "product=PulseAudio&keywords=I18N+L10N&component=misc\n" -"POT-Creation-Date: 2015-09-12 15:47+0000\n" -"PO-Revision-Date: 2015-09-22 20:59+0200\n" +"POT-Creation-Date: 2016-06-22 13:54+0000\n" +"PO-Revision-Date: 2016-07-06 17:20+0200\n" "Last-Translator: DuÅ¡an Kazik <[email protected]>\n" "Language-Team: Slovak <[email protected]>\n" "Language: sk\n" @@ -17,9 +17,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" -"X-Generator: Poedit 1.8.4\n" +"X-Generator: Poedit 1.8.7.1\n" -#: ../src/daemon/cmdline.c:111 +#: ../src/daemon/cmdline.c:113 #, c-format msgid "" "%s [options]\n" @@ -78,6 +78,7 @@ msgid "" " --no-cpu-limit[=BOOL] Do not install CPU load limiter on\n" " platforms that support it.\n" " --disable-shm[=BOOL] Disable shared memory support.\n" +" --enable-memfd[=BOOL] Enable memfd shared memory support.\n" "\n" "STARTUP SCRIPT:\n" " -L, --load=\"MODULE ARGUMENTS\" Load the specified plugin module " @@ -91,143 +92,147 @@ msgid "" " -n Don't load default script file\n" msgstr "" -#: ../src/daemon/cmdline.c:243 +#: ../src/daemon/cmdline.c:246 msgid "--daemonize expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:251 +#: ../src/daemon/cmdline.c:254 msgid "--fail expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:262 +#: ../src/daemon/cmdline.c:265 msgid "" "--log-level expects log level argument (either numeric in range 0..4 or one " "of debug, info, notice, warn, error)." msgstr "" -#: ../src/daemon/cmdline.c:274 +#: ../src/daemon/cmdline.c:277 msgid "--high-priority expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:282 +#: ../src/daemon/cmdline.c:285 msgid "--realtime expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:290 +#: ../src/daemon/cmdline.c:293 msgid "--disallow-module-loading expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:298 +#: ../src/daemon/cmdline.c:301 msgid "--disallow-exit expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:306 +#: ../src/daemon/cmdline.c:309 msgid "--use-pid-file expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:325 +#: ../src/daemon/cmdline.c:328 msgid "" "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a " "valid file name 'file:<path>', 'newfile:<path>'." msgstr "" -#: ../src/daemon/cmdline.c:327 +#: ../src/daemon/cmdline.c:330 msgid "" "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file " "name 'file:<path>', 'newfile:<path>'." msgstr "" -#: ../src/daemon/cmdline.c:335 +#: ../src/daemon/cmdline.c:338 msgid "--log-time expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:343 +#: ../src/daemon/cmdline.c:346 msgid "--log-meta expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:363 +#: ../src/daemon/cmdline.c:366 #, c-format msgid "Invalid resample method '%s'." msgstr "Neplatná metóda prevzorkovania â%sâ." -#: ../src/daemon/cmdline.c:370 +#: ../src/daemon/cmdline.c:373 msgid "--system expects boolean argument" msgstr "Voľba --system oÄakáva booleovský parameter" -#: ../src/daemon/cmdline.c:378 +#: ../src/daemon/cmdline.c:381 msgid "--no-cpu-limit expects boolean argument" msgstr "" -#: ../src/daemon/cmdline.c:386 +#: ../src/daemon/cmdline.c:389 msgid "--disable-shm expects boolean argument" msgstr "" -#: ../src/daemon/daemon-conf.c:259 +#: ../src/daemon/cmdline.c:397 +msgid "--enable-memfd expects boolean argument" +msgstr "Voľba --enable-memfd oÄakáva booleovský parameter" + +#: ../src/daemon/daemon-conf.c:260 #, c-format msgid "[%s:%u] Invalid log target '%s'." -msgstr "" +msgstr "[%s:%u] Neplatný cieľ záznamu â%sâ." -#: ../src/daemon/daemon-conf.c:274 +#: ../src/daemon/daemon-conf.c:275 #, c-format msgid "[%s:%u] Invalid log level '%s'." -msgstr "" +msgstr "[%s:%u] Neplatná úroveÅ záznamu â%sâ." -#: ../src/daemon/daemon-conf.c:289 +#: ../src/daemon/daemon-conf.c:290 #, c-format msgid "[%s:%u] Invalid resample method '%s'." -msgstr "" +msgstr "[%s:%u] Neplatný spôsob prevzorkovania â%sâ." -#: ../src/daemon/daemon-conf.c:311 +#: ../src/daemon/daemon-conf.c:312 #, c-format msgid "[%s:%u] Invalid rlimit '%s'." -msgstr "" +msgstr "[%s:%u] Neplatný rlimit â%sâ." -#: ../src/daemon/daemon-conf.c:331 +#: ../src/daemon/daemon-conf.c:332 #, c-format msgid "[%s:%u] Invalid sample format '%s'." -msgstr "" +msgstr "[%s:%u] Neplatný formát vzoriek â%sâ." -#: ../src/daemon/daemon-conf.c:348 ../src/daemon/daemon-conf.c:365 +#: ../src/daemon/daemon-conf.c:349 ../src/daemon/daemon-conf.c:366 #, c-format msgid "[%s:%u] Invalid sample rate '%s'." -msgstr "" +msgstr "[%s:%u] Neplatná frekvencia vzoriek â%sâ." -#: ../src/daemon/daemon-conf.c:388 +#: ../src/daemon/daemon-conf.c:389 #, c-format msgid "[%s:%u] Invalid sample channels '%s'." msgstr "" -#: ../src/daemon/daemon-conf.c:405 +#: ../src/daemon/daemon-conf.c:406 #, c-format msgid "[%s:%u] Invalid channel map '%s'." -msgstr "" +msgstr "[%s:%u] Neplatná mapa kanálov â%sâ." -#: ../src/daemon/daemon-conf.c:422 +#: ../src/daemon/daemon-conf.c:423 #, c-format msgid "[%s:%u] Invalid number of fragments '%s'." -msgstr "" +msgstr "[%s:%u] Neplatný poÄet fragmentov â%sâ." -#: ../src/daemon/daemon-conf.c:439 +#: ../src/daemon/daemon-conf.c:440 #, c-format msgid "[%s:%u] Invalid fragment size '%s'." -msgstr "" +msgstr "[%s:%u] Neplatná veľkosÅ¥ fragmentu â%sâ." -#: ../src/daemon/daemon-conf.c:456 +#: ../src/daemon/daemon-conf.c:457 #, c-format msgid "[%s:%u] Invalid nice level '%s'." -msgstr "" +msgstr "[%s:%u] Neplatná úroveÅ nice â%sâ." -#: ../src/daemon/daemon-conf.c:499 +#: ../src/daemon/daemon-conf.c:500 #, c-format msgid "[%s:%u] Invalid server type '%s'." -msgstr "" +msgstr "[%s:%u] Neplatný typ servera â%sâ." -#: ../src/daemon/daemon-conf.c:613 +#: ../src/daemon/daemon-conf.c:615 #, c-format msgid "Failed to open configuration file: %s" msgstr "Zlyhalo otvorenie konfiguraÄného súboru: %s" -#: ../src/daemon/daemon-conf.c:629 +#: ../src/daemon/daemon-conf.c:631 msgid "" "The specified default channel map has a different number of channels than " "the specified default number of channels." @@ -235,7 +240,7 @@ msgstr "" "UrÄená predvolená mapa kanálov obsahuje odliÅ¡ný poÄet kanálov ako je urÄený " "predvolený poÄet kanálov." -#: ../src/daemon/daemon-conf.c:716 +#: ../src/daemon/daemon-conf.c:718 #, c-format msgid "### Read from configuration file: %s ###\n" msgstr "### ÄÃtaÅ¥ z konfiguraÄného súboru: %s ###\n" @@ -359,7 +364,7 @@ msgstr "" #: ../src/daemon/main.c:622 #, c-format msgid "Failed to kill daemon: %s" -msgstr "Zlyhalo zabitie služby: %s" +msgstr "Zlyhalo zabitie démona: %s" #: ../src/daemon/main.c:651 msgid "" @@ -423,7 +428,7 @@ msgstr "" #: ../src/daemon/main.c:788 msgid "Daemon startup failed." -msgstr "Zlyhalo spustenie služby." +msgstr "Zlyhalo spustenie démona." #: ../src/daemon/main.c:821 #, c-format @@ -449,15 +454,15 @@ msgstr "" msgid "pa_pid_file_create() failed." msgstr "" -#: ../src/daemon/main.c:1021 +#: ../src/daemon/main.c:1023 msgid "pa_core_new() failed." msgstr "" -#: ../src/daemon/main.c:1089 +#: ../src/daemon/main.c:1091 msgid "Failed to initialize daemon." -msgstr "Zlyhala inicializácia služby." +msgstr "Zlyhala inicializácia démona." -#: ../src/daemon/main.c:1094 +#: ../src/daemon/main.c:1096 msgid "Daemon startup without any loaded modules, refusing to work." msgstr "" @@ -469,155 +474,155 @@ msgstr "Zvukový systém PulseAudio" msgid "Start the PulseAudio Sound System" msgstr "Spustenie zvukového systému PulseAudio" -#: ../src/modules/alsa/alsa-mixer.c:2394 +#: ../src/modules/alsa/alsa-mixer.c:2378 msgid "Input" msgstr "Vstup" -#: ../src/modules/alsa/alsa-mixer.c:2395 +#: ../src/modules/alsa/alsa-mixer.c:2379 msgid "Docking Station Input" msgstr "Vstup dokovacej stanice" -#: ../src/modules/alsa/alsa-mixer.c:2396 +#: ../src/modules/alsa/alsa-mixer.c:2380 msgid "Docking Station Microphone" msgstr "Mikrofón dokovacej stanice" -#: ../src/modules/alsa/alsa-mixer.c:2397 +#: ../src/modules/alsa/alsa-mixer.c:2381 msgid "Docking Station Line In" msgstr "Vstupná linka dokovacej stanice" -#: ../src/modules/alsa/alsa-mixer.c:2398 ../src/modules/alsa/alsa-mixer.c:2483 +#: ../src/modules/alsa/alsa-mixer.c:2382 ../src/modules/alsa/alsa-mixer.c:2467 msgid "Line In" msgstr "Vstupná linka" -#: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2477 -#: ../src/modules/bluetooth/module-bluez4-device.c:2102 +#: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461 +#: ../src/modules/bluetooth/module-bluez4-device.c:2099 #: ../src/modules/bluetooth/module-bluez5-device.c:1710 msgid "Microphone" msgstr "Mikrofón" -#: ../src/modules/alsa/alsa-mixer.c:2400 ../src/modules/alsa/alsa-mixer.c:2478 +#: ../src/modules/alsa/alsa-mixer.c:2384 ../src/modules/alsa/alsa-mixer.c:2462 msgid "Front Microphone" msgstr "Predný mikrofón" -#: ../src/modules/alsa/alsa-mixer.c:2401 ../src/modules/alsa/alsa-mixer.c:2479 +#: ../src/modules/alsa/alsa-mixer.c:2385 ../src/modules/alsa/alsa-mixer.c:2463 msgid "Rear Microphone" msgstr "Zadný mikrofón" -#: ../src/modules/alsa/alsa-mixer.c:2402 +#: ../src/modules/alsa/alsa-mixer.c:2386 msgid "External Microphone" msgstr "Externý mikrofón" -#: ../src/modules/alsa/alsa-mixer.c:2403 ../src/modules/alsa/alsa-mixer.c:2481 +#: ../src/modules/alsa/alsa-mixer.c:2387 ../src/modules/alsa/alsa-mixer.c:2465 msgid "Internal Microphone" msgstr "Vstavaný mikrofón" -#: ../src/modules/alsa/alsa-mixer.c:2404 ../src/modules/alsa/alsa-mixer.c:2484 +#: ../src/modules/alsa/alsa-mixer.c:2388 ../src/modules/alsa/alsa-mixer.c:2468 msgid "Radio" msgstr "Rádio" -#: ../src/modules/alsa/alsa-mixer.c:2405 ../src/modules/alsa/alsa-mixer.c:2485 +#: ../src/modules/alsa/alsa-mixer.c:2389 ../src/modules/alsa/alsa-mixer.c:2469 msgid "Video" msgstr "Video" -#: ../src/modules/alsa/alsa-mixer.c:2406 +#: ../src/modules/alsa/alsa-mixer.c:2390 msgid "Automatic Gain Control" msgstr "Automatické ovládanie zosilnenia" -#: ../src/modules/alsa/alsa-mixer.c:2407 +#: ../src/modules/alsa/alsa-mixer.c:2391 msgid "No Automatic Gain Control" msgstr "Bez automatického ovládania zosilnenia" -#: ../src/modules/alsa/alsa-mixer.c:2408 +#: ../src/modules/alsa/alsa-mixer.c:2392 msgid "Boost" msgstr "Zosilnenie" -#: ../src/modules/alsa/alsa-mixer.c:2409 +#: ../src/modules/alsa/alsa-mixer.c:2393 msgid "No Boost" msgstr "Bez zosilnenia" -#: ../src/modules/alsa/alsa-mixer.c:2410 +#: ../src/modules/alsa/alsa-mixer.c:2394 msgid "Amplifier" msgstr "ZosilÅovaÄ" -#: ../src/modules/alsa/alsa-mixer.c:2411 +#: ../src/modules/alsa/alsa-mixer.c:2395 msgid "No Amplifier" msgstr "Bez zosilÅovaÄa" -#: ../src/modules/alsa/alsa-mixer.c:2412 +#: ../src/modules/alsa/alsa-mixer.c:2396 msgid "Bass Boost" msgstr "Zosilnenie basov" -#: ../src/modules/alsa/alsa-mixer.c:2413 +#: ../src/modules/alsa/alsa-mixer.c:2397 msgid "No Bass Boost" msgstr "Bez zosilnenia basov" -#: ../src/modules/alsa/alsa-mixer.c:2414 -#: ../src/modules/bluetooth/module-bluez4-device.c:2107 +#: ../src/modules/alsa/alsa-mixer.c:2398 +#: ../src/modules/bluetooth/module-bluez4-device.c:2104 #: ../src/modules/bluetooth/module-bluez5-device.c:1717 msgid "Speaker" msgstr "Reproduktor" -#: ../src/modules/alsa/alsa-mixer.c:2415 ../src/modules/alsa/alsa-mixer.c:2487 +#: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2471 msgid "Headphones" msgstr "Slúchadlá" -#: ../src/modules/alsa/alsa-mixer.c:2476 +#: ../src/modules/alsa/alsa-mixer.c:2460 msgid "Analog Input" msgstr "Analógový vstup" -#: ../src/modules/alsa/alsa-mixer.c:2480 +#: ../src/modules/alsa/alsa-mixer.c:2464 msgid "Dock Microphone" msgstr "Mikrofón doku" -#: ../src/modules/alsa/alsa-mixer.c:2482 +#: ../src/modules/alsa/alsa-mixer.c:2466 msgid "Headset Microphone" msgstr "Mikrofón headsetu" -#: ../src/modules/alsa/alsa-mixer.c:2486 +#: ../src/modules/alsa/alsa-mixer.c:2470 msgid "Analog Output" msgstr "Analógový výstup" -#: ../src/modules/alsa/alsa-mixer.c:2488 +#: ../src/modules/alsa/alsa-mixer.c:2472 msgid "LFE on Separate Mono Output" msgstr "Kanál LFE na oddelenom mono výstupe" -#: ../src/modules/alsa/alsa-mixer.c:2489 +#: ../src/modules/alsa/alsa-mixer.c:2473 msgid "Line Out" msgstr "Výstupná linka" -#: ../src/modules/alsa/alsa-mixer.c:2490 +#: ../src/modules/alsa/alsa-mixer.c:2474 msgid "Analog Mono Output" msgstr "Analógový mono výstup" -#: ../src/modules/alsa/alsa-mixer.c:2491 +#: ../src/modules/alsa/alsa-mixer.c:2475 msgid "Speakers" msgstr "Reproduktory" -#: ../src/modules/alsa/alsa-mixer.c:2492 +#: ../src/modules/alsa/alsa-mixer.c:2476 msgid "HDMI / DisplayPort" msgstr "HDMI / DisplayPort" -#: ../src/modules/alsa/alsa-mixer.c:2493 +#: ../src/modules/alsa/alsa-mixer.c:2477 msgid "Digital Output (S/PDIF)" msgstr "Digitálny výstup (S/PDIF)" -#: ../src/modules/alsa/alsa-mixer.c:2494 +#: ../src/modules/alsa/alsa-mixer.c:2478 msgid "Digital Input (S/PDIF)" msgstr "Digitálny vstup (S/PDIF)" -#: ../src/modules/alsa/alsa-mixer.c:2495 +#: ../src/modules/alsa/alsa-mixer.c:2479 msgid "Digital Passthrough (S/PDIF)" msgstr "Digitálny prechod (S/PDIF)" -#: ../src/modules/alsa/alsa-mixer.c:2496 +#: ../src/modules/alsa/alsa-mixer.c:2480 msgid "Multichannel Input" msgstr "Viackanálový vstup" -#: ../src/modules/alsa/alsa-mixer.c:2497 +#: ../src/modules/alsa/alsa-mixer.c:2481 msgid "Multichannel Output" msgstr "Viackanálový výstup" -#: ../src/modules/alsa/alsa-mixer.c:4003 +#: ../src/modules/alsa/alsa-mixer.c:3990 msgid "Analog Mono" msgstr "Analógový mono" @@ -626,116 +631,116 @@ msgstr "Analógový mono" #. * here would lead to the source name to become "Analog Stereo Input #. * Input". The same logic applies to analog-stereo-output, #. * multichannel-input and multichannel-output. -#: ../src/modules/alsa/alsa-mixer.c:4004 ../src/modules/alsa/alsa-mixer.c:4010 -#: ../src/modules/alsa/alsa-mixer.c:4011 +#: ../src/modules/alsa/alsa-mixer.c:3991 ../src/modules/alsa/alsa-mixer.c:3997 +#: ../src/modules/alsa/alsa-mixer.c:3998 msgid "Analog Stereo" msgstr "Analógový stereo" -#: ../src/modules/alsa/alsa-mixer.c:4012 ../src/modules/alsa/alsa-mixer.c:4013 +#: ../src/modules/alsa/alsa-mixer.c:3999 ../src/modules/alsa/alsa-mixer.c:4000 msgid "Multichannel" msgstr "Viackanálový" -#: ../src/modules/alsa/alsa-mixer.c:4014 +#: ../src/modules/alsa/alsa-mixer.c:4001 msgid "Analog Surround 2.1" msgstr "Analógový priestorový 2.1" -#: ../src/modules/alsa/alsa-mixer.c:4015 +#: ../src/modules/alsa/alsa-mixer.c:4002 msgid "Analog Surround 3.0" msgstr "Analógový priestorový 3.0" -#: ../src/modules/alsa/alsa-mixer.c:4016 +#: ../src/modules/alsa/alsa-mixer.c:4003 msgid "Analog Surround 3.1" msgstr "Analógový priestorový 3.1" -#: ../src/modules/alsa/alsa-mixer.c:4017 +#: ../src/modules/alsa/alsa-mixer.c:4004 msgid "Analog Surround 4.0" msgstr "Analógový priestorový 4.0" -#: ../src/modules/alsa/alsa-mixer.c:4018 +#: ../src/modules/alsa/alsa-mixer.c:4005 msgid "Analog Surround 4.1" msgstr "Analógový priestorový 4.1" -#: ../src/modules/alsa/alsa-mixer.c:4019 +#: ../src/modules/alsa/alsa-mixer.c:4006 msgid "Analog Surround 5.0" msgstr "Analógový priestorový 5.0" -#: ../src/modules/alsa/alsa-mixer.c:4020 +#: ../src/modules/alsa/alsa-mixer.c:4007 msgid "Analog Surround 5.1" msgstr "Analógový priestorový 5.1" -#: ../src/modules/alsa/alsa-mixer.c:4021 +#: ../src/modules/alsa/alsa-mixer.c:4008 msgid "Analog Surround 6.0" msgstr "Analógový priestorový 6.0" -#: ../src/modules/alsa/alsa-mixer.c:4022 +#: ../src/modules/alsa/alsa-mixer.c:4009 msgid "Analog Surround 6.1" msgstr "Analógový priestorový 6.1" -#: ../src/modules/alsa/alsa-mixer.c:4023 +#: ../src/modules/alsa/alsa-mixer.c:4010 msgid "Analog Surround 7.0" msgstr "Analógový priestorový 7.0" -#: ../src/modules/alsa/alsa-mixer.c:4024 +#: ../src/modules/alsa/alsa-mixer.c:4011 msgid "Analog Surround 7.1" msgstr "Analógový priestorový 7.1" -#: ../src/modules/alsa/alsa-mixer.c:4025 +#: ../src/modules/alsa/alsa-mixer.c:4012 msgid "Digital Stereo (IEC958)" msgstr "Digitálne stereo (IEC958)" -#: ../src/modules/alsa/alsa-mixer.c:4026 +#: ../src/modules/alsa/alsa-mixer.c:4013 msgid "Digital Passthrough (IEC958)" msgstr "Digitálny prechod (IEC958)" -#: ../src/modules/alsa/alsa-mixer.c:4027 +#: ../src/modules/alsa/alsa-mixer.c:4014 msgid "Digital Surround 4.0 (IEC958/AC3)" msgstr "Digitálny priestorový 4.0 (IEC958/AC3)" -#: ../src/modules/alsa/alsa-mixer.c:4028 +#: ../src/modules/alsa/alsa-mixer.c:4015 msgid "Digital Surround 5.1 (IEC958/AC3)" msgstr "Digitálny priestorový 5.1 (IEC958/AC3)" -#: ../src/modules/alsa/alsa-mixer.c:4029 +#: ../src/modules/alsa/alsa-mixer.c:4016 msgid "Digital Surround 5.1 (IEC958/DTS)" msgstr "Digitálny priestorový 5.1 (IEC958/DTS)" -#: ../src/modules/alsa/alsa-mixer.c:4030 +#: ../src/modules/alsa/alsa-mixer.c:4017 msgid "Digital Stereo (HDMI)" msgstr "Digitálny stereo (HDMI)" -#: ../src/modules/alsa/alsa-mixer.c:4031 +#: ../src/modules/alsa/alsa-mixer.c:4018 msgid "Digital Surround 5.1 (HDMI)" msgstr "Digitálny priestorový 5.1 (HDMI)" -#: ../src/modules/alsa/alsa-mixer.c:4162 +#: ../src/modules/alsa/alsa-mixer.c:4151 msgid "Analog Mono Duplex" msgstr "Obojsmerný analógový mono" -#: ../src/modules/alsa/alsa-mixer.c:4163 +#: ../src/modules/alsa/alsa-mixer.c:4152 msgid "Analog Stereo Duplex" msgstr "Obojsmerný analógový stereo" -#: ../src/modules/alsa/alsa-mixer.c:4164 +#: ../src/modules/alsa/alsa-mixer.c:4153 msgid "Digital Stereo Duplex (IEC958)" msgstr "Obojsmerný digitálny stereo (IEC958)" -#: ../src/modules/alsa/alsa-mixer.c:4165 +#: ../src/modules/alsa/alsa-mixer.c:4154 msgid "Multichannel Duplex" msgstr "Obojsmerný viackanálový" -#: ../src/modules/alsa/alsa-mixer.c:4166 -#: ../src/modules/alsa/module-alsa-card.c:184 -#: ../src/modules/bluetooth/module-bluez4-device.c:2298 +#: ../src/modules/alsa/alsa-mixer.c:4155 +#: ../src/modules/alsa/module-alsa-card.c:186 +#: ../src/modules/bluetooth/module-bluez4-device.c:2295 #: ../src/modules/bluetooth/module-bluez5-device.c:1941 msgid "Off" msgstr "Vypnuté" -#: ../src/modules/alsa/alsa-mixer.c:4265 +#: ../src/modules/alsa/alsa-mixer.c:4254 #, c-format msgid "%s Output" msgstr "%s výstup" -#: ../src/modules/alsa/alsa-mixer.c:4273 +#: ../src/modules/alsa/alsa-mixer.c:4262 #, c-format msgid "%s Input" msgstr "%s vstup" @@ -784,7 +789,7 @@ msgid "" "returned 0 or another value < min_avail." msgstr "" -#: ../src/modules/alsa/alsa-util.c:1149 ../src/modules/alsa/alsa-util.c:1224 +#: ../src/modules/alsa/alsa-util.c:1166 ../src/modules/alsa/alsa-util.c:1241 #, c-format msgid "" "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu " @@ -793,7 +798,7 @@ msgid "" "to the ALSA developers." msgstr "" -#: ../src/modules/alsa/alsa-util.c:1199 +#: ../src/modules/alsa/alsa-util.c:1216 #, c-format msgid "" "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s" @@ -802,7 +807,7 @@ msgid "" "to the ALSA developers." msgstr "" -#: ../src/modules/alsa/alsa-util.c:1240 +#: ../src/modules/alsa/alsa-util.c:1257 #, c-format msgid "" "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail " @@ -811,7 +816,7 @@ msgid "" "to the ALSA developers." msgstr "" -#: ../src/modules/alsa/alsa-util.c:1283 +#: ../src/modules/alsa/alsa-util.c:1300 #, c-format msgid "" "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes " @@ -820,49 +825,49 @@ msgid "" "to the ALSA developers." msgstr "" -#: ../src/modules/bluetooth/module-bluez4-device.c:2092 +#: ../src/modules/bluetooth/module-bluez4-device.c:2089 #: ../src/modules/bluetooth/module-bluez5-device.c:1700 msgid "Headset" msgstr "Headset" -#: ../src/modules/bluetooth/module-bluez4-device.c:2097 +#: ../src/modules/bluetooth/module-bluez4-device.c:2094 #: ../src/modules/bluetooth/module-bluez5-device.c:1705 msgid "Handsfree" msgstr "Handsfree" -#: ../src/modules/bluetooth/module-bluez4-device.c:2112 +#: ../src/modules/bluetooth/module-bluez4-device.c:2109 #: ../src/modules/bluetooth/module-bluez5-device.c:1723 msgid "Headphone" msgstr "Slúchadlo" -#: ../src/modules/bluetooth/module-bluez4-device.c:2117 +#: ../src/modules/bluetooth/module-bluez4-device.c:2114 #: ../src/modules/bluetooth/module-bluez5-device.c:1728 msgid "Portable" msgstr "Prenosné" -#: ../src/modules/bluetooth/module-bluez4-device.c:2122 +#: ../src/modules/bluetooth/module-bluez4-device.c:2119 #: ../src/modules/bluetooth/module-bluez5-device.c:1733 msgid "Car" msgstr "Automobil" -#: ../src/modules/bluetooth/module-bluez4-device.c:2127 +#: ../src/modules/bluetooth/module-bluez4-device.c:2124 #: ../src/modules/bluetooth/module-bluez5-device.c:1738 msgid "HiFi" msgstr "HiFi" -#: ../src/modules/bluetooth/module-bluez4-device.c:2132 +#: ../src/modules/bluetooth/module-bluez4-device.c:2129 #: ../src/modules/bluetooth/module-bluez5-device.c:1743 msgid "Phone" msgstr "Telefón" -#: ../src/modules/bluetooth/module-bluez4-device.c:2140 +#: ../src/modules/bluetooth/module-bluez4-device.c:2137 #: ../src/modules/bluetooth/module-bluez5-device.c:1695 #: ../src/modules/bluetooth/module-bluez5-device.c:1711 #: ../src/modules/bluetooth/module-bluez5-device.c:1749 msgid "Bluetooth Output" msgstr "Výstup cez Bluetooth" -#: ../src/modules/bluetooth/module-bluez4-device.c:2143 +#: ../src/modules/bluetooth/module-bluez4-device.c:2140 #: ../src/modules/bluetooth/module-bluez5-device.c:1694 #: ../src/modules/bluetooth/module-bluez5-device.c:1716 #: ../src/modules/bluetooth/module-bluez5-device.c:1722 @@ -870,21 +875,21 @@ msgstr "Výstup cez Bluetooth" msgid "Bluetooth Input" msgstr "Vstup cez Bluetooth" -#: ../src/modules/bluetooth/module-bluez4-device.c:2179 +#: ../src/modules/bluetooth/module-bluez4-device.c:2176 msgid "High Fidelity Playback (A2DP)" -msgstr "" +msgstr "Hi-Fi prehrávanie (A2DP)" -#: ../src/modules/bluetooth/module-bluez4-device.c:2190 +#: ../src/modules/bluetooth/module-bluez4-device.c:2187 msgid "High Fidelity Capture (A2DP)" -msgstr "" +msgstr "Hi-Fi zaznamenávanie (A2DP)" -#: ../src/modules/bluetooth/module-bluez4-device.c:2201 +#: ../src/modules/bluetooth/module-bluez4-device.c:2198 msgid "Telephony Duplex (HSP/HFP)" msgstr "" -#: ../src/modules/bluetooth/module-bluez4-device.c:2213 +#: ../src/modules/bluetooth/module-bluez4-device.c:2210 msgid "Handsfree Gateway" -msgstr "" +msgstr "Brána pre handsfree" #: ../src/modules/bluetooth/module-bluez5-device.c:1786 msgid "High Fidelity Playback (A2DP Sink)" @@ -900,7 +905,7 @@ msgstr "" #: ../src/modules/bluetooth/module-bluez5-device.c:1820 msgid "Headset Audio Gateway (HSP/HFP)" -msgstr "" +msgstr "Brána zvuku pre handsfree (HSP/HFP)" #: ../src/modules/echo-cancel/module-echo-cancel.c:61 msgid "" @@ -912,22 +917,24 @@ msgid "" "rate> channels=<number of channels> channel_map=<channel map> " "aec_method=<implementation to use> aec_args=<parameters for the AEC engine> " "save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being " -"loaded automatically> use_volume_sharing=<yes or no> " +"loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes " +"or no> " msgstr "" #. add on profile -#: ../src/modules/macosx/module-coreaudio-device.c:755 +#: ../src/modules/macosx/module-coreaudio-device.c:811 msgid "On" msgstr "Zapnutý" +#: ../src/modules/module-allow-passthrough.c:73 +#: ../src/modules/module-always-sink.c:82 +msgid "Dummy Output" +msgstr "FiktÃvny výstup" + #: ../src/modules/module-always-sink.c:36 msgid "Always keeps at least one sink loaded even if it's a null one" msgstr "" -#: ../src/modules/module-always-sink.c:83 -msgid "Dummy Output" -msgstr "FiktÃvny výstup" - #: ../src/modules/module-equalizer-sink.c:70 msgid "General Purpose Equalizer" msgstr "Univerzálny ekvalizér" @@ -940,7 +947,7 @@ msgid "" "this module is being loaded automatically> use_volume_sharing=<yes or no> " msgstr "" -#: ../src/modules/module-filter-apply.c:46 +#: ../src/modules/module-filter-apply.c:47 msgid "autoclean=<automatically unload unused filters?>" msgstr "" @@ -963,7 +970,7 @@ msgstr "" msgid "Clocked NULL sink" msgstr "" -#: ../src/modules/module-null-sink.c:278 +#: ../src/modules/module-null-sink.c:280 msgid "Null Output" msgstr "Prázdny výstup" @@ -981,7 +988,7 @@ msgstr "Vstupné zariadenia" #: ../src/modules/module-rygel-media-server.c:1063 msgid "Audio on @HOSTNAME@" -msgstr "Audio na @HOSTNAME@" +msgstr "Zvuk na @HOSTNAME@" #. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus' #. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus' @@ -1014,7 +1021,7 @@ msgstr "" msgid "PulseAudio Sound Server" msgstr "Zvukový server PulseAudio" -#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:758 +#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:771 msgid "Mono" msgstr "Mono" @@ -1226,27 +1233,27 @@ msgstr "Horný zadný pravý" msgid "(invalid)" msgstr "(neplatné)" -#: ../src/pulse/channelmap.c:762 +#: ../src/pulse/channelmap.c:775 msgid "Stereo" msgstr "Stereo" -#: ../src/pulse/channelmap.c:767 +#: ../src/pulse/channelmap.c:780 msgid "Surround 4.0" msgstr "Priestorový 4.0" -#: ../src/pulse/channelmap.c:773 +#: ../src/pulse/channelmap.c:786 msgid "Surround 4.1" msgstr "Priestorový 4.1" -#: ../src/pulse/channelmap.c:779 +#: ../src/pulse/channelmap.c:792 msgid "Surround 5.0" msgstr "Priestorový 5.0" -#: ../src/pulse/channelmap.c:785 +#: ../src/pulse/channelmap.c:798 msgid "Surround 5.1" msgstr "Priestorový 5.1" -#: ../src/pulse/channelmap.c:792 +#: ../src/pulse/channelmap.c:805 msgid "Surround 7.1" msgstr "Priestorový 7.1" @@ -1262,20 +1269,20 @@ msgstr "" msgid "Failed to parse cookie data" msgstr "" -#: ../src/pulse/context.c:656 +#: ../src/pulse/context.c:702 #, c-format msgid "fork(): %s" msgstr "" -#: ../src/pulse/context.c:711 +#: ../src/pulse/context.c:757 #, c-format msgid "waitpid(): %s" msgstr "" -#: ../src/pulse/context.c:1417 +#: ../src/pulse/context.c:1463 #, c-format msgid "Received message for unknown extension '%s'" -msgstr "" +msgstr "Prijatá správa pre neznáme rozÅ¡Ãrenie â%sâ" #: ../src/pulse/direction.c:37 msgid "input" @@ -1293,7 +1300,7 @@ msgstr "obojsmerný" msgid "invalid" msgstr "neplatný" -#: ../src/pulsecore/core-util.c:1833 +#: ../src/pulsecore/core-util.c:1836 #, c-format msgid "" "XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could " @@ -1313,26 +1320,26 @@ msgstr "nie" msgid "Cannot access autospawn lock." msgstr "" -#: ../src/pulsecore/log.c:153 +#: ../src/pulsecore/log.c:165 #, c-format msgid "Failed to open target file '%s'." -msgstr "" +msgstr "Zlyhalo otvorenie cieľového súboru â%sâ." -#: ../src/pulsecore/log.c:176 +#: ../src/pulsecore/log.c:188 #, c-format msgid "" "Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed." msgstr "" -#: ../src/pulsecore/log.c:631 +#: ../src/pulsecore/log.c:651 msgid "Invalid log target." msgstr "Neplatný cieľ záznamu." -#: ../src/pulsecore/sink.c:3436 +#: ../src/pulsecore/sink.c:3459 msgid "Built-in Audio" -msgstr "Vstavané audio" +msgstr "Vstavaný zvuk" -#: ../src/pulsecore/sink.c:3441 +#: ../src/pulsecore/sink.c:3464 msgid "Modem" msgstr "Modem" @@ -1354,15 +1361,15 @@ msgstr "Neplatný parameter" #: ../src/pulse/error.c:42 msgid "Entity exists" -msgstr "" +msgstr "Entita existuje" #: ../src/pulse/error.c:43 msgid "No such entity" -msgstr "" +msgstr "Entita neexistuje" #: ../src/pulse/error.c:44 msgid "Connection refused" -msgstr "" +msgstr "Pripojenie odmietnuté" #: ../src/pulse/error.c:45 msgid "Protocol error" @@ -1386,7 +1393,7 @@ msgstr "Pripojenie preruÅ¡ené" #: ../src/pulse/error.c:50 msgid "Entity killed" -msgstr "" +msgstr "Entita zabitá" #: ../src/pulse/error.c:51 msgid "Invalid server" @@ -1469,41 +1476,6 @@ msgstr "%0.1f KiB" msgid "%u B" msgstr "%u B" -#: ../src/tests/resampler-test.c:255 -#, c-format -msgid "" -"%s [options]\n" -"\n" -"-h, --help Show this help\n" -"-v, --verbose Print debug messages\n" -" --from-rate=SAMPLERATE From sample rate in Hz (defaults to " -"44100)\n" -" --from-format=SAMPLEFORMAT From sample type (defaults to s16le)\n" -" --from-channels=CHANNELS From number of channels (defaults to " -"1)\n" -" --to-rate=SAMPLERATE To sample rate in Hz (defaults to " -"44100)\n" -" --to-format=SAMPLEFORMAT To sample type (defaults to s16le)\n" -" --to-channels=CHANNELS To number of channels (defaults to 1)\n" -" --resample-method=METHOD Resample method (defaults to auto)\n" -" --seconds=SECONDS From stream duration (defaults to 60)\n" -"\n" -"If the formats are not specified, the test performs all formats " -"combinations,\n" -"back and forth.\n" -"\n" -"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, " -"alaw,\n" -"s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n" -"\n" -"See --dump-resample-methods for possible values of resample methods.\n" -msgstr "" - -#: ../src/tests/resampler-test.c:353 -#, c-format -msgid "%s %s\n" -msgstr "%s %s\n" - #: ../src/utils/pacat.c:117 #, c-format msgid "Failed to drain stream: %s" @@ -1584,17 +1556,17 @@ msgstr "" #: ../src/utils/pacat.c:388 #, c-format msgid "Stream underrun.%s" -msgstr "" +msgstr "PodteÄenie prúdu.%s" #: ../src/utils/pacat.c:395 #, c-format msgid "Stream overrun.%s" -msgstr "" +msgstr "PreteÄenie prúdu.%s" #: ../src/utils/pacat.c:402 #, c-format msgid "Stream started.%s" -msgstr "" +msgstr "Spustenie prúdu.%s" #: ../src/utils/pacat.c:409 #, c-format @@ -1625,7 +1597,7 @@ msgstr "" #: ../src/utils/pacat.c:466 #, c-format msgid "Connection established.%s" -msgstr "" +msgstr "Spojenie nadviazané.%s" #: ../src/utils/pacat.c:469 #, c-format @@ -1840,7 +1812,7 @@ msgstr "Zlyhalo generovanie Å¡pecifikácie vzoriek pre súbor." #: ../src/utils/pacat.c:1065 msgid "Failed to open audio file." -msgstr "Zlyhalo otvorenie audio súboru." +msgstr "Zlyhalo otvorenie zvukového súboru." #: ../src/utils/pacat.c:1071 msgid "" @@ -2455,11 +2427,11 @@ msgstr "Neplatná Å¡pecifikácia hlasitosti" #: ../src/utils/pactl.c:1508 msgid "Volume outside permissible range.\n" -msgstr "" +msgstr "HlasitosÅ¥ mimo povoleného rozsahu.\n" #: ../src/utils/pactl.c:1521 msgid "Invalid number of volume specifications.\n" -msgstr "" +msgstr "Neplatný poÄet Å¡pecifikácià hlasitosti.\n" #: ../src/utils/pactl.c:1533 msgid "Inconsistent volume specification.\n" @@ -2693,7 +2665,7 @@ msgstr "MusÃte urÄiÅ¥ názov/ÄÃslo karty, názov portu a posunutie oneskoren #: ../src/utils/pactl.c:2045 msgid "Could not parse latency offset" -msgstr "" +msgstr "Nepodarilo sa analyzovaÅ¥ posun oneskorenia" #: ../src/utils/pactl.c:2057 msgid "No valid command specified." @@ -2732,12 +2704,12 @@ msgstr "Zlyhanie pripojenia: %s\n" #: ../src/utils/pasuspender.c:201 #, c-format msgid "Got SIGINT, exiting.\n" -msgstr "" +msgstr "ZÃskaný signál SIGINT, ukonÄuje sa.\n" #: ../src/utils/pasuspender.c:219 #, c-format msgid "WARNING: Child process terminated by signal %u\n" -msgstr "" +msgstr "UPOZORNENIE: Podradený proces bol ukonÄený signálom %u\n" #: ../src/utils/pasuspender.c:228 #, c-format @@ -2841,3 +2813,6 @@ msgstr "Zlyhalo naÄÃtanie údajov súboru cookie\n" #, c-format msgid "Not yet implemented.\n" msgstr "Zatiaľ nie je implementované.\n" + +#~ msgid "%s %s\n" +#~ msgstr "%s %s\n" commit bde2ff8794a9363b1f7f2c683b160268ce371770 Author: Pali Rohár <[email protected]> Date: Sat Jul 2 22:26:17 2016 +0200 bluetooth: Add support for automatic switch between hsp and a2dp profiles With this patch module-bluetooth-policy automatically switch from a2dp profile to hsp profile if some VOIP application with media.role=phone wants to start recording audio. By default a2dp profile is used for listening music, but for VOIP calls is needed profile with microphone support (hsp). So this patch will switch to hsp profile if some application want to use microphone (and specify it in media.role as "phone). After recording is stopped profile is switched back to a2dp. So this patch allows to use bluetooth microphone for VOIP applications with media.role=phone automatically without need of user interaction. Signed-off-by: Pali Rohár <[email protected]> diff --git a/src/modules/bluetooth/module-bluetooth-policy.c b/src/modules/bluetooth/module-bluetooth-policy.c index 4e51846..68c8ab4 100644 --- a/src/modules/bluetooth/module-bluetooth-policy.c +++ b/src/modules/bluetooth/module-bluetooth-policy.c @@ -33,16 +33,18 @@ #include "module-bluetooth-policy-symdef.h" -PA_MODULE_AUTHOR("Frédéric Dalleau"); -PA_MODULE_DESCRIPTION("When a bluetooth sink or source is added, load module-loopback"); +PA_MODULE_AUTHOR("Frédéric Dalleau, Pali Rohár"); +PA_MODULE_DESCRIPTION("Policy module to make using bluetooth devices out-of-the-box easier"); PA_MODULE_VERSION(PACKAGE_VERSION); PA_MODULE_LOAD_ONCE(true); PA_MODULE_USAGE( + "auto_switch=<Switch between hsp and a2dp profile?> " "a2dp_source=<Handle a2dp_source card profile (sink role)?> " "ag=<Handle headset_audio_gateway card profile (headset role)?> " "hfgw=<Handle hfgw card profile (headset role)?> DEPRECATED"); static const char* const valid_modargs[] = { + "auto_switch", "a2dp_source", "ag", "hfgw", @@ -54,7 +56,12 @@ struct userdata { bool enable_ag; pa_hook_slot *source_put_slot; pa_hook_slot *sink_put_slot; + pa_hook_slot *source_output_put_slot; + pa_hook_slot *source_output_unlink_slot; + pa_hook_slot *card_init_profile_slot; + pa_hook_slot *card_unlink_slot; pa_hook_slot *profile_available_changed_slot; + pa_hashmap *will_need_revert_card_map; }; /* When a source is created, loopback it to default sink */ @@ -137,6 +144,167 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void * return PA_HOOK_OK; } +static void card_set_profile(struct userdata *u, pa_card *card, const char *to_profile, bool revert_to_a2dp) +{ + pa_card_profile *profile; + void *state; + + /* Find available to_profile and activate it */ + PA_HASHMAP_FOREACH(profile, card->profiles, state) { + if (!pa_streq(profile->name, to_profile)) + continue; + + if (profile->available == PA_AVAILABLE_NO) + continue; + + pa_log_debug("Setting card '%s' to profile '%s'", card->name, to_profile); + + if (pa_card_set_profile(card, profile, false) != 0) { + pa_log_warn("Could not set profile '%s'", to_profile); + continue; + } + + /* When we are not in revert_to_a2dp phase flag this card for will_need_revert */ + if (!revert_to_a2dp) + pa_hashmap_put(u->will_need_revert_card_map, card, PA_INT_TO_PTR(1)); + + break; + } +} + +/* Switch profile for one card */ +static void switch_profile(pa_card *card, bool revert_to_a2dp, void *userdata) { + struct userdata *u = userdata; + const char *from_profile; + const char *to_profile; + const char *s; + + if (revert_to_a2dp) { + from_profile = "hsp"; + to_profile = "a2dp"; + } else { + from_profile = "a2dp"; + to_profile = "hsp"; + } + + /* Only consider bluetooth cards */ + s = pa_proplist_gets(card->proplist, PA_PROP_DEVICE_BUS); + if (!s || !pa_streq(s, "bluetooth")) + return; + + if (revert_to_a2dp) { + /* In revert_to_a2dp phase only consider cards with will_need_revert flag and remove it */ + if (!pa_hashmap_remove(u->will_need_revert_card_map, card)) + return; + } + + /* Skip card if does not have active from_profile */ + if (!pa_streq(card->active_profile->name, from_profile)) + return; + + /* Skip card if already has active profile to_profile */ + if (pa_streq(card->active_profile->name, to_profile)) + return; + + card_set_profile(u, card, to_profile, revert_to_a2dp); +} + +/* Return true if we should ignore this source output */ +static bool ignore_output(pa_source_output *source_output) { + const char *s; + + /* New applications could set media.role for identifying streams */ + /* We are interested only in media.role=phone */ + s = pa_proplist_gets(source_output->proplist, PA_PROP_MEDIA_ROLE); + if (s) + return !pa_streq(s, "phone"); + + return true; +} + +static unsigned source_output_count(pa_core *c) { + pa_source_output *source_output; + uint32_t idx; + unsigned count = 0; + + PA_IDXSET_FOREACH(source_output, c->source_outputs, idx) + if (!ignore_output(source_output)) + ++count; + + return count; +} + +/* Switch profile for all cards */ +static void switch_profile_all(pa_idxset *cards, bool revert_to_a2dp, void *userdata) { + pa_card *card; + uint32_t idx; + + PA_IDXSET_FOREACH(card, cards, idx) + switch_profile(card, revert_to_a2dp, userdata); +} + +/* When a source output is created, switch profile a2dp to profile hsp */ +static pa_hook_result_t source_output_put_hook_callback(pa_core *c, pa_source_output *source_output, void *userdata) { + pa_assert(c); + pa_assert(source_output); + + if (ignore_output(source_output)) + return PA_HOOK_OK; + + switch_profile_all(c->cards, false, userdata); + return PA_HOOK_OK; +} + +/* When all source outputs are unlinked, switch profile hsp back back to profile a2dp */ +static pa_hook_result_t source_output_unlink_hook_callback(pa_core *c, pa_source_output *source_output, void *userdata) { + pa_assert(c); + pa_assert(source_output); + + if (ignore_output(source_output)) + return PA_HOOK_OK; + + /* If there are still some source outputs do nothing (count is with *this* source_output, so +1) */ + if (source_output_count(c) > 1) + return PA_HOOK_OK; + + switch_profile_all(c->cards, true, userdata); + return PA_HOOK_OK; +} + +static pa_hook_result_t card_init_profile_hook_callback(pa_core *c, pa_card *card, void *userdata) { + struct userdata *u = userdata; + const char *s; + + pa_assert(c); + pa_assert(card); + + if (source_output_count(c) == 0) + return PA_HOOK_OK; + + /* Only consider bluetooth cards */ + s = pa_proplist_gets(card->proplist, PA_PROP_DEVICE_BUS); + if (!s || !pa_streq(s, "bluetooth")) + return PA_HOOK_OK; + + /* Ignore card if has already set other initial profile than a2dp */ + if (card->active_profile && !pa_streq(card->active_profile->name, "a2dp")) + return PA_HOOK_OK; + + /* Set initial profile to hsp */ + card_set_profile(u, card, "hsp", false); + + /* Flag this card for will_need_revert */ + pa_hashmap_put(u->will_need_revert_card_map, card, PA_INT_TO_PTR(1)); + return PA_HOOK_OK; +} + +static pa_hook_result_t card_unlink_hook_callback(pa_core *c, pa_card *card, void *userdata) { + pa_assert(c); + pa_assert(card); + switch_profile(card, true, userdata); + return PA_HOOK_OK; +} + static pa_card_profile *find_best_profile(pa_card *card) { void *state; pa_card_profile *profile; @@ -220,6 +388,7 @@ static void handle_all_profiles(pa_core *core) { int pa__init(pa_module *m) { pa_modargs *ma; struct userdata *u; + bool auto_switch; pa_assert(m); @@ -230,6 +399,12 @@ int pa__init(pa_module *m) { m->userdata = u = pa_xnew0(struct userdata, 1); + auto_switch = true; + if (pa_modargs_get_value_boolean(ma, "auto_switch", &auto_switch) < 0) { + pa_log("Failed to parse auto_switch argument."); + goto fail; + } + u->enable_a2dp_source = true; if (pa_modargs_get_value_boolean(ma, "a2dp_source", &u->enable_a2dp_source) < 0) { pa_log("Failed to parse a2dp_source argument."); @@ -246,12 +421,28 @@ int pa__init(pa_module *m) { goto fail; } + u->will_need_revert_card_map = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func); + u->source_put_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_PUT], PA_HOOK_NORMAL, (pa_hook_cb_t) source_put_hook_callback, u); u->sink_put_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_NORMAL, (pa_hook_cb_t) sink_put_hook_callback, u); + if (auto_switch) { + u->source_output_put_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_PUT], PA_HOOK_NORMAL, + (pa_hook_cb_t) source_output_put_hook_callback, u); + + u->source_output_unlink_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_UNLINK], PA_HOOK_NORMAL, + (pa_hook_cb_t) source_output_unlink_hook_callback, u); + + u->card_init_profile_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_CARD_CHOOSE_INITIAL_PROFILE], PA_HOOK_NORMAL, + (pa_hook_cb_t) card_init_profile_hook_callback, u); + + u->card_unlink_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_CARD_UNLINK], PA_HOOK_NORMAL, + (pa_hook_cb_t) card_unlink_hook_callback, u); + } + u->profile_available_changed_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_CARD_PROFILE_AVAILABLE_CHANGED], PA_HOOK_NORMAL, (pa_hook_cb_t) profile_available_hook_callback, u); @@ -280,8 +471,22 @@ void pa__done(pa_module *m) { if (u->sink_put_slot) pa_hook_slot_free(u->sink_put_slot); + if (u->source_output_put_slot) + pa_hook_slot_free(u->source_output_put_slot); + + if (u->source_output_unlink_slot) + pa_hook_slot_free(u->source_output_unlink_slot); + + if (u->card_init_profile_slot) + pa_hook_slot_free(u->card_init_profile_slot); + + if (u->card_unlink_slot) + pa_hook_slot_free(u->card_unlink_slot); + if (u->profile_available_changed_slot) pa_hook_slot_free(u->profile_available_changed_slot); + pa_hashmap_free(u->will_need_revert_card_map); + pa_xfree(u); }
_______________________________________________ pulseaudio-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/pulseaudio-commits
