aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>2021-07-15 16:38:49 +0300
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>2021-07-30 11:23:36 +0300
commit72ac5f60cf0ee94150471b17c35f4ea46c0dcffb (patch)
tree4be6e7d3a38d00103c33651b664cf5a4d1cbe8bd
parent97d9a76cc73cec3ffadb9539cc76e56beaf8a9bc (diff)
meta-agl-lxc: integrate pipewire-ic-ipc and pull in agl-pipewire
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
-rw-r--r--meta-agl-lxc/recipes-container/lxc-config/files/config.cluster-demo.in2
-rw-r--r--meta-agl-lxc/recipes-multimedia/pipewire-ic-ipc/pipewire-ic-ipc_git.bb37
-rw-r--r--meta-agl-lxc/recipes-platform/images/guest-image-cluster-demo.bb1
-rw-r--r--meta-agl-lxc/recipes-platform/images/lxc-host-image-demo.bb4
-rw-r--r--templates/feature/agl-lxc/included.dep2
5 files changed, 44 insertions, 2 deletions
diff --git a/meta-agl-lxc/recipes-container/lxc-config/files/config.cluster-demo.in b/meta-agl-lxc/recipes-container/lxc-config/files/config.cluster-demo.in
index 90c5a1e6..acfff2cd 100644
--- a/meta-agl-lxc/recipes-container/lxc-config/files/config.cluster-demo.in
+++ b/meta-agl-lxc/recipes-container/lxc-config/files/config.cluster-demo.in
@@ -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
index 00000000..2951d0e9
--- /dev/null
+++ b/meta-agl-lxc/recipes-multimedia/pipewire-ic-ipc/pipewire-ic-ipc_git.bb
@@ -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/* \
+"
diff --git a/meta-agl-lxc/recipes-platform/images/guest-image-cluster-demo.bb b/meta-agl-lxc/recipes-platform/images/guest-image-cluster-demo.bb
index c07b8f7d..959a46a6 100644
--- a/meta-agl-lxc/recipes-platform/images/guest-image-cluster-demo.bb
+++ b/meta-agl-lxc/recipes-platform/images/guest-image-cluster-demo.bb
@@ -8,4 +8,5 @@ IMAGE_INSTALL += " \
weston-init \
weston-ini-conf-landscape \
refgui \
+ pipewire-ic-ipc \
"
diff --git a/meta-agl-lxc/recipes-platform/images/lxc-host-image-demo.bb b/meta-agl-lxc/recipes-platform/images/lxc-host-image-demo.bb
index 1af163b8..6a17cbed 100644
--- a/meta-agl-lxc/recipes-platform/images/lxc-host-image-demo.bb
+++ b/meta-agl-lxc/recipes-platform/images/lxc-host-image-demo.bb
@@ -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)} \
"
diff --git a/templates/feature/agl-lxc/included.dep b/templates/feature/agl-lxc/included.dep
index b7e96fbb..da46a102 100644
--- a/templates/feature/agl-lxc/included.dep
+++ b/templates/feature/agl-lxc/included.dep
@@ -1 +1 @@
-agl-drm-lease
+agl-drm-lease agl-pipewire