player/transcoder: Use bus signal watch
authorThibault Saunier <tsaunier@igalia.com>
Thu, 10 Dec 2020 19:29:31 +0000 (16:29 -0300)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 14 Dec 2020 12:30:14 +0000 (12:30 +0000)
Instead of implementing exactly the same thing ourself but making
`GstBus` not know that it is the case.

Since we are *sure* that the bus can't have been access at the point
where we add the watch we are guaranteed that the current thread
maincontext is going to be used.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1870>

gst-libs/gst/player/gstplayer.c
gst-libs/gst/transcoder/gsttranscoder.c

index b72c8de..07b7ae2 100644 (file)
@@ -2877,7 +2877,6 @@ gst_player_main (gpointer data)
   GstPlayer *self = GST_PLAYER (data);
   GstBus *bus;
   GSource *source;
-  GSource *bus_source;
   GstElement *scaletempo;
   const gchar *env;
 
@@ -2927,10 +2926,7 @@ gst_player_main (gpointer data)
   }
 
   self->bus = bus = gst_element_get_bus (self->playbin);
-  bus_source = gst_bus_create_watch (bus);
-  g_source_set_callback (bus_source, (GSourceFunc) gst_bus_async_signal_func,
-      NULL, NULL);
-  g_source_attach (bus_source, self->context);
+  gst_bus_add_signal_watch (bus);
 
   g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb),
       self);
@@ -2993,8 +2989,7 @@ gst_player_main (gpointer data)
   g_main_loop_run (self->loop);
   GST_TRACE_OBJECT (self, "Stopped main loop");
 
-  g_source_destroy (bus_source);
-  g_source_unref (bus_source);
+  gst_bus_remove_signal_watch (bus);
   gst_object_unref (bus);
 
   remove_tick_source (self);
index ec2eacb..1083616 100644 (file)
@@ -920,7 +920,6 @@ gst_transcoder_main (gpointer data)
   GstTranscoder *self = GST_TRANSCODER (data);
   GstBus *bus;
   GSource *source;
-  GSource *bus_source;
 
   GST_TRACE_OBJECT (self, "Starting main thread");
 
@@ -933,10 +932,7 @@ gst_transcoder_main (gpointer data)
   g_source_unref (source);
 
   self->bus = bus = gst_element_get_bus (self->transcodebin);
-  bus_source = gst_bus_create_watch (bus);
-  g_source_set_callback (bus_source, (GSourceFunc) gst_bus_async_signal_func,
-      NULL, NULL);
-  g_source_attach (bus_source, self->context);
+  gst_bus_add_signal_watch (bus);
 
   g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb),
       self);
@@ -965,8 +961,7 @@ gst_transcoder_main (gpointer data)
   g_main_loop_run (self->loop);
   GST_TRACE_OBJECT (self, "Stopped main loop");
 
-  g_source_destroy (bus_source);
-  g_source_unref (bus_source);
+  gst_bus_remove_signal_watch (bus);
   gst_object_unref (bus);
 
   remove_tick_source (self);