-/* GStreamer XmpConfig
+/* GStreamer TagXmpWriter
* Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
*
* This library is free software; you can redistribute it and/or
*/
/**
- * SECTION:gstxmpconfig
+ * SECTION:gsttagxmpwriter
* @short_description: Interface for elements that provide XMP serialization
*
* <refsect2>
typedef struct
{
GSList *schemas;
+#if !GLIB_CHECK_VERSION (2, 31, 0)
GStaticMutex lock;
+#else
+ GMutex lock;
+#endif
} GstTagXmpWriterData;
+#if !GLIB_CHECK_VERSION (2, 31, 0)
+#define GST_TAG_XMP_WRITER_DATA_LOCK(data) g_static_mutex_lock(&data->lock)
+#define GST_TAG_XMP_WRITER_DATA_UNLOCK(data) g_static_mutex_unlock(&data->lock)
+#else
+#define GST_TAG_XMP_WRITER_DATA_LOCK(data) g_mutex_lock(&data->lock)
+#define GST_TAG_XMP_WRITER_DATA_UNLOCK(data) g_mutex_unlock(&data->lock)
+#endif
+
GType
gst_tag_xmp_writer_get_type (void)
{
}
g_slist_free (data->schemas);
}
-
+#if !GLIB_CHECK_VERSION (2, 31, 0)
g_static_mutex_free (&data->lock);
+#else
+ g_mutex_clear (&data->lock);
+#endif
g_slice_free (GstTagXmpWriterData, data);
}
data = g_object_get_qdata (G_OBJECT (xmpconfig), tag_xmp_writer_key);
if (!data) {
+ /* make sure no other thread is creating a GstTagData at the same time */
+#if !GLIB_CHECK_VERSION (2, 31, 0)
static GStaticMutex create_mutex = G_STATIC_MUTEX_INIT;
- /* make sure no other thread is creating a GstTagXmpWriterData at the same time */
g_static_mutex_lock (&create_mutex);
+#else
+ static GMutex create_mutex; /* no initialisation required */
+
+ g_mutex_lock (&create_mutex);
+#endif
+
data = g_object_get_qdata (G_OBJECT (xmpconfig), tag_xmp_writer_key);
if (!data) {
data = g_slice_new (GstTagXmpWriterData);
- g_static_mutex_init (&data->lock);
+#if !GLIB_CHECK_VERSION (2, 31, 0)
+ g_static_mutex_init (&data->lock);
+#else
+ g_mutex_init (&data->lock);
+#endif
data->schemas = NULL;
gst_tag_xmp_writer_data_add_all_schemas_unlocked (data);
g_object_set_qdata_full (G_OBJECT (xmpconfig), tag_xmp_writer_key, data,
gst_tag_xmp_writer_data_free);
}
+#if !GLIB_CHECK_VERSION (2, 31, 0)
g_static_mutex_unlock (&create_mutex);
+#else
+ g_mutex_unlock (&create_mutex);
+#endif
}
return data;
data = gst_tag_xmp_writer_get_data (config);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_LOCK (data);
gst_tag_xmp_writer_data_add_all_schemas_unlocked (data);
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_UNLOCK (data);
}
/**
data = gst_tag_xmp_writer_get_data (config);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_LOCK (data);
gst_tag_xmp_writer_data_add_schema_unlocked (data, schema);
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_UNLOCK (data);
}
/**
data = gst_tag_xmp_writer_get_data (config);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_LOCK (data);
for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
if (strcmp ((const gchar *) iter->data, schema) == 0) {
ret = TRUE;
break;
}
}
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_UNLOCK (data);
return ret;
}
data = gst_tag_xmp_writer_get_data (config);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_LOCK (data);
for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
if (strcmp ((const gchar *) iter->data, schema) == 0) {
g_free (iter->data);
break;
}
}
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_UNLOCK (data);
}
/**
data = gst_tag_xmp_writer_get_data (config);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_LOCK (data);
if (data->schemas) {
for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
g_free (iter->data);
g_slist_free (data->schemas);
}
data->schemas = NULL;
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_UNLOCK (data);
}
GstBuffer *
data = gst_tag_xmp_writer_get_data (config);
- g_static_mutex_lock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_LOCK (data);
if (data->schemas) {
gchar **array = g_new0 (gchar *, g_slist_length (data->schemas) + 1);
if (array) {
g_free (array);
}
}
- g_static_mutex_unlock (&data->lock);
+ GST_TAG_XMP_WRITER_DATA_UNLOCK (data);
return buf;
}