wireplumber: update to 0.4 rc1 40/26340/2
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Tue, 11 May 2021 08:34:16 +0000 (11:34 +0300)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Wed, 12 May 2021 19:06:24 +0000 (19:06 +0000)
* 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 <george.kiagiadakis@collabora.com>
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 <jsmoeller@linuxfoundation.org>
meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-bluez-monitor.lua
meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf [new file with mode: 0644]
meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb
meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb

index 50366d6..fab9ac0 100644 (file)
@@ -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 (file)
index 0000000..6f9b0b1
--- /dev/null
@@ -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 = {
+  #<factory-name regex> = <library-name>
+  #
+  # 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 = <module-name>
+  #    [ args = { <key> = <value> ... } ]
+  #    [ 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 = <component-name>, type = <component-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 }
+]
index 2f890d6..86d7725 100644 (file)
@@ -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}
 }
index 2d15767..56065db 100644 (file)
@@ -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"