meta-agl-lxc: integrate pipewire-ic-ipc and pull in agl-pipewire 04/26504/3
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Thu, 15 Jul 2021 13:38:49 +0000 (16:38 +0300)
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>
Fri, 30 Jul 2021 08:23:36 +0000 (11:23 +0300)
pipewire-ic-ipc offers a small unix socket server that listens
for the SUSPEND & RESUME requests from its clients and sets the
"suspend.playback" metadata on pipewire. This allows wireplumber
instances to catch changes to this metadata property and suspend
or resume playback from applications appropriately.

The purpose of this is to allow Instrument Cluster applications to
suspend audio from other containers and play certain sounds exclusively.

The server-side is implemented as a pipewire module that gets loaded
in a separate pipewire process and behaves as a client to the actual
pipewire daemon. It is not affected by pipewire daemon's stops & reloads,
as it re-connects automatically to pipewire and synchronizes the
"suspend.playback" status.

The icipc-client application is an example that is not meant to be
used in production. IC applications are expected to use the library
directly. It is provided for testing & demo purposes.

v2:
 - removed the client from the host image
 - updated the pipewire-ic-ipc git URI to point to AGL's gerrit

Bug-AGL: SPEC-4027
Signed-off-by: George Kiagiadakis <george.kiagiadakis@collabora.com>
Change-Id: I9e326797ce899c2579a0d7794202091e455c6c98

meta-agl-lxc/recipes-container/lxc-config/files/config.cluster-demo.in
meta-agl-lxc/recipes-multimedia/pipewire-ic-ipc/pipewire-ic-ipc_git.bb [new file with mode: 0644]
meta-agl-lxc/recipes-platform/images/guest-image-cluster-demo.bb
meta-agl-lxc/recipes-platform/images/lxc-host-image-demo.bb
templates/feature/agl-lxc/included.dep

index 90c5a1e..acfff2c 100644 (file)
@@ -21,6 +21,8 @@ lxc.mount.entry = /run/drm-lease-manager/@DRM_LEASE_DEVICE@ var/display/drm-leas
 lxc.cgroup.devices.allow = c 10:* rwm
 lxc.mount.entry = /dev/pvr_sync dev/pvr_sync none bind,optional,create=file
 
+lxc.mount.entry = /run/pipewire/icipc-0 var/icipc-0 none bind,optional,create=file
+
 lxc.net.0.type = empty
 
 lxc.environment = QT_QPA_PLATFORM=wayland
diff --git a/meta-agl-lxc/recipes-multimedia/pipewire-ic-ipc/pipewire-ic-ipc_git.bb b/meta-agl-lxc/recipes-multimedia/pipewire-ic-ipc/pipewire-ic-ipc_git.bb
new file mode 100644 (file)
index 0000000..2951d0e
--- /dev/null
@@ -0,0 +1,37 @@
+SUMMARY     = "PipeWire AGL Instrument Cluster IPC"
+AUTHOR      = "George Kiagiadakis <george.kiagiadakis@collabora.com>"
+SECTION     = "multimedia"
+LICENSE     = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264"
+
+PV = "0.1+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/pipewire-ic-ipc.git;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "f93f9cda5d8a380bc8846b5de3fc24613466adf3"
+
+S  = "${WORKDIR}/git"
+
+inherit meson pkgconfig systemd
+
+# build the server on the host
+PACKAGECONFIG = "\
+    server \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+"
+# only the example client in the guest
+PACKAGECONFIG_aglcontainerguest = "client"
+
+# systemd integration for the server-side component
+PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
+# server-side component
+PACKAGECONFIG[server] = "-Dserver=true,-Dserver=false,pipewire"
+# example client; not needed if you use the icipc library in your IC applciation
+PACKAGECONFIG[client] = "-Dclient=true,-Dclient=false,"
+
+# server-side systemd service
+SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'pipewire-ic-ipc.service', '', d)}"
+
+FILES_${PN} += "\
+    ${datadir}/pipewire/* \
+    ${libdir}/pipewire-0.3/* \
+"
index c07b8f7..959a46a 100644 (file)
@@ -8,4 +8,5 @@ IMAGE_INSTALL += " \
     weston-init \
     weston-ini-conf-landscape \
     refgui \
+    pipewire-ic-ipc \
 "
index 1af163b..6a17cbe 100644 (file)
@@ -7,7 +7,9 @@ CONTAINER_IMAGES ?= "agl-container-guest:guest-image-cluster-demo"
 
 IMAGE_INSTALL += " \
     kernel-modules \
-    pipewire pipewire-alsa alsa-utils \
+    alsa-utils \
+    packagegroup-pipewire \
+    pipewire-ic-ipc \
     ${@bb.utils.contains('AGL_FEATURES', 'agl-drm-lease', 'drm-lease-manager', '', d)} \
 "