summaryrefslogtreecommitdiffstats
path: root/ext/metadata/metadataparsexmp.c
diff options
context:
space:
mode:
authorEdgard Lima <edgard.lima@indt.org.br>2007-11-01 16:04:29 +0000
committerEdgard Lima <edgard.lima@indt.org.br>2007-11-01 16:04:29 +0000
commit929954f595220293179b7ce22f563f1707934566 (patch)
tree786173419229d5f8f8bbbb28dd201a27d75baeeb /ext/metadata/metadataparsexmp.c
parent5888898c570f0f22c930d8c66fe0949d00a90b93 (diff)
downloadgst-plugins-bad-929954f595220293179b7ce22f563f1707934566.tar.gz
gst-plugins-bad-929954f595220293179b7ce22f563f1707934566.tar.bz2
gst-plugins-bad-929954f595220293179b7ce22f563f1707934566.zip
Some XMP stuff added.
Original commit message from CVS: Some XMP stuff added.
Diffstat (limited to 'ext/metadata/metadataparsexmp.c')
-rw-r--r--ext/metadata/metadataparsexmp.c74
1 files changed, 73 insertions, 1 deletions
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 <xmp.h>
+
+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;
}