basetransform: implement a default transform_meta.
authorMathieu Duponchelle <mathieu.duponchelle@epitech.eu>
Wed, 21 Aug 2013 22:01:44 +0000 (00:01 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Mon, 9 Sep 2013 13:32:18 +0000 (15:32 +0200)
If a metadata has no dependency as shown by the tags, copy it.

gst/gstmeta.c
libs/gst/base/gstbasetransform.c

index fe8159c..51936a3 100644 (file)
@@ -139,6 +139,9 @@ gst_meta_api_type_get_tags (GType api)
 
   tags = g_type_get_qdata (api, g_quark_from_string ("tags"));
 
+  if (!tags[0])
+    return NULL;
+
   return (const gchar * const *) tags;
 }
 
index 83420dc..8e28154 100644 (file)
@@ -356,6 +356,9 @@ static GstFlowReturn default_prepare_output_buffer (GstBaseTransform * trans,
     GstBuffer * inbuf, GstBuffer ** outbuf);
 static gboolean default_copy_metadata (GstBaseTransform * trans,
     GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean
+gst_base_transform_default_transform_meta (GstBaseTransform * trans,
+    GstBuffer * inbuf, GstMeta * meta, GstBuffer * outbuf);
 
 /* static guint gst_base_transform_signals[LAST_SIGNAL] = { 0 }; */
 
@@ -407,6 +410,8 @@ gst_base_transform_class_init (GstBaseTransformClass * klass)
       GST_DEBUG_FUNCPTR (gst_base_transform_default_propose_allocation);
   klass->transform_size =
       GST_DEBUG_FUNCPTR (gst_base_transform_default_transform_size);
+  klass->transform_meta =
+      GST_DEBUG_FUNCPTR (gst_base_transform_default_transform_meta);
 
   klass->sink_event = GST_DEBUG_FUNCPTR (gst_base_transform_sink_eventfunc);
   klass->src_event = GST_DEBUG_FUNCPTR (gst_base_transform_src_eventfunc);
@@ -545,6 +550,21 @@ gst_base_transform_transform_caps (GstBaseTransform * trans,
 }
 
 static gboolean
+gst_base_transform_default_transform_meta (GstBaseTransform * trans,
+    GstBuffer * inbuf, GstMeta * meta, GstBuffer * outbuf)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  tags = gst_meta_api_type_get_tags (info->api);
+
+  if (!tags)
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
 gst_base_transform_default_transform_size (GstBaseTransform * trans,
     GstPadDirection direction, GstCaps * caps, gsize size,
     GstCaps * othercaps, gsize * othersize)
@@ -1653,7 +1673,7 @@ foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
   GstBaseTransformClass *klass;
   const GstMetaInfo *info = (*meta)->info;
   GstBuffer *outbuf = data->outbuf;
-  gboolean do_copy;
+  gboolean do_copy = FALSE;
 
   klass = GST_BASE_TRANSFORM_GET_CLASS (trans);
 
@@ -1671,10 +1691,6 @@ foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
     do_copy = klass->transform_meta (trans, outbuf, *meta, inbuf);
     GST_DEBUG_OBJECT (trans, "transformed metadata %s: copy: %d",
         g_type_name (info->api), do_copy);
-  } else {
-    do_copy = FALSE;
-    GST_DEBUG_OBJECT (trans, "not copying metadata %s",
-        g_type_name (info->api));
   }
 
   /* we only copy metadata when the subclass implemented a transform_meta