summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Bradford <rob@linux.intel.com>2012-10-04 17:39:53 +0100
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-12-17 14:56:11 +0100
commitf17ac52573dae91eb524e570ac374778fb42a50d (patch)
treef16d08253bd99ec94e36901271a7c9604b91f4c5
parent72f045bedd8c64d7b82429a2373d3d61bc2ef0fa (diff)
vaapidecode: adopt non-deprecrated glib locking primitive pattern.
The use of heap allocated GMutex/GCond is deprecated. Instead place them inside the structure they are locking. These changes switch to use g_mutex_init/g_cond_init rather than the heap allocation functions. Because we cannot test for a NULL pointer for the GMutex/GCond we must initialise inside the GObject _init function and clear inside the _finalize which is guaranteed to only be called once and after the object is no longer in use.
-rw-r--r--gst/vaapi/gstvaapidecode.c44
-rw-r--r--gst/vaapi/gstvaapidecode.h4
2 files changed, 16 insertions, 32 deletions
diff --git a/gst/vaapi/gstvaapidecode.c b/gst/vaapi/gstvaapidecode.c
index 4d081357..e58a31b2 100644
--- a/gst/vaapi/gstvaapidecode.c
+++ b/gst/vaapi/gstvaapidecode.c
@@ -173,12 +173,9 @@ gst_vaapidecode_update_src_caps(GstVaapiDecode *decode, GstCaps *caps)
static void
gst_vaapidecode_release(GstVaapiDecode *decode, GObject *dead_object)
{
- if (!decode->decoder_mutex || !decode->decoder_ready)
- return;
-
- g_mutex_lock(decode->decoder_mutex);
- g_cond_signal(decode->decoder_ready);
- g_mutex_unlock(decode->decoder_mutex);
+ g_mutex_lock(&decode->decoder_mutex);
+ g_cond_signal(&decode->decoder_ready);
+ g_mutex_unlock(&decode->decoder_mutex);
}
static GstFlowReturn
@@ -202,13 +199,13 @@ gst_vaapidecode_step(GstVaapiDecode *decode)
if (!proxy) {
if (status == GST_VAAPI_DECODER_STATUS_ERROR_NO_SURFACE) {
gboolean was_signalled;
- g_mutex_lock(decode->decoder_mutex);
+ g_mutex_lock(&decode->decoder_mutex);
was_signalled = g_cond_wait_until(
- decode->decoder_ready,
- decode->decoder_mutex,
+ &decode->decoder_ready,
+ &decode->decoder_mutex,
end_time
);
- g_mutex_unlock(decode->decoder_mutex);
+ g_mutex_unlock(&decode->decoder_mutex);
if (was_signalled)
continue;
goto error_decode_timeout;
@@ -317,14 +314,6 @@ gst_vaapidecode_create(GstVaapiDecode *decode, GstCaps *caps)
return FALSE;
dpy = decode->display;
- decode->decoder_mutex = g_mutex_new();
- if (!decode->decoder_mutex)
- return FALSE;
-
- decode->decoder_ready = g_cond_new();
- if (!decode->decoder_ready)
- return FALSE;
-
switch (gst_vaapi_codec_from_caps(caps)) {
case GST_VAAPI_CODEC_MPEG2:
decode->decoder = gst_vaapi_decoder_mpeg2_new(dpy, caps);
@@ -377,16 +366,7 @@ gst_vaapidecode_destroy(GstVaapiDecode *decode)
decode->decoder_caps = NULL;
}
- if (decode->decoder_ready) {
- gst_vaapidecode_release(decode, NULL);
- g_cond_free(decode->decoder_ready);
- decode->decoder_ready = NULL;
- }
-
- if (decode->decoder_mutex) {
- g_mutex_free(decode->decoder_mutex);
- decode->decoder_mutex = NULL;
- }
+ gst_vaapidecode_release(decode, NULL);
}
static gboolean
@@ -481,6 +461,9 @@ gst_vaapidecode_finalize(GObject *object)
decode->delayed_new_seg = NULL;
}
+ g_cond_clear(&decode->decoder_ready);
+ g_mutex_clear(&decode->decoder_mutex);
+
G_OBJECT_CLASS(gst_vaapidecode_parent_class)->finalize(object);
}
@@ -738,8 +721,6 @@ gst_vaapidecode_init(GstVaapiDecode *decode)
decode->display = NULL;
decode->decoder = NULL;
- decode->decoder_mutex = NULL;
- decode->decoder_ready = NULL;
decode->decoder_caps = NULL;
decode->allowed_caps = NULL;
decode->delayed_new_seg = NULL;
@@ -747,6 +728,9 @@ gst_vaapidecode_init(GstVaapiDecode *decode)
decode->last_buffer_time = 0;
decode->is_ready = FALSE;
+ g_mutex_init(&decode->decoder_mutex);
+ g_cond_init(&decode->decoder_ready);
+
/* Pad through which data comes in to the element */
decode->sinkpad = gst_pad_new_from_template(
gst_element_class_get_pad_template(element_class, "sink"),
diff --git a/gst/vaapi/gstvaapidecode.h b/gst/vaapi/gstvaapidecode.h
index 68799df5..87e28072 100644
--- a/gst/vaapi/gstvaapidecode.h
+++ b/gst/vaapi/gstvaapidecode.h
@@ -67,8 +67,8 @@ struct _GstVaapiDecode {
GstCaps *srcpad_caps;
GstVaapiDisplay *display;
GstVaapiDecoder *decoder;
- GMutex *decoder_mutex;
- GCond *decoder_ready;
+ GMutex decoder_mutex;
+ GCond decoder_ready;
GstCaps *decoder_caps;
GstCaps *allowed_caps;
GstEvent *delayed_new_seg;