diff options
Diffstat (limited to 'meta-pipewire/recipes-multimedia')
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 +} |