X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgsttagsetter.c;h=b2955d6c3dbd6e583288d096cd10a652192632ca;hb=e10266e3f3cf9b05b69198b1ac6faa9a62840e30;hp=c4a3ec0dfed08091b48e1ef327c41ded9b910882;hpb=cfff518ceedb42a9a99a9e5c50a1122fa269faa0;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gsttagsetter.c b/gst/gsttagsetter.c index c4a3ec0..b2955d6 100644 --- a/gst/gsttagsetter.c +++ b/gst/gsttagsetter.c @@ -15,8 +15,8 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. */ /** @@ -64,8 +64,6 @@ * * GST_LOG_OBJECT (tagsetter, "final tags: %" GST_PTR_FORMAT, result); * ]| - * - * Last reviewed on 2006-05-18 (0.10.6) */ #ifdef HAVE_CONFIG_H @@ -83,38 +81,20 @@ typedef struct { GstTagMergeMode mode; GstTagList *list; - GStaticMutex lock; + GMutex lock; } GstTagData; -GType -gst_tag_setter_get_type (void) -{ - static volatile gsize tag_setter_type = 0; - - if (g_once_init_enter (&tag_setter_type)) { - GType _type; - static const GTypeInfo tag_setter_info = { - sizeof (GstTagSetterInterface), /* class_size */ - NULL, /* base_init */ - NULL, /* base_finalize */ - NULL, - NULL, /* class_finalize */ - NULL, /* class_data */ - 0, - 0, - NULL - }; - - _type = g_type_register_static (G_TYPE_INTERFACE, "GstTagSetter", - &tag_setter_info, 0); - - g_type_interface_add_prerequisite (_type, GST_TYPE_ELEMENT); - - gst_tag_key = g_quark_from_static_string ("GST_TAG_SETTER"); - g_once_init_leave (&tag_setter_type, _type); - } +#define GST_TAG_DATA_LOCK(data) g_mutex_lock(&data->lock) +#define GST_TAG_DATA_UNLOCK(data) g_mutex_unlock(&data->lock) - return tag_setter_type; +G_DEFINE_INTERFACE_WITH_CODE (GstTagSetter, gst_tag_setter, GST_TYPE_ELEMENT, + gst_tag_key = g_quark_from_static_string ("gst-tag-setter-data"); + ); + +static void +gst_tag_setter_default_init (GstTagSetterInterface * klass) +{ + /* nothing to do here, it's a dummy interface */ } static void @@ -123,9 +103,9 @@ gst_tag_data_free (gpointer p) GstTagData *data = (GstTagData *) p; if (data->list) - gst_tag_list_free (data->list); + gst_tag_list_unref (data->list); - g_static_mutex_free (&data->lock); + g_mutex_clear (&data->lock); g_slice_free (GstTagData, data); } @@ -137,20 +117,22 @@ gst_tag_setter_get_data (GstTagSetter * setter) data = g_object_get_qdata (G_OBJECT (setter), gst_tag_key); if (!data) { - static GStaticMutex create_mutex = G_STATIC_MUTEX_INIT; - /* make sure no other thread is creating a GstTagData at the same time */ - g_static_mutex_lock (&create_mutex); + static GMutex create_mutex; /* no initialisation required */ + + g_mutex_lock (&create_mutex); + data = g_object_get_qdata (G_OBJECT (setter), gst_tag_key); if (!data) { data = g_slice_new (GstTagData); - g_static_mutex_init (&data->lock); + g_mutex_init (&data->lock); data->list = NULL; data->mode = GST_TAG_MERGE_KEEP; g_object_set_qdata_full (G_OBJECT (setter), gst_tag_key, data, gst_tag_data_free); } - g_static_mutex_unlock (&create_mutex); + + g_mutex_unlock (&create_mutex); } return data; @@ -162,8 +144,6 @@ gst_tag_setter_get_data (GstTagSetter * setter) * * Reset the internal taglist. Elements should call this from within the * state-change handler. - * - * Since: 0.10.22 */ void gst_tag_setter_reset_tags (GstTagSetter * setter) @@ -174,12 +154,12 @@ gst_tag_setter_reset_tags (GstTagSetter * setter) data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); if (data->list) { - gst_tag_list_free (data->list); + gst_tag_list_unref (data->list); data->list = NULL; } - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); } /** @@ -202,14 +182,14 @@ gst_tag_setter_merge_tags (GstTagSetter * setter, const GstTagList * list, data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); if (data->list == NULL) { if (mode != GST_TAG_MERGE_KEEP_ALL) data->list = gst_tag_list_copy (list); } else { gst_tag_list_insert (data->list, list, mode); } - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); } /** @@ -220,7 +200,7 @@ gst_tag_setter_merge_tags (GstTagSetter * setter, const GstTagList * list, * @...: more tag / value pairs to set * * Adds the given tag / value pairs on the setter using the given merge mode. - * The list must be terminated with NULL. + * The list must be terminated with %NULL. */ void gst_tag_setter_add_tags (GstTagSetter * setter, GstTagMergeMode mode, @@ -244,7 +224,7 @@ gst_tag_setter_add_tags (GstTagSetter * setter, GstTagMergeMode mode, * @...: more tag / GValue pairs to set * * Adds the given tag / GValue pairs on the setter using the given merge mode. - * The list must be terminated with NULL. + * The list must be terminated with %NULL. */ void gst_tag_setter_add_tag_values (GstTagSetter * setter, GstTagMergeMode mode, @@ -268,7 +248,7 @@ gst_tag_setter_add_tag_values (GstTagSetter * setter, GstTagMergeMode mode, * @var_args: tag / value pairs to set * * Adds the given tag / value pairs on the setter using the given merge mode. - * The list must be terminated with NULL. + * The list must be terminated with %NULL. */ void gst_tag_setter_add_tag_valist (GstTagSetter * setter, GstTagMergeMode mode, @@ -281,13 +261,13 @@ gst_tag_setter_add_tag_valist (GstTagSetter * setter, GstTagMergeMode mode, data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); if (!data->list) data->list = gst_tag_list_new_empty (); gst_tag_list_add_valist (data->list, mode, tag, var_args); - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); } /** @@ -298,7 +278,7 @@ gst_tag_setter_add_tag_valist (GstTagSetter * setter, GstTagMergeMode mode, * @var_args: tag / GValue pairs to set * * Adds the given tag / GValue pairs on the setter using the given merge mode. - * The list must be terminated with NULL. + * The list must be terminated with %NULL. */ void gst_tag_setter_add_tag_valist_values (GstTagSetter * setter, @@ -311,14 +291,14 @@ gst_tag_setter_add_tag_valist_values (GstTagSetter * setter, data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); if (!data->list) data->list = gst_tag_list_new_empty (); gst_tag_list_add_valist_values (data->list, mode, tag, var_args); - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); } /** @@ -329,8 +309,6 @@ gst_tag_setter_add_tag_valist_values (GstTagSetter * setter, * @value: GValue to set for the tag * * Adds the given tag / GValue pair on the setter using the given merge mode. - * - * Since: 0.10.24 */ void gst_tag_setter_add_tag_value (GstTagSetter * setter, @@ -343,14 +321,14 @@ gst_tag_setter_add_tag_value (GstTagSetter * setter, data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); if (!data->list) data->list = gst_tag_list_new_empty (); gst_tag_list_add_value (data->list, mode, tag, value); - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); } /** @@ -363,7 +341,7 @@ gst_tag_setter_add_tag_value (GstTagSetter * setter, * This function is not thread-safe. * * Returns: (transfer none): a current snapshot of the taglist used in the - * setter or NULL if none is used. + * setter or %NULL if none is used. */ const GstTagList * gst_tag_setter_get_tag_list (GstTagSetter * setter) @@ -392,9 +370,9 @@ gst_tag_setter_set_tag_merge_mode (GstTagSetter * setter, GstTagMergeMode mode) data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); data->mode = mode; - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); } /** @@ -416,9 +394,9 @@ gst_tag_setter_get_tag_merge_mode (GstTagSetter * setter) data = gst_tag_setter_get_data (setter); - g_static_mutex_lock (&data->lock); + GST_TAG_DATA_LOCK (data); mode = data->mode; - g_static_mutex_unlock (&data->lock); + GST_TAG_DATA_UNLOCK (data); return mode; }