Merge branch 'master' into 0.11
[platform/upstream/gst-plugins-base.git] / gst-libs / gst / tag / gstxmptag.c
index 5a51f62..4f416b8 100644 (file)
@@ -1224,7 +1224,7 @@ read_one_tag (GstTagList * list, XmpTag * xmptag,
           gst_date_time_unref (datetime);
         }
 
-      } else if (tag_type == GST_TYPE_DATE) {
+      } else if (tag_type == G_TYPE_DATE) {
         GDate *date;
         gint d, m, y;
 
@@ -1274,11 +1274,12 @@ read_one_tag (GstTagList * list, XmpTag * xmptag,
  * Since: 0.10.29
  */
 GstTagList *
-gst_tag_list_from_xmp_buffer (const GstBuffer * buffer)
+gst_tag_list_from_xmp_buffer (GstBuffer * buffer)
 {
   GstTagList *list = NULL;
-  const gchar *xps, *xp1, *xp2, *xpe, *ns, *ne;
-  guint len, max_ft_len;
+  GstMapInfo info;
+  gchar *xps, *xp1, *xp2, *xpe, *ns, *ne;
+  gsize len, max_ft_len;
   gboolean in_tag;
   gchar *part, *pp;
   guint i;
@@ -1289,25 +1290,34 @@ gst_tag_list_from_xmp_buffer (const GstBuffer * buffer)
   XmpTag *context_tag = NULL;
 
   GstXmpNamespaceMap ns_map[] = {
-    {"dc", NULL},
-    {"exif", NULL},
-    {"tiff", NULL},
-    {"xap", NULL},
-    {"photoshop", NULL},
-    {"Iptc4xmpCore", NULL},
-    {"Iptc4xmpExt", NULL},
+    {"dc", NULL}
+    ,
+    {"exif", NULL}
+    ,
+    {"tiff", NULL}
+    ,
+    {"xap", NULL}
+    ,
+    {"photoshop", NULL}
+    ,
+    {"Iptc4xmpCore", NULL}
+    ,
+    {"Iptc4xmpExt", NULL}
+    ,
     {NULL, NULL}
   };
 
   xmp_tags_initialize ();
 
   g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
-  g_return_val_if_fail (GST_BUFFER_SIZE (buffer) > 0, NULL);
 
   GST_LOG ("Starting xmp parsing");
 
-  xps = (const gchar *) GST_BUFFER_DATA (buffer);
-  len = GST_BUFFER_SIZE (buffer);
+  gst_buffer_map (buffer, &info, GST_MAP_READ);
+  xps = (gchar *) info.data;
+  len = info.size;
+  g_return_val_if_fail (len > 0, NULL);
+
   xpe = &xps[len + 1];
 
   /* check header and footer */
@@ -1341,7 +1351,7 @@ gst_tag_list_from_xmp_buffer (const GstBuffer * buffer)
 
   /* no tag can be longer that the whole buffer */
   part = g_malloc (xp2 - xp1);
-  list = gst_tag_list_new ();
+  list = gst_tag_list_new_empty ();
 
   /* parse data into a list of nodes */
   /* data is between xp1..xp2 */
@@ -1572,6 +1582,8 @@ gst_tag_list_from_xmp_buffer (const GstBuffer * buffer)
   }
   g_free (part);
 
+  gst_buffer_unmap (buffer, &info);
+
   return list;
 
   /* Errors */
@@ -1621,8 +1633,8 @@ gst_value_serialize_xmp (const GValue * value)
       break;
   }
   /* put non-switchable types here */
-  if (G_VALUE_TYPE (value) == GST_TYPE_DATE) {
-    const GDate *date = gst_value_get_date (value);
+  if (G_VALUE_TYPE (value) == G_TYPE_DATE) {
+    const GDate *date = g_value_get_boxed (value);
 
     return g_strdup_printf ("%04d-%02d-%02d",
         (gint) g_date_get_year (date), (gint) g_date_get_month (date),
@@ -1789,6 +1801,8 @@ gst_tag_list_to_xmp_buffer_full (const GstTagList * list, gboolean read_only,
   XmpSerializationData serialization_data;
   GString *data;
   guint i;
+  gsize bsize;
+  gpointer bdata;
 
   serialization_data.data = g_string_sized_new (4096);
   serialization_data.schemas = schemas;
@@ -1857,10 +1871,12 @@ gst_tag_list_to_xmp_buffer_full (const GstTagList * list, gboolean read_only,
   g_string_append_printf (data, "<?xpacket end=\"%c\"?>",
       (read_only ? 'r' : 'w'));
 
+  bsize = data->len;
+  bdata = g_string_free (data, FALSE);
+
   buffer = gst_buffer_new ();
-  GST_BUFFER_SIZE (buffer) = data->len;
-  GST_BUFFER_DATA (buffer) = (guint8 *) g_string_free (data, FALSE);
-  GST_BUFFER_MALLOCDATA (buffer) = GST_BUFFER_DATA (buffer);
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (0, bdata, bsize, 0, bsize, bdata, g_free));
 
   return buffer;
 }