summaryrefslogtreecommitdiff
path: root/src/modules
AgeCommit message (Collapse)AuthorFilesLines
2016-06-22ladspa-sink: avoid to configure invalid formatKimJeongYeon1-0/+5
LADSPA allows float format only, but module-ladspa-sink possibly could be loaded with ***any*** 'format' parameter. Therefore noisy sound heard. This patch avoids to be configured as invalid format. Signed-off-by: KimJeongYeon <jeongyeon.kim@samsung.com> Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
2016-06-22alsa: reread configuration when opening new devicesAlexander E. Patrakov3-0/+26
If a card has been hot-plugged after pulseaudio start, alsa-lib still has old configuration in memory, which doesn't have PCM definitions for the new card. Thus, this error appears, and the device doesn't work: I: [pulseaudio] (alsa-lib)confmisc.c: Unable to find definition 'cards.USB-Audio.pcm.front.0:CARD=0' I: [pulseaudio] (alsa-lib)conf.c: function snd_func_refer returned error: No such file or directory I: [pulseaudio] (alsa-lib)conf.c: Evaluate error: No such file or directory I: [pulseaudio] (alsa-lib)pcm.c: Unknown PCM front:0 I: [pulseaudio] alsa-util.c: Error opening PCM device front:0: No such file or directory The snd_config_update_free_global() function makes alsa-lib forget any cached configuration and reparse all PCM definitions from scratch next time it is told to open anything. The trick has been copied from Phonon. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=54029 Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2016-06-22allow-passthrough: Use pa_module_hook_connect()Arun Raghavan1-19/+4
Signed-off-by: Arun Raghavan <git@arunraghavan.net>
2016-06-22allow-passthrough: Add module to allow passthrough streams always go throughGuillaume Desmottes1-0/+327
For various use-cases a passthrough stream should have priority over all other streams and get exclusive access to the sink regardless of whether any other streams are playing. An example use-case is ensuring Kodi can successfully start video playback (with passthrough) even if an external notification sound happened to be playing at the same time. Signed-off-by: Arun Raghavan <git@arunraghavan.net>
2016-05-29dbus: Deal with double-counting module-dbus-protocolArun Raghavan1-0/+8
We ended up dealing with it once in module init, and once more in the new module callback. Avoiding it in the second case by name seems to be the cleanest solution (else, we need to store the module index somewhere in pa_dbusiface_core, which seems about as bad). Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
2016-05-29dbus: fix crash on LoadModule()Tanu Kaskinen1-14/+11
Commit ae415b07a07c9fe70714d01c91980edb25d966de ("dbus: Use hooks for module new and removed events") changed the new module monitoring from the asynchronous subscription system. Previously handle_load_module() created the new pa_dbusiface_module object before we got a notification of the loading of the module, but now we get the notification already within the pa_module_load() call. That resulted in a crash, because the module_new_cb() created the pa_dbusiface_module object before pa_module_load() returned, and then handle_load_module() would create another pa_dbusiface_module object for the same module. This patch removes the pa_dbusiface_module_new() call from handle_load_module(). module_new_cb() is now responsible for all pa_dbusiface_module object creations, except the ones that are created during the initialization of module-dbus-protocol. Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
2016-05-11module-filter-apply: Fix stale m-d-m property name in commentArun Raghavan1-2/+2
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
2016-05-11alsa: Reread and upate jack status when a card is unsuspendedArun Raghavan1-16/+20
This is needed so we don't keep stale jack availability information while the card is suspended. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=93259 Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
2016-05-10alsa: ignore jack events when the user is inactiveTanu Kaskinen1-0/+28
See the big comment in the code for more details. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93259
2016-05-10module-filter-apply: Fix a memory leakSachin Kumar Chauhan1-14/+11
Dynamic memory allocated to 'module_name' and 'fltr' was being leaked. Its now freed properly before return. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=95293 Signed-off-by: Sachin Kumar Chauhan <sachin.kc@samsung.com> Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
2016-05-07module-device-manager: Refine logic to ignore filtered streamsArun Raghavan2-15/+31
Rather than entirely ignore streams for which we have automatically loaded a filter, this makes module-device-manager only avoid rerouting such streams within their existing filter hierarchy. If, for example, m-d-m decided to move a stream which is currently routed to speakers/mic which we requested echo cancellation for, to a USB headset, the previous logic would disallow such a move even though it was legitimate. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=93443 Signed-off-by: Arun Raghavan <git@arunraghavan.net>
2016-05-07module-filter-apply: Don't implement policy in module-device-managerArun Raghavan2-24/+50
This adds an ignore mechanism to module-device-manager and uses that from within module-filter-apply, rather than having m-d-m have knowledge of anything related to m-f-a. Signed-off-by: Arun Raghavan <git@arunraghavan.net>
2016-05-06module-filter-apply: Remove some dead codeArun Raghavan1-10/+6
We never actually pass restore=true, so might as well remove any code that deals with that case. Signed-off-by: Arun Raghavan <git@arunraghavan.net>
2016-05-03switch-on-port-available: prefer ports that have been selected by the userTanu Kaskinen1-7/+202
Let's assume that there are two output ports, and they are on different profiles: * Integrated speakers (priority: 10000, available) * HDMI (priority: 5900, not available) Then the user plugs in an HDMI monitor with speakers. Since the HDMI priority is lower than the speaker priority, we don't route to HDMI by default. However, the user manually switches the profile to use the HDMI output. Then the user plugs out the monitor, so we switch back to speakers. When the monitor is plugged back in, the user needs to manually switch the audio output again. That should be improved: if the user preferred to the HDMI output over the speakers, we should remember that and automatically switch to HDMI whenever it becomes available. The lack of automatic switching is even worse when the monitor goes to a sleep mode after some period of inactivity. The monitor audio may become unavailable, and PulseAudio can't distinguish that from the case where the monitor is physically unplugged. Even worse, the monitor may become unavailable for a short while when adjusting the display parameters (for example, media center software may adjust the display parameters to match the media that is being played back). In these cases we clearly should switch automatically back to HDMI when it becomes available again. This patch fixes the problem by setting pa_card.preferred_input_port and pa_card.preferred_output_port when the user changes the card profile or a port, and switching to the preferred port when it becomes available. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93946
2016-05-03card-restore: restore preferred portsTanu Kaskinen1-1/+67
2016-05-03switch-on-port-available: avoid repetitive pointer deferencingTanu Kaskinen1-8/+14
Trivial refactoring.
2016-05-03switch-on-port-available: fix inverted if conditionTanu Kaskinen1-1/+1
I'm sure the original intention was to switch the port if the target port is available on the currently active profile.
2016-05-03switch-on-port-available: unify input/output switching policyTanu Kaskinen1-2/+13
I don't think there's any reason why the same logic that has previously added to output profile switching shouldn't be used with input too.
2016-04-29stream-restore: With dbus-proto fix segfault if e->device is NULL.Juho Hämäläinen1-2/+2
If first part of test is false and e->device is NULL pa_streq will segfault. Fix by using pa_safe_streq, which checks strings for NULL before doing strcmp.
2016-04-25detect: Don't deprecate module-detect on non-Linux systemsAhmed S. Darwish1-0/+3
The advertised alternative, module-udev-detect, is Linux-specific. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=94339 Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
2016-04-25filter-apply: simplify proplist updatingTanu Kaskinen1-46/+4
pa_sink_input_set_property() takes care of logging, so the logging code is redundant.
2016-04-25loopback: refactor proplist updatingTanu Kaskinen1-15/+13
This saves some proplist allocations and a couple of code lines. Also, logging is better, because the set_property() functions work with string values, while the update_proplist() functions assume opaque binary data, and therefore can't log the property values.
2016-04-25device-manager, filter-apply: don't reroute streams that have a filterTanu Kaskinen2-2/+71
device-manager reroutes all streams whenever a new device appears. When filter-apply has loaded a filter for some stream, the filter device may not be what device-manager considers the best device for the stream, which means that when an unrelated device appears, device-manager may break the filtering that filter-apply had set up. This patch changes filter-apply so that it saves the filter device name to the stream proplist when it sets up a filter. device-manager can then check the proplist when it does rerouting, and skip the rerouting for streams that have a filter applied to them. The proplist isn't cleaned up when the stream moves away from the filter device, so before doing any decisions based on the filter_device property, it should be checked that the stream is currently routed to the filter device. It seemed simpler to do it this way compared to setting up stream move monitoring in filter-apply and removing the property when the stream moves away from the filter device.
2016-04-25echo-cancel: rework move handlingTanu Kaskinen1-17/+11
When autoloaded, module-echo-cancel doesn't support moving the sink input and source output that it creates, but the move prevention was implemented by manually requesting module unloading in the middle of the stream move procedure, rather than by just setting the DONT_MOVE flags. This patch removes the module unloading code from the moving() callbacks and adds the DONT_MOVE flags. In addition to saving some code, this also prevents problems related to trying to move streams connected to the echo cancel sink or source while the echo cancel sink or source is in the middle of a move too (a crash will happen in such situation, as demonstrated in https://bugs.freedesktop.org/show_bug.cgi?id=93443).
2016-04-20stream-interaction: Fix crash in case of invalid argument for volumeSangchul Lee1-1/+1
In case of invalid argument for volume, the crash occurs in pa_stream_interaction_done(). pa_xnew() is replaced with pa_xnew0() to fix it. Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
2016-04-20role-ducking: Add support for ducking groupSangchul Lee2-87/+212
Now, trigger_roles, ducking_roles and volume can be divided into several groups by slash. That means each group can be affected by its own volume policy. If we need to apply ducking volume level differently that is triggered from each trigger role(s), this feature would be useful for this purpose. For example, let's assume that tts should take music and video's volume down to 40% whereas voice_recognition should take those and tts's volume down to 20%. In this case, the configuration can be written as below. trigger_roles=tts/voice_recognition ducking_roles=music,video/music,video,tts volume=40%/20% If one of ducking role is affected by more than two trigger roles simultaneously, volume of the ducking role will be applied by method of multiplication. And it works in the same way as before without any slash. Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
2016-04-19alsa-mixer: Support for Creative SoundBlaster Omni Surround 5.1 USB sound ↵Nazar Mokrynskyi3-15/+10
card with latest firmware `Mic` is now detected as `Mic-In/Mic Array` (there are 2 microphones physically, nice to se this being understood). `Line` is now detected as `Line In`. Removed all output modes except officially supported stereo, 5.1 and stereo S/PDIF. Also microphone/line in now might be used simultaneously with either output mode, yay!
2016-04-02rtp: Do all receive side rate calculations in sink-input domainArun Raghavan1-8/+10
The code was mixing sink and sink input domain rate updates, and that only works if the rate of the RTP stream is the same as the rate of the sink. This changes all the calcuations to be on the sink-input rate, since that's the rate we are trying to guess (and resample for).
2016-04-02pstream: Support memfd blocks transportAhmed S. Darwish1-1/+1
Now that we have the necessary infrastructure to memexport and mempimport a memfd memblock, extend that support higher up in the chain with pstreams. A PA endpoint can now _transparently_ send a memfd memblock to the other end by simply calling pa_pstream_send_memblock() – provided the block's memfd pool was earlier registered with the pstream. If the pipe does not support memfd transfers, we fall back to sending the block's full data instead of just its reference. ** Further details: A single pstream connection usually transfers blocks from multiple pools including the server's srbchannel mempool, the client's audio data mempool, and the server's global core mempool. If these mempools are memfd-backed, we now require registering them with the pstream before sending any blocks they cover. This is done to minimize fd passing overhead and avoid fd leaks. Moreover, to support all these pools without hard-coding their number or nature in the Pulse communication protocol itself, a new REGISTER_MEMFD_SHMID command is introduced. That command can be sent _anytime_ during the pstream's lifetime and is used for creating on demand SHM ID to memfd mappings. Suggested-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
2016-03-21stream-interaction: interact if a stream starts corkedGeorg Chini1-13/+19
This patch deals with the case that applications start new streams corked. In case of module-role-cork it will only mute the stream because corking is removed later by the application.
2016-03-21role-ducking: use the common code in stream-interaction.cGeorg Chini1-274/+3
2016-03-21stream-interaction: add ducking functionalityGeorg Chini1-13/+43
2016-03-18stream-interaction: Bugfix for improper uncorking behavior with global=1Georg Chini1-1/+17
This patch is based on a recent patch for module-role-ducking from Sangchul Lee which fixes incorrect behavior when global is set to 1. Original commit can be found here: https://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=d049c2941e6aef5ff33bcd0b4adece12289302b7
2016-03-17filter-apply: fix typo "what" -> "want"Tanu Kaskinen1-1/+1
2016-03-16role-cork: more cosmetic changes, changed debug outputGeorg Chini1-23/+21
Change names of shall_interact() and is_trigger_stream() because the names look like the functions return a boolean. Simpler debugging output.
2016-03-15role-cork: prepare merge with role-ducking: replace "cork" with "interact" ↵Georg Chini3-45/+45
where appropriate Again, interact includes cork and duck.
2016-03-14role-cork: prepare merge with role-ducking: move most code to ↵Georg Chini3-336/+399
stream-interaction.c Filename suggested by Tanu, as it includes both, cork and duck.
2016-03-13role-cork: remove corking on module exitGeorg Chini1-12/+46
While module-role-ducking removes the attenuation when the module exits, module-role-cork does not remove the corking. Added a function for that.
2016-03-12role-cork: allow cork of all non-trigger streams using cork_roles=any_roleGeorg Chini1-2/+4
There might be situations where you want to cork all streams that are not trigger streams. Use cork_roles=any_role to implement this.
2016-03-11role-cork: React to mute/cork of trigger streams and to proplist changesGeorg Chini1-11/+62
When a trigger stream changes mute or cork state, the cork streams should react to this. The same applies if a stream changes its role to or from the trigger role.
2016-03-10role-cork: Don't ignore streams without media.roleGeorg Chini1-6/+2
When corking do not ignore streams without media.role. Instead treat them as if media.role="no_role", so that you can specify "no_role" as trigger or cork role.
2016-03-08card-restore: save the database when shutting downTanu Kaskinen1-1/+3
If u->save_time_event is non-NULL when the module is being unloaded, it means that there are some changes to the database that haven't yet been flushed to the disk. Acked-by: David Henningsson <david.henningsson@canonical.com>
2016-03-08alsa-mixer: refactor element_probe and fix >2 channel bugDavid Henningsson1-230/+206
By refactoring volume probing into its own function, we can reduce indentation a lot. Also, if an error occurs during the volume probe, that volume element is now always skipped (instead of taking down the entire path with it). Also, a bug for elements with more than two channels is fixed, as previously, the volume parsing code was continuing, potentially referencing somewhere outside the array (which has max two channels). Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2016-02-26switch-on-port-available: Switch from HDMI to analog; but not the other way ↵David Henningsson1-3/+3
around If you have headphones plugged in and plug in HDMI; you want sound to stay on headphones. If you have HDMI plugged in and you plug in headphones; you want sound to switch to headphones. Hence we need to take priority into account as well when determining whether to switch to a new profile or not. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93903 Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2016-02-25echo-cancel: Convert AGC API to deal with pa_volume_tArun Raghavan3-25/+23
It is expected that the underlying AGC mechanism will likely provide a single volume for the source rather than a per-channel volume. Dealing with per-channel volumes just adds complexity with regards to the actual volume setting (depending on whether volume sharing is enabled or not, we would set the volume on the source output of the virtual source, and their sample specs may be different). Using a single volume allows us to sidestep this problem entirely.
2016-02-25echo-cancel: Add beamforming support in the webrtc cancellerArun Raghavan1-3/+148
2016-02-25echo-cancel: Remove pa_ prefix on private functionsArun Raghavan2-8/+8
2016-02-25echo-cancel: Update a copyright noticeArun Raghavan1-1/+2
2016-02-25echo-cancel: Use webrtc's deinterleaved APIArun Raghavan3-25/+30
This is required to have unequal channel counts on capture in and out streams, which is needed for beamforming to work. The deinterleaved API only works with floating point samples.
2016-02-25echo-cancel: webrtc canceller supports different in/out channel countsArun Raghavan2-7/+9
Needed for upcoming beamforming code.