summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'media-video/pipewire/files/pipewire-0.2.6-fix-probing-without-starting.patch')
-rw-r--r--media-video/pipewire/files/pipewire-0.2.6-fix-probing-without-starting.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/media-video/pipewire/files/pipewire-0.2.6-fix-probing-without-starting.patch b/media-video/pipewire/files/pipewire-0.2.6-fix-probing-without-starting.patch
new file mode 100644
index 000000000000..9b3aed33b961
--- /dev/null
+++ b/media-video/pipewire/files/pipewire-0.2.6-fix-probing-without-starting.patch
@@ -0,0 +1,63 @@
+From 37e66c9e55f556558088d9f6b2200d4341a37f04 Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich@pengutronix.de>
+Date: Tue, 18 Jun 2019 09:53:12 +0200
+Subject: [PATCH] deviceprovider: fix probing without starting
+
+self->type is needed in registry_event_global() so it must be set in
+gst_pipewire_device_provider_probe() as well.
+
+self->devices is initialized as NULL when probing is started. So it should
+be just a simple GList* pointer.
+
+Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
+---
+ src/gst/gstpipewiredeviceprovider.c | 8 ++++++--
+ src/gst/gstpipewiredeviceprovider.h | 2 +-
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/gst/gstpipewiredeviceprovider.c b/src/gst/gstpipewiredeviceprovider.c
+index b6472d96..02b38c2e 100644
+--- a/src/gst/gstpipewiredeviceprovider.c
++++ b/src/gst/gstpipewiredeviceprovider.c
+@@ -265,7 +265,7 @@ static void do_add_node(void *data)
+ nd->dev = new_node (self, nd);
+ if (nd->dev) {
+ if(self->list_only)
+- *self->devices = g_list_prepend (*self->devices, gst_object_ref_sink (nd->dev));
++ self->devices = g_list_prepend (self->devices, gst_object_ref_sink (nd->dev));
+ else
+ gst_device_provider_device_add (GST_DEVICE_PROVIDER (self), nd->dev);
+ }
+@@ -555,6 +555,8 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider)
+
+ t = pw_core_get_type(c);
+
++ self->type = pw_core_get_type (c);
++
+ if (!(r = pw_remote_new (c, NULL, sizeof(*data))))
+ goto failed;
+
+@@ -612,7 +614,9 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider)
+ pw_core_destroy (c);
+ pw_loop_destroy (l);
+
+- return *self->devices;
++ self->type = NULL;
++
++ return self->devices;
+
+ failed:
+ pw_loop_destroy (l);
+diff --git a/src/gst/gstpipewiredeviceprovider.h b/src/gst/gstpipewiredeviceprovider.h
+index 81622605..3cf2d41b 100644
+--- a/src/gst/gstpipewiredeviceprovider.h
++++ b/src/gst/gstpipewiredeviceprovider.h
+@@ -98,7 +98,7 @@ struct _GstPipeWireDeviceProvider {
+
+ gboolean end;
+ gboolean list_only;
+- GList **devices;
++ GList *devices;
+ };
+
+ struct _GstPipeWireDeviceProviderClass {