Remove old pipewire and wireplumber ebuilds
This commit is contained in:
parent
80e14ee793
commit
fd1f02c17e
@ -1 +0,0 @@
|
|||||||
DIST pipewire-0.3.51.tar.gz 1789070 BLAKE2B 8538eb9f2178efa26365f30b324b707826e580caa1fd9c09b62c561c140c14186e0d2b04808fa78eb5642ddccf1a347def19934ecd654be06b215a693075b6fc SHA512 a762fd260b4b14ad9ef142be11ab1c22268da6726e2179559ffb254f0ce7daf7a502779e33c64313a9c6a9fc1bd15150b76be04ec81aa27c35dbb4333cecdb4a
|
|
@ -1,17 +0,0 @@
|
|||||||
# Load pipewire configuration at conf hook processing time. This allows to
|
|
||||||
# override pulseaudio defaults configuration which is also applied via hook.
|
|
||||||
#
|
|
||||||
# Note since hooks are run after @GENTOO_PORTAGE_EPREFIX@/etc/asound.conf and ~/.asoundrc are applied,
|
|
||||||
# we load these again here make sure that user configuration takes precedence.
|
|
||||||
|
|
||||||
@hooks [
|
|
||||||
{
|
|
||||||
func load
|
|
||||||
files [
|
|
||||||
"@GENTOO_PORTAGE_EPREFIX@/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf"
|
|
||||||
"@GENTOO_PORTAGE_EPREFIX@/etc/asound.conf"
|
|
||||||
"~/.asoundrc"
|
|
||||||
]
|
|
||||||
errors false
|
|
||||||
}
|
|
||||||
]
|
|
@ -1,29 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# PipeWire launcher script for XDG compliant desktops on OpenRC.
|
|
||||||
#
|
|
||||||
# systemd users are very _STRONGLY_ advised to use the much
|
|
||||||
# more reliable and predictable user units instead.
|
|
||||||
|
|
||||||
# WARNING: This script assumes being run inside XDG compliant session,
|
|
||||||
# which means D-Bus session instance is expected to be correctly set up
|
|
||||||
# prior to this script starting. If that is not true, things may break!
|
|
||||||
|
|
||||||
# Best to reap any existing daemons and only then try to start a new set.
|
|
||||||
pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
|
|
||||||
|
|
||||||
# The core daemon which by itself does probably nothing.
|
|
||||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire &
|
|
||||||
|
|
||||||
# The so called pipewire-pulse daemon used for PulseAudio compatibility.
|
|
||||||
# Commenting this out will stop the PA proxying daemon from starting,
|
|
||||||
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
|
|
||||||
# clients will still have access to audio and may end up clashing with
|
|
||||||
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
|
|
||||||
@GENTOO_PORTAGE_EPREFIX@/usr/bin/pipewire -c pipewire-pulse.conf &
|
|
||||||
|
|
||||||
# Hack for bug #822498
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
# Finally a session manager is required for PipeWire to do anything.
|
|
||||||
exec @GENTOO_PORTAGE_EPREFIX@/usr/bin/wireplumber
|
|
@ -1,12 +0,0 @@
|
|||||||
diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in
|
|
||||||
--- a/src/daemon/pipewire.conf.in
|
|
||||||
+++ b/src/daemon/pipewire.conf.in
|
|
||||||
@@ -6,7 +6,7 @@ context.properties = {
|
|
||||||
#support.dbus = true
|
|
||||||
#link.max-buffers = 64
|
|
||||||
link.max-buffers = 16 # version < 3 clients can't handle more
|
|
||||||
- #mem.warn-mlock = false
|
|
||||||
+ mem.warn-mlock = true # Gentoo should have good RLIMITs now
|
|
||||||
#mem.allow-mlock = true
|
|
||||||
#mem.mlock-all = false
|
|
||||||
#clock.power-of-two-quantum = true
|
|
@ -1,55 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/aaa015d0c0c66b64c7198a34ad3c4b43445667d2
|
|
||||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/1a5ec4452fa21592eaeeb823ad95a1db6eb60376
|
|
||||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/f857fd46262b1a90ad94f86e34216a1a886d9463
|
|
||||||
|
|
||||||
From aaa015d0c0c66b64c7198a34ad3c4b43445667d2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wim Taymans <wtaymans@redhat.com>
|
|
||||||
Date: Tue, 19 Jul 2022 13:06:52 +0200
|
|
||||||
Subject: [PATCH] avb: fix compilation on big endian
|
|
||||||
|
|
||||||
--- a/spa/plugins/avb/avbtp/packets.h
|
|
||||||
+++ b/spa/plugins/avb/avbtp/packets.h
|
|
||||||
@@ -116,7 +116,7 @@ struct spa_avbtp_packet_aaf {
|
|
||||||
unsigned gv:1;
|
|
||||||
unsigned tv:1;
|
|
||||||
|
|
||||||
- uint8_t seq_number;
|
|
||||||
+ uint8_t seq_num;
|
|
||||||
|
|
||||||
unsigned _r2:7;
|
|
||||||
unsigned tu:1;
|
|
||||||
GitLab
|
|
||||||
From 1a5ec4452fa21592eaeeb823ad95a1db6eb60376 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wim Taymans <wtaymans@redhat.com>
|
|
||||||
Date: Tue, 19 Jul 2022 13:49:42 +0200
|
|
||||||
Subject: [PATCH] avb: fix compilation on big endian
|
|
||||||
|
|
||||||
--- a/src/modules/module-avb/aaf.h
|
|
||||||
+++ b/src/modules/module-avb/aaf.h
|
|
||||||
@@ -35,7 +35,7 @@ struct avb_packet_aaf {
|
|
||||||
unsigned gv:1;
|
|
||||||
unsigned tv:1;
|
|
||||||
|
|
||||||
- uint8_t seq_number;
|
|
||||||
+ uint8_t seq_num;
|
|
||||||
|
|
||||||
unsigned _r2:7;
|
|
||||||
unsigned tu:1;
|
|
||||||
GitLab
|
|
||||||
From f857fd46262b1a90ad94f86e34216a1a886d9463 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wim Taymans <wtaymans@redhat.com>
|
|
||||||
Date: Tue, 19 Jul 2022 14:07:16 +0200
|
|
||||||
Subject: [PATCH] avb: fix compilation on big endian
|
|
||||||
|
|
||||||
--- a/src/modules/module-avb/iec61883.h
|
|
||||||
+++ b/src/modules/module-avb/iec61883.h
|
|
||||||
@@ -37,7 +37,7 @@ struct avb_packet_iec61883 {
|
|
||||||
unsigned gv:1;
|
|
||||||
unsigned tv:1;
|
|
||||||
|
|
||||||
- uint8_t seq_number;
|
|
||||||
+ uint8_t seq_num;
|
|
||||||
|
|
||||||
unsigned _r2:7;
|
|
||||||
unsigned tu:1;
|
|
||||||
GitLab
|
|
@ -1,87 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/94a857550b566472e5ab51191e1b34098e5a9506
|
|
||||||
|
|
||||||
From 94a857550b566472e5ab51191e1b34098e5a9506 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wim Taymans <wtaymans@redhat.com>
|
|
||||||
Date: Mon, 3 Oct 2022 09:44:32 +0200
|
|
||||||
Subject: [PATCH] filter-chain: alloc port data per handle.
|
|
||||||
|
|
||||||
--- a/src/modules/module-filter-chain.c
|
|
||||||
+++ b/src/modules/module-filter-chain.c
|
|
||||||
@@ -1501,7 +1501,6 @@ static int load_node(struct graph *graph, struct spa_json *json)
|
|
||||||
bool have_config = false;
|
|
||||||
uint32_t i;
|
|
||||||
int res;
|
|
||||||
- float *data;
|
|
||||||
|
|
||||||
while (spa_json_get_string(json, key, sizeof(key)) > 0) {
|
|
||||||
if (spa_streq("type", key)) {
|
|
||||||
@@ -1576,14 +1575,6 @@ static int load_node(struct graph *graph, struct spa_json *json)
|
|
||||||
port->idx = i;
|
|
||||||
port->external = SPA_ID_INVALID;
|
|
||||||
port->p = desc->output[i];
|
|
||||||
- if ((data = port->audio_data[i]) == NULL) {
|
|
||||||
- data = calloc(1, MAX_SAMPLES * sizeof(float));
|
|
||||||
- if (data == NULL) {
|
|
||||||
- pw_log_error("cannot create port data: %m");
|
|
||||||
- return -errno;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- port->audio_data[i] = data;
|
|
||||||
spa_list_init(&port->link_list);
|
|
||||||
}
|
|
||||||
for (i = 0; i < desc->n_control; i++) {
|
|
||||||
@@ -1629,6 +1620,26 @@ static void node_cleanup(struct node *node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int port_ensure_data(struct port *port, uint32_t i)
|
|
||||||
+{
|
|
||||||
+ float *data;
|
|
||||||
+ if ((data = port->audio_data[i]) == NULL) {
|
|
||||||
+ data = calloc(1, MAX_SAMPLES * sizeof(float));
|
|
||||||
+ if (data == NULL) {
|
|
||||||
+ pw_log_error("cannot create port data: %m");
|
|
||||||
+ return -errno;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ port->audio_data[i] = data;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void port_free_data(struct port *port, uint32_t i)
|
|
||||||
+{
|
|
||||||
+ free(port->audio_data[i]);
|
|
||||||
+ port->audio_data[i] = NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void node_free(struct node *node)
|
|
||||||
{
|
|
||||||
uint32_t i, j;
|
|
||||||
@@ -1636,7 +1647,7 @@ static void node_free(struct node *node)
|
|
||||||
spa_list_remove(&node->link);
|
|
||||||
for (i = 0; i < node->n_hndl; i++) {
|
|
||||||
for (j = 0; j < node->desc->n_output; j++)
|
|
||||||
- free(node->output_port[j].audio_data[i]);
|
|
||||||
+ port_free_data(&node->output_port[j], i);
|
|
||||||
}
|
|
||||||
node_cleanup(node);
|
|
||||||
descriptor_unref(node->desc);
|
|
||||||
@@ -1688,6 +1699,8 @@ static int graph_instantiate(struct graph *graph)
|
|
||||||
|
|
||||||
spa_list_for_each(link, &port->link_list, input_link) {
|
|
||||||
struct port *peer = link->output;
|
|
||||||
+ if ((res = port_ensure_data(peer, i)) < 0)
|
|
||||||
+ goto error;
|
|
||||||
pw_log_info("connect input port %s[%d]:%s %p",
|
|
||||||
node->name, i, d->ports[port->p].name,
|
|
||||||
peer->audio_data[i]);
|
|
||||||
@@ -1696,6 +1709,8 @@ static int graph_instantiate(struct graph *graph)
|
|
||||||
}
|
|
||||||
for (j = 0; j < desc->n_output; j++) {
|
|
||||||
port = &node->output_port[j];
|
|
||||||
+ if ((res = port_ensure_data(port, i)) < 0)
|
|
||||||
+ goto error;
|
|
||||||
pw_log_info("connect output port %s[%d]:%s %p",
|
|
||||||
node->name, i, d->ports[port->p].name,
|
|
||||||
port->audio_data[i]);
|
|
||||||
GitLab
|
|
@ -1,12 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Version=1.0
|
|
||||||
Name[de]=PipeWire Mediensystem
|
|
||||||
Name=PipeWire Media System
|
|
||||||
Comment[de]=Das PipeWire Mediensystem starten
|
|
||||||
Comment=Start the PipeWire Media System
|
|
||||||
Exec=/usr/libexec/pipewire-launcher
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
X-GNOME-HiddenUnderSystemd=true
|
|
||||||
X-KDE-HiddenUnderSystemd=true
|
|
||||||
X-systemd-skip=true
|
|
@ -1,12 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Version=1.0
|
|
||||||
Name[de]=PipeWire Mediensystem
|
|
||||||
Name=PipeWire Media System
|
|
||||||
Comment[de]=Das PipeWire Mediensystem starten
|
|
||||||
Comment=Start the PipeWire Media System
|
|
||||||
Exec=/usr/bin/gentoo-pipewire-launcher
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
X-GNOME-HiddenUnderSystemd=true
|
|
||||||
X-KDE-HiddenUnderSystemd=true
|
|
||||||
X-systemd-skip=true
|
|
@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
|
|
||||||
<pkgmetadata>
|
|
||||||
<maintainer type="project">
|
|
||||||
<email>gnome@gentoo.org</email>
|
|
||||||
<name>Gentoo GNOME Desktop</name>
|
|
||||||
</maintainer>
|
|
||||||
<maintainer type="person">
|
|
||||||
<email>sam@gentoo.org</email>
|
|
||||||
<name>Sam James</name>
|
|
||||||
</maintainer>
|
|
||||||
<upstream>
|
|
||||||
<bugs-to>https://gitlab.freedesktop.org/pipewire/pipewire/-/issues</bugs-to>
|
|
||||||
<changelog>https://gitlab.freedesktop.org/pipewire/pipewire/-/releases</changelog>
|
|
||||||
<doc>https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home</doc>
|
|
||||||
</upstream>
|
|
||||||
<use>
|
|
||||||
<flag name="echo-cancel">Enable WebRTC-based echo canceller via <pkg>media-libs/webrtc-audio-processing</pkg></flag>
|
|
||||||
<flag name="extra">Build pw-cat/pw-play/pw-record</flag>
|
|
||||||
<flag name="flatpak">Enable Flatpak support</flag>
|
|
||||||
<flag name="jack-client">Install a plugin for running PipeWire as a JACK client</flag>
|
|
||||||
<flag name="jack-sdk">Use PipeWire as JACK replacement</flag>
|
|
||||||
<flag name="lv2">Allow loading LV2 plugins via <pkg>media-libs/lv2</pkg></flag>
|
|
||||||
<flag name="pipewire-alsa">Replace PulseAudio's ALSA plugin with PipeWire's plugin</flag>
|
|
||||||
<flag name="ssl">Enable raop-sink support (needs <pkg>dev-libs/openssl</pkg>)</flag>
|
|
||||||
<flag name="system-service">Install systemd unit files for running as a system service. Not recommended.</flag>
|
|
||||||
<flag name="X">Enable audible bell for X11</flag>
|
|
||||||
<flag name="sound-server">Provide sound server using ALSA and bluetooth devices</flag>
|
|
||||||
</use>
|
|
||||||
</pkgmetadata>
|
|
@ -1,363 +0,0 @@
|
|||||||
# Copyright 1999-2022 Gentoo Authors
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
EAPI=8
|
|
||||||
|
|
||||||
PYTHON_COMPAT=( python3_{8..10} )
|
|
||||||
|
|
||||||
inherit flag-o-matic meson-multilib optfeature prefix python-any-r1 systemd udev
|
|
||||||
|
|
||||||
if [[ ${PV} == 9999 ]]; then
|
|
||||||
EGIT_REPO_URI="https://gitlab.freedesktop.org/${PN}/${PN}.git"
|
|
||||||
inherit git-r3
|
|
||||||
else
|
|
||||||
if [[ ${PV} == *_p* ]] ; then
|
|
||||||
MY_COMMIT=""
|
|
||||||
SRC_URI="https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/${MY_COMMIT}/pipewire-${MY_COMMIT}.tar.bz2 -> ${P}.tar.bz2"
|
|
||||||
S="${WORKDIR}"/${PN}-${MY_COMMIT}
|
|
||||||
else
|
|
||||||
SRC_URI="https://gitlab.freedesktop.org/${PN}/${PN}/-/archive/${PV}/${P}.tar.gz"
|
|
||||||
fi
|
|
||||||
|
|
||||||
KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~sparc x86"
|
|
||||||
fi
|
|
||||||
|
|
||||||
DESCRIPTION="Multimedia processing graphs"
|
|
||||||
HOMEPAGE="https://pipewire.org/"
|
|
||||||
|
|
||||||
LICENSE="MIT LGPL-2.1+ GPL-2"
|
|
||||||
# ABI was broken in 0.3.42 for https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/49
|
|
||||||
SLOT="0/0.4"
|
|
||||||
IUSE="bluetooth doc echo-cancel extra gstreamer jack-client jack-sdk lv2 pipewire-alsa ssl system-service systemd test udev v4l X zeroconf"
|
|
||||||
|
|
||||||
# Once replacing system JACK libraries is possible, it's likely that
|
|
||||||
# jack-client IUSE will need blocking to avoid users accidentally
|
|
||||||
# configuring their systems to send PW sink output to the emulated
|
|
||||||
# JACK's sink - doing so is likely to yield no audio, cause a CPU
|
|
||||||
# cycles consuming loop (and may even cause GUI crashes)!
|
|
||||||
|
|
||||||
REQUIRED_USE="
|
|
||||||
jack-sdk? ( !jack-client )
|
|
||||||
system-service? ( systemd )
|
|
||||||
"
|
|
||||||
|
|
||||||
RESTRICT="!test? ( test )"
|
|
||||||
|
|
||||||
BDEPEND="
|
|
||||||
>=dev-util/meson-0.59
|
|
||||||
virtual/pkgconfig
|
|
||||||
${PYTHON_DEPS}
|
|
||||||
$(python_gen_any_dep 'dev-python/docutils[${PYTHON_USEDEP}]')
|
|
||||||
doc? (
|
|
||||||
app-doc/doxygen
|
|
||||||
media-gfx/graphviz
|
|
||||||
)
|
|
||||||
"
|
|
||||||
RDEPEND="
|
|
||||||
acct-group/audio
|
|
||||||
media-libs/alsa-lib
|
|
||||||
sys-apps/dbus[${MULTILIB_USEDEP}]
|
|
||||||
sys-libs/readline:=
|
|
||||||
sys-libs/ncurses:=[unicode(+)]
|
|
||||||
virtual/libintl[${MULTILIB_USEDEP}]
|
|
||||||
bluetooth? (
|
|
||||||
media-libs/fdk-aac
|
|
||||||
media-libs/libldac
|
|
||||||
media-libs/libfreeaptx
|
|
||||||
media-libs/sbc
|
|
||||||
>=net-wireless/bluez-4.101:=
|
|
||||||
virtual/libusb:1
|
|
||||||
)
|
|
||||||
echo-cancel? ( media-libs/webrtc-audio-processing:0 )
|
|
||||||
extra? (
|
|
||||||
>=media-libs/libsndfile-1.0.20
|
|
||||||
)
|
|
||||||
gstreamer? (
|
|
||||||
>=dev-libs/glib-2.32.0:2
|
|
||||||
>=media-libs/gstreamer-1.10.0:1.0
|
|
||||||
media-libs/gst-plugins-base:1.0
|
|
||||||
)
|
|
||||||
jack-client? ( >=media-sound/jack2-1.9.10:2[dbus] )
|
|
||||||
jack-sdk? (
|
|
||||||
!media-sound/jack-audio-connection-kit
|
|
||||||
!media-sound/jack2
|
|
||||||
)
|
|
||||||
lv2? ( media-libs/lilv )
|
|
||||||
pipewire-alsa? (
|
|
||||||
>=media-libs/alsa-lib-1.1.7[${MULTILIB_USEDEP}]
|
|
||||||
)
|
|
||||||
!pipewire-alsa? ( media-plugins/alsa-plugins[${MULTILIB_USEDEP},pulseaudio] )
|
|
||||||
ssl? ( dev-libs/openssl:= )
|
|
||||||
systemd? ( sys-apps/systemd )
|
|
||||||
system-service? (
|
|
||||||
acct-user/pipewire
|
|
||||||
acct-group/pipewire
|
|
||||||
)
|
|
||||||
udev? ( virtual/libudev[${MULTILIB_USEDEP}] )
|
|
||||||
v4l? ( media-libs/libv4l )
|
|
||||||
X? (
|
|
||||||
media-libs/libcanberra
|
|
||||||
x11-libs/libX11
|
|
||||||
x11-libs/libXfixes
|
|
||||||
)
|
|
||||||
zeroconf? ( net-dns/avahi )
|
|
||||||
"
|
|
||||||
|
|
||||||
DEPEND="${RDEPEND}"
|
|
||||||
|
|
||||||
# TODO: Consider use cases where pipewire is not used for driving audio
|
|
||||||
# Doing so with WirePlumber currently involves editing Lua scripts
|
|
||||||
PDEPEND=">=media-video/wireplumber-0.4.8-r3"
|
|
||||||
|
|
||||||
# Present RDEPEND that are currently always disabled due to the PW
|
|
||||||
# code using them being required to be disabled by Gentoo guidelines
|
|
||||||
# (i.e. developer binaries not meant for users) and unready code
|
|
||||||
# media-video/ffmpeg:=
|
|
||||||
# media-libs/libsdl2
|
|
||||||
# >=media-libs/vulkan-loader-1.1.69
|
|
||||||
#
|
|
||||||
# Ditto for DEPEND
|
|
||||||
# >=dev-util/vulkan-headers-1.1.69
|
|
||||||
|
|
||||||
DOCS=( {README,INSTALL}.md NEWS )
|
|
||||||
|
|
||||||
PATCHES=(
|
|
||||||
"${FILESDIR}"/${PN}-0.3.25-enable-failed-mlock-warning.patch
|
|
||||||
)
|
|
||||||
|
|
||||||
# limitsdfile related code taken from =sys-auth/realtime-base-0.1
|
|
||||||
# with changes as necessary.
|
|
||||||
limitsdfile=40-${PN}.conf
|
|
||||||
|
|
||||||
python_check_deps() {
|
|
||||||
python_has_version "dev-python/docutils[${PYTHON_USEDEP}]"
|
|
||||||
}
|
|
||||||
|
|
||||||
src_prepare() {
|
|
||||||
default
|
|
||||||
|
|
||||||
einfo "Generating ${limitsdfile}"
|
|
||||||
cat > ${limitsdfile} <<- EOF || die
|
|
||||||
# Start of ${limitsdfile} from ${P}
|
|
||||||
|
|
||||||
@audio - memlock 256
|
|
||||||
|
|
||||||
$(use system-service && {
|
|
||||||
echo @pipewire - rtprio 95
|
|
||||||
echo @pipewire - nice -19
|
|
||||||
echo @pipewire - memlock 4194304
|
|
||||||
})
|
|
||||||
|
|
||||||
# End of ${limitsdfile} from ${P}
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
multilib_src_configure() {
|
|
||||||
# https://bugs.gentoo.org/838301
|
|
||||||
filter-flags -fno-semantic-interposition
|
|
||||||
|
|
||||||
local emesonargs=(
|
|
||||||
-Ddocdir="${EPREFIX}"/usr/share/doc/${PF}
|
|
||||||
|
|
||||||
$(meson_native_use_feature zeroconf avahi)
|
|
||||||
$(meson_native_use_feature doc docs)
|
|
||||||
$(meson_native_enabled examples) # TODO: Figure out if this is still important now that media-session gone
|
|
||||||
$(meson_native_enabled man)
|
|
||||||
$(meson_feature test tests)
|
|
||||||
-Dinstalled_tests=disabled # Matches upstream; Gentoo never installs tests
|
|
||||||
$(meson_native_use_feature gstreamer)
|
|
||||||
$(meson_native_use_feature gstreamer gstreamer-device-provider)
|
|
||||||
$(meson_native_use_feature systemd)
|
|
||||||
|
|
||||||
$(meson_native_use_feature system-service systemd-system-service)
|
|
||||||
-Dsystemd-system-unit-dir="$(systemd_get_systemunitdir)"
|
|
||||||
-Dsystemd-user-unit-dir="$(systemd_get_userunitdir)"
|
|
||||||
|
|
||||||
$(meson_native_use_feature systemd systemd-user-service)
|
|
||||||
$(meson_feature pipewire-alsa) # Allows integrating ALSA apps into PW graph
|
|
||||||
-Dspa-plugins=enabled
|
|
||||||
-Dalsa=enabled # Allows using kernel ALSA for sound I/O (NOTE: media-session is gone so IUSE=alsa/spa_alsa/alsa-backend might be possible)
|
|
||||||
-Daudiomixer=enabled # Matches upstream
|
|
||||||
-Daudioconvert=enabled # Matches upstream
|
|
||||||
$(meson_native_use_feature bluetooth bluez5)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-backend-hsp-native)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-backend-hfp-native)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-backend-ofono)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-backend-hsphfpd)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-codec-aac)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-codec-aptx)
|
|
||||||
$(meson_native_use_feature bluetooth bluez5-codec-ldac)
|
|
||||||
$(meson_native_use_feature bluetooth libusb) # At least for now only used by bluez5 native (quirk detection of adapters)
|
|
||||||
$(meson_native_use_feature echo-cancel echo-cancel-webrtc) #807889
|
|
||||||
-Dcontrol=enabled # Matches upstream
|
|
||||||
-Daudiotestsrc=enabled # Matches upstream
|
|
||||||
-Dffmpeg=disabled # Disabled by upstream and no major developments to spa/plugins/ffmpeg/ since May 2020
|
|
||||||
-Dpipewire-jack=enabled # Allows integrating JACK apps into PW graph
|
|
||||||
$(meson_native_use_feature jack-client jack) # Allows PW to act as a JACK client
|
|
||||||
$(meson_use jack-sdk jack-devel)
|
|
||||||
$(usex jack-sdk "-Dlibjack-path=${EPREFIX}/usr/$(get_libdir)" '')
|
|
||||||
-Dsupport=enabled # Miscellaneous/common plugins, such as null sink
|
|
||||||
-Devl=disabled # Matches upstream
|
|
||||||
-Dtest=disabled # fakesink and fakesource plugins
|
|
||||||
$(meson_native_use_feature lv2)
|
|
||||||
$(meson_native_use_feature v4l v4l2)
|
|
||||||
-Dlibcamera=disabled # libcamera is not in Portage tree
|
|
||||||
$(meson_native_use_feature ssl raop)
|
|
||||||
-Dvideoconvert=enabled # Matches upstream
|
|
||||||
-Dvideotestsrc=enabled # Matches upstream
|
|
||||||
-Dvolume=enabled # Matches upstream
|
|
||||||
-Dvulkan=disabled # Uses pre-compiled Vulkan compute shader to provide a CGI video source (dev thing; disabled by upstream)
|
|
||||||
$(meson_native_use_feature extra pw-cat)
|
|
||||||
$(meson_feature udev)
|
|
||||||
-Dudevrulesdir="${EPREFIX}$(get_udevdir)/rules.d"
|
|
||||||
-Dsdl2=disabled # Controls SDL2 dependent code (currently only examples when -Dinstalled_tests=enabled which we never install)
|
|
||||||
$(meson_native_use_feature extra sndfile) # Enables libsndfile dependent code (currently only pw-cat)
|
|
||||||
-Dsession-managers="[]" # All available session managers are now their own projects, so there's nothing to build
|
|
||||||
|
|
||||||
# Just for bell sounds in X11 right now.
|
|
||||||
$(meson_native_use_feature X x11)
|
|
||||||
$(meson_native_use_feature X x11-xfixes)
|
|
||||||
$(meson_native_use_feature X libcanberra)
|
|
||||||
)
|
|
||||||
|
|
||||||
meson_src_configure
|
|
||||||
}
|
|
||||||
|
|
||||||
multilib_src_install() {
|
|
||||||
# Our custom DOCS do not exist in multilib source directory
|
|
||||||
DOCS= meson_src_install
|
|
||||||
}
|
|
||||||
|
|
||||||
multilib_src_install_all() {
|
|
||||||
einstalldocs
|
|
||||||
|
|
||||||
insinto /etc/security/limits.d
|
|
||||||
doins ${limitsdfile}
|
|
||||||
|
|
||||||
if use pipewire-alsa; then
|
|
||||||
dodir /etc/alsa/conf.d
|
|
||||||
|
|
||||||
# Install pipewire conf loader hook
|
|
||||||
insinto /usr/share/alsa/alsa.conf.d
|
|
||||||
doins "${FILESDIR}"/99-pipewire-default-hook.conf
|
|
||||||
eprefixify "${ED}"/usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf
|
|
||||||
|
|
||||||
# These will break if someone has /etc that is a symbolic link to a subfolder! See #724222
|
|
||||||
# And the current dosym8 -r implementation is likely affected by the same issue, too.
|
|
||||||
dosym ../../../usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d/50-pipewire.conf
|
|
||||||
dosym ../../../usr/share/alsa/alsa.conf.d/99-pipewire-default-hook.conf /etc/alsa/conf.d/99-pipewire-default-hook.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! use systemd; then
|
|
||||||
insinto /etc/xdg/autostart
|
|
||||||
newins "${FILESDIR}"/pipewire.desktop-r1 pipewire.desktop
|
|
||||||
|
|
||||||
exeinto /usr/bin
|
|
||||||
newexe "${FILESDIR}"/gentoo-pipewire-launcher.in gentoo-pipewire-launcher
|
|
||||||
eprefixify "${ED}"/usr/bin/gentoo-pipewire-launcher
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
pkg_postinst() {
|
|
||||||
use udev && udev_reload
|
|
||||||
|
|
||||||
elog "It is recommended to raise RLIMIT_MEMLOCK to 256 for users"
|
|
||||||
elog "using PipeWire. Do it either manually or add yourself"
|
|
||||||
elog "to the 'audio' group:"
|
|
||||||
elog
|
|
||||||
elog " usermod -aG audio <youruser>"
|
|
||||||
elog
|
|
||||||
|
|
||||||
if ! use jack-sdk; then
|
|
||||||
elog "JACK emulation is incomplete and not all programs will work. PipeWire's"
|
|
||||||
elog "alternative libraries have been installed to a non-default location."
|
|
||||||
elog "To use them, put pw-jack <application> before every JACK application."
|
|
||||||
elog "When using pw-jack, do not run jackd/jackdbus. However, a virtual/jack"
|
|
||||||
elog "provider is still needed to compile the JACK applications themselves."
|
|
||||||
elog
|
|
||||||
fi
|
|
||||||
|
|
||||||
if use systemd; then
|
|
||||||
elog "When switching from PulseAudio, you may need to disable PulseAudio:"
|
|
||||||
elog
|
|
||||||
elog " systemctl --user disable pulseaudio.service pulseaudio.socket"
|
|
||||||
elog
|
|
||||||
elog "To use PipeWire, the user units must be manually enabled"
|
|
||||||
elog "by running this command as each user you use for desktop activities:"
|
|
||||||
elog
|
|
||||||
elog " systemctl --user enable pipewire.socket pipewire-pulse.socket"
|
|
||||||
elog
|
|
||||||
elog "A reboot is recommended to avoid interferences from still running"
|
|
||||||
elog "PulseAudio daemon."
|
|
||||||
elog
|
|
||||||
elog "Both new users and those upgrading need to enable WirePlumber"
|
|
||||||
elog "for relevant users:"
|
|
||||||
elog
|
|
||||||
elog " systemctl --user disable pipewire-media-session.service"
|
|
||||||
elog " systemctl --user --force enable wireplumber.service"
|
|
||||||
elog
|
|
||||||
elog "Root user may replace --user with --global to change system default"
|
|
||||||
elog "configuration for all of the above commands."
|
|
||||||
else
|
|
||||||
ewarn "PipeWire daemon startup has been moved to a launcher script!"
|
|
||||||
ewarn "Make sure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist or no"
|
|
||||||
ewarn "longer is set to start a session manager or PulseAudio compatibility daemon (all"
|
|
||||||
ewarn "lines similar to '{ path = /usr/bin/pipewire*' should be commented out)"
|
|
||||||
ewarn
|
|
||||||
ewarn "Those manually starting /usr/bin/pipewire via .xinitrc or similar _must_ from"
|
|
||||||
ewarn "now on start ${EROOT}/usr/bin/gentoo-pipewire-launcher instead! It is highly"
|
|
||||||
ewarn "advised that a D-Bus user session is set up before starting the script."
|
|
||||||
ewarn
|
|
||||||
if has_version 'media-sound/pulseaudio[daemon]' || has_version 'media-sound/pulseaudio-daemon'; then
|
|
||||||
elog "This ebuild auto-enables PulseAudio replacement. Because of that, users"
|
|
||||||
elog "are recommended to edit pulseaudio client configuration files:"
|
|
||||||
elog "${EROOT}/etc/pulse/client.conf and ${EROOT}/etc/pulse/client.conf.d/enable-autospawn.conf"
|
|
||||||
elog "if it exists, and disable autospawning of the original daemon by setting:"
|
|
||||||
elog
|
|
||||||
elog " autospawn = no"
|
|
||||||
elog
|
|
||||||
elog "Please note that the semicolon (;) must _NOT_ be at the beginning of the line!"
|
|
||||||
elog
|
|
||||||
elog "Alternatively, if replacing PulseAudio daemon is not desired, edit"
|
|
||||||
elog "${EROOT}/usr/bin/gentoo-pipewire-launcher by commenting out the relevant"
|
|
||||||
elog "command:"
|
|
||||||
elog
|
|
||||||
elog "#${EROOT}/usr/bin/pipewire -c pipewire-pulse.conf &"
|
|
||||||
elog
|
|
||||||
fi
|
|
||||||
elog "NOTE:"
|
|
||||||
elog "Starting with PipeWire-0.3.30, this package is no longer installing its config"
|
|
||||||
elog "into ${EROOT}/etc/pipewire by default. In case you need to change"
|
|
||||||
elog "its config, please start by copying default config from ${EROOT}/usr/share/pipewire"
|
|
||||||
elog "and just override the sections you want to change."
|
|
||||||
fi
|
|
||||||
elog
|
|
||||||
|
|
||||||
elog "For latest tips and tricks, troubleshooting information and documentation"
|
|
||||||
elog "in general, please refer to https://wiki.gentoo.org/wiki/PipeWire"
|
|
||||||
elog
|
|
||||||
|
|
||||||
optfeature_header "The following can be installed for optional runtime features:"
|
|
||||||
optfeature "restricted realtime capabilities via D-Bus" sys-auth/rtkit
|
|
||||||
|
|
||||||
if has_version 'net-misc/ofono' ; then
|
|
||||||
ewarn "Native backend has become default. Please disable oFono via:"
|
|
||||||
if systemd_is_booted ; then
|
|
||||||
ewarn "systemctl disable ofono"
|
|
||||||
else
|
|
||||||
ewarn "rc-update delete ofono"
|
|
||||||
fi
|
|
||||||
ewarn
|
|
||||||
fi
|
|
||||||
|
|
||||||
if use system-service; then
|
|
||||||
ewarn
|
|
||||||
ewarn "WARNING: you have enabled the system-service USE flag, which installs"
|
|
||||||
ewarn "the system-wide systemd units that enable PipeWire to run as a system"
|
|
||||||
ewarn "service. This is more than likely NOT what you want. You are strongly"
|
|
||||||
ewarn "advised not to enable this mode and instead stick with systemd user"
|
|
||||||
ewarn "units. The default configuration files will likely not work out of"
|
|
||||||
ewarn "box, and you are on your own with configuration."
|
|
||||||
ewarn
|
|
||||||
fi
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
DIST wireplumber-0.4.10.tar.gz 395588 BLAKE2B 6df1af17d1e53ab1449a2f6f9af5a0c4f7b1cd981e07556e5ea3c6b4d5d624e66b97ce4f945f7ccccebbf72b75d35d10990fac11b5228275f27e5320885ff1ec SHA512 342e8bba2cf00faab71ef39bb361b5ada66ff3a68ccf7a756ea1ca402da6e94784eece277ca02992bc7573c51cb8b1bad33aa9c593b3d1bfe0bb0286e2f4506f
|
|
@ -1,117 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/c00c5a6675b6640db13111c808eaa3251917c412
|
|
||||||
|
|
||||||
From c00c5a6675b6640db13111c808eaa3251917c412 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
|
||||||
Date: Wed, 18 May 2022 10:51:41 -0400
|
|
||||||
Subject: [PATCH] alsa.lua: fix device name deduplication when reservation is
|
|
||||||
enabled
|
|
||||||
|
|
||||||
Fixes #241
|
|
||||||
---
|
|
||||||
src/scripts/monitors/alsa.lua | 47 +++++++++++++++++++----------------
|
|
||||||
1 file changed, 25 insertions(+), 22 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
|
|
||||||
index 01d241db..7beed3a8 100644
|
|
||||||
--- a/src/scripts/monitors/alsa.lua
|
|
||||||
+++ b/src/scripts/monitors/alsa.lua
|
|
||||||
@@ -11,6 +11,10 @@ local config = ... or {}
|
|
||||||
-- ensure config.properties is not nil
|
|
||||||
config.properties = config.properties or {}
|
|
||||||
|
|
||||||
+-- unique device/node name tables
|
|
||||||
+device_names_table = nil
|
|
||||||
+node_names_table = nil
|
|
||||||
+
|
|
||||||
-- preprocess rules and create Interest objects
|
|
||||||
for _, r in ipairs(config.rules or {}) do
|
|
||||||
r.interests = {}
|
|
||||||
@@ -41,16 +45,6 @@ function rulesApplyProperties(properties)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-function findDuplicate(parent, id, property, value)
|
|
||||||
- for i = 0, id - 1, 1 do
|
|
||||||
- local obj = parent:get_managed_object(i)
|
|
||||||
- if obj and obj.properties[property] == value then
|
|
||||||
- return true
|
|
||||||
- end
|
|
||||||
- end
|
|
||||||
- return false
|
|
||||||
-end
|
|
||||||
-
|
|
||||||
function nonempty(str)
|
|
||||||
return str ~= "" and str or nil
|
|
||||||
end
|
|
||||||
@@ -125,11 +119,11 @@ function createNode(parent, id, type, factory, properties)
|
|
||||||
|
|
||||||
-- deduplicate nodes with the same name
|
|
||||||
for counter = 2, 99, 1 do
|
|
||||||
- if findDuplicate(parent, id, "node.name", properties["node.name"]) then
|
|
||||||
- properties["node.name"] = name .. "." .. counter
|
|
||||||
- else
|
|
||||||
+ if node_names_table[properties["node.name"]] ~= true then
|
|
||||||
+ node_names_table[properties["node.name"]] = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
+ properties["node.name"] = name .. "." .. counter
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
@@ -186,6 +180,10 @@ function createDevice(parent, id, factory, properties)
|
|
||||||
local device = SpaDevice(factory, properties)
|
|
||||||
if device then
|
|
||||||
device:connect("create-object", createNode)
|
|
||||||
+ device:connect("object-removed", function (parent, id)
|
|
||||||
+ local node = parent:get_managed_object(id)
|
|
||||||
+ node_names_table[node.properties["node.name"]] = nil
|
|
||||||
+ end)
|
|
||||||
device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
|
||||||
parent:store_managed_object(id, device)
|
|
||||||
else
|
|
||||||
@@ -205,11 +203,11 @@ function prepareDevice(parent, id, type, factory, properties)
|
|
||||||
|
|
||||||
-- deduplicate devices with the same name
|
|
||||||
for counter = 2, 99, 1 do
|
|
||||||
- if findDuplicate(parent, id, "device.name", properties["device.name"]) then
|
|
||||||
- properties["device.name"] = name .. "." .. counter
|
|
||||||
- else
|
|
||||||
+ if device_names_table[properties["device.name"]] ~= true then
|
|
||||||
+ device_names_table[properties["device.name"]] = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
+ properties["device.name"] = name .. "." .. counter
|
|
||||||
end
|
|
||||||
|
|
||||||
-- ensure the device has a description
|
|
||||||
@@ -337,16 +335,21 @@ function createMonitor ()
|
|
||||||
-- handle create-object to prepare device
|
|
||||||
m:connect("create-object", prepareDevice)
|
|
||||||
|
|
||||||
- -- if dbus reservation, handle object-removed to destroy device reservations
|
|
||||||
- if rd_plugin then
|
|
||||||
- m:connect("object-removed", function (parent, id)
|
|
||||||
- local device = parent:get_managed_object(id)
|
|
||||||
+ -- handle object-removed to destroy device reservations and recycle device name
|
|
||||||
+ m:connect("object-removed", function (parent, id)
|
|
||||||
+ local device = parent:get_managed_object(id)
|
|
||||||
+ if rd_plugin then
|
|
||||||
local rd_name = device.properties["api.dbus.ReserveDevice1"]
|
|
||||||
if rd_name then
|
|
||||||
rd_plugin:call("destroy-reservation", rd_name)
|
|
||||||
end
|
|
||||||
- end)
|
|
||||||
- end
|
|
||||||
+ end
|
|
||||||
+ device_names_table[device.properties["device.name"]] = nil
|
|
||||||
+ end)
|
|
||||||
+
|
|
||||||
+ -- reset the name tables to make sure names are recycled
|
|
||||||
+ device_names_table = {}
|
|
||||||
+ node_names_table = {}
|
|
||||||
|
|
||||||
-- activate monitor
|
|
||||||
Log.info("Activating ALSA monitor")
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
commit 3d86f51d2c43fd76be2450a8c27836fdd8619cfa
|
|
||||||
Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
|
|
||||||
Date: Sun May 15 18:19:03 2022 +0300
|
|
||||||
|
|
||||||
config: Disable alsa and bluez monitors by default
|
|
||||||
|
|
||||||
diff --git a/src/config/bluetooth.lua.d/50-bluez-config.lua b/src/config/bluetooth.lua.d/50-bluez-config.lua
|
|
||||||
index d5727d3..938eae0 100644
|
|
||||||
--- a/src/config/bluetooth.lua.d/50-bluez-config.lua
|
|
||||||
+++ b/src/config/bluetooth.lua.d/50-bluez-config.lua
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-bluez_monitor.enabled = true
|
|
||||||
+bluez_monitor.enabled = false
|
|
||||||
|
|
||||||
bluez_monitor.properties = {
|
|
||||||
-- These features do not work on all headsets, so they are enabled
|
|
||||||
diff --git a/src/config/main.lua.d/50-alsa-config.lua b/src/config/main.lua.d/50-alsa-config.lua
|
|
||||||
index 3468333..d4c065b 100644
|
|
||||||
--- a/src/config/main.lua.d/50-alsa-config.lua
|
|
||||||
+++ b/src/config/main.lua.d/50-alsa-config.lua
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-alsa_monitor.enabled = true
|
|
||||||
+alsa_monitor.enabled = false
|
|
||||||
|
|
||||||
alsa_monitor.properties = {
|
|
||||||
-- Create a JACK device. This is not enabled by default because
|
|
@ -1,129 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/1f045309208ab5d927883b5adc2b7d1623fae162
|
|
||||||
|
|
||||||
From 1f045309208ab5d927883b5adc2b7d1623fae162 Mon Sep 17 00:00:00 2001
|
|
||||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
|
||||||
Date: Thu, 12 May 2022 12:19:38 +0300
|
|
||||||
Subject: [PATCH] config: fix enabled property to default to "true" when not
|
|
||||||
defined
|
|
||||||
|
|
||||||
Fixes backwards compatibility with older config files
|
|
||||||
|
|
||||||
Fixes: #254
|
|
||||||
---
|
|
||||||
src/config/bluetooth.lua.d/30-bluez-monitor.lua | 2 +-
|
|
||||||
src/config/main.lua.d/20-default-access.lua | 2 +-
|
|
||||||
src/config/main.lua.d/30-alsa-monitor.lua | 2 +-
|
|
||||||
src/config/main.lua.d/30-libcamera-monitor.lua | 2 +-
|
|
||||||
src/config/main.lua.d/30-v4l2-monitor.lua | 2 +-
|
|
||||||
src/config/main.lua.d/40-device-defaults.lua | 2 +-
|
|
||||||
src/config/main.lua.d/40-stream-defaults.lua | 2 +-
|
|
||||||
src/config/policy.lua.d/10-default-policy.lua | 2 +-
|
|
||||||
8 files changed, 8 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/config/bluetooth.lua.d/30-bluez-monitor.lua b/src/config/bluetooth.lua.d/30-bluez-monitor.lua
|
|
||||||
index b40026c2..a870aa5d 100644
|
|
||||||
--- a/src/config/bluetooth.lua.d/30-bluez-monitor.lua
|
|
||||||
+++ b/src/config/bluetooth.lua.d/30-bluez-monitor.lua
|
|
||||||
@@ -3,7 +3,7 @@ bluez_monitor.properties = {}
|
|
||||||
bluez_monitor.rules = {}
|
|
||||||
|
|
||||||
function bluez_monitor.enable()
|
|
||||||
- if not bluez_monitor.enabled then
|
|
||||||
+ if bluez_monitor.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/main.lua.d/20-default-access.lua b/src/config/main.lua.d/20-default-access.lua
|
|
||||||
index a6ffb2ee..0a7eb955 100644
|
|
||||||
--- a/src/config/main.lua.d/20-default-access.lua
|
|
||||||
+++ b/src/config/main.lua.d/20-default-access.lua
|
|
||||||
@@ -3,7 +3,7 @@ default_access.properties = {}
|
|
||||||
default_access.rules = {}
|
|
||||||
|
|
||||||
function default_access.enable()
|
|
||||||
- if not default_access.enabled then
|
|
||||||
+ if default_access.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/main.lua.d/30-alsa-monitor.lua b/src/config/main.lua.d/30-alsa-monitor.lua
|
|
||||||
index da0b2c70..8e45e434 100644
|
|
||||||
--- a/src/config/main.lua.d/30-alsa-monitor.lua
|
|
||||||
+++ b/src/config/main.lua.d/30-alsa-monitor.lua
|
|
||||||
@@ -3,7 +3,7 @@ alsa_monitor.properties = {}
|
|
||||||
alsa_monitor.rules = {}
|
|
||||||
|
|
||||||
function alsa_monitor.enable()
|
|
||||||
- if not alsa_monitor.enabled then
|
|
||||||
+ if alsa_monitor.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/main.lua.d/30-libcamera-monitor.lua b/src/config/main.lua.d/30-libcamera-monitor.lua
|
|
||||||
index 4a8257ff..cd820a83 100644
|
|
||||||
--- a/src/config/main.lua.d/30-libcamera-monitor.lua
|
|
||||||
+++ b/src/config/main.lua.d/30-libcamera-monitor.lua
|
|
||||||
@@ -3,7 +3,7 @@ libcamera_monitor.properties = {}
|
|
||||||
libcamera_monitor.rules = {}
|
|
||||||
|
|
||||||
function libcamera_monitor.enable()
|
|
||||||
- if not libcamera_monitor.enabled then
|
|
||||||
+ if libcamera_monitor.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/main.lua.d/30-v4l2-monitor.lua b/src/config/main.lua.d/30-v4l2-monitor.lua
|
|
||||||
index 7cfd4bcd..3fbdc9e7 100644
|
|
||||||
--- a/src/config/main.lua.d/30-v4l2-monitor.lua
|
|
||||||
+++ b/src/config/main.lua.d/30-v4l2-monitor.lua
|
|
||||||
@@ -3,7 +3,7 @@ v4l2_monitor.properties = {}
|
|
||||||
v4l2_monitor.rules = {}
|
|
||||||
|
|
||||||
function v4l2_monitor.enable()
|
|
||||||
- if not v4l2_monitor.enabled then
|
|
||||||
+ if v4l2_monitor.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/main.lua.d/40-device-defaults.lua b/src/config/main.lua.d/40-device-defaults.lua
|
|
||||||
index 55aafe85..2204c4ac 100644
|
|
||||||
--- a/src/config/main.lua.d/40-device-defaults.lua
|
|
||||||
+++ b/src/config/main.lua.d/40-device-defaults.lua
|
|
||||||
@@ -38,7 +38,7 @@ device_defaults.persistent_profiles = {
|
|
||||||
}
|
|
||||||
|
|
||||||
function device_defaults.enable()
|
|
||||||
- if not device_defaults.enabled then
|
|
||||||
+ if device_defaults.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/main.lua.d/40-stream-defaults.lua b/src/config/main.lua.d/40-stream-defaults.lua
|
|
||||||
index 2975f4f6..307d83df 100644
|
|
||||||
--- a/src/config/main.lua.d/40-stream-defaults.lua
|
|
||||||
+++ b/src/config/main.lua.d/40-stream-defaults.lua
|
|
||||||
@@ -25,7 +25,7 @@ stream_defaults.rules = {
|
|
||||||
}
|
|
||||||
|
|
||||||
function stream_defaults.enable()
|
|
||||||
- if not stream_defaults.enabled then
|
|
||||||
+ if stream_defaults.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
diff --git a/src/config/policy.lua.d/10-default-policy.lua b/src/config/policy.lua.d/10-default-policy.lua
|
|
||||||
index 7b00e94e..edfdeb1c 100644
|
|
||||||
--- a/src/config/policy.lua.d/10-default-policy.lua
|
|
||||||
+++ b/src/config/policy.lua.d/10-default-policy.lua
|
|
||||||
@@ -38,7 +38,7 @@ bluetooth_policy.policy = {
|
|
||||||
}
|
|
||||||
|
|
||||||
function default_policy.enable()
|
|
||||||
- if not default_policy.enabled then
|
|
||||||
+ if default_policy.enabled == false then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
@ -1,187 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/392cce2136e81ac3146078eacbbae85b694c917a
|
|
||||||
|
|
||||||
From 392cce2136e81ac3146078eacbbae85b694c917a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
|
||||||
Date: Fri, 20 May 2022 07:38:24 -0400
|
|
||||||
Subject: [PATCH] m-default-nodes: don't check if all device nodes are ready
|
|
||||||
when finding default node
|
|
||||||
|
|
||||||
This check was originally added to avoid a small audio glitch when changing
|
|
||||||
default nodes while also changing the device profile (eg Gnome Sound Settings).
|
|
||||||
The check is removed because it causes issues when disabling alsa nodes. There
|
|
||||||
are plans to fix the audio glitch issue in the future with the planned
|
|
||||||
event-dispatcher architecture.
|
|
||||||
|
|
||||||
Fixes #279
|
|
||||||
---
|
|
||||||
modules/module-default-nodes.c | 136 ---------------------------------
|
|
||||||
1 file changed, 136 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c
|
|
||||||
index 0fdaed5..577f9bb 100644
|
|
||||||
--- a/modules/module-default-nodes.c
|
|
||||||
+++ b/modules/module-default-nodes.c
|
|
||||||
@@ -345,135 +345,6 @@ reevaluate_default_node (WpDefaultNodes * self, WpMetadata *m, gint node_t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static guint
|
|
||||||
-get_device_total_nodes (WpPipewireObject * proxy)
|
|
||||||
-{
|
|
||||||
- g_autoptr (WpIterator) profiles = NULL;
|
|
||||||
- g_auto (GValue) item = G_VALUE_INIT;
|
|
||||||
-
|
|
||||||
- profiles = wp_pipewire_object_enum_params_sync (proxy, "Profile", NULL);
|
|
||||||
- if (!profiles)
|
|
||||||
- return 0;
|
|
||||||
-
|
|
||||||
- for (; wp_iterator_next (profiles, &item); g_value_unset (&item)) {
|
|
||||||
- WpSpaPod *pod = g_value_get_boxed (&item);
|
|
||||||
- gint idx = -1;
|
|
||||||
- const gchar *name = NULL;
|
|
||||||
- g_autoptr (WpSpaPod) classes = NULL;
|
|
||||||
-
|
|
||||||
- /* Parse */
|
|
||||||
- if (!wp_spa_pod_get_object (pod, NULL,
|
|
||||||
- "index", "i", &idx,
|
|
||||||
- "name", "s", &name,
|
|
||||||
- "classes", "?P", &classes,
|
|
||||||
- NULL))
|
|
||||||
- continue;
|
|
||||||
- if (!classes)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- /* Parse profile classes */
|
|
||||||
- {
|
|
||||||
- g_autoptr (WpIterator) it = wp_spa_pod_new_iterator (classes);
|
|
||||||
- g_auto (GValue) v = G_VALUE_INIT;
|
|
||||||
- gint total_nodes = 0;
|
|
||||||
- for (; wp_iterator_next (it, &v); g_value_unset (&v)) {
|
|
||||||
- WpSpaPod *entry = g_value_get_boxed (&v);
|
|
||||||
- g_autoptr (WpSpaPodParser) pp = NULL;
|
|
||||||
- const gchar *media_class = NULL;
|
|
||||||
- gint n_nodes = 0;
|
|
||||||
- g_return_val_if_fail (entry, 0);
|
|
||||||
- if (!wp_spa_pod_is_struct (entry))
|
|
||||||
- continue;
|
|
||||||
- pp = wp_spa_pod_parser_new_struct (entry);
|
|
||||||
- g_return_val_if_fail (pp, 0);
|
|
||||||
- g_return_val_if_fail (wp_spa_pod_parser_get_string (pp, &media_class), 0);
|
|
||||||
- g_return_val_if_fail (wp_spa_pod_parser_get_int (pp, &n_nodes), 0);
|
|
||||||
- wp_spa_pod_parser_end (pp);
|
|
||||||
-
|
|
||||||
- total_nodes += n_nodes;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (total_nodes > 0)
|
|
||||||
- return total_nodes;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static gboolean
|
|
||||||
-nodes_ready (WpDefaultNodes * self)
|
|
||||||
-{
|
|
||||||
- g_autoptr (WpIterator) it = NULL;
|
|
||||||
- g_auto (GValue) val = G_VALUE_INIT;
|
|
||||||
-
|
|
||||||
- /* Get the total number of nodes for each device and make sure they exist
|
|
||||||
- * and have at least 1 port */
|
|
||||||
- it = wp_object_manager_new_filtered_iterator (self->rescan_om,
|
|
||||||
- WP_TYPE_DEVICE, NULL);
|
|
||||||
- for (; wp_iterator_next (it, &val); g_value_unset (&val)) {
|
|
||||||
- WpPipewireObject *device = g_value_get_object (&val);
|
|
||||||
- guint total_nodes = get_device_total_nodes (device);
|
|
||||||
- if (total_nodes > 0) {
|
|
||||||
- guint32 device_id = wp_proxy_get_bound_id (WP_PROXY (device));
|
|
||||||
- g_autoptr (WpIterator) node_it = NULL;
|
|
||||||
- g_auto (GValue) node_val = G_VALUE_INIT;
|
|
||||||
- guint ready_nodes = 0;
|
|
||||||
-
|
|
||||||
- node_it = wp_object_manager_new_filtered_iterator (self->rescan_om,
|
|
||||||
- WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY,
|
|
||||||
- PW_KEY_DEVICE_ID, "=i", device_id, NULL);
|
|
||||||
- for (; wp_iterator_next (node_it, &node_val); g_value_unset (&node_val)) {
|
|
||||||
- WpPipewireObject *node = g_value_get_object (&node_val);
|
|
||||||
- g_autoptr (WpPort) port =
|
|
||||||
- wp_object_manager_lookup (self->rescan_om,
|
|
||||||
- WP_TYPE_PORT, WP_CONSTRAINT_TYPE_PW_PROPERTY,
|
|
||||||
- PW_KEY_NODE_ID, "=u", wp_proxy_get_bound_id (WP_PROXY (node)),
|
|
||||||
- NULL);
|
|
||||||
- if (port)
|
|
||||||
- ready_nodes++;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (ready_nodes < total_nodes) {
|
|
||||||
- const gchar *device_name = wp_pipewire_object_get_property (
|
|
||||||
- WP_PIPEWIRE_OBJECT (device), PW_KEY_DEVICE_NAME);
|
|
||||||
- wp_debug_object (self, "device '%s' is not ready (%d/%d)", device_name,
|
|
||||||
- ready_nodes, total_nodes);
|
|
||||||
- return FALSE;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* Make sure Audio and Video virtual sources have ports */
|
|
||||||
- {
|
|
||||||
- g_autoptr (WpIterator) node_it = NULL;
|
|
||||||
- g_auto (GValue) node_val = G_VALUE_INIT;
|
|
||||||
- node_it = wp_object_manager_new_filtered_iterator (self->rescan_om,
|
|
||||||
- WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY, PW_KEY_DEVICE_ID, "-",
|
|
||||||
- NULL);
|
|
||||||
- for (; wp_iterator_next (node_it, &node_val); g_value_unset (&node_val)) {
|
|
||||||
- WpPipewireObject *node = g_value_get_object (&node_val);
|
|
||||||
- const gchar *media_class = wp_pipewire_object_get_property (
|
|
||||||
- WP_PIPEWIRE_OBJECT (node), PW_KEY_MEDIA_CLASS);
|
|
||||||
- g_autoptr (WpPort) port =
|
|
||||||
- wp_object_manager_lookup (self->rescan_om,
|
|
||||||
- WP_TYPE_PORT, WP_CONSTRAINT_TYPE_PW_PROPERTY,
|
|
||||||
- PW_KEY_NODE_ID, "=u", wp_proxy_get_bound_id (WP_PROXY (node)),
|
|
||||||
- NULL);
|
|
||||||
- if (!port &&
|
|
||||||
- (g_strcmp0 ("Audio/Source/Virtual", media_class) == 0 ||
|
|
||||||
- g_strcmp0 ("Video/Source/Virtual", media_class) == 0)) {
|
|
||||||
- const gchar *node_name = wp_pipewire_object_get_property (
|
|
||||||
- WP_PIPEWIRE_OBJECT (node), PW_KEY_NODE_NAME);
|
|
||||||
- wp_debug_object (self, "virtual node '%s' is not ready", node_name);
|
|
||||||
- return FALSE;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return TRUE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
static void
|
|
||||||
sync_rescan (WpCore * core, GAsyncResult * res, WpDefaultNodes * self)
|
|
||||||
{
|
|
||||||
@@ -491,10 +362,6 @@ sync_rescan (WpCore * core, GAsyncResult * res, WpDefaultNodes * self)
|
|
||||||
if (!metadata)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- /* Make sure nodes are ready for current profile */
|
|
||||||
- if (!nodes_ready (self))
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
wp_trace_object (self, "re-evaluating defaults");
|
|
||||||
reevaluate_default_node (self, metadata, AUDIO_SINK);
|
|
||||||
reevaluate_default_node (self, metadata, AUDIO_SOURCE);
|
|
||||||
@@ -584,13 +451,10 @@ on_metadata_added (WpObjectManager *om, WpMetadata *metadata, gpointer d)
|
|
||||||
self->rescan_om = wp_object_manager_new ();
|
|
||||||
wp_object_manager_add_interest (self->rescan_om, WP_TYPE_DEVICE, NULL);
|
|
||||||
wp_object_manager_add_interest (self->rescan_om, WP_TYPE_NODE, NULL);
|
|
||||||
- wp_object_manager_add_interest (self->rescan_om, WP_TYPE_PORT, NULL);
|
|
||||||
wp_object_manager_request_object_features (self->rescan_om, WP_TYPE_DEVICE,
|
|
||||||
WP_OBJECT_FEATURES_ALL);
|
|
||||||
wp_object_manager_request_object_features (self->rescan_om, WP_TYPE_NODE,
|
|
||||||
WP_OBJECT_FEATURES_ALL);
|
|
||||||
- wp_object_manager_request_object_features (self->rescan_om, WP_TYPE_PORT,
|
|
||||||
- WP_OBJECT_FEATURES_ALL);
|
|
||||||
g_signal_connect_object (self->rescan_om, "objects-changed",
|
|
||||||
G_CALLBACK (schedule_rescan), self, G_CONNECT_SWAPPED);
|
|
||||||
g_signal_connect_object (self->rescan_om, "object-added",
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/c2f31bb550755acba31da2e9f5bbdf646ed5e805
|
|
||||||
|
|
||||||
From c2f31bb550755acba31da2e9f5bbdf646ed5e805 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
|
||||||
Date: Mon, 16 May 2022 15:41:10 -0400
|
|
||||||
Subject: [PATCH] m-lua-scripting: allow converting GValue holding NULL objects
|
|
||||||
to Lua
|
|
||||||
|
|
||||||
---
|
|
||||||
modules/module-lua-scripting/wplua/value.c | 9 +++++++--
|
|
||||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/modules/module-lua-scripting/wplua/value.c b/modules/module-lua-scripting/wplua/value.c
|
|
||||||
index 133051a4..e31ae4ac 100644
|
|
||||||
--- a/modules/module-lua-scripting/wplua/value.c
|
|
||||||
+++ b/modules/module-lua-scripting/wplua/value.c
|
|
||||||
@@ -314,9 +314,14 @@ wplua_gvalue_to_lua (lua_State *L, const GValue *v)
|
|
||||||
wplua_pushboxed (L, G_VALUE_TYPE (v), g_value_dup_boxed (v));
|
|
||||||
break;
|
|
||||||
case G_TYPE_OBJECT:
|
|
||||||
- case G_TYPE_INTERFACE:
|
|
||||||
- wplua_pushobject (L, g_value_dup_object (v));
|
|
||||||
+ case G_TYPE_INTERFACE: {
|
|
||||||
+ GObject *object = g_value_dup_object (v);
|
|
||||||
+ if (object)
|
|
||||||
+ wplua_pushobject (L, g_value_dup_object (v));
|
|
||||||
+ else
|
|
||||||
+ lua_pushnil (L);
|
|
||||||
break;
|
|
||||||
+ }
|
|
||||||
case G_TYPE_ENUM:
|
|
||||||
wplua_enum_to_lua (L, g_value_get_enum (v), G_VALUE_TYPE (v));
|
|
||||||
break;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/7908b8d7be2a2992c57cd549054eda7ce46e4b44
|
|
||||||
|
|
||||||
From 13b85bd4a25ab374f5e5e90b7288e6987996856e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Olbrich <m.olbrich@pengutronix.de>
|
|
||||||
Date: Tue, 24 May 2022 11:35:15 +0200
|
|
||||||
Subject: [PATCH] m-lua-scripting: fix object refcounting
|
|
||||||
|
|
||||||
7908b8d7be2a2992c57cd549054eda7ce46e4b44 ("m-lua-scripting: allow
|
|
||||||
converting GValue holding NULL objects to Lua") accidentally added a second
|
|
||||||
refcount. As a result, the objects are never freeded.
|
|
||||||
|
|
||||||
Remove the second refcount to fix this.
|
|
||||||
---
|
|
||||||
modules/module-lua-scripting/wplua/value.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/modules/module-lua-scripting/wplua/value.c b/modules/module-lua-scripting/wplua/value.c
|
|
||||||
index e31ae4a..a7927dc 100644
|
|
||||||
--- a/modules/module-lua-scripting/wplua/value.c
|
|
||||||
+++ b/modules/module-lua-scripting/wplua/value.c
|
|
||||||
@@ -317,7 +317,7 @@ wplua_gvalue_to_lua (lua_State *L, const GValue *v)
|
|
||||||
case G_TYPE_INTERFACE: {
|
|
||||||
GObject *object = g_value_dup_object (v);
|
|
||||||
if (object)
|
|
||||||
- wplua_pushobject (L, g_value_dup_object (v));
|
|
||||||
+ wplua_pushobject (L, object);
|
|
||||||
else
|
|
||||||
lua_pushnil (L);
|
|
||||||
break;
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/c16e637c329bc9dda8544b18f5bd47a8d63ee253
|
|
||||||
|
|
||||||
From c16e637c329bc9dda8544b18f5bd47a8d63ee253 Mon Sep 17 00:00:00 2001
|
|
||||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
|
||||||
Date: Thu, 7 Jul 2022 20:58:36 +0300
|
|
||||||
Subject: [PATCH] alsa: use "obj_type" as a variable name to avoid shadowing
|
|
||||||
lua's "type" function
|
|
||||||
|
|
||||||
This causes a crash when running in a VM because the code tries to
|
|
||||||
execute lua's "type()" and ends up executing the local string variable...
|
|
||||||
|
|
||||||
Fixes: #303
|
|
||||||
--- a/src/scripts/monitors/alsa.lua
|
|
||||||
+++ b/src/scripts/monitors/alsa.lua
|
|
||||||
@@ -49,7 +49,7 @@ function nonempty(str)
|
|
||||||
return str ~= "" and str or nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-function createNode(parent, id, type, factory, properties)
|
|
||||||
+function createNode(parent, id, obj_type, factory, properties)
|
|
||||||
local dev_props = parent.properties
|
|
||||||
|
|
||||||
-- set the device id and spa factory name; REQUIRED, do not change
|
|
||||||
@@ -199,7 +199,7 @@ function createDevice(parent, id, factory, properties)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-function prepareDevice(parent, id, type, factory, properties)
|
|
||||||
+function prepareDevice(parent, id, obj_type, factory, properties)
|
|
||||||
-- ensure the device has an appropriate name
|
|
||||||
local name = "alsa_card." ..
|
|
||||||
(properties["device.name"] or
|
|
||||||
GitLab
|
|
@ -1,45 +0,0 @@
|
|||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/eb406bdb2cbbcd49c55c71285f8f2eddb624d24b
|
|
||||||
|
|
||||||
From eb406bdb2cbbcd49c55c71285f8f2eddb624d24b Mon Sep 17 00:00:00 2001
|
|
||||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
|
||||||
Date: Wed, 13 Jul 2022 13:38:14 +0300
|
|
||||||
Subject: [PATCH] dbus: fix crash when trying to reconnect
|
|
||||||
|
|
||||||
When coming from on_sync_reconnect, data points to the WpDBus object
|
|
||||||
instead of the activation transition.
|
|
||||||
|
|
||||||
Fixes: #305
|
|
||||||
--- a/lib/wp/dbus.c
|
|
||||||
+++ b/lib/wp/dbus.c
|
|
||||||
@@ -58,14 +58,26 @@ wp_dbus_set_state (WpDbus *self, WpDBusState new_state)
|
|
||||||
static void
|
|
||||||
on_got_bus (GObject * obj, GAsyncResult * res, gpointer data)
|
|
||||||
{
|
|
||||||
- WpTransition *transition = WP_TRANSITION (data);
|
|
||||||
- WpDbus *self = wp_transition_get_source_object (transition);
|
|
||||||
+ WpTransition *transition;
|
|
||||||
+ WpDbus *self;
|
|
||||||
g_autoptr (GError) error = NULL;
|
|
||||||
|
|
||||||
+ if (WP_IS_TRANSITION (data)) {
|
|
||||||
+ // coming from wp_dbus_enable
|
|
||||||
+ transition = WP_TRANSITION (data);
|
|
||||||
+ self = wp_transition_get_source_object (transition);
|
|
||||||
+ } else {
|
|
||||||
+ // coming from on_sync_reconnect
|
|
||||||
+ transition = NULL;
|
|
||||||
+ self = WP_DBUS (data);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
self->connection = g_dbus_connection_new_for_address_finish (res, &error);
|
|
||||||
if (!self->connection) {
|
|
||||||
- g_prefix_error (&error, "Failed to connect to bus: ");
|
|
||||||
- wp_transition_return_error (transition, g_steal_pointer (&error));
|
|
||||||
+ if (transition) {
|
|
||||||
+ g_prefix_error (&error, "Failed to connect to bus: ");
|
|
||||||
+ wp_transition_return_error (transition, g_steal_pointer (&error));
|
|
||||||
+ }
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GitLab
|
|
@ -1,147 +0,0 @@
|
|||||||
https://bugs.gentoo.org/866551
|
|
||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/37c839b9308cd3d6580bf01077db8cb29ec2aa2f
|
|
||||||
https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/370b692933634675213110048fcda6dff52eb52b
|
|
||||||
|
|
||||||
From: Pauli Virtanen <pav@iki.fi>
|
|
||||||
Date: Tue, 19 Jul 2022 20:39:06 +0300
|
|
||||||
Subject: [PATCH] policy-node: fix potential rescan loop
|
|
||||||
|
|
||||||
SiLink activation might be delayed indefinitely under some error
|
|
||||||
conditions. Currently, policy-node schedules a rescan when it sees a
|
|
||||||
non-activated link on a stream to be moved, which produces busy loop if
|
|
||||||
the si-link doesn't activate.
|
|
||||||
|
|
||||||
Instead of rescheduling on non-active si-links, just remove and emit a
|
|
||||||
warning. The si-link then gets removed once it gets activated.
|
|
||||||
|
|
||||||
Reproducer:
|
|
||||||
|
|
||||||
1. Play audio from Rhythmbox and pause.
|
|
||||||
2. Switch default output with pactl between two different outputs
|
|
||||||
3. Links from the paused stream stay at "init"
|
|
||||||
--- a/src/scripts/policy-node.lua
|
|
||||||
+++ b/src/scripts/policy-node.lua
|
|
||||||
@@ -694,16 +694,15 @@ function handleLinkable (si)
|
|
||||||
local link = lookupLink (si_id, si_flags[si_id].peer_id)
|
|
||||||
if reconnect then
|
|
||||||
if link ~= nil then
|
|
||||||
- -- remove old link if active, otherwise schedule rescan
|
|
||||||
- if ((link:get_active_features() & Feature.SessionItem.ACTIVE) ~= 0) then
|
|
||||||
- si_flags[si_id].peer_id = nil
|
|
||||||
- link:remove ()
|
|
||||||
- Log.info (si, "... moving to new target")
|
|
||||||
- else
|
|
||||||
- scheduleRescan()
|
|
||||||
- Log.info (si, "... scheduled rescan")
|
|
||||||
- return
|
|
||||||
+ -- remove old link
|
|
||||||
+ if ((link:get_active_features() & Feature.SessionItem.ACTIVE) == 0) then
|
|
||||||
+ -- remove also not yet activated links: they might never become active,
|
|
||||||
+ -- and we should not loop waiting for them
|
|
||||||
+ Log.warning (link, "Link was not activated before removing")
|
|
||||||
end
|
|
||||||
+ si_flags[si_id].peer_id = nil
|
|
||||||
+ link:remove ()
|
|
||||||
+ Log.info (si, "... moving to new target")
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if link ~= nil then
|
|
||||||
GitLab
|
|
||||||
|
|
||||||
From: Pauli Virtanen <pav@iki.fi>
|
|
||||||
Date: Tue, 19 Jul 2022 20:01:10 +0300
|
|
||||||
Subject: [PATCH] m-si-link: don't wait for establish before activation +
|
|
||||||
cleanup links
|
|
||||||
|
|
||||||
SiLink should not wait for WpLinks becoming ESTABLISHED, before
|
|
||||||
activation. That flag shows whether a link has moved away from the
|
|
||||||
"init" state, however, links to e.g. Pulseaudio corked streams can stay
|
|
||||||
in "init" state until uncorking. This causes trouble for policies,
|
|
||||||
which needlessly wait for such links to establish.
|
|
||||||
|
|
||||||
The WpLink objects may also be kept alive by other referents, and
|
|
||||||
just unrefing them does not necessarily destroy the PW objects.
|
|
||||||
|
|
||||||
Activate SiLink even if the WpLink is still in "init" state. It's enough
|
|
||||||
that the link otherwise successfully establishes.
|
|
||||||
|
|
||||||
At dispose time, explicitly request destroying the WpLinks that were
|
|
||||||
created by the SiLink, to ensure they are removed even if there's
|
|
||||||
something else referring to them.
|
|
||||||
--- a/modules/module-si-standard-link.c
|
|
||||||
+++ b/modules/module-si-standard-link.c
|
|
||||||
@@ -132,6 +132,27 @@ si_standard_link_get_associated_proxy (WpSessionItem * item, GType proxy_type)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+request_destroy_link (gpointer data, gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ WpLink *link = WP_LINK (data);
|
|
||||||
+
|
|
||||||
+ wp_global_proxy_request_destroy (WP_GLOBAL_PROXY (link));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+clear_node_links (GPtrArray **node_links_p)
|
|
||||||
+{
|
|
||||||
+ /*
|
|
||||||
+ * Something else (eg. object managers) may be keeping the WpLink
|
|
||||||
+ * objects alive. Deactive the links now, to destroy the PW objects.
|
|
||||||
+ */
|
|
||||||
+ if (*node_links_p)
|
|
||||||
+ g_ptr_array_foreach (*node_links_p, request_destroy_link, NULL);
|
|
||||||
+
|
|
||||||
+ g_clear_pointer (node_links_p, g_ptr_array_unref);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
si_standard_link_disable_active (WpSessionItem *si)
|
|
||||||
{
|
|
||||||
@@ -154,7 +175,8 @@ si_standard_link_disable_active (WpSessionItem *si)
|
|
||||||
WP_SI_LINKABLE (si_in));
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_clear_pointer (&self->node_links, g_ptr_array_unref);
|
|
||||||
+ clear_node_links (&self->node_links);
|
|
||||||
+
|
|
||||||
self->n_active_links = 0;
|
|
||||||
self->n_failed_links = 0;
|
|
||||||
self->n_async_ops_wait = 0;
|
|
||||||
@@ -168,7 +190,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res,
|
|
||||||
WpTransition * transition)
|
|
||||||
{
|
|
||||||
WpSiStandardLink *self = wp_transition_get_source_object (transition);
|
|
||||||
- guint len = self->node_links->len;
|
|
||||||
+ guint len = self->node_links ? self->node_links->len : 0;
|
|
||||||
|
|
||||||
/* Count the number of failed and active links */
|
|
||||||
if (wp_object_activate_finish (proxy, res, NULL))
|
|
||||||
@@ -182,7 +204,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res,
|
|
||||||
|
|
||||||
/* We only active feature if all links activated successfully */
|
|
||||||
if (self->n_failed_links > 0) {
|
|
||||||
- g_clear_pointer (&self->node_links, g_ptr_array_unref);
|
|
||||||
+ clear_node_links (&self->node_links);
|
|
||||||
wp_transition_return_error (transition, g_error_new (
|
|
||||||
WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_OPERATION_FAILED,
|
|
||||||
"%d of %d PipeWire links failed to activate",
|
|
||||||
@@ -251,7 +273,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition,
|
|
||||||
/* Clear old links if any */
|
|
||||||
self->n_active_links = 0;
|
|
||||||
self->n_failed_links = 0;
|
|
||||||
- g_clear_pointer (&self->node_links, g_ptr_array_unref);
|
|
||||||
+ clear_node_links (&self->node_links);
|
|
||||||
|
|
||||||
/* tuple format:
|
|
||||||
uint32 node_id;
|
|
||||||
@@ -327,7 +349,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition,
|
|
||||||
|
|
||||||
/* activate to ensure it is created without errors */
|
|
||||||
wp_object_activate_closure (WP_OBJECT (link),
|
|
||||||
- WP_OBJECT_FEATURES_ALL, NULL,
|
|
||||||
+ WP_OBJECT_FEATURES_ALL & ~WP_LINK_FEATURE_ESTABLISHED, NULL,
|
|
||||||
g_cclosure_new_object (
|
|
||||||
(GCallback) on_link_activated, G_OBJECT (transition)));
|
|
||||||
}
|
|
||||||
GitLab
|
|
@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
|
|
||||||
<pkgmetadata>
|
|
||||||
<maintainer type="person">
|
|
||||||
<email>sam@gentoo.org</email>
|
|
||||||
<name>Sam James</name>
|
|
||||||
</maintainer>
|
|
||||||
<upstream>
|
|
||||||
<bugs-to>https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues</bugs-to>
|
|
||||||
<changelog>https://gitlab.freedesktop.org/pipewire/wireplumber/-/releases</changelog>
|
|
||||||
<!--doc>https://gitlab.freedesktop.org/pipewire/wireplumber/-/wikis/home</doc-->
|
|
||||||
</upstream>
|
|
||||||
<use>
|
|
||||||
<flag name="system-service">Install systemd unit files for running as a system service. Not recommended.</flag>
|
|
||||||
</use>
|
|
||||||
</pkgmetadata>
|
|
@ -1,125 +0,0 @@
|
|||||||
# Copyright 1999-2022 Gentoo Authors
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
EAPI=8
|
|
||||||
|
|
||||||
LUA_COMPAT=( lua5-{3,4} )
|
|
||||||
|
|
||||||
inherit lua-single meson systemd
|
|
||||||
|
|
||||||
if [[ ${PV} == 9999 ]]; then
|
|
||||||
EGIT_REPO_URI="https://gitlab.freedesktop.org/pipewire/${PN}.git"
|
|
||||||
EGIT_BRANCH="master"
|
|
||||||
inherit git-r3
|
|
||||||
else
|
|
||||||
SRC_URI="https://gitlab.freedesktop.org/pipewire/${PN}/-/archive/${PV}/${P}.tar.gz"
|
|
||||||
KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv ~sparc x86"
|
|
||||||
fi
|
|
||||||
|
|
||||||
DESCRIPTION="Replacement for pipewire-media-session"
|
|
||||||
HOMEPAGE="https://gitlab.freedesktop.org/pipewire/wireplumber"
|
|
||||||
|
|
||||||
LICENSE="MIT"
|
|
||||||
SLOT="0/0.4"
|
|
||||||
IUSE="elogind system-service systemd test"
|
|
||||||
|
|
||||||
REQUIRED_USE="
|
|
||||||
${LUA_REQUIRED_USE}
|
|
||||||
?? ( elogind systemd )
|
|
||||||
system-service? ( systemd )
|
|
||||||
"
|
|
||||||
|
|
||||||
RESTRICT="!test? ( test )"
|
|
||||||
|
|
||||||
# introspection? ( dev-libs/gobject-introspection ) is valid but likely only used for doc building
|
|
||||||
BDEPEND="
|
|
||||||
dev-libs/glib
|
|
||||||
dev-util/gdbus-codegen
|
|
||||||
dev-util/glib-utils
|
|
||||||
sys-devel/gettext
|
|
||||||
"
|
|
||||||
|
|
||||||
DEPEND="
|
|
||||||
${LUA_DEPS}
|
|
||||||
>=dev-libs/glib-2.62
|
|
||||||
>=media-video/pipewire-0.3.48:=
|
|
||||||
virtual/libintl
|
|
||||||
elogind? ( sys-auth/elogind )
|
|
||||||
systemd? ( sys-apps/systemd )
|
|
||||||
"
|
|
||||||
|
|
||||||
# Any dev-lua/* deps get declared like this inside RDEPEND:
|
|
||||||
# $(lua_gen_cond_dep '
|
|
||||||
# dev-lua/<NAME>[${LUA_USEDEP}]
|
|
||||||
# ')
|
|
||||||
RDEPEND="${DEPEND}
|
|
||||||
system-service? (
|
|
||||||
acct-user/pipewire
|
|
||||||
acct-group/pipewire
|
|
||||||
)
|
|
||||||
"
|
|
||||||
|
|
||||||
DOCS=( {NEWS,README}.rst )
|
|
||||||
|
|
||||||
PATCHES=(
|
|
||||||
"${FILESDIR}"/${P}-config-fix-enabled-property-to-default-to-true-when.patch
|
|
||||||
"${FILESDIR}"/${P}-m-lua-scripting-allow-converting-GValue-holding-NUL.patch
|
|
||||||
"${FILESDIR}"/${P}-alsa.lua-fix-device-name-deduplication-when-reserva.patch
|
|
||||||
"${FILESDIR}"/${P}-m-default-nodes-don-t-check-if-all-device-nodes-are.patch
|
|
||||||
"${FILESDIR}"/${P}-m-lua-scripting-fix-object-refcounting.patch
|
|
||||||
)
|
|
||||||
|
|
||||||
src_configure() {
|
|
||||||
local emesonargs=(
|
|
||||||
-Ddoc=disabled # Ebuild not wired up yet (Sphinx, Doxygen?)
|
|
||||||
-Dintrospection=disabled # Only used for Sphinx doc generation
|
|
||||||
-Dsystem-lua=true # We always unbundle everything we can
|
|
||||||
-Dsystem-lua-version=$(ver_cut 1-2 $(lua_get_version))
|
|
||||||
$(meson_feature elogind)
|
|
||||||
$(meson_feature systemd)
|
|
||||||
$(meson_use system-service systemd-system-service)
|
|
||||||
$(meson_use systemd systemd-user-service)
|
|
||||||
-Dsystemd-system-unit-dir=$(systemd_get_systemunitdir)
|
|
||||||
-Dsystemd-user-unit-dir=$(systemd_get_userunitdir)
|
|
||||||
$(meson_use test tests)
|
|
||||||
)
|
|
||||||
|
|
||||||
meson_src_configure
|
|
||||||
}
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
meson_src_install
|
|
||||||
|
|
||||||
# We copy the default config, so that Gentoo tools can pick up on any
|
|
||||||
# updates and /etc does not end up with stale overrides.
|
|
||||||
# If a reflinking CoW filesystem is used (e.g. Btrfs), then the files
|
|
||||||
# will not actually get stored twice until modified.
|
|
||||||
insinto /etc
|
|
||||||
doins -r "${ED}"/usr/share/wireplumber
|
|
||||||
}
|
|
||||||
|
|
||||||
pkg_postinst() {
|
|
||||||
if systemd_is_booted ; then
|
|
||||||
ewarn "pipewire-media-session.service is no longer installed. You must switch"
|
|
||||||
ewarn "to wireplumber.service user unit before your next logout/reboot:"
|
|
||||||
ewarn "systemctl --user disable pipewire-media-session.service"
|
|
||||||
ewarn "systemctl --user --force enable wireplumber.service"
|
|
||||||
else
|
|
||||||
ewarn "Switch to WirePlumber will happen the next time gentoo-pipewire-launcher"
|
|
||||||
ewarn "is started (a replacement for directly calling pipewire binary)."
|
|
||||||
ewarn
|
|
||||||
ewarn "Please ensure that ${EROOT}/etc/pipewire/pipewire.conf either does not exist"
|
|
||||||
ewarn "or, if it does exist, that any reference to"
|
|
||||||
ewarn "${EROOT}/usr/bin/pipewire-media-session is commented out (begins with a #)."
|
|
||||||
fi
|
|
||||||
if use system-service; then
|
|
||||||
ewarn
|
|
||||||
ewarn "WARNING: you have enabled the system-service USE flag, which installs"
|
|
||||||
ewarn "the system-wide systemd units that enable WirePlumber to run as a system"
|
|
||||||
ewarn "service. This is more than likely NOT what you want. You are strongly"
|
|
||||||
ewarn "advised not to enable this mode and instead stick with systemd user"
|
|
||||||
ewarn "units. The default configuration files will likely not work out of"
|
|
||||||
ewarn "box, and you are on your own with configuration."
|
|
||||||
ewarn
|
|
||||||
fi
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user