diff options
author | Thibault Saunier <tsaunier@igalia.com> | 2020-03-19 09:34:54 -0300 |
---|---|---|
committer | GStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2020-10-29 13:30:07 +0000 |
commit | 7d1f5e951f6ebdc72c64bef6c7559eae25abaadf (patch) | |
tree | 41b4ecd914d6a7b3ace8ca53d73ced6f25506556 /gst-libs/gst/transcoder | |
parent | 6d8133e41e3e2c2f2bc65e22675a4c68a8539ac8 (diff) | |
download | gstreamer-plugins-bad-7d1f5e951f6ebdc72c64bef6c7559eae25abaadf.tar.gz |
transcoder: Base sync transcoding variant on a GMainLoop
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1151>
Diffstat (limited to 'gst-libs/gst/transcoder')
-rw-r--r-- | gst-libs/gst/transcoder/gsttranscoder.c | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/gst-libs/gst/transcoder/gsttranscoder.c b/gst-libs/gst/transcoder/gsttranscoder.c index b0af0c306..cbf4629b0 100644 --- a/gst-libs/gst/transcoder/gsttranscoder.c +++ b/gst-libs/gst/transcoder/gsttranscoder.c @@ -1065,33 +1065,23 @@ gst_transcoder_new_full (const gchar * source_uri, typedef struct { - GError **user_error; - GMutex m; - GCond cond; - - gboolean done; - + GError *error; + GMainLoop *loop; } RunSyncData; static void _error_cb (GstTranscoder * self, GError * error, GstStructure * details, RunSyncData * data) { - g_mutex_lock (&data->m); - data->done = TRUE; - if (data->user_error && (*data->user_error) == NULL) - g_propagate_error (data->user_error, error); - g_cond_broadcast (&data->cond); - g_mutex_unlock (&data->m); + if (data->error == NULL) + g_propagate_error (&data->error, error); + g_main_loop_quit (data->loop); } static void _done_cb (GstTranscoder * self, RunSyncData * data) { - g_mutex_lock (&data->m); - data->done = TRUE; - g_cond_broadcast (&data->cond); - g_mutex_unlock (&data->m); + g_main_loop_quit (data->loop); } /** @@ -1108,22 +1098,19 @@ gst_transcoder_run (GstTranscoder * self, GError ** error) { RunSyncData data = { 0, }; - g_mutex_init (&data.m); - g_cond_init (&data.cond); - + data.loop = g_main_loop_new (NULL, FALSE); g_signal_connect (self, "error", G_CALLBACK (_error_cb), &data); g_signal_connect (self, "done", G_CALLBACK (_done_cb), &data); gst_transcoder_run_async (self); - g_mutex_lock (&data.m); - while (!data.done) { - g_cond_wait (&data.cond, &data.m); - } - g_mutex_unlock (&data.m); + if (!data.error) + g_main_loop_run (data.loop); - if (data.user_error) { - g_propagate_error (error, *data.user_error); + if (data.error) { + if (error) + g_propagate_error (error, data.error); + g_clear_error (&data.error); return FALSE; } |