Hello community,

here is the log from the commit of package pipewire for openSUSE:Leap:15.2 
checked in at 2020-03-31 07:22:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/pipewire (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.pipewire.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pipewire"

Tue Mar 31 07:22:03 2020 rev:4 rq:788622 version:0.3.1

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/pipewire/pipewire.changes      2020-01-30 
14:48:02.494827189 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.pipewire.new.3160/pipewire.changes    
2020-03-31 07:22:06.554391238 +0200
@@ -1,0 +2,119 @@
+Mon Mar 23 09:23:05 UTC 2020 - Antonio Larrosa <[email protected]>
+
+- Repackage sources to remove a file with invalid license
+  (spa/plugins/vulkan/shaders/mandelbrot-distance.comp) . The file
+  has already been replaced by upstream with a valid licensed file
+  so the patch from upstream was added too:
+  * 0001-Add-MIT-licensed-compute-example.patch
+- The patch above adds a binary file, but binary diffs are not
+  supported, so the source file is also added directly:
+  * main.spv
+- Do not build/package man pages in SLE since xmltoman is not
+  available.
+
+-------------------------------------------------------------------
+Tue Mar 17 10:58:42 UTC 2020 - Bjørn Lie <[email protected]>
+
+- Switch license to MIT and actually package it.
+- Add doxygen, graphviz and xmltoman BuildRequires and pass docs
+  and man = true to meson, build documentation. Package docs in a
+  new docs sub-package.
+- Add check section and run meson_test macro, run tests during
+  build.
+- Add fdupes BuildRequires and pass fdupes macro, remove duplicate
+  files.
+
+-------------------------------------------------------------------
+Mon Mar  9 16:11:08 UTC 2020 - Antonio Larrosa <[email protected]>
+
+- Update to version 0.3.1:
+  + This is a bugfix release that is API and ABI compatible
+    with previous 0.3.x releases.
+  + Don't load the rtkit module by default. It can cause a
+    sigkill, which is not desirable for mutter, for example.
+    Only enable this for the jack library for now.
+  + Don't use pthread cancel by default because it uses a
+    signal that might crash some apps. Only use it for
+    the jack library because jack clients really expect this.
+  + Build fixes for -Werror=suggest-attribute=format
+  + improve error messages, don't report harmless errors and
+    warnings. Try to send error messages to the proxy that
+    started the operation or is the owner of the object.
+  + pw-cat: midi improvement, add midi recording and dump
+    in verbose mode
+  + fix properties when loading spa-nodes from the config
+  + Fix and update some examples
+  + jack: check arguments and don't crash when invalid
+  + Fix buffer memory upload.
+  + jack: fix compatibility with zrythm. Fix timemaster
+    install, improve sample_rate callback. Fix reposition
+    handling.
+  + fix crash in port after buffer negotiation error.
+  + add support for control ports in pw_filter
+  + fix cleanup of the metadata module
+  + improve param enumeration.
+  + Clear stream buffers when the format is cleared.
+  + Add create-object command in the config file to create
+    object from a factory.
+  + Fix crash after the driver was not removed from unassigned
+    nodes. Also properly pause inactive nodes.
+  + Use "true" and "false" in properties when we are talking
+    about a boolean.
+  + pulseaudio: improve compatibility
+
+-------------------------------------------------------------------
+Fri Feb 21 15:13:15 UTC 2020 - Antonio Larrosa <[email protected]>
+
+- Add patch to build correctly with glibc < 2.27 (like in SLE/Leap):
+  * fix-memfd_create-call.patch
+
+-------------------------------------------------------------------
+Fri Feb 21 12:32:01 UTC 2020 - Antonio Larrosa <[email protected]>
+
+- Add BuildRequires for pkgconfig(sndfile) and pkgconfig(vulkan)
+  so the vulkan plugin is built.
+- Version the spa-plugins subpackage so different versions of
+  the plugins can be co-installed in the future.
+
+-------------------------------------------------------------------
+Thu Feb 20 18:54:53 UTC 2020 - Bjørn Lie <[email protected]>
+
+- Update to version 0.3.0:
+  + The 0.3 release is a major milestone in the developement of
+    PipeWire. It features a complete redesign of the scheduling
+    mechanisms that make it possible to run a JACK compatibility
+    layer with comparable performance to JACK2.
+  + The API has been reworked and is declared stable now. All
+    developement files and runtime paths are versioned so that
+    future incompatible changes can be done without breaking
+    exising applications.
+  + PipeWire 0.3 also includes a (now mandatory) session manager
+    that populates and controls the PipeWire graph. This example
+    session manager is very simple and not configurable. It is
+    expected that future version will either switch to a more
+    flexible session manager (like WirePlumber) or improve the
+    configuration options of the example session manager.
+  + PipeWire 0.3 includes both PulseAudio, JACK and ALSA
+    compatibility libraries that are known to support a wide range
+    of applications. The ALSA library is pretty complete at this
+    point. The JACK and mostly the PulseAudio compatibility
+    libraries need more work. See the Wiki pages for the current
+    compatibility problems. We do not yet encourage people to
+    switch away from their existing audio solutions (PulseAudio
+    or JACK) but we would love to hear from people who try it
+    anyways. Future versions will mostly focus on improving
+    compatibility further to make PipeWire a drop-in replacement.
+    PipeWire comes with some GStreamer plugins to consume and
+    produce data for PipeWire. The consumer (pipewiresrc) is
+    working well in most cases. The sink (pipewiresink) is known
+    to be somewhat problematic for now.
+- Add pkgconfig(bluez) and pkgconfig(libpulse) BuildRequires: New
+  dependencies.
+- Bump libpipewire, apiver and spa_ver define following upstreams
+  changes. Also add a new sover define.
+- Package new subpackages: libjack-pw0_3_0,
+  libpulse-mainloop-glib-pw0_3_0, libpulse-pw0_3_0 and
+  libpulse-simple-pw0_3_0, as well as handle them in post(un).
+- Adjust options passed to meson following upstreams changes.
+
+-------------------------------------------------------------------

Old:
----
  pipewire-0.2.7.tar.gz

New:
----
  0001-Add-MIT-licensed-compute-example.patch
  fix-memfd_create-call.patch
  main.spv
  pipewire-0.3.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pipewire.spec ++++++
--- /var/tmp/diff_new_pack.2vogFh/_old  2020-03-31 07:22:07.062391459 +0200
+++ /var/tmp/diff_new_pack.2vogFh/_new  2020-03-31 07:22:07.062391459 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package pipewire
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 # Copyright (c) 2018 Luciano Santos, [email protected].
 #
 # All modifications and additions to the file contributed by third parties
@@ -13,26 +13,42 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
-%define libpipewire libpipewire-0_2-1
-%define apiver 0.2
-%define spa_ver 0.1
+%define libpipewire libpipewire-0_3-0
+%define sover 0_3_1
+%define apiver 0.3
+%define spa_ver 0.2
+%define spa_ver_str 0_2
 
 Name:           pipewire
-Version:        0.2.7
+Version:        0.3.1
 Release:        0
 Summary:        A Multimedia Framework designed to be an audio and video 
server and more
-License:        LGPL-2.1-or-later
+License:        MIT
 Group:          Development/Libraries/C and C++
 URL:            https://pipewire.org/
-Source0:        
https://github.com/PipeWire/pipewire/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
-
+#Source0:        
https://github.com/PipeWire/pipewire/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
+# The source file was repackaged to remove a file with invalid license (see 
Source1 and Patch1)
+Source0:        %{name}-%{version}.tar.gz
+# Binary file that can't be added from Patch1
+Source1:        
https://github.com/PipeWire/pipewire/raw/master/spa/plugins/vulkan/shaders/main.spv
+Patch0:         fix-memfd_create-call.patch
+# PATCH-FIX-UPSTREAM Replacement file with correct license
+Patch1:         0001-Add-MIT-licensed-compute-example.patch
+
+BuildRequires:  doxygen
+BuildRequires:  fdupes
+BuildRequires:  graphviz
 BuildRequires:  meson
 BuildRequires:  pkgconfig
+%if 0%{?is_opensuse}
+BuildRequires:  xmltoman
+%endif
 BuildRequires:  pkgconfig(alsa)
+BuildRequires:  pkgconfig(bluez)
 BuildRequires:  pkgconfig(dbus-1)
 BuildRequires:  pkgconfig(gio-2.0)
 BuildRequires:  pkgconfig(gio-unix-2.0)
@@ -48,18 +64,21 @@
 BuildRequires:  pkgconfig(libavcodec)
 BuildRequires:  pkgconfig(libavfilter)
 BuildRequires:  pkgconfig(libavformat)
+BuildRequires:  pkgconfig(libpulse)
 BuildRequires:  pkgconfig(libsystemd)
 BuildRequires:  pkgconfig(libudev)
 BuildRequires:  pkgconfig(libva)
 BuildRequires:  pkgconfig(sbc)
 BuildRequires:  pkgconfig(sdl2)
+BuildRequires:  pkgconfig(sndfile)
 BuildRequires:  pkgconfig(systemd)
+BuildRequires:  pkgconfig(vulkan)
 BuildRequires:  pkgconfig(x11)
 Requires:       %{libpipewire} = %{version}
 Requires:       %{name}-modules = %{version}
 Requires:       %{name}-spa-tools = %{version}
 Requires:       %{name}-tools = %{version}
-Recommends:     %{name}-spa-plugins = %{version}
+Recommends:     %{name}-spa-plugins-%{spa_ver_str} = %{version}
 
 %description
 PipeWire is a server and user space API to deal with multimedia pipelines.
@@ -89,6 +108,75 @@
 
 This package provides the PipeWire shared library.
 
+%package -n libjack-pw%{sover}
+Summary:        A Multimedia Framework designed to be an audio and video 
server and more
+Group:          Development/Libraries/C and C++
+
+%description -n libjack-pw%{sover}
+PipeWire is a server and user space API to deal with multimedia pipelines.
+
+Some of its features include:
+
+ * Capture and playback of audio and video with minimal latency;
+ * Real-time Multimedia processing on audio and video;
+ * Multiprocess architecture to let applications share multimedia content;
+ * GStreamer plugins for easy use and integration in current applications;
+ * Sandboxed applications support.
+
+This package provides the PipeWire shared library.
+
+
+%package -n libpulse-mainloop-glib-pw%{sover}
+Summary:        A Multimedia Framework designed to be an audio and video 
server and more
+Group:          Development/Libraries/C and C++
+
+%description -n libpulse-mainloop-glib-pw%{sover}
+PipeWire is a server and user space API to deal with multimedia pipelines.
+
+Some of its features include:
+
+ * Capture and playback of audio and video with minimal latency;
+ * Real-time Multimedia processing on audio and video;
+ * Multiprocess architecture to let applications share multimedia content;
+ * GStreamer plugins for easy use and integration in current applications;
+ * Sandboxed applications support.
+
+This package provides the PipeWire shared library.
+
+%package   -n libpulse-pw%{sover}
+Summary:        A Multimedia Framework designed to be an audio and video 
server and more
+Group:          Development/Libraries/C and C++
+
+%description -n libpulse-pw%{sover}
+PipeWire is a server and user space API to deal with multimedia pipelines.
+
+Some of its features include:
+
+ * Capture and playback of audio and video with minimal latency;
+ * Real-time Multimedia processing on audio and video;
+ * Multiprocess architecture to let applications share multimedia content;
+ * GStreamer plugins for easy use and integration in current applications;
+ * Sandboxed applications support.
+
+This package provides the PipeWire shared library.
+
+%package -n libpulse-simple-pw%{sover}
+Summary:        A Multimedia Framework designed to be an audio and video 
server and more
+Group:          Development/Libraries/C and C++
+
+%description -n libpulse-simple-pw%{sover}
+PipeWire is a server and user space API to deal with multimedia pipelines.
+
+Some of its features include:
+
+ * Capture and playback of audio and video with minimal latency;
+ * Real-time Multimedia processing on audio and video;
+ * Multiprocess architecture to let applications share multimedia content;
+ * GStreamer plugins for easy use and integration in current applications;
+ * Sandboxed applications support.
+
+This package provides the PipeWire shared library.
+
 %package -n gstreamer-plugin-pipewire
 Summary:        Gstreamer Plugin for PipeWire
 Group:          System/Libraries
@@ -132,12 +220,12 @@
  * A central hub where video can be made available for other applications
    such as the gnome-shell screencast API.
 
-%package spa-plugins
+%package spa-plugins-%{spa_ver_str}
 Summary:        Plugins For PipeWire SPA
 Group:          Productivity/Multimedia/Other
 Requires:       pipewire
 
-%description spa-plugins
+%description spa-plugins-%{spa_ver_str}
 PipeWire is a server and user space API to deal with multimedia pipelines.
 
 Some of its features include:
@@ -166,38 +254,104 @@
 
 This package provides all the necessary files for development with PipeWire
 
+%package doc
+Summary:        PipeWire media server documentation
+Group:          Development/Libraries/C and C++
+
+%description doc
+This package contains documentation for the PipeWire media server.
+
 %prep
-%autosetup -p1
+%setup
+%if %{pkg_vcmp glibc < 2.27}
+%patch0 -p1
+%endif
+%patch1 -p1
+cp %{SOURCE1} spa/plugins/vulkan/shaders/main.spv
 
 %build
 %meson \
-       -Dgstreamer=enabled \
+       -Ddocs=true \
+%if 0%{?is_opensuse}
+       -Dman=true \
+%endif
+       -Dgstreamer=true \
+       -Dffmpeg=true \
        -Dsystemd=true \
+       -Dvulkan=true \
        %{nil}
 %meson_build
 
 %install
 %meson_install
+%fdupes -s %{buildroot}/%{_datadir}/doc/pipewire/html
+
+%check
+%meson_test
 
 %post   -n %{libpipewire} -p /sbin/ldconfig
 %postun -n %{libpipewire} -p /sbin/ldconfig
 
+%post   -n libjack-pw%{sover} -p /sbin/ldconfig
+%postun -n libjack-pw%{sover} -p /sbin/ldconfig
+
+%post   -n libpulse-mainloop-glib-pw%{sover} -p /sbin/ldconfig
+%postun -n libpulse-mainloop-glib-pw%{sover} -p /sbin/ldconfig
+
+%post   -n libpulse-pw%{sover} -p /sbin/ldconfig
+%postun -n libpulse-pw%{sover} -p /sbin/ldconfig
+
+%post   -n libpulse-simple-pw%{sover} -p /sbin/ldconfig
+%postun -n libpulse-simple-pw%{sover} -p /sbin/ldconfig
+
 %files
 %{_bindir}/pipewire
+%{_bindir}/pipewire-media-session
 %{_userunitdir}/pipewire.service
 %{_userunitdir}/pipewire.socket
-%config %{_sysconfdir}/pipewire/pipewire.conf
+%if 0%{?is_opensuse}
+%{_mandir}/man1/pipewire.1%{ext_man}
+%{_mandir}/man5/pipewire.conf.5%{ext_man}
+%endif
+
 %dir %{_sysconfdir}/pipewire
+%config %{_sysconfdir}/pipewire/pipewire.conf
+
+%dir %{_libdir}/alsa-lib
+%{_libdir}/alsa-lib/libasound_module_pcm_pipewire.so
 
 %files -n %{libpipewire}
+%license LICENSE COPYING
+%doc README.md
 %{_libdir}/libpipewire-%{apiver}.so.*
 
+%files -n libjack-pw%{sover}
+%{_libdir}/libjack-pw.so.*
+
+%files -n libpulse-mainloop-glib-pw%{sover}
+%{_libdir}/libpulse-mainloop-glib-pw.so.*
+
+%files -n libpulse-pw%{sover}
+%{_libdir}/libpulse-pw.so.*
+
+%files -n libpulse-simple-pw%{sover}
+%{_libdir}/libpulse-simple-pw.so.*
+
 %files -n gstreamer-plugin-pipewire
 %{_libdir}/gstreamer-1.0/libgstpipewire.so
 
 %files tools
-%{_bindir}/pipewire-cli
-%{_bindir}/pipewire-monitor
+%{_bindir}/pw-cli
+%{_bindir}/pw-dot
+%{_bindir}/pw-mon
+%{_bindir}/pw-profiler
+%{_bindir}/pw-cat
+%{_bindir}/pw-play
+%{_bindir}/pw-record
+%if 0%{?is_opensuse}
+%{_mandir}/man1/pw-cli.1%{ext_man}
+%{_mandir}/man1/pw-mon.1%{ext_man}
+%endif
 
 %files spa-tools
 %{_bindir}/spa-inspect
@@ -205,48 +359,61 @@
 
 %files modules
 %dir %{_libdir}/pipewire-%{apiver}
-%{_libdir}/pipewire-%{apiver}/libpipewire-module-audio-dsp.so
-%{_libdir}/pipewire-%{apiver}/libpipewire-module-autolink.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-access.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-adapter.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-client-device.so
 %{_libdir}/pipewire-%{apiver}/libpipewire-module-client-node.so
-%{_libdir}/pipewire-%{apiver}/libpipewire-module-portal.so
 %{_libdir}/pipewire-%{apiver}/libpipewire-module-link-factory.so
-%{_libdir}/pipewire-%{apiver}/libpipewire-module-mixer.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-metadata.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-profiler.so
 %{_libdir}/pipewire-%{apiver}/libpipewire-module-protocol-native.so
 %{_libdir}/pipewire-%{apiver}/libpipewire-module-rtkit.so
-%{_libdir}/pipewire-%{apiver}/libpipewire-module-suspend-on-idle.so
-%{_libdir}/pipewire-%{apiver}/libpipewire-module-spa-monitor.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-session-manager.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-spa-device-factory.so
+%{_libdir}/pipewire-%{apiver}/libpipewire-module-spa-device.so
 %{_libdir}/pipewire-%{apiver}/libpipewire-module-spa-node-factory.so
 %{_libdir}/pipewire-%{apiver}/libpipewire-module-spa-node.so
 
-%files spa-plugins
-%{_libdir}/spa/alsa/libspa-alsa.so
-%{_libdir}/spa/audiomixer/libspa-audiomixer.so
-%{_libdir}/spa/audiotestsrc/libspa-audiotestsrc.so
-%{_libdir}/spa/bluez5/libspa-bluez5.so
-%{_libdir}/spa/ffmpeg/libspa-ffmpeg.so
-%{_libdir}/spa/support/libspa-dbus.so
-%{_libdir}/spa/support/libspa-support.so
-%{_libdir}/spa/test/libspa-test.so
-%{_libdir}/spa/v4l2/libspa-v4l2.so
-%{_libdir}/spa/videotestsrc/libspa-videotestsrc.so
-%{_libdir}/spa/volume/libspa-volume.so
-%dir %{_libdir}/spa
-%dir %{_libdir}/spa/alsa
-%dir %{_libdir}/spa/audiomixer
-%dir %{_libdir}/spa/audiotestsrc
-%dir %{_libdir}/spa/bluez5
-%dir %{_libdir}/spa/ffmpeg
-%dir %{_libdir}/spa/support
-%dir %{_libdir}/spa/test
-%dir %{_libdir}/spa/v4l2
-%dir %{_libdir}/spa/videotestsrc
-%dir %{_libdir}/spa/volume
+%files spa-plugins-%{spa_ver_str}
+%{_libdir}/spa-%{spa_ver}/alsa/libspa-alsa.so
+%{_libdir}/spa-%{spa_ver}/audioconvert/libspa-audioconvert.so
+%{_libdir}/spa-%{spa_ver}/audiomixer/libspa-audiomixer.so
+%{_libdir}/spa-%{spa_ver}/bluez5/libspa-bluez5.so
+%{_libdir}/spa-%{spa_ver}/control/libspa-control.so
+%{_libdir}/spa-%{spa_ver}/ffmpeg/libspa-ffmpeg.so
+%{_libdir}/spa-%{spa_ver}/jack/libspa-jack.so
+%{_libdir}/spa-%{spa_ver}/support/libspa-dbus.so
+%{_libdir}/spa-%{spa_ver}/support/libspa-support.so
+%{_libdir}/spa-%{spa_ver}/v4l2/libspa-v4l2.so
+%{_libdir}/spa-%{spa_ver}/videoconvert/libspa-videoconvert.so
+%{_libdir}/spa-%{spa_ver}/vulkan/libspa-vulkan.so
+
+%dir %{_libdir}/spa-%{spa_ver}
+%dir %{_libdir}/spa-%{spa_ver}/alsa
+%dir %{_libdir}/spa-%{spa_ver}/audioconvert
+%dir %{_libdir}/spa-%{spa_ver}/audiomixer
+%dir %{_libdir}/spa-%{spa_ver}/bluez5
+%dir %{_libdir}/spa-%{spa_ver}/control
+%dir %{_libdir}/spa-%{spa_ver}/ffmpeg
+%dir %{_libdir}/spa-%{spa_ver}/jack
+%dir %{_libdir}/spa-%{spa_ver}/support
+%dir %{_libdir}/spa-%{spa_ver}/v4l2
+%dir %{_libdir}/spa-%{spa_ver}/videoconvert
+%dir %{_libdir}/spa-%{spa_ver}/vulkan
 
 %files devel
 %{_libdir}/libpipewire-%{apiver}.so
+%{_libdir}/libjack-pw.so
+%{_libdir}/libpulse-mainloop-glib-pw.so
+%{_libdir}/libpulse-pw.so
+%{_libdir}/libpulse-simple-pw.so
 %{_libdir}/pkgconfig/libpipewire-%{apiver}.pc
 %{_libdir}/pkgconfig/libspa-%{spa_ver}.pc
-%{_includedir}/pipewire
-%{_includedir}/spa
+%{_includedir}/pipewire-%{apiver}/
+%{_includedir}/spa-%{spa_ver}/
+
+%files doc
+%dir %{_datadir}/doc/pipewire
+%{_datadir}/doc/pipewire/html
 
 %changelog

++++++ 0001-Add-MIT-licensed-compute-example.patch ++++++
From 64e00165d5a871c54f4419a06aa020cd38edcc6c Mon Sep 17 00:00:00 2001
From: Wim Taymans <[email protected]>
Date: Wed, 18 Mar 2020 17:20:36 +0100
Subject: [PATCH] Add MIT licensed compute example instead

Fixes #218
---
 .../vulkan/shaders/disk-intersection.comp     | 143 ++++++++++++++++++
 spa/plugins/vulkan/shaders/main.comp          |   3 +-
 spa/plugins/vulkan/shaders/main.spv           | Bin 3232 -> 10208 bytes
 .../vulkan/shaders/mandelbrot-distance.comp   |  58 -------
 4 files changed, 145 insertions(+), 59 deletions(-)
 create mode 100644 spa/plugins/vulkan/shaders/disk-intersection.comp
 delete mode 100644 spa/plugins/vulkan/shaders/mandelbrot-distance.comp

diff --git a/spa/plugins/vulkan/shaders/disk-intersection.comp 
b/spa/plugins/vulkan/shaders/disk-intersection.comp
new file mode 100644
index 00000000..7b92fdfb
--- /dev/null
+++ b/spa/plugins/vulkan/shaders/disk-intersection.comp
@@ -0,0 +1,143 @@
+// The MIT License
+// Copyright © 2013 Inigo Quilez
+// Permission is hereby granted, free of charge, to any person obtaining a 
copy of this software and associated documentation files (the "Software"), to 
deal in the Software without restriction, including without limitation the 
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 
sell copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions: The above copyright 
notice and this permission notice shall be included in all copies or 
substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 
WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR 
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+// Other intersectors:
+//
+// Box:             https://www.shadertoy.com/view/ld23DV
+// Triangle:        https://www.shadertoy.com/view/MlGcDz
+// Capsule:         https://www.shadertoy.com/view/Xt3SzX
+// Ellipsoid:       https://www.shadertoy.com/view/MlsSzn
+// Sphere:          https://www.shadertoy.com/view/4d2XWV
+// Capped Cylinder: https://www.shadertoy.com/view/4lcSRn
+// Disk:            https://www.shadertoy.com/view/lsfGDB
+// Capped Cone:     https://www.shadertoy.com/view/llcfRf
+// Rounded Box:     https://www.shadertoy.com/view/WlSXRW
+// Rounded Cone:    https://www.shadertoy.com/view/MlKfzm
+// Torus:           https://www.shadertoy.com/view/4sBGDy
+// Sphere4:         https://www.shadertoy.com/view/3tj3DW
+// Goursat:         https://www.shadertoy.com/view/3lj3DW
+
+
+#define SC 3.0
+
+#if 1
+//
+// Elegant way to intersect a planar coordinate system (3x3 linear system)
+//
+vec3 intersectCoordSys(in vec3 o, in vec3 d, vec3 c, vec3 u, vec3 v)
+{
+       vec3 q = o - c;
+       return vec3(dot(cross(u, v), q),
+                   dot(cross(q, u), d),
+                   dot(cross(v, q), d)) / dot(cross(v, u), d);
+}
+
+#else
+//
+// Ugly (but faster) way to intersect a planar coordinate system: plane + 
projection
+//
+vec3 intersectCoordSys(in vec3 o, in vec3 d, vec3 c, vec3 u, vec3 v)
+{
+       vec3 q = o - c;
+       vec3 n = cross(u, v);
+       float t = -dot(n, q) / dot(d, n);
+       float r = dot(u, q + d * t);
+       float s = dot(v, q + d * t);
+       return vec3(t, s, r);
+}
+
+#endif
+
+vec3 hash3(float n)
+{
+       return fract(sin(vec3(n, n + 1.0, n + 2.0)) *
+                    vec3(43758.5453123, 12578.1459123, 19642.3490423));
+}
+
+vec3 shade(in vec4 res)
+{
+       float ra = length(res.yz);
+       float an = atan(res.y, res.z) + 8.0 * iTime;
+       float pa = sin(3.0 * an);
+
+       vec3 cola =
+           0.5 + 0.5 * sin((res.w / 64.0) * 3.5 + vec3(0.0, 1.0, 2.0));
+
+       vec3 col = vec3(0.0);
+       col += cola * 0.4 * (1.0 - smoothstep(0.90, 1.00, ra));
+       col +=
+           cola * 1.0 * (1.0 -
+                         smoothstep(0.00, 0.03,
+                                    abs(ra - 0.8))) * (0.5 + 0.5 * pa);
+       col +=
+           cola * 1.0 * (1.0 -
+                         smoothstep(0.00, 0.20,
+                                    abs(ra - 0.8))) * (0.5 + 0.5 * pa);
+       col +=
+           cola * 0.5 * (1.0 -
+                         smoothstep(0.05, 0.10,
+                                    abs(ra - 0.5))) * (0.5 + 0.5 * pa);
+       col +=
+           cola * 0.7 * (1.0 -
+                         smoothstep(0.00, 0.30,
+                                    abs(ra - 0.5))) * (0.5 + 0.5 * pa);
+
+       return col * 0.3;
+}
+
+vec3 render(in vec3 ro, in vec3 rd)
+{
+       // raytrace
+       vec3 col = vec3(0.0);
+       for (int i = 0; i < 64; i++) {
+               // position disk
+               vec3 r = 2.5 * (-1.0 + 2.0 * hash3(float (i)));
+               r *= SC;
+               // orientate disk
+               vec3 u = normalize(r.zxy);
+               vec3 v = normalize(cross(u, vec3(0.0, 1.0, 0.0)));
+
+               // intersect coord sys
+               vec3 tmp = intersectCoordSys(ro, rd, r, u, v);
+               tmp /= SC;
+               if (dot(tmp.yz, tmp.yz) < 1.0 && tmp.x > 0.0) {
+                       // shade
+                       col += shade(vec4(tmp, float (i)));
+               }
+       }
+
+       return col;
+}
+
+void mainImage(out vec4 fragColor, in vec2 fragCoord)
+{
+       vec2 q = fragCoord.xy / iResolution.xy;
+       vec2 p = -1.0 + 2.0 * q;
+       p.x *= iResolution.x / iResolution.y;
+
+       // camera
+       vec3 ro =
+           2.0 * vec3(cos(0.5 * iTime * 1.1), 0.0,
+                      sin(0.5 * iTime * 1.1));
+       vec3 ta = vec3(0.0, 0.0, 0.0);
+       // camera matrix
+       vec3 ww = normalize(ta - ro);
+       vec3 uu = normalize(cross(ww, vec3(0.0, 1.0, 0.0)));
+       vec3 vv = normalize(cross(uu, ww));
+       // create view ray
+       vec3 rd = normalize(p.x * uu + p.y * vv + 1.0 * ww);
+
+       vec3 col = render(ro * SC, rd);
+
+       fragColor = vec4(col, 1.0);
+}
+
+void mainVR(out vec4 fragColor, in vec2 fragCoord, in vec3 fragRayOri,
+           in vec3 fragRayDir)
+{
+       vec3 col = render(fragRayOri + vec3(0.0, 0.0, 0.0), fragRayDir);
+
+       fragColor = vec4(col, 1.0);
+}
diff --git a/spa/plugins/vulkan/shaders/main.comp 
b/spa/plugins/vulkan/shaders/main.comp
index cc14c64d..d85f7fba 100644
--- a/spa/plugins/vulkan/shaders/main.comp
+++ b/spa/plugins/vulkan/shaders/main.comp
@@ -47,7 +47,8 @@ void main()
 }
 
 //#include "plasma-globe.comp"
-#include "mandelbrot-distance.comp"
+//#include "mandelbrot-distance.comp"
+#include "disk-intersection.comp"
 //#include "ring-twister.comp"
 //#include "gears.comp"
 //#include "protean-clouds.comp"
#diff --git a/spa/plugins/vulkan/shaders/main.spv 
b/spa/plugins/vulkan/shaders/main.spv
#index 
2a388dbca3c788b9df4162dcf9053cdb6048878e..fac1545c295c007eea5f6f22b4af30ea13c0514f
 100644
#GIT binary patch
#literal 10208
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
#
#literal 3232
#zcmZ9O*>BWU6vuBnrC_KCLMafIsRdbD8@56PX=iXLN)xB8yr_t46=V&l4-zv~AbkN|
#zB)pTbB_;-VBT*Bc<$v*|Zi$JX&#(8CU$~i*bI$i{_ug~v%v4%?=BLz>=BH=VgO*gR
#zC8-r8rG=@z;3K0Gqy1;kecHcsV5<&`Ql;?I=Q(`l!P}q{A00iZVJEa0Tx<zc&7}VU
#zyqCgVJ+o{M(=KLQ__bziK?$?EejU&VdoiDWBSczzA+#DY$9r&B)Y9jD^mb@5q|afv
#z>xoaLz^tSH5%>!_utM*iRSUh9jazdiw3MB=mu~iDyz+7+>s6sH@^RsX?m5+;$-2Is
#z=+DEe5NXp|JUyTB;z3pXmZ2M~eQ(w~GuE5)EJt_g-vy6aVfUV_qkT=bTf==-;nwvW
#z;qM)}&(JrP?E3aXF3+(IUR7b4Z#!JfeAe3mZ-K<!zq<VsGrztAkW2qvaBbpY-;=Rr
#z>}o&qTC&@7?|2Qey;c{u&+6v-0PZ=&tgUXJ#k3#GvU#lK*-k(yHGd1e81|HEp*IVA
#z8V-F5eR6VgDD>&V-l&Iu8U69^qrZfH1$}s+f4GmCv`<$deZ<4(8ZvvB^SNHww9oq3
#zyBkm+7Zou#(TRC2@;*W{PsDh(KOlT+5i^6v-ip0@-!0^;!uz-h`{m4wN%kOe|BUWE
#zNxL|Q_vxIw?EBv!eqa0pZ^Ktz{wH1)csu0MJ}=wlb)uZ#6;LPST<;^sz5DLO^>K#R
#zL;5(Y`gkWBAn{W<=EaOf%qDbWoaczyj4U28Tad*XRIS4MAoGZOm*#RtcSFwc0Aw!j
#zZx9kco$J4xv547+Zj5&sF++v?BxV?0><8+2?iyrm@dlVPQ-{o5gMJ0u4?h5jxz{_?
#z7kd*D|BJ31guDL5CjJ&AW^a@uPXoCIS=0W6k9>v~XWlW$y!K3g<E=3PcUeQ9aY)P>
#z%I35G>f%@OdAh(nlW*;9YIw$#VBWptLQT`ze-(-``b=ePHL`Q5O+W9h8##J6ma!f%
#zeO(tbwjNzv|8XL%e;rx;Y2S@tQ`nuy4t%Y%35*ZFnambK<lT(i%=YN#mW*i&Ki}~*
#ze%d-Xzd2t*=95-IO-P@(udT@LPoFsdHe|m`w0Y0l;oh^{zImp*$bOf2_lJ=8mTY%Q
#zwxcDRd%2C?o8yj`Y`(c$=)O~Pp3Js;+^ci48(sSiWZ(XdY)36-MEf8l?p~E2=GZ;R
#z*7bYM*>bNgXG_~FkeG4Go;mV}N56-VJ)0}A8oGDkiXPO__0<-BuOb`EXAXNE#aOY3
#zeFH^bZPDiuWOHf@zfojs=oi=+va!~+m)`d{vcB5l%}*ekQ(MfzJILa`o0tRpD*mXn
#zzjx8CD@ENS$kvr&&mSV|t1bLKK{kImb`nh7*x29a$i{1ny*NkW&gPH#Y|f9k)C6;e
#zoSR#a|5M7dYd@V`@8l=sYjEe;S+wVo^9-_mk^(!2Y@ej~KKKe*Uv2SrzeeVh)<N3i
#z+}|KK!L*0(x5#{oeVQkH&m-%vJ?8g2WcO^2yPUu?+(#F8|Hef8_sIS>YmdENKo<9n
#z$9KX-WIn}rg7z8Yj<lf2eJR__t)JZcYH)x4zqt&iPms3ryd{6PK8F15yg)zHKg*cE
#uL-t7Qi;VjlS102!_?M9Xr+oj~<wLwxaqE@8@7uH92KUWY;Qw)&LFj+PPUjH-
#
#diff --git a/spa/plugins/vulkan/shaders/mandelbrot-distance.comp 
b/spa/plugins/vulkan/shaders/mandelbrot-distance.comp
#deleted file mode 100644
#index 69d5bfde..00000000
++++++ fix-memfd_create-call.patch ++++++
Index: pipewire-0.3.0/src/examples/video-src-alloc.c
===================================================================
--- pipewire-0.3.0.orig/src/examples/video-src-alloc.c
+++ pipewire-0.3.0/src/examples/video-src-alloc.c
@@ -29,6 +29,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/mman.h>
+#include <sys/syscall.h>
 
 #include <spa/param/video/format-utils.h>
 #include <spa/param/props.h>
@@ -45,6 +46,46 @@
 
 #define M_PI_M2 ( M_PI + M_PI )
 
+#if !defined(HAVE_MEMFD_CREATE)
+/*
+ * No glibc wrappers exist for memfd_create(2), so provide our own.
+ *
+ * Also define memfd fcntl sealing macros. While they are already
+ * defined in the kernel header file <linux/fcntl.h>, that file as
+ * a whole conflicts with the original glibc header <fnctl.h>.
+ */
+
+static inline int memfd_create(const char *name, unsigned int flags)
+{
+        return syscall(SYS_memfd_create, name, flags);
+}
+#endif
+
+#ifndef MFD_CLOEXEC
+#define MFD_CLOEXEC       0x0001U
+#endif
+
+#ifndef MFD_ALLOW_SEALING
+#define MFD_ALLOW_SEALING 0x0002U
+#endif
+
+/* fcntl() seals-related flags */
+
+#ifndef F_LINUX_SPECIFIC_BASE
+#define F_LINUX_SPECIFIC_BASE 1024
+#endif
+
+#ifndef F_ADD_SEALS
+#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9)
+#define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10)
+
+#define F_SEAL_SEAL     0x0001  /* prevent further seals from being set */
+#define F_SEAL_SHRINK   0x0002  /* prevent file from shrinking */
+#define F_SEAL_GROW     0x0004  /* prevent file from growing */
+#define F_SEAL_WRITE    0x0008  /* prevent writes */
+#endif
+
+
 struct data {
        struct pw_main_loop *loop;
        struct spa_source *timer;
++++++ pipewire-0.2.7.tar.gz -> pipewire-0.3.1.tar.gz ++++++
++++ 212807 lines of diff (skipped)


Reply via email to