summaryrefslogtreecommitdiff
path: root/gst-libs/gst/transcoder
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@igalia.com>2020-03-19 09:34:54 -0300
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-10-29 13:30:07 +0000
commit7d1f5e951f6ebdc72c64bef6c7559eae25abaadf (patch)
tree41b4ecd914d6a7b3ace8ca53d73ced6f25506556 /gst-libs/gst/transcoder
parent6d8133e41e3e2c2f2bc65e22675a4c68a8539ac8 (diff)
downloadgstreamer-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.c39
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;
}