Commit graph

3112 commits

Author SHA1 Message Date
Tanu Kaskinen
d6a0dcc3a2 device-manager: don't override application routing requests
module-device-manager doesn't change the routing of those streams that
have been explicitly routed by the user, which is good. Similarly, it
should leave those streams alone whose routing was decided by the
application that created the stream. This patch implements that.

BugLink: https://github.com/wwmm/pulseeffects/issues/99
2017-12-02 16:20:00 +02:00
Tanu Kaskinen
3d698d17af sink-input, source-output: add sink/source_requested_by_application flag
When a stream is created, and the stream creator specifies which device
should be used, that can affect automatic routing policies.
Specifically, module-device-manager shouldn't apply its priority list
routing when a stream has been routed by the application that created
the stream.

A stream that was initially routed by the application may be moved for
some valid reason (e.g. user requesting a move, or the original device
disappearing). When the stream is moved away from its initial device,
the "device requested by application" flag isn't relevant any more, so
it's set to false and never reset to true again.

The change in module-device-manager's routing logic will be done in the
following patch.
2017-12-02 16:13:21 +02:00
Iceyer
10010f81e8 augment-properties: support XDG_DATA_DIRS when find desktop files 2017-11-30 21:13:56 +02:00
Tanu Kaskinen
6b92027c19 echo-cancel: fix a memory leak
The pa_echo_canceller_msg object was never unreffed.
2017-11-21 15:18:26 +02:00
Tanu Kaskinen
5f29b838ff echo-cancel: ignore remaining canceller messages after the module has been unloaded
Not ignoring the messages caused crashing due to accessing the userdata
after it had been freed.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=103528
2017-11-21 15:18:05 +02:00
Tanu Kaskinen
d65974d850 card-restore: don't restore unavailable profiles 2017-11-21 15:15:34 +02:00
Tanu Kaskinen
33e31b5b70 card-restore: log the correct profile name 2017-11-21 14:17:49 +02:00
Tanu Kaskinen
27067dbc75 remap-source, virtual-source: fix max_rewind handling
The filter sources should have the same max_rewind as the master source,
but these modules didn't update max_rewind when the master max_rewind
changed.
2017-11-06 11:47:52 +02:00
Tanu Kaskinen
83e12c43b1 alsa-sink: update max_rewind when updating the latency
Previously max_rewind was always set to the full hw buffer size, but
the actual maximum rewind amount is limited to the part of the hw buffer
that is in use.

The rewind request that was done when lowering the sink latency had to
be moved to happen before updating max_rewind.

The practical benefit of this change: When using a filter source on a
monitor source, the filter source latency is increased by max_rewind.
Without this change the max_rewind of an alsa sink is often
unnecessarily high, which leads to unnecessarily high latency with
filter sources.

Monitor sources themselves don't suffer from the latency issue, because
they use the current sink latency instead of max_rewind for the extra
buffer that they keep to deal with rewinds.
2017-11-05 15:22:17 +02:00
Mihai Moldovan
584aad3c06 module-coreaudio-{device, detect}: implement record and playback modargs, curtesy of module-waveout.
Signed-off-by: Mihai Moldovan <ionic@ionic.de>
2017-11-05 13:37:38 +02:00
Arun Raghavan
2c9a2aa01e echo-cancel: Expose dereverb in the speex canceller
Enabled by default.
2017-10-24 22:33:23 +05:30
Arun Raghavan
fa228745c1 echo-cancel: Fix speex echo state setting
The state should be set even if echo suppression is disabled, which is
not currently the case.
2017-10-24 22:33:23 +05:30
Arun Raghavan
7a7072557a sink, source: Rework reconfiguration logic to apply to more than rate
This rejigs the update_rate() logic to encompass changes to the sample
spec as a whole, as well as passthrough status. As a result,
sinks/sources provide a reconfigure() method which allows
reconfiguration as required.

The behaviour itself is currently unchanged -- alsa-sink/-source do not
actually implement anything other than rate updates for now (nor are
they ever requested to). This can be modified in the future, to allow,
for example 24-bit output when incoming media supports it, as well as
channel count changes for passthrough sinks.

Another related change is that passthrough status is now part of
sink/source reconfiguration, and we can stop doing a suspend/unsuspend
when entering/leaving passthrough state. So that part is now divided
in two -- pa_sink_reconfigure() sets the sink in passthrough mode if
required, and pa_sink_enter_passthrough() sets up everything else
(this currently means only volumes, but could disable other processing)
for passthrough mode.
2017-10-21 21:23:37 +05:30
Georg Chini
4f1041c271 loopback: Track and use average adjust time
The configured adjust time does not match exactly the real adjust time. Also
the adjust time varies. To improve latency estimation use an average of the
measured adjust times instead of the configured value in all calculations.
2017-10-21 12:44:03 +02:00
Tanu Kaskinen
85daab2725 bluetooth: set better priorities for profiles
Since HSP had higher priority than A2DP, the default profile when
connecting a new headset was HSP. To me it makes more sense to default
to high-quality output. We already have some automatic policies to
switch to HSP when it's needed.

I also made the A2DP source and HSP/HFP gateway profiles have lower
priority than the A2DP sink and HSP headset profiles. The A2DP source
and HSP/HFP gateway profiles should only be activated if the remote
device initiates audio streaming, so it makes sense to have lower
priority for those profiles.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=103058
2017-10-19 23:03:02 +03:00
Tanu Kaskinen
805efbb11c Revert "alsa-mixer: fix speaker output on a couple of Asus EeePC machines"
This reverts commit ca63fbc1d8.

I applied the patch too hastily. force-speaker.conf is supposed to be
used only when the alsa mixer doesn't contain any elements that would
indicate the existence of a speaker port, but the reverted patch is a
workaround for a different problem. On the two affected EeePC machines
the Headphone element needs to be unmuted when using speakers. The
analog-output-speaker-always path happens to do that, but that's
unintentional. analog-output-speaker was changed[1] to mute the
headphone output when using the speaker port, and
analog-output-speaker-always should have been changed too, but that was
forgotten.

The kernel driver is buggy if it has a Headphone mixer element that
mutes both headphones and speakers, so this should be fixed in alsa. If
we end up having a workaround in PulseAudio for the broken driver, it
should be implemented with a new profile set and path configuration
files.

[1] https://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=22aac4e9fdb3786178f7815a0cb2150f588b1582
2017-10-12 17:00:13 +03:00
Guenter Milde
ca63fbc1d8 alsa-mixer: fix speaker output on a couple of Asus EeePC machines 2017-10-12 16:43:33 +03:00
Colin Leroy
937b3769b3 raop: Init dummy port and card for latency change
This adds a port, card and profile to RAOP sinks to make it
possible to change the latency at runtime (and have it persist)
using pavucontrol or pactl set-port-latency-offset.

Also move the IP:port part of the sink name to the port name.
2017-10-11 18:34:30 +03:00
Colin Leroy
77c1226181 raop: Show device codename in sink properties
This will make it easier for testers to report latency offset for their
specific hardware.
2017-10-11 18:15:05 +03:00
Peter Meerwald-Stadler
0f94657cd0 raop: Fix typo
Signed-off-by: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
2017-10-09 10:39:54 +02:00
Peter Meerwald-Stadler
a39098fe4d raop: Fix gcc-7 warnings, EWOULDBLOCK
EAGAIN is used allover the code rather than EWOULDBLOCK
POSIX allows EAGAIN and EWOULDBLOCK to have the same value (and in fact it is)
don't check for EWOULDBLOCK

modules/raop/raop-client.c: In function ‘send_udp_audio_packet’:
modules/raop/raop-client.c:473:41: warning: logical ‘or’ of equal expressions [-Wlogical-op]
     if (written < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
                                         ^~
modules/raop/raop-client.c: In function ‘resend_udp_audio_packets’:
modules/raop/raop-client.c:528:45: warning: logical ‘or’ of equal expressions [-Wlogical-op]
         if (written < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
                                             ^~

Signed-off-by: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
2017-10-09 10:39:52 +02:00
Peter Meerwald-Stadler
d911dd48ce bluetooth: bluez5: Fix Coverity warning
Use pa_assert_se() to check return value (pro forma) like everywhere else

Coverity ID: #154313

Signed-off-by: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
2017-10-09 10:39:49 +02:00
Colin Leroy
ff49f0a5c1 raop: add latency value for Shairport RAOP server
After testing, Shairport server's latency is the same as Pioneer N30.
2017-10-08 21:14:26 +03:00
Salvador Fandino
8c22cd54de ladspa-sink: fix Windows compilation
The macro LADSPA_PATH was defined as a list of directories quoted but
without taking into account that the directory names, specially on
Windows, can contain backslashes that need escaping.

This patch removes the quoted from the macro and uses the C preprocessor
to quote it properly using a helper macro.
2017-10-07 22:14:34 +03:00
David Henningsson
5c7b543cb7 switch-on-port-available: Add some basic properties
Apparently I forgot about this for like, five years, but better
late than never!

Signed-off-by: David Henningsson <diwic@ubuntu.com>
2017-10-03 17:50:27 +03:00
Kristian Klausen
184c28795b alsa-mixer: Prioritize hdmi-* mappings over iec958-* mappings
Pulseaudio tries to pick the best profile (on startup or
hotplugged), the best profile is the profile with the highest
priority which isn't unavailable.
Due to the facts that iec958 ports available status always (?)
is unknown, and that it is generally more likely that a user use
hdmi than iec958, lets prioritze hdmi over iec958.

This patch shift the analog-* mappings +5 and hdmi-* mappings +5.
2017-10-01 21:03:39 +03:00
Colin Leroy
d8a2cef360 RAOP: Announce real latency
Use predefined values depending on the server, and make it configurable.
AirPlay is supposed to have 2s of latency. With my hardware, this is
more 2.352 seconds after numerous tests.
Switch from pausing/resuming the smoother to resetting it because the
smoother got stuck returning the same value after an idle/running cycle,
making latency calculation wrong.
2017-09-21 16:47:43 +03:00
Arun Raghavan
b6bba65d62 bluez: Don't crash on strange MTU sizes
We got reports of this with automatically detected MTUs that weren't
frame aligned.
2017-09-18 18:49:34 +03:00
Arun Raghavan
82e7fe413e bluez: Don't autodetect MTU by default
This breaks a lot of headsets, so disabling by default. Can be
re-enabled in configuration for specific hardware where it is deemed
necessary.

Also added some debug logging to be able to examine what MTU size is
reported by the device.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=102660
2017-09-18 18:49:34 +03:00
Tanu Kaskinen
56b6e32535 alsa-mixer: add mixer handling to the fallback stereo case
Some sound cards don't have any alsa-lib configuration, but they used to
work well enough up to PulseAudio 10. PulseAudio 11 stopped using "hw:0"
for the analog-stereo mapping, and instead defined it as a fallback
mapping without any mixer handling. As a result, switching between
headphones and speakers stopped working without changing the mixer
settings manually at least on Toshiba Chromebook 2. This patch adds the
mixer handling back to the fallback mapping.

I also renamed "unknown-stereo" to "stereo-fallback", because I like
that name more.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=102560
2017-09-18 18:49:34 +03:00
Arun Raghavan
703d95fd00 always-source: Fix pa_module_load() usage
The API changed slightly since the original patch was written.
2017-09-05 13:46:27 +03:00
Sebastian Dröge
b4d2443249 Implement module-always-source
This is basically a copy of module-always-sink but doing the same for
sources. Whenever no source is available, a module-null-source is loaded
and whenever a new source is available again, module-null-source is
unloaded.

By this, anything using a source will automatically be switched to the
null source when the actual source disappears, and back to the actual
source if it appears again.
2017-09-05 13:46:27 +03:00
Tanu Kaskinen
9c7a9be7cd bluetooth: recognize another HSP HS UUID
There are actually two HSP HS UUIDs. My theory is that the second one
was added, because someone was not happy with the old UUID being used
for identifying two different things (the HSP profile as a whole, and
the HS role within the HSP profile). Some headsets only use the new
UUID, and those headsets won't work if we don't recognize the new UUID.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=93898
2017-09-05 13:46:27 +03:00
Johan Heikkilä
15386a710c alsa-mixer: add support for Steelseries Arctis 7 headset 2017-09-05 13:46:27 +03:00
Ian Ray
739a4b3d23 alsa-mixer: round, not truncate, in to_alsa_dB
to_alsa_dB() returns a result rounded to two decimal places (instead of
using integer truncation) to avoid small errors when converting between
dB and volume.

Consider playback at -22 dB (which is supported by ALSA) but results in
the higher level of -21 dB plus software attenuation.

    pa_sw_volume_from_dB(-22) = 28172
    pa_sw_volume_to_dB(28172) = -21.9997351
    to_alsa_dB(-21.9997351)   = -2199

    ALSA value 106 = -2200
    ALSA value 107 = -2100
    ...

    rounding = +1  /* "accurate or first above" */
    snd_mixer_selem_ask_playback_dB_vol(me, -2199, rounding, &alsa_val)
    alsa_val = -2100

Signed-off-by: Ian Ray <ian.ray@ge.com>
2017-09-05 13:46:27 +03:00
Colin Leroy
f0dfddead3 cli-command: don't exit on "module already loaded" errors
Some modules may only be loaded once, and trying to load them
twice from default.pa makes PulseAudio startup fail. While that could
be considered a user error, it's nicer to not be so strict. It's not
necessarily easy to figure what went wrong, if for example the user
plays with RAOP and adds module-raop-discover to default.pa, which first
works fine, but suddenly stops working when the user at some point
enables RAOP support in paprefs. Enabling RAOP in paprefs makes
module-gconf load the module too, so the module gets loaded twice.

This patch adds a way to differentiate module load errors, and
make cli-command ignore the error when the module is already
loaded.
2017-09-05 13:46:27 +03:00
Tanu Kaskinen
5f27c2ec2f device-port, switch-on-port-available: fix automatic profile changing when current profile is off
module-switch-on-port-available didn't do anything when a port changes
its status if the card didn't have any sinks or sources. This was to
avoid bad things during card initialization, but the if condition also
prevented any profile switches away from the "off" profile, because the
card has no sinks or sources when the "off" profile is active.

pa_card nowadays has the "linked" flag that
module-switch-on-port-available could have checked instead, but since it
doesn't make sense to emit port status change events before the card has
been initialized, I added the check in pa_device_port_set_available()
instead.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=101794
2017-09-05 13:46:26 +03:00
Tanu Kaskinen
ec325304cd alsa-mixer: set PCM Capture Source for iec958 input
It was reported that on a certain USB card, identified as
"0d8c:0102 C-Media Electronics, Inc. CM106 Like Sound Device",
the "PCM Capture Source" element had to be set to "IEC958 In" before
the iec958 input would work.

The iec958-stereo-input.conf file didn't exist before, although the path
was referenced in the default.conf profile configuration file.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=101973
2017-09-05 13:46:26 +03:00
Tanu Kaskinen
295d4db8cf raop: silence a Coverity complaint
CID: 1398155
2017-09-05 13:46:26 +03:00
Georg Chini
e03e01b089 bluez5-device: Set transport state correctly for AG role
When connecting a headset via the native backend, the transport state was
not updated correctly.

This patch sets the state to PLAYING in transport_acquire() if necessary.
2017-09-05 13:46:26 +03:00
Tanu Kaskinen
9e725ac3db equalizer-sink: update sink description when moving
If the description is not updated when moving, the old automatically
generated description will refer to the old master sink after the move,
which is not nice.
2017-09-05 13:46:26 +03:00
Georg Chini
1d29247ac7 loopback: Use new allow_negative flag of pa_{source, sink}_get_latency_within_thread()
Setting the allow_negative flag of pa_{source,sink}_get_latency_within_thread() to true
leads to improved end to end latency estimation and to correct handling of negative port
latency offsets.
2017-09-05 13:46:26 +03:00
Hui Wang
60c0edd528 alsa-mixer: Add support for usb audio in the Dell dock TB16
There are one headset jack on the front panel of TB16, through this
jack, we have one stereo headphone output (hw:%f,0,0) and one mono
headset-mic input (hw:%f,0,0); and there is one speaker output jack
(hw:%f,1,0) on the rear panel of TB16.

The detail information of the Dell dock TB16:
http://www.dell.com/support/article/sg/en/sgbsdt1/SLN301105

Signed-off-by: Hui Wang <hui.wang@canonical.com>
2017-09-05 13:46:26 +03:00
KimJeongYeon
46fb1b8c5d filter-apply: Do not re-route stream to master sink/source when manually moved to filter
Currently, if a stream is manually moved to a filter sink or source managed by
module-filter-apply, the stream will be silently re-routed to the master sink
or source, because the filter.apply property is not set on that stream. We can
assume, that the users intention however was to have the stream filtered.

Therefore this patch changes the logic, so that the stream will not be moved
to the master but remains on the filter sink or source. To handle the change
of a property correctly, the filter.apply property must be set temporarily.
An additional property filter.apply.set_by_mfa was introduced to mark those
streams, so that filter.apply can be removed again when the stream moves away
from the filter.
2017-09-05 13:46:26 +03:00
Georg Chini
44d03c0a46 bluez5-device: lower sink/source priority for Audio gateway or a2dp source
When a phone is connected via bluetooth and switches to HFP, the sinks
and sources will have higher priority than the built-in devices.
Therefore they are chosen as default and module-bluetooth-policy will
incorrectly insert loopback modules that loop the phone back to itself.

This patch fixes the problem by lowering the priority of sink and source
if PulseAudio is in the headset role. The priority is also lowered if the
device is an a2dp source. In both cases it does not make sense to make the
source or sink default unless there is no other sound device available.
2017-09-03 12:43:03 +03:00
Georg Chini
49ab711c28 tunnel-{sink, source}-new: Fix assertion when used with loopback or combine-sink
Currently pulseaudio crashes with an assertion in pa_rtpoll_item_new_asyncmsgq_read()
or pa_rtpoll_item_new_asyncmsgq_write() if a loopback is applied to a tunnel-new
sink or source, because tunnel-{sink,source}-new do not set thread_info.rtpoll.
The same applies to module-combine-sink and module-rtp-recv.

This patch is not a complete fix for the problem but provides a temporary band-aid
by initializing thread_info.rtpoll properly. The rtpoll created is never run, but
loopback and combine-sink nevertheless work, see comments in the code.

This patch does not work for module-rtp-recv, but using rtp-recv with a remote
sink does not seem to make a lot of sense anyway.

Bug link: https://bugs.freedesktop.org/show_bug.cgi?id=73429
2017-08-17 11:40:17 +03:00
Tanu Kaskinen
3979fba0ac echo-cancel: don't set latency range if the device doesn't support dynamic latency
pa_sink/source_set_latency_range() has an assertion that is triggered
when setting the latency range on a fixed latency device.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=102020
2017-08-04 09:02:56 +03:00
Tanu Kaskinen
a448cc587c core: change configured_default_sink/source type to string
This allows us to restore the default device properly when a
hotpluggable device (e.g. a USB sound card) is set as the default, but
unplugged temporarily. Previously we would forget that the unplugged
device was ever set as the default, because we had to set
configured_default_sink to NULL to avoid having a stale pa_sink pointer,
and also because module-default-device-restore couldn't resolve the name
of a currently-unplugged device to a pa_sink pointer.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=89934
2017-07-17 19:41:03 +03:00
Tanu Kaskinen
abdd14d5e0 fix dbus message leaks
I reviewed all places that call
dbus_connection_send_with_reply_and_block(), and found several places
where dbus messages aren't properly unreffed.
2017-07-17 19:29:21 +03:00
David Michael
e538e19664 solaris: Support building on GNU Hurd 2017-07-14 22:01:15 +03:00