diff --git a/split-config-file.py b/split-config-file.py new file mode 100644 index 0000000..ed3373c --- /dev/null +++ b/split-config-file.py @@ -0,0 +1,47 @@ +#!/usr/bin/python3 +import hashlib +import sys + + +def md5FromData(data): + hash_md5 = hashlib.md5() + hash_md5.update(data) + return hash_md5.hexdigest() + + +contents = open('90-enable-all.lua', 'r', encoding='utf-8').read() + +md5sum = md5FromData(contents.encode('utf-8')) +expected_md5sum = '1317fb5df6ae842fda3ef845f195e084' + +if md5sum != expected_md5sum: + print('The script has to be updated for new changes in 90-enable-all.lua') + print(f'File md5sum: {md5sum}') + print(f'expected md5sum: {expected_md5sum}') + sys.exit(1) + +content_sections = contents.split('\n\n') + +sections = ['enable-metadata', + 'default-access-policy', + 'load-devices', + 'track-user-choices', + 'link-nodes-by-roles', + 'suspend-idle-nodes', + 'device-activation'] + +if len(content_sections) != len(sections): + print('The script has to be updated for new changes in 90-enable-all.lua') + sys.exit(1) + +for i, (content, sec) in enumerate(zip(content_sections, sections)): + if sec == 'load-devices': + lines = content.split('\n') + open(f'90-{i}-1-enable-alsa.lua', 'w', + encoding='utf-8').write(lines[1]) + open(f'90-{i}-2-enable-v4l2.lua', 'w', + encoding='utf-8').write(lines[2]) + continue + + filename = f'90-{i}-{sec}.lua' + open(filename, 'w', encoding='utf-8').write(content) diff --git a/wireplumber.changes b/wireplumber.changes index 6cf51df..718345a 100644 --- a/wireplumber.changes +++ b/wireplumber.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Fri Dec 3 18:12:42 UTC 2021 - Antonio Larrosa + +- Split the configuration to separate the audio initialization + to a new wireplumber-audio subpackage. This way, if that package + is not installed, pipewire doesn't open the audio devices, thus + not entering a race-condition with pulseaudio but still allowing + to manage v4l2 devices and sharing the screen in wayland, for + example (boo#1188516). + ------------------------------------------------------------------- Wed Nov 24 16:09:52 UTC 2021 - Antonio Larrosa diff --git a/wireplumber.spec b/wireplumber.spec index 43fd65a..179d866 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -28,6 +28,7 @@ License: MIT Group: Development/Libraries/C and C++ URL: https://gitlab.freedesktop.org/pipewire/wireplumber Source0: wireplumber-%{version}.tar.xz +Source1: split-config-file.py Patch0: 0001-m-reserve-device-replace-the-hash-table-key-on-new-insert.patch Patch1: 0002-policy-node-wait-for-nodes-when-we-become-unlinked.patch Patch100: reduce-meson-required-version.patch @@ -88,6 +89,22 @@ a GObject-based high-level library that wraps PipeWire's API, providing convenience for writing the daemon's modules as well as external tools for managing PipeWire. +%package audio +Summary: Session / policy manager implementation for PipeWire (audio support) +Group: Development/Libraries/C and C++ +Requires: %{name} = %{version} +Requires: %{libwireplumber} = %{version} +Conflicts: pulseaudio +Recommends: pipewire-pulseaudio + +%description audio +WirePlumber is a modular session / policy manager for PipeWire and +a GObject-based high-level library that wraps PipeWire's API, +providing convenience for writing the daemon's modules as well as +external tools for managing PipeWire. + +This package enables the use of alsa devices in PipeWire. + %package devel Summary: Session / policy manager implementation for PipeWire Group: Development/Libraries/C and C++ @@ -135,6 +152,11 @@ the wireplumber shared library. %patch100 -p1 %endif +pushd src/config/main.lua.d +python3 %{SOURCE1} +rm 90-enable-all.lua +popd + %build %if %{pkg_vcmp gcc < 8} export CC=gcc-9 @@ -194,6 +216,10 @@ export XDG_RUNTIME_DIR=/tmp %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service %{_datadir}/wireplumber +%exclude %{_datadir}/wireplumber/main.lua.d/90-2-1-enable-alsa.lua + +%files audio +%{_datadir}/wireplumber/main.lua.d/90-2-1-enable-alsa.lua %files devel %{_includedir}/wireplumber-%{apiver}