Added gst-plugins-base-subtitles0.10-0.10.34 for Meego Harmattan 1.2
[mafwsubrenderer] / gst-plugins-base-subtitles0.10 / debian / patches / 0022-tag-xmp-Write-the-same-tag-to-all-schemas.patch
diff --git a/gst-plugins-base-subtitles0.10/debian/patches/0022-tag-xmp-Write-the-same-tag-to-all-schemas.patch b/gst-plugins-base-subtitles0.10/debian/patches/0022-tag-xmp-Write-the-same-tag-to-all-schemas.patch
new file mode 100644 (file)
index 0000000..b7ca1c2
--- /dev/null
@@ -0,0 +1,117 @@
+From bdaa1fab0a20839f050659a52ab8855a203fe96c Mon Sep 17 00:00:00 2001
+From: Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+Date: Mon, 18 Apr 2011 10:20:00 -0300
+Subject: [PATCH] tag: xmp: Write the same tag to all schemas
+
+Instead of writing only the xmp tag for the first found entry
+that matches the gstreamer tag, look for all mappings to write
+the tag to different schemas.
+
+The rationale here is that some reader application might only
+be interested on a particular schema tags, so we should try
+to write as many tags for all schemas.
+---
+ gst-libs/gst/tag/gstxmptag.c |   56 +++++++++++++++++++++++++++++++++---------
+ 1 files changed, 44 insertions(+), 12 deletions(-)
+
+diff --git a/gst-libs/gst/tag/gstxmptag.c b/gst-libs/gst/tag/gstxmptag.c
+index ca05895..cc6c766 100644
+--- a/gst-libs/gst/tag/gstxmptag.c
++++ b/gst-libs/gst/tag/gstxmptag.c
+@@ -182,6 +182,21 @@ gst_xmp_schema_new ()
+  */
+ static GHashTable *__xmp_schemas;
++static GstXmpSchema *
++_gst_xmp_get_schema (const gchar * name)
++{
++  GQuark key;
++  GstXmpSchema *schema;
++
++  key = g_quark_from_string (name);
++
++  schema = g_hash_table_lookup (__xmp_schemas, GUINT_TO_POINTER (key));
++  if (!schema) {
++    GST_WARNING ("Schema %s doesn't exist", name);
++  }
++  return schema;
++}
++
+ static void
+ _gst_xmp_add_schema (const gchar * name, GstXmpSchema * schema)
+ {
+@@ -240,6 +255,7 @@ _gst_xmp_schema_add_simple_mapping (GstXmpSchema * schema,
+  * appended, and the API is not public, so we shouldn't
+  * have our lists modified during usage
+  */
++#if 0
+ static GPtrArray *
+ _xmp_tag_get_mapping (const gchar * gst_tag, XmpSerializationData * serdata)
+ {
+@@ -260,6 +276,7 @@ _xmp_tag_get_mapping (const gchar * gst_tag, XmpSerializationData * serdata)
+   }
+   return ret;
+ }
++#endif
+ /* finds the gst tag that maps to this xmp tag in this schema */
+ static const gchar *
+@@ -1520,22 +1537,14 @@ gst_value_serialize_xmp (const GValue * value)
+ }
+ static void
+-write_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data)
++write_one_tag (const GstTagList * list, const gchar * tag,
++    GPtrArray * xmp_tag_array, gpointer user_data)
+ {
+   guint i = 0, ct = gst_tag_list_get_tag_size (list, tag), tag_index;
+   XmpSerializationData *serialization_data = user_data;
+   GString *data = serialization_data->data;
+-  GPtrArray *xmp_tag_array = NULL;
+   char *s;
+-  /* map gst-tag to xmp tag */
+-  xmp_tag_array = _xmp_tag_get_mapping (tag, serialization_data);
+-
+-  if (!xmp_tag_array) {
+-    GST_WARNING ("no mapping for %s to xmp", tag);
+-    return;
+-  }
+-
+   for (tag_index = 0; tag_index < xmp_tag_array->len; tag_index++) {
+     XmpTag *xmp_tag;
+@@ -1635,8 +1644,31 @@ gst_tag_list_to_xmp_buffer_full (const GstTagList * list, gboolean read_only,
+   g_string_append (data, ">\n");
+   g_string_append (data, "<rdf:Description rdf:about=\"\">\n");
+-  /* iterate the taglist */
+-  gst_tag_list_foreach (list, write_one_tag, &serialization_data);
++  /* iterate the schemas */
++  if (schemas == NULL) {
++    /* use all schemas */
++    schemas = gst_tag_xmp_list_schemas ();
++  }
++  i = 0;
++  for (i = 0; schemas[i] != NULL; i++) {
++    GstXmpSchema *schema = _gst_xmp_get_schema (schemas[i]);
++    GHashTableIter iter;
++    gpointer key, value;
++
++    if (schema == NULL)
++      continue;
++
++    /* Iterate over the hashtable */
++    g_hash_table_iter_init (&iter, schema);
++    while (g_hash_table_iter_next (&iter, &key, &value)) {
++      const gchar *tag = g_quark_to_string (GPOINTER_TO_UINT (key));
++
++      if (gst_tag_list_get_value_index (list, tag, 0) != NULL) {
++        write_one_tag (list, tag, value, (gpointer) & serialization_data);
++      }
++
++    }
++  }
+   /* xmp footer */
+   g_string_append (data, "</rdf:Description>\n");