From fa55216e21c8a63f9f9b9309edc005ed2bea2485 Mon Sep 17 00:00:00 2001 From: George Kiagiadakis Date: Tue, 11 May 2021 11:34:16 +0300 Subject: wireplumber: update to 0.4 rc1 * Update the bluetooth config to be aligned with the default upstream config * Make a2dp streams use the Multimedia role instead of Communication * Add wireplumber.conf in the agl config, which is now required Bug-AGL: SPEC-3844 Change-Id: Ifdc61065593b7cbd366dd490689135f0973ebf66 Signed-off-by: George Kiagiadakis Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/26340 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account Reviewed-by: Jan-Simon Moeller --- .../wireplumber-config-agl/30-bluez-monitor.lua | 45 +++++++++++-- .../wireplumber-config-agl/wireplumber.conf | 74 ++++++++++++++++++++++ .../wireplumber/wireplumber-config-agl_git.bb | 3 + .../wireplumber/wireplumber_git.bb | 5 +- 4 files changed, 119 insertions(+), 8 deletions(-) create mode 100644 meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-bluez-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-bluez-monitor.lua index 50366d60b..fab9ac0e4 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-bluez-monitor.lua +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-bluez-monitor.lua @@ -3,6 +3,12 @@ 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, + --["bluez5.sbc-xq-support"] = true, -- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this @@ -18,6 +24,10 @@ bluez_monitor.properties = { -- Enabled A2DP codecs (default: all). --["bluez5.codecs"] = "[ sbc aac ldac aptx aptx_hd ]", + + -- Properties for the A2DP codec configuration + --["bluez5.default.rate"] = 48000, + --["bluez5.default.channels"] = 2, } bluez_monitor.rules = { @@ -34,23 +44,36 @@ bluez_monitor.rules = { }, -- Apply properties on the matched object. apply_properties = { - -- Autoconnect device profiles, disabled by default - -- if the property is not specified. - ["bluez5.reconnect-profiles"] = "[ hfp_hf hsp_hs a2dp_sink ]", + -- Auto-connect device profiles on start up or when only partial + -- profiles have connected. Disabled by default if the property + -- is not specified. + --["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]", + ["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]", - -- MSBC is not expected to work on all headset + adapter combinations. + -- 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 ]", + -- LDAC encoding quality -- Available values: auto (Adaptive Bitrate, default) -- hq (High Quality, 990/909kbps) -- sq (Standard Quality, 660/606kbps) -- mq (Mobile use Quality, 330/303kbps) --["bluez5.a2dp.ldac.quality"] = "auto", + + -- AAC variable bitrate mode + -- Available values: 0 (cbr, default), 1-5 (quality level) + --["bluez5.a2dp.aac.bitratemode"] = 0, + + -- Profile connected first + -- Available values: a2dp-sink (default), headset-head-unit + --["device.profile"] = "a2dp-sink", }, }, { - -- Make output stream nodes go through the Communication endpoint + -- Make output hsp/hfp stream nodes go through the Communication endpoint -- Unfortunately we cannot match on "media.class" because this property -- is not known before the node is created matches = { @@ -58,12 +81,22 @@ bluez_monitor.rules = { { "api.bluez5.profile", "equals", "headset-audio-gateway" }, { "factory.name", "matches", "*source*" }, }, + }, + apply_properties = { + ["media.role"] = "Communication", + }, + }, + { + -- Make output a2dp stream nodes go through the Multimedia endpoint + -- Unfortunately we cannot match on "media.class" because this property + -- is not known before the node is created + matches = { { { "api.bluez5.profile", "equals", "a2dp-source" }, }, }, apply_properties = { - ["media.role"] = "Communication", + ["media.role"] = "Multimedia", }, }, } diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf new file mode 100644 index 000000000..6f9b0b186 --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf @@ -0,0 +1,74 @@ +# WirePlumber daemon context configuration # + +context.properties = { + ## Properties to configure the PipeWire context and some modules + + # 1=error/critical, 2=warning, 3=info, 4=debug, 5=trace + log.level = 2 + + wireplumber.script-engine = lua-scripting +} + +context.spa-libs = { + # = + # + # Used to find spa factory names. It maps an spa factory name + # regular expression to a library name that should contain + # that factory. + # + api.alsa.* = alsa/libspa-alsa + api.bluez5.* = bluez5/libspa-bluez5 + api.v4l2.* = v4l2/libspa-v4l2 + api.libcamera.* = libcamera/libspa-libcamera + audio.convert.* = audioconvert/libspa-audioconvert + support.* = support/libspa-support +} + +context.modules = [ + #{ name = + # [ args = { = ... } ] + # [ flags = [ [ ifexists ] [ nofail ] ] + #} + # + # PipeWire modules to load. + # If ifexists is given, the module is ignored when it is not found. + # If nofail is given, module initialization failures are ignored. + # + + # The native communication protocol. + { name = libpipewire-module-protocol-native } + + # Allows creating nodes that run in the context of the + # client. Is used by all clients that want to provide + # data to PipeWire. + { name = libpipewire-module-client-node } + + # Allows creating devices that run in the context of the + # client. Is used by the session manager. + { name = libpipewire-module-client-device } + + # Makes a factory for wrapping nodes in an adapter with a + # converter and resampler. + { name = libpipewire-module-adapter } + + # Allows applications to create metadata objects. It creates + # a factory for Metadata objects. + { name = libpipewire-module-metadata } + + # Provides factories to make session manager objects. + { name = libpipewire-module-session-manager } +] + +wireplumber.components = [ + #{ name = , type = } + # + # WirePlumber components to load + # + + # The lua scripting engine + { name = libwireplumber-module-lua-scripting, type = module } + + # The lua configuration file(s) + # Other components are loaded from there + { name = config.lua, type = config/lua } +] 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 2f890d6c9..86d77257d 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb @@ -12,6 +12,7 @@ SRC_URI = "\ file://30-alsa-monitor.lua \ file://30-bluez-monitor.lua \ file://99-load-modules.lua \ + file://wireplumber.conf \ file://wireplumber-bluetooth.conf \ " PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -30,6 +31,8 @@ do_install_append() { install -m 0644 ${WORKDIR}/30-bluez-monitor.lua ${config_dir} install -m 0644 ${WORKDIR}/99-load-modules.lua ${config_dir} + install -m 0644 ${WORKDIR}/wireplumber.conf ${D}${sysconfdir}/wireplumber/ + install -d ${dbus_config_dir} install -m 0644 ${WORKDIR}/wireplumber-bluetooth.conf ${dbus_config_dir} } diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb index 2d1576719..56065db48 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb @@ -14,9 +14,10 @@ DEPENDS = "glib-2.0 glib-2.0-native pipewire lua" SRC_URI = "\ git://gitlab.freedesktop.org/pipewire/wireplumber.git;protocol=https;branch=master \ " -SRCREV = "bc1413e1cd718a407630903d9a50dabd6d781498" +SRCREV = "ecef960b7859b9b24885840453a3ddf4812845f2" -PV = "0.3.70+git${SRCPV}" +#PV = "0.3.95+git${SRCPV}" +PV = "0.3.95" S = "${WORKDIR}/git" WPAPI="0.4" -- cgit 1.2.3-korg