From 929954f595220293179b7ce22f563f1707934566 Mon Sep 17 00:00:00 2001 From: Edgard Lima Date: Thu, 1 Nov 2007 16:04:29 +0000 Subject: Some XMP stuff added. Original commit message from CVS: Some XMP stuff added. --- ext/metadata/metadataparsexmp.c | 74 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) (limited to 'ext/metadata/metadataparsexmp.c') diff --git a/ext/metadata/metadataparsexmp.c b/ext/metadata/metadataparsexmp.c index 5af6bd62..9b583002 100644 --- a/ext/metadata/metadataparsexmp.c +++ b/ext/metadata/metadataparsexmp.c @@ -42,13 +42,18 @@ */ #include "metadataparsexmp.h" +#include "metadataparseutil.h" GST_DEBUG_CATEGORY (gst_metadata_parse_xmp_debug); #define GST_CAT_DEFAULT gst_metadata_parse_xmp_debug +#define GST_TAG_XMP "xmp" + void metadataparse_xmp_tags_register (void) { + gst_tag_register (GST_TAG_XMP, GST_TAG_FLAG_META, + GST_TYPE_BUFFER, GST_TAG_XMP, "xmp metadata chunk", NULL); } #ifndef HAVE_XMP @@ -60,16 +65,83 @@ metadataparse_xmp_tag_list_add (GstTagList * taglist, GstTagMergeMode mode, GST_LOG ("XMP not defined, here I should send just one tag as whole chunk"); + metadataparse_tag_list_add_chunk (taglist, mode, GST_TAG_XMP, adapter); + +} + +gboolean +metadataparse_xmp_init (void) +{ + return TRUE; +} + +void +metadataparse_xmp_dispose (void) +{ + return; } #else /* ifndef HAVE_XMP */ +#include + +gboolean +metadataparse_xmp_init (void) +{ + return xmp_init (); +} + +void +metadataparse_xmp_dispose (void) +{ + xmp_terminate (); +} + void metadataparse_xmp_tag_list_add (GstTagList * taglist, GstTagMergeMode mode, GstAdapter * adapter) { + const guint8 *buf; + guint32 size; + XmpPtr *xmp = NULL; + XmpStringPtr xmp_str = NULL; + + if (adapter == NULL || (size = gst_adapter_available (adapter)) == 0) { + goto done; + } + + /* add chunk tag */ + metadataparse_tag_list_add_chunk (taglist, mode, GST_TAG_XMP, adapter); + + buf = gst_adapter_peek (adapter, size); + + buf += 29; /* jump "http://ns.adobe.com/xap/1.0/" */ + size -= 29; + + xmp = xmp_new (buf, size); + if (!xmp) + goto done; + + xmp_str = xmp_string_new (); + if (!xmp_str) + goto done; + + xmp_serialize (xmp, xmp_str, XMP_SERIAL_ENCODEUTF8, 2); + + + GST_LOG (xmp_string_cstr (xmp_str)); + +done: + + if (xmp_str) { + xmp_string_free (xmp_str); + } + + if (xmp) { + xmp_free (xmp); + } - GST_LOG ("XMP still not implemented"); + return; } -- cgit v1.2.1