From: Mathieu Duponchelle Date: Wed, 21 Aug 2013 22:01:44 +0000 (+0200) Subject: basetransform: implement a default transform_meta. X-Git-Tag: 1.1.90~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d24c4e451d0b9b5fb2b42fa25c7592166d9e994;p=platform%2Fupstream%2Fgstreamer.git basetransform: implement a default transform_meta. If a metadata has no dependency as shown by the tags, copy it. --- diff --git a/gst/gstmeta.c b/gst/gstmeta.c index fe8159c..51936a3 100644 --- a/gst/gstmeta.c +++ b/gst/gstmeta.c @@ -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; } diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c index 83420dc..8e28154 100644 --- a/libs/gst/base/gstbasetransform.c +++ b/libs/gst/base/gstbasetransform.c @@ -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