mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
Handle crash on cleanup
It's possible that the last ref to a source-output is removed with the remove signal, in that case, remove the object from the client watched objects to avoid freeing it twice. Use installed gstreamer and fix library name
This commit is contained in:
parent
273a5d35dc
commit
f6bb35cb98
5 changed files with 31 additions and 33 deletions
10
configure.ac
10
configure.ac
|
|
@ -179,27 +179,27 @@ AC_SUBST([GDBUS_CODEGEN], [`$PKG_CONFIG --variable gdbus_codegen gio-2.0`])
|
|||
|
||||
#### GStreamer ####
|
||||
|
||||
PKG_CHECK_MODULES(GST, gstreamer-1.0-uninstalled >= 1.5.0, dummy=yes,
|
||||
PKG_CHECK_MODULES(GST, gstreamer-1.0 >= 1.5.0, dummy=yes,
|
||||
AC_MSG_ERROR(GStreamer >= 1.5.0 is required))
|
||||
AC_SUBST(GST_CFLAGS)
|
||||
AC_SUBST(GST_LIBS)
|
||||
|
||||
PKG_CHECK_MODULES(GSTBASE, gstreamer-base-1.0-uninstalled >= 1.5.0, dummy=yes,
|
||||
PKG_CHECK_MODULES(GSTBASE, gstreamer-base-1.0 >= 1.5.0, dummy=yes,
|
||||
AC_MSG_ERROR(GStreamer Base>= 1.5.0 is required))
|
||||
GST_CFLAGS="$GST_CFLAGS $GSTBASE_CFLAGS"
|
||||
GST_LIBS="$GST_LIBS $GSTBASE_LIBS"
|
||||
|
||||
PKG_CHECK_MODULES(GSTPBASE, gstreamer-plugins-base-1.0-uninstalled >= 1.5.0, dummy=yes,
|
||||
PKG_CHECK_MODULES(GSTPBASE, gstreamer-plugins-base-1.0 >= 1.5.0, dummy=yes,
|
||||
AC_MSG_ERROR(GStreamer Plugins Base>= 1.5.0 is required))
|
||||
GST_CFLAGS="$GST_CFLAGS $GSTPBASE_CFLAGS"
|
||||
GST_LIBS="$GST_LIBS $GSTPBASE_LIBS"
|
||||
|
||||
PKG_CHECK_MODULES(GSTNET, gstreamer-net-1.0-uninstalled >= 1.5.0, dummy=yes,
|
||||
PKG_CHECK_MODULES(GSTNET, gstreamer-net-1.0 >= 1.5.0, dummy=yes,
|
||||
AC_MSG_ERROR(GStreamer Net>= 1.5.0 is required))
|
||||
GST_CFLAGS="$GST_CFLAGS $GSTNET_CFLAGS"
|
||||
GST_LIBS="$GST_LIBS $GSTNET_LIBS"
|
||||
|
||||
PKG_CHECK_MODULES(GSTALLOC, gstreamer-allocators-1.0-uninstalled >= 1.5.0, dummy=yes,
|
||||
PKG_CHECK_MODULES(GSTALLOC, gstreamer-allocators-1.0 >= 1.5.0, dummy=yes,
|
||||
AC_MSG_ERROR(GStreamer Allocators>= 1.5.0 is required))
|
||||
GST_CFLAGS="$GST_CFLAGS $GSTALLOC_CFLAGS"
|
||||
GST_LIBS="$GST_LIBS $GSTALLOC_LIBS"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
prefix=/usr/local
|
||||
prefix=/mnt/d00b721c-6d2d-4050-8d52-431da51984ef/home/wim/src/gnome/prefix
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
|
|
|||
|
|
@ -203,20 +203,20 @@ libpulsevideocore_@PV_MAJORMINOR@_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) $(LTLIBICO
|
|||
|
||||
plugindir = $(libdir)/gstreamer-1.0
|
||||
|
||||
plugin_LTLIBRARIES = libgstpulsevideosrc.la
|
||||
plugin_LTLIBRARIES = libgstpulsevideo.la
|
||||
|
||||
libgstpulsevideosrc_la_SOURCES = \
|
||||
libgstpulsevideo_la_SOURCES = \
|
||||
gst/gstpv.c \
|
||||
gst/gstfdpay.c \
|
||||
gst/gstfddepay.c \
|
||||
gst/gstpvsrc.c \
|
||||
gst/gstpvsink.c
|
||||
|
||||
libgstpulsevideosrc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GLIB_CFLAGS)
|
||||
libgstpulsevideosrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
libgstpulsevideosrc_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GLIB_LIBS) $(LIBM) -lgstvideo-1.0 \
|
||||
libpulsevideo-@PV_MAJORMINOR@.la libpulsevideocore-@PV_MAJORMINOR@.la
|
||||
libgstpulsevideosrc_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
|
||||
libgstpulsevideo_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GLIB_CFLAGS)
|
||||
libgstpulsevideo_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
libgstpulsevideo_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GLIB_LIBS) $(LIBM) -lgstvideo-1.0 \
|
||||
libpulsevideo-@PV_MAJORMINOR@.la libpulsevideocore-@PV_MAJORMINOR@.la
|
||||
libgstpulsevideo_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
|
||||
|
||||
noinst_HEADERS = gst/gstpvsrc.h gst/gstpvsink.h gst/gstfdpay.h gst/gstfddepay.h
|
||||
|
||||
|
|
@ -243,23 +243,4 @@ update-map-file:
|
|||
|
||||
update-all: update-map-file
|
||||
|
||||
# Force installation order of libraries. libtool relinks on install time, in
|
||||
# which case libpulsecommon has to be installed before others, but the padsp
|
||||
# preload library has to be done after the normal libraries (e.g. libpulse)
|
||||
# ...
|
||||
# Unfortunately automake behaviour means that rules without commands also
|
||||
# override build-in rules, so it's not trivial to add dependencies.
|
||||
# See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7328 for the workaround
|
||||
# ...
|
||||
# Isn't libtool/autotools fun!
|
||||
|
||||
installlibLTLIBRARIES = install-libLTLIBRARIES
|
||||
$(installlibLTLIBRARIES): install-pkglibLTLIBRARIES
|
||||
|
||||
installmodlibexecLTLIBRARIES = install-modlibexecLTLIBRARIES
|
||||
$(installmodlibexecLTLIBRARIES): install-pkglibLTLIBRARIES
|
||||
|
||||
installpadsplibLTLIBRARIES = install-padsplibLTLIBRARIES
|
||||
$(installpadsplibLTLIBRARIES): install-libLTLIBRARIES
|
||||
|
||||
.PHONY: update-all update-map-file coverage
|
||||
|
|
|
|||
|
|
@ -125,6 +125,14 @@ pv_client_set_property (GObject *_object,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_remove_source_output (PvSourceOutput *output,
|
||||
gpointer user_data)
|
||||
{
|
||||
g_object_steal_data (G_OBJECT (user_data),
|
||||
pv_source_output_get_object_path (output));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_create_source_output (PvClient1 *interface,
|
||||
GDBusMethodInvocation *invocation,
|
||||
|
|
@ -164,6 +172,11 @@ handle_create_source_output (PvClient1 *interface,
|
|||
|
||||
object_path = pv_source_output_get_object_path (output);
|
||||
|
||||
g_signal_connect (output,
|
||||
"remove",
|
||||
(GCallback) handle_remove_source_output,
|
||||
client);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (client),
|
||||
object_path,
|
||||
output,
|
||||
|
|
@ -238,6 +251,11 @@ handle_create_source_input (PvClient1 *interface,
|
|||
|
||||
source_input_path = pv_source_output_get_object_path (input);
|
||||
|
||||
g_signal_connect (input,
|
||||
"remove",
|
||||
(GCallback) handle_remove_source_output,
|
||||
client);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (client),
|
||||
source_input_path,
|
||||
input,
|
||||
|
|
|
|||
|
|
@ -351,7 +351,6 @@ pv_source_update_state (PvSource *source, PvSourceState state)
|
|||
|
||||
if (priv->state != state) {
|
||||
priv->state = state;
|
||||
g_print ("source changed state %d\n", state);
|
||||
pv_source1_set_state (priv->iface, state);
|
||||
g_object_notify (G_OBJECT (source), "state");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue