All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-multimedia][PATCHv11 1/2] pipewire: update to v0.3.56
@ 2022-08-22 15:49 Markus Volk
  2022-08-22 15:49 ` [meta-multimedia][PATCHv11 2/2] pipewire: install as configured Markus Volk
  0 siblings, 1 reply; 2+ messages in thread
From: Markus Volk @ 2022-08-22 15:49 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Markus Volk

Add the configuration to make pipewire work as a drop-in replacement for pulseaudio-server.

Add pipewire-media-session as a standalone recipe, since pipewire would fetch the code as a
subproject at do_configure.

Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 .../pipewire/pipewire-media-session_0.4.1.bb  | 25 +++++++++
 ...01-avb-fix-compilation-on-big-endian.patch | 53 +++++++++++++++++++
 .../0001-spa-fix-c90-header-include.patch     | 47 ----------------
 ...{pipewire_0.3.50.bb => pipewire_0.3.56.bb} | 44 ++++++++++-----
 4 files changed, 110 insertions(+), 59 deletions(-)
 create mode 100644 meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb
 create mode 100644 meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-avb-fix-compilation-on-big-endian.patch
 delete mode 100644 meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch
 rename meta-multimedia/recipes-multimedia/pipewire/{pipewire_0.3.50.bb => pipewire_0.3.56.bb} (87%)

diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb b/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb
new file mode 100644
index 000000000..9fdb60380
--- /dev/null
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "PipeWire Media Session is an example session manager for PipeWire"
+HOMEPAGE = "https://gitlab.freedesktop.org/pipewire/media-session"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=97be96ca4fab23e9657ffa590b931c1a"
+
+DEPENDS = " \
+	pipewire \
+	alsa-lib \
+	dbus \
+"
+
+SRC_URI = "git://gitlab.freedesktop.org/pipewire/media-session.git;protocol=https;branch=master"
+
+S = "${WORKDIR}/git"
+SRCREV = "e5d5cf2404786af8bcc40bdb8a2962bef4ec18b6"
+
+inherit meson pkgconfig
+
+FILES:${PN} += " \
+	${systemd_user_unitdir}/pipewire-media-session.service \
+	${datadir}/pipewire/media-session.d/* \
+"
+
+RRECOMMENDS:${PN} += "pipewire"
diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-avb-fix-compilation-on-big-endian.patch b/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-avb-fix-compilation-on-big-endian.patch
new file mode 100644
index 000000000..fc618b4a7
--- /dev/null
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-avb-fix-compilation-on-big-endian.patch
@@ -0,0 +1,53 @@
+From 1a5ec4452fa21592eaeeb823ad95a1db6eb60376 Mon Sep 17 00:00:00 2001
+From: Wim Taymans <wtaymans@redhat.com>
+Date: Tue, 19 Jul 2022 13:49:42 +0200
+Subject: [PATCH 001/113] avb: fix compilation on big endian
+
+Patch-Status: Backport
+
+---
+ src/modules/module-avb/aaf.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/modules/module-avb/aaf.h b/src/modules/module-avb/aaf.h
+index cb4871ca6..b444ce251 100644
+--- a/src/modules/module-avb/aaf.h
++++ b/src/modules/module-avb/aaf.h
+@@ -35,7 +35,7 @@ struct avb_packet_aaf {
+ 	unsigned gv:1;
+ 	unsigned tv:1;
+ 
+-	uint8_t seq_number;
++	uint8_t seq_num;
+ 
+ 	unsigned _r2:7;
+ 	unsigned tu:1;
+diff --git a/src/modules/module-avb/iec61883.h b/src/modules/module-avb/iec61883.h
+index d3b3a7daa..6ca8724ad 100644
+--- a/src/modules/module-avb/iec61883.h
++++ b/src/modules/module-avb/iec61883.h
+@@ -37,7 +37,7 @@ struct avb_packet_iec61883 {
+ 	unsigned gv:1;
+ 	unsigned tv:1;
+ 
+-	uint8_t seq_number;
++	uint8_t seq_num;
+ 
+ 	unsigned _r2:7;
+ 	unsigned tu:1;
+diff --git a/spa/plugins/avb/avbtp/packets.h b/spa/plugins/avb/avbtp/packets.h
+index 7047456bf..3d4a652ee 100644
+--- a/spa/plugins/avb/avbtp/packets.h
++++ b/spa/plugins/avb/avbtp/packets.h
+@@ -116,7 +116,7 @@ struct spa_avbtp_packet_aaf {
+ 	unsigned gv:1;
+ 	unsigned tv:1;
+ 
+-	uint8_t seq_number;
++	uint8_t seq_num;
+ 
+ 	unsigned _r2:7;
+ 	unsigned tu:1;
+-- 
+2.34.1
+
diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch b/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch
deleted file mode 100644
index ad6448a10..000000000
--- a/meta-multimedia/recipes-multimedia/pipewire/pipewire/0001-spa-fix-c90-header-include.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From d3ea3142e1a4de206e616bc18f63a529e6b4986a Mon Sep 17 00:00:00 2001
-From: psykose <alice@ayaya.dev>
-Date: Wed, 13 Apr 2022 21:57:49 +0000
-Subject: [PATCH 001/154] spa: fix c90 header include
-
-placing declarations after code is invalid under ISO c90
-
-Fixes !1211
-
-Patch-Status: Backport
----
- spa/include/spa/utils/string.h | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/spa/include/spa/utils/string.h b/spa/include/spa/utils/string.h
-index e80434537..43d19616c 100644
---- a/spa/include/spa/utils/string.h
-+++ b/spa/include/spa/utils/string.h
-@@ -276,10 +276,11 @@ static inline int spa_scnprintf(char *buffer, size_t size, const char *format, .
- static inline float spa_strtof(const char *str, char **endptr)
- {
- 	static locale_t locale = NULL;
-+	locale_t prev;
- 	float v;
- 	if (SPA_UNLIKELY(locale == NULL))
- 		locale = newlocale(LC_ALL_MASK, "C", NULL);
--	locale_t prev = uselocale(locale);
-+	prev = uselocale(locale);
- 	v = strtof(str, endptr);
- 	uselocale(prev);
- 	return v;
-@@ -319,10 +320,11 @@ static inline bool spa_atof(const char *str, float *val)
- static inline double spa_strtod(const char *str, char **endptr)
- {
- 	static locale_t locale = NULL;
-+	locale_t prev;
- 	double v;
- 	if (SPA_UNLIKELY(locale == NULL))
- 		locale = newlocale(LC_ALL_MASK, "C", NULL);
--	locale_t prev = uselocale(locale);
-+	prev = uselocale(locale);
- 	v = strtod(str, endptr);
- 	uselocale(prev);
- 	return v;
--- 
-2.25.1
-
diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb b/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb
similarity index 87%
rename from meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb
rename to meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb
index c176c6eeb..bf7bae80f 100644
--- a/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.50.bb
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb
@@ -13,10 +13,10 @@ LIC_FILES_CHKSUM = " \
 
 DEPENDS = "dbus ncurses"
 
-SRCREV = "64cf5e80e6240284e6b757907b900507fe56f1b5"
+SRCREV = "f274e53d25ee8f483ac6fce9e516bb1830abe88b"
 SRC_URI = " \
 	git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https \
-	file://0001-spa-fix-c90-header-include.patch \
+	file://0001-avb-fix-compilation-on-big-endian.patch \
 "
 
 S = "${WORKDIR}/git"
@@ -62,7 +62,6 @@ EXTRA_OEMESON += " \
     -Dudevrulesdir=${nonarch_base_libdir}/udev/rules.d/ \
     -Dsystemd-system-unit-dir=${systemd_system_unitdir} \
     -Dsystemd-user-unit-dir=${systemd_user_unitdir} \
-    -Dvulkan=disabled \
     -Dman=disabled \
     -Dsession-managers='[]' \
     -Dlv2=disabled \
@@ -72,12 +71,26 @@ EXTRA_OEMESON += " \
     -Dlegacy-rtkit=false \
 "
 
-PACKAGECONFIG:class-target ??= "\
+# spa alsa plugin code uses typedef redefinition, which is officially a C11 feature.
+# Pipewire builds with 'c_std=gnu99' by default. Recent versions of gcc don't issue this warning in gnu99
+# mode but it looks like clang still does
+CFLAGS:append = " -Wno-typedef-redefinition"
+
+# According to wireplumber documentation only one session manager should be installed at a time
+# Possible options are media-session, which has fewer dependencies but is very simple,
+# or wireplumber, which is more powerful.
+PIPEWIRE_SESSION_MANAGER ??= "media-session"
+
+FFMPEG_AVAILABLE = "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'ffmpeg', '', d)}"
+BLUETOOTH_AAC = "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'bluez-aac', '', d)}"
+
+PACKAGECONFIG:class-target ??= " \
     ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service', '', d)} \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'alsa', d)} \
-    gstreamer jack libusb pw-cat raop sndfile v4l2 \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez ${BLUETOOTH_AAC}', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service systemd-user-service', '', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'alsa vulkan pulseaudio', d)} \
+    ${PIPEWIRE_SESSION_MANAGER} \
+    ${FFMPEG_AVAILABLE} gstreamer jack libusb pw-cat raop sndfile v4l2 udev volume \
 "
 
 # "jack" and "pipewire-jack" packageconfigs cannot be both enabled,
@@ -93,9 +106,11 @@ PACKAGECONFIG[docs] = "-Ddocs=enabled,-Ddocs=disabled,doxygen-native graphviz-na
 PACKAGECONFIG[ffmpeg] = "-Dffmpeg=enabled,-Dffmpeg=disabled,ffmpeg"
 PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
 PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack,,,pipewire-jack"
-PACKAGECONFIG[libcamera] = "-Dlibcamera=enabled,-Dlibcamera=disabled,libcamera"
+PACKAGECONFIG[libcamera] = "-Dlibcamera=enabled,-Dlibcamera=disabled,libcamera libdrm"
 PACKAGECONFIG[libcanberra] = "-Dlibcanberra=enabled,-Dlibcanberra=disabled,libcanberra"
 PACKAGECONFIG[libusb] = "-Dlibusb=enabled,-Dlibusb=disabled,libusb"
+PACKAGECONFIG[media-session] = ",,,pipewire-media-session"
+PACKAGECONFIG[pulseaudio] = "-Dlibpulse=enabled,-Dlibpulse=disabled,pulseaudio"
 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[pw-cat] = "-Dpw-cat=enabled,-Dpw-cat=disabled"
@@ -109,8 +124,12 @@ PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=enabled,-Dsyst
 # currently lacks the feature of enabling user services.
 PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=enabled,-Dsystemd-user-service=disabled,systemd"
 # pw-cat needs sndfile packageconfig to be enabled
+PACKAGECONFIG[udev] = "-Dudev=enabled,-Dudev=disabled,udev"
 PACKAGECONFIG[v4l2] = "-Dv4l2=enabled,-Dv4l2=disabled,udev"
+PACKAGECONFIG[volume] = "-Dvolume=enabled,-Dvolume=disabled"
+PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-headers vulkan-loader"
 PACKAGECONFIG[webrtc-echo-cancelling] = "-Decho-cancel-webrtc=enabled,-Decho-cancel-webrtc=disabled,webrtc-audio-processing"
+PACKAGECONFIG[wireplumber] = ",,,wireplumber"
 
 PACKAGESPLITFUNCS:prepend = " split_dynamic_packages "
 PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends "
@@ -227,10 +246,11 @@ PACKAGES_DYNAMIC = "^${PN}-spa-plugins.* ^${PN}-modules.*"
 SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'systemd-system-service', 'pipewire.service', '', d)}"
 CONFFILES:${PN} += "${datadir}/pipewire/pipewire.conf"
 FILES:${PN} = " \
-    ${datadir}/pipewire/pipewire.conf \
-    ${systemd_system_unitdir}/pipewire.* \
-    ${systemd_user_unitdir}/pipewire.* \
+    ${datadir}/pipewire \
+    ${systemd_system_unitdir}/pipewire* \
+    ${systemd_user_unitdir}/pipewire* \
     ${bindir}/pipewire \
+    ${bindir}/pipewire-avb \
 "
 
 FILES:${PN}-dev += " \
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [meta-multimedia][PATCHv11 2/2] pipewire: install as configured
  2022-08-22 15:49 [meta-multimedia][PATCHv11 1/2] pipewire: update to v0.3.56 Markus Volk
@ 2022-08-22 15:49 ` Markus Volk
  0 siblings, 0 replies; 2+ messages in thread
From: Markus Volk @ 2022-08-22 15:49 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Markus Volk

This is to make sure that all configured parts of pipewire are installed on the target.
For the systemd case, it would then just be a matter of starting the pipewire user services,
to get it running.

Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
 .../pipewire/pipewire-media-session_0.4.1.bb          |  1 +
 .../recipes-multimedia/pipewire/pipewire_0.3.56.bb    | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb b/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb
index 9fdb60380..ea8518f06 100644
--- a/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire-media-session_0.4.1.bb
@@ -23,3 +23,4 @@ FILES:${PN} += " \
 "
 
 RRECOMMENDS:${PN} += "pipewire"
+RPROVIDES:${PN} = "media-session"
diff --git a/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb b/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb
index bf7bae80f..3e926783a 100644
--- a/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb
+++ b/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.56.bb
@@ -318,6 +318,17 @@ FILES:${PN}-jack = "\
     ${libdir}/${PW_MODULE_SUBDIR}/jack/libjack*.so.* \
 "
 
+RRECOMMENDS:${PN}:class-target = " \
+	gstreamer1.0-pipewire \
+	pipewire-alsa-card-profile \
+	pipewire-jack \
+	pipewire-modules-meta \
+	pipewire-spa-plugins-meta \
+	${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'pipewire-alsa', '', d)} \
+	${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pipewire-pulse', '', d)} \
+	${PIPEWIRE_SESSION_MANAGER} \
+"
+
 # Dynamic SPA plugin packages (see set_dynamic_metapkg_rdepends).
 FILES:${PN}-spa-plugins = ""
 RRECOMMENDS:${PN}-spa-plugins += "${PN}-spa-plugins-meta"
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-08-22 15:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-22 15:49 [meta-multimedia][PATCHv11 1/2] pipewire: update to v0.3.56 Markus Volk
2022-08-22 15:49 ` [meta-multimedia][PATCHv11 2/2] pipewire: install as configured Markus Volk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.