summaryrefslogtreecommitdiffstats
path: root/meta-pipewire/recipes-multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'meta-pipewire/recipes-multimedia')
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-alsa-plugin-allow-specifying-a-media.role-on-the-vir.patch124
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-null-sink-make-the-timerfd-non-blocking.patch43
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch35
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-node-driver-make-the-timerfd-non-blocking.patch43
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb (renamed from meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.30.bb)47
-rw-r--r--meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend (renamed from meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.30.bbappend)12
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf2
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua23
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua4
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua2
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua4
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf41
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb10
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua27
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf (renamed from meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/policy.conf)0
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua (renamed from meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/policy.lua.d/10-default-policy.lua)23
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb41
-rw-r--r--meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb33
18 files changed, 242 insertions, 272 deletions
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-alsa-plugin-allow-specifying-a-media.role-on-the-vir.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-alsa-plugin-allow-specifying-a-media.role-on-the-vir.patch
deleted file mode 100644
index c6cf373c2..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-alsa-plugin-allow-specifying-a-media.role-on-the-vir.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From ff019936a70262c176a4bd950bc80ab84d2a71b0 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Tue, 22 Jun 2021 13:23:22 +0300
-Subject: [PATCH] alsa plugin: allow specifying a media.role on the virtual
- device name
-
-So that we can do:
- aplay -D pipewire:ROLE=Music music.wav
- aplay -D pipewire:ROLE=Notification notice.wav
-
-Upstream-Status: Backport [from master/0.3.31]
----
- pipewire-alsa/alsa-plugins/pcm_pipewire.c | 14 +++++++++++++-
- pipewire-alsa/conf/50-pipewire.conf | 11 ++++++++++-
- 2 files changed, 23 insertions(+), 2 deletions(-)
-
-diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
-index 86792d2c7..6ace1b689 100644
---- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c
-+++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
-@@ -59,6 +59,7 @@ typedef struct {
-
- char *node_name;
- char *target;
-+ char *role;
-
- int fd;
- int error;
-@@ -509,6 +510,9 @@ static int snd_pcm_pipewire_prepare(snd_pcm_ioplug_t *io)
- pw_properties_set(props, PW_KEY_MEDIA_CATEGORY,
- io->stream == SND_PCM_STREAM_PLAYBACK ?
- "Playback" : "Capture");
-+ if (pw->role != NULL &&
-+ pw_properties_get(props, PW_KEY_MEDIA_ROLE) == NULL)
-+ pw_properties_setf(props, PW_KEY_MEDIA_ROLE, "%s", pw->role);
-
- pw->stream = pw_stream_new(pw->core, pw->node_name, props);
- if (pw->stream == NULL)
-@@ -958,6 +962,7 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, const char *name,
- const char *server_name,
- const char *playback_node,
- const char *capture_node,
-+ const char *role,
- snd_pcm_stream_t stream,
- int mode,
- uint32_t flags,
-@@ -1013,6 +1018,8 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, const char *name,
- pw->target = capture_node ? strdup(capture_node) : NULL;
- }
-
-+ pw->role = (role && *role) ? strdup(role) : NULL;
-+
- pw->main_loop = pw_thread_loop_new("alsa-pipewire", NULL);
- if (pw->main_loop == NULL) {
- err = -errno;
-@@ -1091,6 +1098,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(pipewire)
- const char *server_name = NULL;
- const char *playback_node = NULL;
- const char *capture_node = NULL;
-+ const char *role = NULL;
- snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN;
- int rate = 0;
- int channels = 0;
-@@ -1125,6 +1133,10 @@ SND_PCM_PLUGIN_DEFINE_FUNC(pipewire)
- snd_config_get_string(n, &capture_node);
- continue;
- }
-+ if (spa_streq(id, "role")) {
-+ snd_config_get_string(n, &role);
-+ continue;
-+ }
- if (spa_streq(id, "exclusive")) {
- if (snd_config_get_bool(n))
- flags |= PW_STREAM_FLAG_EXCLUSIVE;
-@@ -1174,7 +1186,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(pipewire)
- }
-
- err = snd_pcm_pipewire_open(pcmp, name, node_name, server_name, playback_node,
-- capture_node, stream, mode, flags, rate, format,
-+ capture_node, role, stream, mode, flags, rate, format,
- channels, period_bytes);
-
- return err;
-diff --git a/pipewire-alsa/conf/50-pipewire.conf b/pipewire-alsa/conf/50-pipewire.conf
-index 2c6f2d259..f7e58472b 100644
---- a/pipewire-alsa/conf/50-pipewire.conf
-+++ b/pipewire-alsa/conf/50-pipewire.conf
-@@ -3,9 +3,10 @@
- defaults.pipewire.server "pipewire-0"
- defaults.pipewire.node "-1"
- defaults.pipewire.exclusive false
-+defaults.pipewire.role ""
-
- pcm.pipewire {
-- @args [ SERVER NODE EXCLUSIVE ]
-+ @args [ SERVER NODE EXCLUSIVE ROLE ]
- @args.SERVER {
- type string
- default {
-@@ -27,6 +28,13 @@ pcm.pipewire {
- name defaults.pipewire.exclusive
- }
- }
-+ @args.ROLE {
-+ type string
-+ default {
-+ @func refer
-+ name defaults.pipewire.role
-+ }
-+ }
-
-
- type pipewire
-@@ -34,6 +42,7 @@ pcm.pipewire {
- playback_node $NODE
- capture_node $NODE
- exclusive $EXCLUSIVE
-+ role $ROLE
- hint {
- show on
- description "PipeWire Sound Server"
---
-2.30.2
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-null-sink-make-the-timerfd-non-blocking.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-null-sink-make-the-timerfd-non-blocking.patch
deleted file mode 100644
index 71e526f86..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-null-sink-make-the-timerfd-non-blocking.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From c633004bf310998580ff8944c59d94689d6fca87 Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Thu, 1 Jul 2021 11:37:01 +0300
-Subject: [PATCH] null-sink: make the timerfd non-blocking
-
-Fixes #1377
-
-Upstream-Status: Backport [from master/0.3.32]
-Signed-off-by: George Kiagiadakis <george.kiagiadakis@collabora.com>
----
- spa/plugins/support/null-audio-sink.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/spa/plugins/support/null-audio-sink.c b/spa/plugins/support/null-audio-sink.c
-index e9588f1e2..12e671db8 100644
---- a/spa/plugins/support/null-audio-sink.c
-+++ b/spa/plugins/support/null-audio-sink.c
-@@ -221,8 +221,11 @@ static void on_timeout(struct spa_source *source)
- spa_log_trace(this->log, "timeout");
-
- if (spa_system_timerfd_read(this->data_system,
-- this->timer_source.fd, &expirations) < 0)
-+ this->timer_source.fd, &expirations) < 0) {
-+ if (errno == EAGAIN)
-+ return;
- perror("read timerfd");
-+ }
-
- nsec = this->next_time;
-
-@@ -818,7 +821,8 @@ impl_init(const struct spa_handle_factory *factory,
-
- this->timer_source.func = on_timeout;
- this->timer_source.data = this;
-- this->timer_source.fd = spa_system_timerfd_create(this->data_system, CLOCK_MONOTONIC, SPA_FD_CLOEXEC);
-+ this->timer_source.fd = spa_system_timerfd_create(this->data_system, CLOCK_MONOTONIC,
-+ SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
- this->timer_source.mask = SPA_IO_IN;
- this->timer_source.rmask = 0;
- this->timerspec.it_value.tv_sec = 0;
---
-2.30.2
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch
new file mode 100644
index 000000000..45d09e6b0
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0001-systemd-Do-not-override-rootprefix.patch
@@ -0,0 +1,35 @@
+From 2501972518a67b1710998452d164cd077a4370f1 Mon Sep 17 00:00:00 2001
+From: Scott Murray <scott.murray@konsulko.com>
+Date: Thu, 17 Mar 2022 10:44:00 -0400
+Subject: [PATCH] systemd: Do not override rootprefix
+
+Do not override rootprefix with the value of prefix when querying
+systemdsystemunitdir from the systemd pkgconfig, as doing so forces
+the assumption that the system is running with usrmerge, which may
+not be the case. Instead, rely on the systemd.pc correctly
+representing the desired install locations.
+
+Reworked version of change in:
+
+https://git.automotivelinux.org/AGL/meta-agl/tree/meta-pipewire/recipes-multimedia/pipewire/pipewire/0012-Miscellanous-changes-to-account-for-lower-version-of.patch
+
+Upstream-Status: Pending
+
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+---
+ src/daemon/systemd/system/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/daemon/systemd/system/meson.build b/src/daemon/systemd/system/meson.build
+index 84ca0b068..6956f2be3 100644
+--- a/src/daemon/systemd/system/meson.build
++++ b/src/daemon/systemd/system/meson.build
+@@ -1,4 +1,4 @@
+-systemd_system_services_dir = systemd.get_variable('systemdsystemunitdir', pkgconfig_define : [ 'rootprefix', prefix])
++systemd_system_services_dir = systemd.get_variable('systemdsystemunitdir')
+ if get_option('systemd-system-unit-dir') != ''
+ systemd_system_services_dir = get_option('systemd-system-unit-dir')
+ endif
+--
+2.35.1
+
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-node-driver-make-the-timerfd-non-blocking.patch b/meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-node-driver-make-the-timerfd-non-blocking.patch
deleted file mode 100644
index 5a59d8676..000000000
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire/0002-node-driver-make-the-timerfd-non-blocking.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 5aa9c953909b936ba215ebca77461a17160f59fb Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Thu, 1 Jul 2021 11:50:40 +0300
-Subject: [PATCH] node-driver: make the timerfd non-blocking
-
-Relates to #1377
-
-Upstream-Status: Backport [from master/0.3.32]
-Signed-off-by: George Kiagiadakis <george.kiagiadakis@collabora.com>
----
- spa/plugins/support/node-driver.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/spa/plugins/support/node-driver.c b/spa/plugins/support/node-driver.c
-index 34533d0d9..32964110d 100644
---- a/spa/plugins/support/node-driver.c
-+++ b/spa/plugins/support/node-driver.c
-@@ -119,8 +119,11 @@ static void on_timeout(struct spa_source *source)
- spa_log_trace(this->log, "timeout");
-
- if (spa_system_timerfd_read(this->data_system,
-- this->timer_source.fd, &expirations) < 0)
-+ this->timer_source.fd, &expirations) < 0) {
-+ if (errno == EAGAIN)
-+ return;
- perror("read timerfd");
-+ }
-
- nsec = this->next_time;
-
-@@ -349,7 +352,8 @@ impl_init(const struct spa_handle_factory *factory,
-
- this->timer_source.func = on_timeout;
- this->timer_source.data = this;
-- this->timer_source.fd = spa_system_timerfd_create(this->data_system, CLOCK_MONOTONIC, SPA_FD_CLOEXEC);
-+ this->timer_source.fd = spa_system_timerfd_create(this->data_system, CLOCK_MONOTONIC,
-+ SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
- this->timer_source.mask = SPA_IO_IN;
- this->timer_source.rmask = 0;
- this->timerspec.it_value.tv_sec = 0;
---
-2.30.2
-
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.30.bb b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb
index 08f0eba35..6fa851caa 100644
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.30.bb
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bb
@@ -20,7 +20,8 @@ SECTION = "multimedia"
DEPENDS = "dbus"
-SRCREV = "e857856be7b64d562cdcc01c43933218a68b225e"
+# v1.0.0(El Presidente)
+SRCREV = "4debdcd40b055b3eaa83a8f4443aa990ea566bfe"
SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
@@ -52,6 +53,11 @@ USERADD_PARAM:${PN} = "--system --home / --no-create-home \
# instance does.
#
# manpage generation requires xmltoman, which is not available.
+#
+# Dont build any session managers along with pipewire
+# wireplumber is the session manger used in AGL and it will
+# be build in a different recipe
+#
EXTRA_OEMESON += " \
-Daudiotestsrc=enabled \
-Devl=disabled \
@@ -63,6 +69,7 @@ EXTRA_OEMESON += " \
-Dvulkan=disabled \
-Dlibcamera=disabled \
-Dman=disabled \
+ -Dsession-managers=[] \
"
PACKAGECONFIG ??= "\
@@ -77,7 +84,7 @@ PACKAGECONFIG ??= "\
# is why these two are marked in their respective packageconfigs
# as being in conflict.
-PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev"
+PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib udev,,pipewire-alsa-card-profile"
PACKAGECONFIG[bluez] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc"
PACKAGECONFIG[docs] = "-Ddocs=enabled,-Ddocs=disabled,doxygen-native"
PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
@@ -88,6 +95,7 @@ PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemd-system-service=enabled ,-D
PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev"
PACKAGECONFIG[pipewire-alsa] = "-Dpipewire-alsa=enabled,-Dpipewire-alsa=disabled,alsa-lib"
PACKAGECONFIG[pipewire-jack] = "-Dpipewire-jack=enabled -Dlibjack-path=${libdir}/${PW_MODULE_SUBDIR}/jack,-Dpipewire-jack=disabled,jack,,,jack"
+PACKAGECONFIG[pipewire-v4l2] = "-Dpipewire-v4l2=enabled -Dpipewire-v4l2=${libdir}/${PW_MODULE_SUBDIR}/v4l2,-Dpipewire-v4l2=disabled,v4l2"
PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends "
@@ -206,7 +214,7 @@ PACKAGES =+ "\
${PN}-pulse \
${PN}-alsa \
${PN}-jack \
- ${PN}-media-session \
+ ${PN}-v4l2 \
${PN}-spa-plugins \
${PN}-spa-plugins-meta \
${PN}-spa-tools \
@@ -222,9 +230,20 @@ SYSTEMD_SERVICE:${PN} = "pipewire.service"
CONFFILES:${PN} += "${datadir}/pipewire/pipewire.conf"
FILES:${PN} = " \
${datadir}/pipewire/pipewire.conf \
+ ${datadir}/pipewire/filter-chain.conf \
${datadir}/pipewire/filter-chain \
${systemd_user_unitdir}/pipewire.* \
+ ${systemd_system_unitdir}/pipewire* \
${bindir}/pipewire \
+ ${datadir}/pipewire/pipewire-avb.conf \
+ ${bindir}/pipewire-avb \
+ ${datadir}/pipewire/pipewire-aes67.conf \
+ ${bindir}/pipewire-aes67 \
+ ${datadir}/pipewire/pipewire.conf.avail \
+ ${datadir}/pipewire/pipewire-pulse.conf.avail \
+ ${datadir}/pipewire/client-rt.conf.avail \
+ ${datadir}/pipewire/client.conf.avail \
+ ${sysconfdir}/security/limits.d \
"
FILES:${PN}-dev += " \
@@ -234,6 +253,8 @@ FILES:${PN}-dev += " \
CONFFILES:libpipewire += "${datadir}/pipewire/client.conf"
FILES:libpipewire = " \
${datadir}/pipewire/client.conf \
+ ${datadir}/pipewire/client-rt.conf \
+ ${datadir}/pipewire/minimal.conf \
${libdir}/libpipewire-*.so.* \
"
# Add the bare minimum modules and plugins required to be able
@@ -268,25 +289,21 @@ FILES:${PN}-alsa = "\
${datadir}/alsa/alsa.conf.d/* \
"
+#lib to emulate v4l2 system calls on top of PipeWire
+FILES:${PN}-v4l2 = "\
+ ${libdir}/${PW_MODULE_SUBDIR}/v4l2/libpw-v4l2.so \
+"
+
# jack drop-in libraries to redirect audio to pipewire
CONFFILES:${PN}-jack = "${datadir}/pipewire/jack.conf"
FILES:${PN}-jack = "\
${datadir}/pipewire/jack.conf \
${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so.* \
"
-
-# Example session manager. Not intended for use in production.
-CONFFILES:${PN}-media-session = "${datadir}/pipewire/media-session.d/*"
-SYSTEMD_SERVICE:${PN}-media-session = "pipewire-media-session.service"
-FILES:${PN}-media-session = " \
- ${bindir}/pipewire-media-session \
- ${datadir}/pipewire/media-session.d/* \
- ${systemd_system_unitdir}/pipewire-media-session.service \
-"
-RPROVIDES:${PN}-media-session = "virtual/pipewire-sessionmanager"
-
# Dynamic packages (see set_dynamic_metapkg_rdepends).
-FILES:${PN}-spa-plugins = ""
+FILES:${PN}-spa-plugins-bluez5 += " \
+ ${datadir}/${SPA_SUBDIR}/bluez5/bluez-hardware.conf \
+"
RRECOMMENDS:${PN}-spa-plugins += "${PN}-spa-plugins-meta"
FILES:${PN}-spa-tools = " \
diff --git a/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.30.bbappend b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend
index 53e4bb4b3..beb7c0817 100644
--- a/meta-pipewire/recipes-multimedia/pipewire/pipewire_0.3.30.bbappend
+++ b/meta-pipewire/recipes-multimedia/pipewire/pipewire_1.0.0.bbappend
@@ -1,3 +1,7 @@
+SRC_URI += "\
+ file://0001-systemd-Do-not-override-rootprefix.patch \
+"
+
PACKAGECONFIG = "\
${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', 'bluez', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa pipewire-alsa', '', d)} \
@@ -6,17 +10,11 @@ PACKAGECONFIG = "\
gstreamer v4l2 \
"
-SRC_URI += "\
- file://0001-alsa-plugin-allow-specifying-a-media.role-on-the-vir.patch \
- file://0001-null-sink-make-the-timerfd-non-blocking.patch \
- file://0002-node-driver-make-the-timerfd-non-blocking.patch \
-"
-
do_install:append() {
# install symlinks to alsalib configuration files
for i in 50-pipewire.conf 99-pipewire-default.conf; do
if [ -f ${D}${datadir}/alsa/alsa.conf.d/${i} ]; then
- mkdir -p ${D}${sysconfdir}/alsa/conf.d
+ install -d ${D}${sysconfdir}/alsa/conf.d
ln -s ${datadir}/alsa/alsa.conf.d/${i} ${D}${sysconfdir}/alsa/conf.d/${i}
fi
done
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
index ebd0b6004..9077e3f45 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf
@@ -6,7 +6,7 @@ context.properties = {
application.name = "WirePlumber Bluetooth"
log.level = 2
wireplumber.script-engine = lua-scripting
- wireplumber.export-core = false
+ wireplumber.export-core = true
#mem.mlock-all = false
#support.dbus = true
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
index 36fe749bb..530f4cc62 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua
@@ -3,13 +3,15 @@
bluez_monitor = {}
bluez_monitor.properties = {
- -- Enable mSBC support, disabled by default. Be aware that
- -- mSBC is not expected to work on all headset + adapter combinations.
- -- This can be overloaded for a specific device and native backend
- -- in rules section.
- --["bluez5.msbc-support"] = false,
+ -- These features do not work on all headsets, so they are enabled
+ -- by default based on the hardware database. They can also be
+ -- forced on/off for all devices by the following options:
- --["bluez5.sbc-xq-support"] = true,
+ --["bluez5.enable-sbc-xq"] = true,
+ --["bluez5.enable-msbc"] = true,
+ --["bluez5.enable-hw-volume"] = true,
+
+ -- See bluez-hardware.conf for the hardware database.
-- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this
-- property only applies to native backend. Currently some headsets
@@ -23,7 +25,11 @@ bluez_monitor.properties = {
["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]",
-- Enabled A2DP codecs (default: all).
- --["bluez5.codecs"] = "[ sbc aac ldac aptx aptx_hd ]",
+ --["bluez5.codecs"] = "[ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]",
+
+ -- HFP/HSP backend (default: native).
+ -- Available values: any, none, hsphfpd, ofono, native
+ ["bluez5.hfphsp-backend"] = "ofono",
-- Properties for the A2DP codec configuration
--["bluez5.default.rate"] = 48000,
@@ -50,9 +56,6 @@ bluez_monitor.rules = {
--["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]",
["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]",
- -- Overload mSBC support for native backend and a specific device.
- --["bluez5.msbc-support"] = false,
-
-- Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ])
--["bluez5.hw-volume"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]",
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
index 75a169675..d07f7ab85 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua
@@ -8,7 +8,7 @@ alsa_monitor.properties = {
}
alsa_monitor.rules = {
- -- disable ACP (PulseAudio-like profiles)
+ -- enable ACP (PulseAudio-like profiles)
{
matches = {
{
@@ -16,7 +16,7 @@ alsa_monitor.rules = {
},
},
apply_properties = {
- ["api.alsa.use-acp"] = false,
+ ["api.alsa.use-acp"] = true,
},
},
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
index 365bab59a..e0d332422 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua
@@ -14,7 +14,7 @@ function device_defaults.enable()
-- Selects appropriate default routes ("ports" in pulseaudio terminology)
-- and enables saving and restoring them together with
-- their properties (per-route/port volume levels, channel maps, etc)
- load_script("default-routes.lua", device_defaults.properties)
+ load_script("policy-device-routes.lua", device_defaults.properties)
if device_defaults.properties["use-persistent-storage"] then
-- Enables functionality to save and restore default device profiles
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
index f6d73a3f1..ecb7da476 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua
@@ -4,7 +4,7 @@ load_module("metadata")
-- Load devices
alsa_monitor.enable()
---v4l2_monitor.enable()
+v4l2_monitor.enable()
-- Track/store/restore user choices about devices
device_defaults.enable()
@@ -13,7 +13,7 @@ device_defaults.enable()
load_script("suspend-node.lua")
-- Automatically sets device profiles to 'On'
-load_module("device-activation")
+load_script("policy-device-profile.lua")
-- Mute ALSA sinks when requested by pipewire-ic-ipc
load_module("mixer-api")
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
index 680a791f3..46ad11302 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf
@@ -57,6 +57,47 @@ context.modules = [
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
+
+ { name = libpipewire-module-filter-chain
+ args = {
+ node.description = "Equalizer Sink"
+ media.name = "Equalizer Sink"
+ filter.graph = {
+ nodes = [
+ {
+ type = builtin
+ name = bass
+ label = bq_lowshelf
+ # the cut off freq of the bass filter can be adjusted here.
+ control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 }
+ }
+ {
+ type = builtin
+ name = treble
+ label = bq_peaking
+ # the cut off freq of the treble filter can be adjusted here.
+ control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 }
+ }
+ ]
+ links = [
+ { output = "bass:Out" input = "treble:In" }
+ ]
+ }
+ audio.channels = 2
+ audio.position = [ FL FR ]
+ capture.props = {
+ node.name = "eq-sink"
+ media.class = Audio/Sink
+ # select the endpoint to which the node is attached
+ target.endpoint = "endpoint.multimedia"
+ node.passive = true
+ }
+ playback.props = {
+ node.name = "eq-output-stream"
+ node.passive = true
+ }
+ }
+ }
]
wireplumber.components = [
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
index 839a15fda..22ffe5bf3 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
@@ -8,11 +8,9 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda
SRC_URI = "\
file://bluetooth.lua.d/ \
file://host.lua.d/ \
- file://policy.lua.d \
file://00-functions.lua \
file://alsa-suspend.lua \
file://bluetooth.conf \
- file://policy.conf \
file://wireplumber.conf \
file://wireplumber-bluetooth.conf \
"
@@ -35,12 +33,6 @@ do_install:append() {
install -m 0644 ${WORKDIR}/host.lua.d/*.lua ${config_dir}/host.lua.d/
install -m 0644 ${WORKDIR}/wireplumber.conf ${config_dir}
- # config of the policy instance
- install -d ${config_dir}/policy.lua.d/
- ln -s ../00-functions.lua ${config_dir}/policy.lua.d/00-functions.lua
- install -m 0644 ${WORKDIR}/policy.lua.d/*.lua ${config_dir}/policy.lua.d/
- install -m 0644 ${WORKDIR}/policy.conf ${config_dir}
-
# config of the bluetooth instance
install -d ${config_dir}/bluetooth.lua.d/
ln -s ../00-functions.lua ${config_dir}/bluetooth.lua.d/00-functions.lua
@@ -57,7 +49,6 @@ do_install:append() {
# enable additional systemd services
install -d ${systemd_dir}
- ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@policy.service
ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@bluetooth.service
}
@@ -68,4 +59,3 @@ FILES:${PN} += "\
CONFFILES:${PN} += "\
${sysconfdir}/* \
"
-RPROVIDES:${PN} += "virtual/wireplumber-config"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua
new file mode 100644
index 000000000..7e1794df0
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua
@@ -0,0 +1,27 @@
+components = {}
+
+function load_module(m)
+ if not components[m] then
+ components[m] = { "libwireplumber-module-" .. m, type = "module" }
+ end
+end
+
+function load_pw_module(m)
+ if not components[m] then
+ components[m] = { "libpipewire-module-" .. m, type = "pw_module" }
+ end
+end
+
+function load_script(s, a)
+ if not components[s] then
+ components[s] = { s, type = "script/lua", args = a }
+ end
+end
+
+function load_monitor(s, a)
+ load_script("monitors/" .. s .. ".lua", a)
+end
+
+function load_access(s, a)
+ load_script("access/access-" .. s .. ".lua", a)
+end
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/policy.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf
index 42f714849..42f714849 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/policy.conf
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/policy.lua.d/10-default-policy.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua
index f70f38b1f..6814fce4d 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/policy.lua.d/10-default-policy.lua
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua
@@ -4,7 +4,10 @@ policy_config = {}
policy_config.endpoints = {
-- [endpoint name] = { endpoint properties }
-
+ ["endpoint.capture"] = {
+ ["media.class"] = "Audio/Source",
+ ["role"] = "Capture",
+ },
["endpoint.multimedia"] = {
["media.class"] = "Audio/Sink",
["role"] = "Multimedia",
@@ -43,15 +46,27 @@ policy_config.policy = {
["move"] = false, -- moves session items when metadata target.node changes
["follow"] = true, -- moves session items to the default device when it has changed
+ -- Set to 'true' to disable channel splitting & merging on nodes and enable
+ -- passthrough of audio in the same format as the format of the device.
+ -- Note that this breaks JACK support; it is generally not recommended
+ ["audio.no-dsp"] = false,
+
-- how much to lower the volume of lower priority streams when ducking
-- note that this is a linear volume modifier (not cubic as in pulseaudio)
["duck.level"] = 0.2,
["roles"] = {
+ ["Capture"] = {
+ ["alias"] = { "Multimedia", "Music", "Voice", "Capture" },
+ ["priority"] = 25,
+ ["action.default"] = "cork",
+ ["action.Capture"] = "mix",
+ ["media.class"] = "Audio/Source",
+ },
["Multimedia"] = {
["alias"] = { "Movie", "Music", "Game" },
["priority"] = 25,
- ["action.default"] = "cork",
+ ["action.default"] = "mix",
},
["Speech-Low"] = {
["priority"] = 30,
@@ -108,8 +123,8 @@ load_module("mixer-api")
-- Create endpoints statically at startup
load_script("static-endpoints.lua", policy_config.endpoints)
--- Create items for nodes that appear in the graph
-load_script("create-item.lua")
+-- Create session items for nodes that appear in the graph
+load_script("create-item.lua", policy_config.policy)
-- Link nodes to each other to make media flow in the graph
load_script("policy-node.lua", policy_config.policy)
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
new file mode 100644
index 000000000..1a031160e
--- /dev/null
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb
@@ -0,0 +1,41 @@
+SUMMARY = "AGL configuration file for wireplumber policy"
+HOMEPAGE = "https://gitlab.freedesktop.org/gkiagia/wireplumber"
+BUGTRACKER = "https://jira.automotivelinux.org"
+AUTHOR = "Ashok Sidipotu <ashok.sidipotu@collabora.com>"
+SECTION = "multimedia"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+SRC_URI = "\
+ file://policy.lua.d \
+ file://00-functions.lua \
+ file://policy.conf \
+"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+do_install:append() {
+ config_dir="${D}${sysconfdir}/wireplumber/"
+ systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants"
+
+ install -d ${config_dir}
+ install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir}
+
+ # config of the policy instance
+ install -d ${config_dir}/policy.lua.d/
+ ln -s ../00-functions.lua ${config_dir}/policy.lua.d/00-functions.lua
+ install -m 0644 ${WORKDIR}/policy.lua.d/*.lua ${config_dir}/policy.lua.d/
+ install -m 0644 ${WORKDIR}/policy.conf ${config_dir}
+
+ # enable additional systemd services
+ install -d ${systemd_dir}
+ ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@policy.service
+}
+
+FILES:${PN} += "\
+ ${sysconfdir}/* \
+ ${datadir}/wireplumber/* \
+"
+CONFFILES:${PN} += "\
+ ${sysconfdir}/* \
+"
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
index 6f21b258c..a04f115c3 100644
--- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
+++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb
@@ -14,9 +14,14 @@ DEPENDS = "glib-2.0 glib-2.0-native pipewire lua"
SRC_URI = "\
git://gitlab.freedesktop.org/pipewire/wireplumber.git;protocol=https;branch=master \
"
-SRCREV = "4af7e2bd68c4862bb707b62edf7557df56dad10f"
+# v0.4.17
+SRCREV = "d3eb77b292655cef333a8f4cab4e861415bc37c2"
-PV = "0.4.0"
+# patches to be able to compile with lower version of meson that is available in AGL.
+SRC_URI += "\
+"
+
+PV = "0.4.17"
S = "${WORKDIR}/git"
WPAPI="0.4"
@@ -38,7 +43,7 @@ PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemd-system-service=true -Dsyst
do_configure:prepend() {
# relax meson version requirement
# we only need 0.54 when building with -Dsystem-lua=false
- sed "s/meson_version : '>= 0.54.0'/meson_version : '>= 0.51.0'/" ${S}/meson.build > ${S}/tmp.build
+ sed "s/meson_version : '>= 0.56.0'/meson_version : '>= 0.53.2'/" ${S}/meson.build > ${S}/tmp.build
mv -f ${S}/tmp.build ${S}/meson.build
}
@@ -53,11 +58,10 @@ FILES:${PN} = "\
${bindir}/wpctl \
${bindir}/wpexec \
${libdir}/wireplumber-${WPAPI}/* \
- ${datadir}/wireplumber/* \
+ ${datadir}/wireplumber/scripts/* \
+ ${datadir}/zsh/* \
${systemd_system_unitdir}/* \
"
-RPROVIDES:${PN} += "virtual/pipewire-sessionmanager"
-RDEPENDS:${PN} += "virtual/wireplumber-config"
FILES:lib${PN}-${WPAPI} = "\
${libdir}/libwireplumber-${WPAPI}.so.* \
@@ -65,8 +69,17 @@ FILES:lib${PN}-${WPAPI} = "\
FILES:${PN}-config += "\
${sysconfdir}/wireplumber/* \
+ ${datadir}/wireplumber/*conf \
+ ${datadir}/wireplumber/common/* \
+ ${datadir}/wireplumber/main.lua.d/* \
+ ${datadir}/wireplumber/bluetooth.lua.d/* \
+ ${datadir}/wireplumber/policy.lua.d/* \
"
-CONFFILES:${PN}-config += "\
- ${sysconfdir}/wireplumber/* \
-"
-RPROVIDES:${PN}-config += "virtual/wireplumber-config"
+do_install:append() {
+ rm -rf ${D}${sysconfdir}/wireplumber/
+ rm -f ${D}${datadir}/wireplumber/*conf
+ rm -rf ${D}${datadir}/wireplumber/common
+ rm -rf ${D}${datadir}/wireplumber/main.lua.d
+ rm -rf ${D}${datadir}/wireplumber/bluetooth.lua.d
+ rm -rf ${D}${datadir}/wireplumber/policy.lua.d
+}