Commit graph

7021 commits

Author SHA1 Message Date
Tanu Kaskinen
a9bd710596 switch-on-port-available: Pass correct port_pointers to switch_to_port()
The pp variable contains information for the port that became
unavailable, but switch_to_port() needs the information for the port
that we're switching to.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1096
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/468>
2021-01-16 19:27:02 +02:00
Patrick Gaskin
d15a6e543f cli: Fix crash when using .include with an empty directory
This would previously fail the size > 0 assertion in pa_xmalloc.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/454>
2021-01-12 21:04:10 -05:00
Igor V. Kovalenko
e68aa03f29 database: clean up remaining references to CANONICAL_HOST
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/425>
2021-01-12 21:03:17 -05:00
Igor V. Kovalenko
c6b7837df3 database: pick old database file from any arch
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/425>
2021-01-12 21:03:13 -05:00
Igor V. Kovalenko
f8653fa5c1 database: drop arch from newly created database file name
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/425>
2021-01-12 21:03:09 -05:00
Igor V. Kovalenko
c8d851b4b7 database: use existing database matching same architecture prefix
State database binary file format may depend on system architecture,
for instance gdbm binary format depends on architecture word size,
making x86 and x64 gdbm files incompatible.

If this is the case, it is handled by adding system architecture name to
database file name using automatically configured CANONICAL_HOST string.
Meson build define CANONICAL_HOST to be system architecture name, while
autotools build extends this with vendor and and operating system components.

Switch autotools build to use host_cpu for CANONICAL_HOST to match Meson
configuration. For backwards compatibility always use existing database file
matching CANONICAL_HOST prefix if it exists.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/425>
2021-01-12 21:03:03 -05:00
Igor V. Kovalenko
f031cc28f4 database: extract common method to handle machine id and architecture
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/425>
2021-01-12 21:02:55 -05:00
Igor V. Kovalenko
80474384f5 ladspa-sink: do not call pa_sink_suspend if PA_SINK_IS_LINKED is false
While module-ladspa-sink is still being loaded and before pa_sink_put() is
called there may be an attempt to reconfigure master sink when avoid-resampling
is true. This breaks attempting to suspend ladspa-sink which is still in INIT
state.

Fix this by skipping pa_sink_suspend if PA_SINK_IS_LINKED is false.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/445>
2021-01-07 19:18:48 -05:00
Tanu Kaskinen
72b6d24adb alsa-mixer: Add support for the Headphone,1 element
This is seen at least on HP EliteDesk 800 DM and HP EliteDesk 800 SFF.

This is used by the analog-output-headphones-2 path, but all other paths
on the same sink need to handle the element too. The existing
configuration is inconsistent between files regarding whether headphone
outputs should be muted or not when not using them. I chose to be
consistent within files, which means that Headphone,1 handling is
inconsistent between files in the same way that the existing Headphone
and Headphone2 handling is. (My opinion is that unused paths should be
always muted, but I didn't want to do that policy change in this patch.)

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/272>
2021-01-07 19:18:35 -05:00
Tanu Kaskinen
1804c9de1d alsa-mixer: Move HP EliteDesk 800 SFF/DM second headphone output to path analog-output-headphones-2
The two headphone outputs should be handled in separate paths so that
volume control can be implemented properly for both outputs.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/272>
2021-01-07 19:18:29 -05:00
Tanu Kaskinen
fdf91a035d alsa-mixer: Use unambiguous descriptions with dual headphone outputs
Previously both paths had description "Headphones", which I assume can
cause confusion with users who see two ports with identical names. I
don't have this kind of hardware myself nor have I heard complaints from
users, this is just something I noticed while reading the configuration
files.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/272>
2021-01-07 19:18:25 -05:00
Kai-Heng Feng
eb2c757d2d alsa-mixer: Support dual Front Headphone Jack
There are dual Front Headphone Jacks with different indices or with
different names, they can be found on HP EliteDesk 800 SFF and HP
EliteDesk 800 DM, respectively.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/272>
2021-01-07 19:18:20 -05:00
Kai-Heng Feng
8903d2ccc0 alsa-mixer: Handle the index for ALSA mixer jack identifiers
Some systems have two jacks with same name but different index, we need
to take index into consideration to use both jacks.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/272>
2021-01-07 19:18:15 -05:00
morrishoresh
0f89157261 bluetooth: correct possible segmentation fault
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/443>
2021-01-07 19:17:57 -05:00
Hui Wang
254cb4bd1f switch-on-port-available: Switch to headset or mic on unknown avail
On some Dell AIO machines, there is no internal mic, only a multi
function audio jack, so the only input devices are headphone-mic and
headset-mic, and they share the Jack with headphone.

When there is no headset plugged in that Jack, the headphone-mic
and headset-mic are off. And since there is no available port under
the analog input source, this source is unlinked (if there is
internal mic, the source will not be unlinked). so the only pa-source
left in the PA is analog-stereo-monitor.

After the headset is plugged, we need to let switch_to_port() handle
headset-mic and headphone-mic conditionally, this will guarantee the
source will be created if it is unlinked before plugging, and then the
input profile could be selected correctly.

Signed-off-by: Hui Wang <hui.wang@canonical.com>
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/390>
2021-01-07 19:17:22 -05:00
Jaroslav Kysela
b3e6e2e0df alsa: mixer - add support up 8 mixer channels
We have at least one USB hardware which supports the 8
channels in one mixer element:

  https://github.com/alsa-project/alsa-ucm-conf/pull/25

POSITION_MASK_CHANNELS define was added for the future extensions.

The override_map variable was changed from bool to mask (unsigned int).
The channel map override settings is handled for channels up to eight now.

Also added missing override-map.3 .. override-map.8 to the configuration
parser array.

The driver channel position was added to the override mask arguments
(syntax is driver:pulseaudio like left:all-left). If ommited, the ALSA's
channel positions are guessed by index.

Link: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/292

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/389>
2021-01-07 19:17:21 -05:00
Jaroslav Kysela
de9299c7b7 alsa: mixer - use safe dB range values when the override mask is unset
Use safe values for the min_dB and max_dB fields when the position mask
is unset to avoid breakage for the upper levels.

If the range is incorrect, the volume range shown in pavucontrol shows
strange values.

(Thanks to Wim Taymans for the idea.)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/389>
2021-01-07 19:17:13 -05:00
Arun Raghavan
e6b3edd3c1 Revert "mainloop: fix timeout assignment in pa_mainloop_prepare"
This reverts commit 6b1719d0ed, as it
inadvertently broke the semantics of timeout in the API.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1039
2020-11-23 18:05:27 +00:00
Pali Rohár
e99e862a3d alsa: Fix compile warnings
modules/alsa/alsa-sink.c: In function ‘pa_alsa_sink_new’:
modules/alsa/alsa-sink.c:2603:15: warning: declaration of ‘state’ shadows a previous local [-Wshadow]
         void *state;
               ^~~~~
modules/alsa/alsa-sink.c:2270:11: note: shadowed declaration is here
     void *state = NULL;
           ^~~~~
  CC       modules/alsa/module_alsa_sink_la-module-alsa-sink.lo
modules/alsa/alsa-source.c: In function ‘pa_alsa_source_new’:
modules/alsa/alsa-source.c:2289:15: warning: declaration of ‘state’ shadows a previous local [-Wshadow]
         void *state;
               ^~~~~
modules/alsa/alsa-source.c:1975:11: note: shadowed declaration is here
     void *state = NULL;
           ^~~~~
modules/alsa/module-alsa-card.c: In function ‘prune_singleton_availability_groups’:
modules/alsa/module-alsa-card.c:691:71: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
             pa_hashmap_put(group_counts, p->availability_group, count + 1);
                                                                       ^
2020-11-23 16:06:03 +00:00
Tanu Kaskinen
eaa6d5d6c1 switch-on-port-available: Fix switching away from unplugged headphones
Commits 323195e305 ("switch-on-port-available: Switch to headphones on
unknown availability") and d83ad6990e ("module-alsa-card: Drop
availability groups with only one port") broke switching from headphones
to speakers when headphones are unplugged. switch_from_port() selects
speakers, whose availability is unknown and availability group is unset,
and then calls switch_to_port(). The new logic in switch_on_port()
unintentionally blocked that switch.

This patch moves the problematic logic from switch_to_port() to
port_available_hook_callback() where it doesn't interfere with
switch_from_port().

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1043
2020-11-23 02:07:22 +00:00
Tanu Kaskinen
6ad2d207c5 alsa-mixer: Document the description and description-key mapping options 2020-11-22 16:14:58 +02:00
Igor V. Kovalenko
e81873611c switch-on-port-available: Add logging for port availability group 2020-11-21 14:36:51 +00:00
Igor V. Kovalenko
329bfe8f20 module-alsa-card: Add debug logging if availability group was pruned 2020-11-21 14:36:51 +00:00
Igor V. Kovalenko
2d018a82ad pactl: explicitly print if port availability is unknown
Port availability is a tristate -- not-available / unknown / available.
Explicitly print if availability is unknown to reduce confusion.
2020-11-21 16:34:09 +03:00
Arun Raghavan
d83ad6990e module-alsa-card: Drop availability groups with only one port
These are not really meaningful, and can be confusing for clients.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1022
2020-11-17 16:38:56 +00:00
Arun Raghavan
323195e305 switch-on-port-available: Switch to headphones on unknown availability
Since not all users will have environments that asks what they plugged
in when their hardware supports TRRS inputs but don't have impedance
sensing, let's emulate our previous default behaviour of enabling the
headphone port at least.

This can likely be improved so users can configure the module to select
for the device they are most likely to plug in (so an option to enable
just the microphone, or headphones+headset-mic ports).

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1028
2020-11-15 04:00:25 -05:00
Tanu Kaskinen
e70d34ae18 alsa-mixer: Remove references to non-existent multichannel paths
We don't have any mixer configuration for the multichannel mappings.
2020-10-31 12:00:54 +02:00
Tanu Kaskinen
daf3a3c4b0 alsa-mixer: Fix jack name comparison
HDMI jacks are configured like this:

    [Jack HDMI/DP]
    append-pcm-to-name = yes

The pa_alsa_jack.name field is then "HDMI/DP" and pa_alsa_jack.alsa_name
is set to "HDMI/DP,pcm=3 Jack" or similar. If we compare the name fields
of HDMI paths, they appear to use the same jack element even though they
are different in reality, so all HDMI ports got incorrectly assigned to
the same availability group.
2020-10-30 16:55:39 +00:00
Tanu Kaskinen
eee8292ae1 alsa-mixer: Set availability groups once per card
Previously they were set once per mapping, which caused the numbering to
restart from 1 for every mapping, so ports were incorrectly assigned to
the same group.
2020-10-30 16:55:39 +00:00
Arun Raghavan
a9c6d43b7c sink, source: Skip filter streams while changing default sink/source
Streams connecting filter devices to their target devices shouldn't move
because of default settings (they are intended to be filtering the
specific device that are attached to).

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1015
2020-10-26 12:00:35 -04:00
Jaroslav Kysela
1d6bd6689f alsa: move the exceptionally large value errors from error to debug level
Almost all reports from users, I have seen in last years, were not valid.
The report is also printed when the system scheduler does not wake
the pulseaudio thread in the right time. Users are not able to distinguish
between slow machine and the real problem.

Move the log level from 'error' to 'debug' for those messages.

The right fix should be to measure the time between the call invocation and
return to determine (and skip) the scheduling problems, but it is another
extra code just to debug things.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-10-26 15:48:35 +00:00
Arun Raghavan
314e97d995 rtp: gstreamer: Account for rounding errors in RTP timestamp conversion
Since the RTP timestamp is converted to time units and back, a small
error can creep up, which then results in a single frame error in where
we place the buffer in the output memblockq. This results in minor
glitches, so we check for and eliminate the error.
2020-10-23 12:11:35 -04:00
Arun Raghavan
5f12dde2f5 rtp: gstreamer: Don't count on buffer DTS for capture time
With GStreamer 1.18, the old behaviour of storing the capture time in
DTS is gone (which is reasonable, since the semantics really don't
match). So instead, we get a capture timestamp when the buffer is being
pushed from udpsrc. This should eventually move into udpsrc, and the
timestamp should come from the cmsg instead of the clock.

We still fallback to the DTS if the meta isn't available, as the meta
might be dropped in older versions of rtpL16pay due to a bug.
2020-10-23 12:11:35 -04:00
Igor V. Kovalenko
3fc2ac10c6 module-bluez5-discover: avoid use after free on de-init
Hashmap loaded_device_paths contain objects holding keys to entries, and
these objects must be alive while map is emptied.

Reorder freeing this hashmap before destroying device objects to fix
crash on exit.
2020-10-23 04:57:15 -04:00
Igor V. Kovalenko
ef6ceb83a2 build-sys: meson: adjust path to gsettings-helper runing from build tree 2020-10-20 15:24:52 -04:00
Arun Raghavan
40bb058a31 build-sys: meson: Add libm dep to raop module
This is required for using pow().
2020-10-20 14:37:10 -04:00
Igor V. Kovalenko
44c5317624 device-port: fire port available changed hook after streams are moved
If port becomes unavailable then PA_CORE_HOOK_PORT_AVAILABLE_CHANGED
callbacks may eventually destroy related source or sink object. Call
this hook after stream is moved to prevent crash reading from freed
memory.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1008
2020-10-20 17:31:29 +03:00
Arun Raghavan
7f4d7fcf5f Revert "alsa-mixer: support up to 8 channels per mixer element"
This reverts commit e0ab9fa4a4.

The change broke some Xonar cards, and we probably don't want to hold up
the 14.0 release for this.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1009
2020-10-13 21:03:30 -04:00
Igor V. Kovalenko
05f567086b module-stream-restore: check if dbus entry exists in dbus_entries map before creating it
If write_entry fails to store new entry in database, next time we can try creating new entry again.
With DBUS enabled this will create another dbus entry for same name leading to crash inserting duplicate into dbus_entries map.

Fix this by checking if dbus entry exists in dbus_entries map before creating it.

Fixes: #974
2020-10-13 10:35:44 +00:00
Igor V. Kovalenko
99b2d88282 module-stream-restore: log error writing volume/mute/device entry to database 2020-10-13 10:35:44 +00:00
Jaroslav Kysela
e0ab9fa4a4 alsa-mixer: support up to 8 channels per mixer element
We have at least one USB hardware which supports the 8
channels in one mixer element:

  https://github.com/alsa-project/alsa-ucm-conf/pull/25

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-10-13 10:27:59 +00:00
Tanu Kaskinen
06990e32ff alsa-mixer: Document the intended-roles mapping option 2020-10-13 13:22:11 +03:00
Jaroslav Kysela
6101798c7a alsa: fix type for legacy hdmi devices
Although the hdmi-output is in well_known_descriptions[] table,
the hdmi device names are indexed (hdmi-output-0), thus there
is no match to assign the proper type automatically.

This patch puts the correct hdmi type to all relevant hdmi
configuration files.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-10-04 21:39:33 +02:00
Jaroslav Kysela
a46bdcedc1 alsa: fix analog-input-microphone-headset device type
From: Hui Wang <hui.wang@canonical.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-10-04 14:22:53 +03:00
Jaroslav Kysela
3efcb6847d alsa: mixer - reorder the type field in path parser
The items array is assigned later and the order of fields is important.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-10-04 14:22:53 +03:00
Michael Pivonka
36a86d4149 alsa-mixer: Add Razer Kraken Tournament Edition USB headset 2020-09-29 15:32:45 +00:00
Ralph Seichter
0050e5863a macos: Add missing import statement
Add missing import of util.h. This fixes a build failure with the
Xcode 12 command line tools which manifests as follows:

  error: implicit declaration of function 'pa_thread_make_realtime'
  is invalid in C99 [-Werror,-Wimplicit-function-declaration]

Ref https://trac.macports.org/ticket/61107
2020-09-28 15:44:38 +03:00
Sanchayan Maity
410db7d216 rtp: Fix sending of small packets
The current implementation for RTP send isn't optimised for sending MTU
bytes of data like rtp-native. For eg. if MTU is 1280 bytes and we have
to send 1276 bytes, two packets are send out one of 1268 bytes and other
of 8 bytes. Sending out a packet of 8 bytes has a significant overhead
and we should be sending MTU bytes of data.

Fix this by accumulating MTU bytes of data and sending data only on
accumulation of MTU worth of data.
2020-09-21 10:06:48 +05:30
Jaroslav Kysela
c1a7e3c59d ucm: add possibility to skip the UCM card completely (Linked)
We have a requirement to "hide" some hardware drivers, because
other (main) UCM configuration will refer them.

This patch use special error codes to notify the upper layers
to skip the module loading.

BugLink: https://github.com/alsa-project/alsa-ucm-conf/issues/30
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-09-17 14:52:50 +00:00
Arun Raghavan
460d0c0b79 alsa-mixer: Add an explicit profile-set for Audigy devices
These lost analog-mono support when we made that a fallback profile, as
the stereo-fallback would be picked up as the only input profile, and
that does not work in duplex mode.

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/750
2020-09-02 16:30:06 -04:00