summaryrefslogtreecommitdiff
path: root/src/modules
Commit message (Collapse)AuthorAgeFilesLines
* dbus: Deal with double-counting module-dbus-protocolv8.99.2Arun Raghavan2016-05-291-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>
* dbus: fix crash on LoadModule()Tanu Kaskinen2016-05-291-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>
* module-filter-apply: Fix stale m-d-m property name in commentArun Raghavan2016-05-111-2/+2
| | | | Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
* alsa: Reread and upate jack status when a card is unsuspendedArun Raghavan2016-05-111-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>
* alsa: ignore jack events when the user is inactiveTanu Kaskinen2016-05-101-0/+28
| | | | | | See the big comment in the code for more details. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93259
* module-filter-apply: Fix a memory leakSachin Kumar Chauhan2016-05-101-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>
* module-device-manager: Refine logic to ignore filtered streamsArun Raghavan2016-05-072-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>
* module-filter-apply: Don't implement policy in module-device-managerArun Raghavan2016-05-072-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>
* module-filter-apply: Remove some dead codeArun Raghavan2016-05-061-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>
* switch-on-port-available: prefer ports that have been selected by the userTanu Kaskinen2016-05-031-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
* card-restore: restore preferred portsTanu Kaskinen2016-05-031-1/+67
|
* switch-on-port-available: avoid repetitive pointer deferencingTanu Kaskinen2016-05-031-8/+14
| | | | Trivial refactoring.
* switch-on-port-available: fix inverted if conditionTanu Kaskinen2016-05-031-1/+1
| | | | | I'm sure the original intention was to switch the port if the target port is available on the currently active profile.
* switch-on-port-available: unify input/output switching policyTanu Kaskinen2016-05-031-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.
* stream-restore: With dbus-proto fix segfault if e->device is NULL.Juho Hämäläinen2016-04-291-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.
* detect: Don't deprecate module-detect on non-Linux systemsAhmed S. Darwish2016-04-251-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>
* filter-apply: simplify proplist updatingTanu Kaskinen2016-04-251-46/+4
| | | | | pa_sink_input_set_property() takes care of logging, so the logging code is redundant.
* loopback: refactor proplist updatingTanu Kaskinen2016-04-251-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.
* device-manager, filter-apply: don't reroute streams that have a filterTanu Kaskinen2016-04-252-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.
* echo-cancel: rework move handlingTanu Kaskinen2016-04-251-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).
* stream-interaction: Fix crash in case of invalid argument for volumeSangchul Lee2016-04-201-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>
* role-ducking: Add support for ducking groupSangchul Lee2016-04-202-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>
* alsa-mixer: Support for Creative SoundBlaster Omni Surround 5.1 USB sound ↵Nazar Mokrynskyi2016-04-193-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!
* rtp: Do all receive side rate calculations in sink-input domainArun Raghavan2016-04-021-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).
* pstream: Support memfd blocks transportAhmed S. Darwish2016-04-021-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>
* stream-interaction: interact if a stream starts corkedGeorg Chini2016-03-211-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.
* role-ducking: use the common code in stream-interaction.cGeorg Chini2016-03-211-274/+3
|
* stream-interaction: add ducking functionalityGeorg Chini2016-03-211-13/+43
|
* stream-interaction: Bugfix for improper uncorking behavior with global=1Georg Chini2016-03-181-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
* filter-apply: fix typo "what" -> "want"Tanu Kaskinen2016-03-171-1/+1
|
* role-cork: more cosmetic changes, changed debug outputGeorg Chini2016-03-161-23/+21
| | | | | Change names of shall_interact() and is_trigger_stream() because the names look like the functions return a boolean. Simpler debugging output.
* role-cork: prepare merge with role-ducking: replace "cork" with "interact" ↵Georg Chini2016-03-153-45/+45
| | | | | | where appropriate Again, interact includes cork and duck.
* role-cork: prepare merge with role-ducking: move most code to ↵Georg Chini2016-03-143-336/+399
| | | | | | stream-interaction.c Filename suggested by Tanu, as it includes both, cork and duck.
* role-cork: remove corking on module exitGeorg Chini2016-03-131-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.
* role-cork: allow cork of all non-trigger streams using cork_roles=any_roleGeorg Chini2016-03-121-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.
* role-cork: React to mute/cork of trigger streams and to proplist changesGeorg Chini2016-03-111-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.
* role-cork: Don't ignore streams without media.roleGeorg Chini2016-03-101-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.
* card-restore: save the database when shutting downTanu Kaskinen2016-03-081-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>
* alsa-mixer: refactor element_probe and fix >2 channel bugDavid Henningsson2016-03-081-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>
* switch-on-port-available: Switch from HDMI to analog; but not the other way ↵David Henningsson2016-02-261-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>
* echo-cancel: Convert AGC API to deal with pa_volume_tArun Raghavan2016-02-253-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.
* echo-cancel: Add beamforming support in the webrtc cancellerArun Raghavan2016-02-251-3/+148
|
* echo-cancel: Remove pa_ prefix on private functionsArun Raghavan2016-02-252-8/+8
|
* echo-cancel: Update a copyright noticeArun Raghavan2016-02-251-1/+2
|
* echo-cancel: Use webrtc's deinterleaved APIArun Raghavan2016-02-253-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.
* echo-cancel: webrtc canceller supports different in/out channel countsArun Raghavan2016-02-252-7/+9
| | | | Needed for upcoming beamforming code.
* echo-cancel: Improve webrtc canceller error handling a bitArun Raghavan2016-02-251-4/+8
|
* echo-cancel: Fix webrtc canceller when rec channels != play channelsArun Raghavan2016-02-252-14/+14
| | | | | | The calculations around how many samples were sent to the canceller engine was not updated when we started supporting different channel counts for playback and capture.
* echo-cancel: Make webrtc AGC start volume a modargArun Raghavan2016-02-251-3/+16
| | | | Allows for tuning based on the target hardware.
* echo-cancel: Use anonymous unions for echo canceller paramsArun Raghavan2016-02-255-70/+71
| | | | Makes this part of the code just a little less verbose.