Update to 0.3.14

This commit is contained in:
Wim Taymans 2020-10-30 16:08:57 +01:00
parent d9cf9cab0b
commit 09c6752285
7 changed files with 6 additions and 371 deletions

View File

@ -1,25 +0,0 @@
From 735eefa2fb17219cd2067f084c16f08d42d84aa6 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 1 Oct 2020 11:31:52 +0200
Subject: [PATCH] acp: pass right user_data to event
---
spa/plugins/alsa/acp/acp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spa/plugins/alsa/acp/acp.c b/spa/plugins/alsa/acp/acp.c
index 6106bbba..35a6dfc9 100644
--- a/spa/plugins/alsa/acp/acp.c
+++ b/spa/plugins/alsa/acp/acp.c
@@ -568,7 +568,7 @@ static int hdmi_eld_changed(snd_mixer_elem_t *melem, unsigned int mask)
pa_proplist_as_dict(p->proplist, &p->port.props);
if (changed && mask != 0 && impl->events && impl->events->props_changed)
- impl->events->props_changed(impl);
+ impl->events->props_changed(impl->user_data);
return 0;
}
--
2.26.2

View File

@ -1,53 +0,0 @@
From 81ca70af9bb6c60e2998b4aaf939b82eba257472 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Mon, 28 Sep 2020 18:23:23 +0200
Subject: [PATCH] alsa-monitor: avoid crash in release
Only try to release the device when we have a proxy.
Fixes #310
---
src/examples/media-session/alsa-monitor.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/examples/media-session/alsa-monitor.c b/src/examples/media-session/alsa-monitor.c
index a27370b8..6154d4ca 100644
--- a/src/examples/media-session/alsa-monitor.c
+++ b/src/examples/media-session/alsa-monitor.c
@@ -594,6 +594,12 @@ static void reserve_acquired(void *data, struct rd_device *d)
rd_device_release(device->reserve);
}
+static void complete_release(struct device *device)
+{
+ if (device->reserve)
+ rd_device_complete_release(device->reserve, true);
+}
+
static void sync_complete_done(void *data, int seq)
{
struct device *device = data;
@@ -605,8 +611,7 @@ static void sync_complete_done(void *data, int seq)
spa_hook_remove(&device->sync_listener);
device->seq = 0;
- if (device->reserve)
- rd_device_complete_release(device->reserve, true);
+ complete_release(device);
}
static void sync_destroy(void *data)
@@ -627,6 +632,10 @@ static void reserve_release(void *data, struct rd_device *d, int forced)
struct device *device = data;
pw_log_info("%p: reserve release", device);
+ if (device->sdevice == NULL || device->sdevice->obj.proxy == NULL) {
+ complete_release(device);
+ return;
+ }
set_profile(device, 0);
--
2.26.2

View File

@ -18,7 +18,7 @@ index 574cba4f..4ecec24f 100644
# session manager. run the session manager with -h for options
#
-exec @media_session_path@ # -d alsa-seq,alsa-pcm,bluez5,metadata
+exec @media_session_path@ -d bluez5 # -d alsa-seq,alsa-pcm,metadata
+exec @media_session_path@ -d bluez5,pulse-bridge # -d alsa-seq,alsa-pcm,metadata
--
2.26.2

View File

@ -1,96 +0,0 @@
From ea14ff1998ccc59946d9bede5b60081409a3b74f Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Tue, 13 Oct 2020 12:40:48 +0200
Subject: [PATCH] gst: add option to disable device provider
---
config.h.meson | 2 ++
meson.build | 6 ++++++
meson_options.txt | 4 ++++
src/gst/gstpipewire.c | 2 ++
src/gst/meson.build | 5 ++++-
5 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/config.h.meson b/config.h.meson
index a8acb340..ae2c2d0d 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -468,3 +468,5 @@
#mesondefine PA_ALSA_PATHS_DIR
#mesondefine PA_ALSA_PROFILE_SETS_DIR
+
+#mesondefine HAVE_GSTREAMER_DEVICE_PROVIDER
diff --git a/meson.build b/meson.build
index 06b46343..f8dcfcb0 100644
--- a/meson.build
+++ b/meson.build
@@ -296,6 +296,12 @@ if get_option('bluez5')
endif
endif
+if get_option('gstreamer')
+ if get_option('gstreamer-device-provider')
+ cdata.set('HAVE_GSTREAMER_DEVICE_PROVIDER', 1)
+ endif
+endif
+
configure_file(input : 'config.h.meson',
output : 'config.h',
configuration : cdata)
diff --git a/meson_options.txt b/meson_options.txt
index 6a8bb071..72f6e721 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -22,6 +22,10 @@ option('gstreamer',
description: 'Build GStreamer plugins',
type: 'boolean',
value: true)
+option('gstreamer-device-provider',
+ description: 'Build GStreamer device provider plugin',
+ type: 'boolean',
+ value: true)
option('systemd',
description: 'Enable systemd integration',
type: 'boolean',
diff --git a/src/gst/gstpipewire.c b/src/gst/gstpipewire.c
index 786ad195..9f752fe2 100644
--- a/src/gst/gstpipewire.c
+++ b/src/gst/gstpipewire.c
@@ -53,9 +53,11 @@ plugin_init (GstPlugin *plugin)
gst_element_register (plugin, "pipewiresink", GST_RANK_NONE,
GST_TYPE_PIPEWIRE_SINK);
+#if HAVE_GSTREAMER_DEVICE_PROVIDER
if (!gst_device_provider_register (plugin, "pipewiredeviceprovider",
GST_RANK_PRIMARY + 1, GST_TYPE_PIPEWIRE_DEVICE_PROVIDER))
return FALSE;
+#endif
GST_DEBUG_CATEGORY_INIT (pipewire_debug, "pipewire", 0, "PipeWire elements");
diff --git a/src/gst/meson.build b/src/gst/meson.build
index e6c097f1..66ea5261 100644
--- a/src/gst/meson.build
+++ b/src/gst/meson.build
@@ -2,13 +2,16 @@ pipewire_gst_sources = [
'gstpipewire.c',
'gstpipewirecore.c',
'gstpipewireclock.c',
- 'gstpipewiredeviceprovider.c',
'gstpipewireformat.c',
'gstpipewirepool.c',
'gstpipewiresink.c',
'gstpipewiresrc.c',
]
+if get_option('gstreamer-device-provider')
+ pipewire_gst_sources += [ 'gstpipewiredeviceprovider.c' ]
+endif
+
pipewire_gst_headers = [
'gstpipewireclock.h',
'gstpipewirecore.h',
--
2.26.2

View File

@ -1,123 +0,0 @@
From 0da406d30407f574f4cc28a0e3532aec4dd9fdb6 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 1 Oct 2020 11:32:40 +0200
Subject: [PATCH] media-session: make sure we don't read invalid data
---
src/examples/media-session/default-routes.c | 23 ++++++++++++------
src/examples/media-session/restore-stream.c | 26 ++++++++++++++++-----
2 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/src/examples/media-session/default-routes.c b/src/examples/media-session/default-routes.c
index 6c3a4627..ef7fcda3 100644
--- a/src/examples/media-session/default-routes.c
+++ b/src/examples/media-session/default-routes.c
@@ -176,10 +176,13 @@ static int restore_route(struct device *dev, const char *val, uint32_t index, ui
spa_pod_builder_prop(&b, SPA_PARAM_ROUTE_props, 0);
spa_pod_builder_push_object(&b, &f[1],
SPA_TYPE_OBJECT_Props, SPA_PARAM_Route);
- for (p = val; *p; p++) {
+
+ p = val;
+ while (*p) {
if (strstr(p, "volume:") == p) {
- vol = strtof(p+7, &end);
- if (end == p + 7)
+ p += 7;
+ vol = strtof(p, &end);
+ if (end == p)
continue;
spa_pod_builder_prop(&b, SPA_PROP_volume, 0);
spa_pod_builder_float(&b, vol);
@@ -192,14 +195,18 @@ static int restore_route(struct device *dev, const char *val, uint32_t index, ui
p+=6;
}
else if (strstr(p, "volumes:") == p) {
- n_vols = strtol(p+8, &end, 10);
- if (end == p+8 || n_vols >= SPA_AUDIO_MAX_CHANNELS)
+ p += 8;
+ n_vols = strtol(p, &end, 10);
+ if (end == p)
continue;
p = end;
+ if (n_vols >= SPA_AUDIO_MAX_CHANNELS)
+ continue;
vols = alloca(n_vols * sizeof(float));
for (i = 0; i < n_vols && *p == ','; i++) {
- vols[i] = strtof(p+1, &end);
- if (end == p+1)
+ p++;
+ vols[i] = strtof(p, &end);
+ if (end == p)
break;
p = end;
}
@@ -209,6 +216,8 @@ static int restore_route(struct device *dev, const char *val, uint32_t index, ui
spa_pod_builder_prop(&b, SPA_PROP_channelVolumes, 0);
spa_pod_builder_array(&b, sizeof(float), SPA_TYPE_Float,
n_vols, vols);
+ } else {
+ p++;
}
}
spa_pod_builder_pop(&b, &f[1]);
diff --git a/src/examples/media-session/restore-stream.c b/src/examples/media-session/restore-stream.c
index 094a2b1b..237683a3 100644
--- a/src/examples/media-session/restore-stream.c
+++ b/src/examples/media-session/restore-stream.c
@@ -202,9 +202,13 @@ static int restore_stream(struct stream *str, const char *val)
spa_pod_builder_push_object(&b, &f[0],
SPA_TYPE_OBJECT_Props, SPA_PARAM_Props);
- for (p = val; *p; p++) {
+ p = val;
+ while (*p) {
if (strstr(p, "volume:") == p) {
- vol = strtof(p+7, &end);
+ p += 7;
+ vol = strtof(p, &end);
+ if (end == p)
+ continue;
spa_pod_builder_prop(&b, SPA_PROP_volume, 0);
spa_pod_builder_float(&b, vol);
p = end;
@@ -216,15 +220,23 @@ static int restore_stream(struct stream *str, const char *val)
p+=6;
}
else if (strstr(p, "volumes:") == p) {
- n_vols = strtol(p+8, &end, 10);
- if (n_vols >= SPA_AUDIO_MAX_CHANNELS)
+ p += 8;
+ n_vols = strtol(p, &end, 10);
+ if (end == p)
continue;
p = end;
+ if (n_vols >= SPA_AUDIO_MAX_CHANNELS)
+ continue;
vols = alloca(n_vols * sizeof(float));
- for (i = 0; i < n_vols; i++) {
- vols[i] = strtof(p+1, &end);
+ for (i = 0; i < n_vols && *p == ','; i++) {
+ p++;
+ vols[i] = strtof(p, &end);
+ if (end == p)
+ break;
p = end;
}
+ if (i != n_vols)
+ continue;
spa_pod_builder_prop(&b, SPA_PROP_channelVolumes, 0);
spa_pod_builder_array(&b, sizeof(float), SPA_TYPE_Float,
n_vols, vols);
@@ -238,6 +250,8 @@ static int restore_stream(struct stream *str, const char *val)
i = end - p;
strncpy(target, p, i);
target[i-1] = 0;
+ } else {
+ p++;
}
}
param = spa_pod_builder_pop(&b, &f[0]);
--
2.26.2

View File

@ -1,61 +0,0 @@
From 62ef0145c3bffdca23c6087117d7cf7830b13a28 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Tue, 29 Sep 2020 09:56:14 +0200
Subject: [PATCH] pulse: limit get_writable_size()
Try to limit the amount of data we can write. Fixes chrome playback.
---
pipewire-pulseaudio/src/stream.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/pipewire-pulseaudio/src/stream.c b/pipewire-pulseaudio/src/stream.c
index c30cd00e..0a398c66 100644
--- a/pipewire-pulseaudio/src/stream.c
+++ b/pipewire-pulseaudio/src/stream.c
@@ -493,8 +493,7 @@ static void stream_process(void *data)
s, queued, target, wanted, required);
if (s->write_callback && s->state == PA_STREAM_READY &&
- queued < wanted &&
- wanted >= required)
+ queued < wanted && wanted >= required)
s->write_callback(s, wanted, s->write_userdata);
}
else {
@@ -1283,7 +1282,7 @@ SPA_EXPORT
size_t pa_stream_writable_size(PA_CONST pa_stream *s)
{
const pa_timing_info *i;
- uint64_t now, then, queued, writable, elapsed, required;
+ uint64_t now, then, queued, target, wanted, elapsed, required;
struct timespec ts;
spa_assert(s);
@@ -1306,16 +1305,18 @@ size_t pa_stream_writable_size(PA_CONST pa_stream *s)
}
queued = queued_size(s, elapsed);
- writable = writable_size(s, queued);
+ target = target_queue(s);
+ wanted = wanted_size(s, queued, target);
required = required_size(s);
- pw_log_debug("stream %p: writable:%"PRIu64" queued:%"PRIu64" required:%"PRIu64, s,
- writable, queued, required);
+ pw_log_debug("stream %p: queued:%"PRIu64" target:%"PRIu64
+ " wanted:%"PRIu64" required:%"PRIu64, s,
+ queued, target, wanted, required);
- if (writable < required)
- writable = 0;
+ if (queued >= wanted || wanted < required)
+ wanted = 0;
- return writable;
+ return wanted;
}
SPA_EXPORT
--
2.26.2

View File

@ -1,6 +1,6 @@
%global majorversion 0
%global minorversion 3
%global microversion 13
%global microversion 14
%global apiversion 0.3
%global spaversion 0.2
@ -29,7 +29,7 @@
Name: pipewire
Summary: Media Sharing Server
Version: %{majorversion}.%{minorversion}.%{microversion}
Release: 6%{?snap:.%{snap}git%{shortcommit}}%{?dist}
Release: 1%{?snap:.%{snap}git%{shortcommit}}%{?dist}
License: MIT
URL: https://pipewire.org/
%if 0%{?gitrel}
@ -41,11 +41,6 @@ Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{version}/p
%endif
## upstream patches
Patch1: 0001-pulse-limit-get_writable_size.patch
Patch2: 0001-alsa-monitor-avoid-crash-in-release.patch
Patch3: 0001-acp-pass-right-user_data-to-event.patch
Patch4: 0001-media-session-make-sure-we-don-t-read-invalid-data.patch
Patch5: 0001-gst-add-option-to-disable-device-provider.patch
## upstreamable patches
@ -224,11 +219,6 @@ This package provides a PulseAudio implementation based on PipeWire
%setup -q -T -b0 -n %{name}-%{version}%{?gitrel:-%{gitrel}-g%{shortcommit}}
%patch0 -p1 -b .0000
%patch1 -p1 -b .0001
%patch2 -p1 -b .0002
%patch3 -p1 -b .0003
%patch4 -p1 -b .0004
%patch5 -p1 -b .0005
%build
%meson \
@ -425,6 +415,9 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || :
%endif
%changelog
* Fri Oct 30 2020 Wim Taymans <wtaymans@redhat.com> - 0.3.14-1
- Update to 0.3.14
* Sun Oct 18 2020 Neal Gompa <ngompa13@gmail.com> - 0.3.13-6
- Fix jack and pulseaudio subpackages to generate dependencies properly