mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 20:42:30 +00:00
Extracting more detailed info from XMP.
Original commit message from CVS: Extracting more detailed info from XMP.
This commit is contained in:
parent
4c7ff9a4ae
commit
912538f37a
2 changed files with 119 additions and 9 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2007-11-09 Edgard Lima <edgard.lima@indt.org.br>
|
||||||
|
|
||||||
|
* ext/metadata/metadataparsexmp.c:
|
||||||
|
(metadataparse_xmp_tag_list_add),
|
||||||
|
(metadataparse_xmp_iter_simple_qual),
|
||||||
|
(metadataparse_xmp_iter_simple), (metadataparse_xmp_iter_array),
|
||||||
|
(metadataparse_xmp_iter):
|
||||||
|
Extracting more detailed info from XMP.
|
||||||
|
|
||||||
2007-11-08 Stefan Kost <ensonic@users.sf.net>
|
2007-11-08 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
* gst/equalizer/demo.c:
|
* gst/equalizer/demo.c:
|
||||||
|
|
|
@ -85,6 +85,17 @@ metadataparse_xmp_dispose (void)
|
||||||
|
|
||||||
#include <xmp.h>
|
#include <xmp.h>
|
||||||
|
|
||||||
|
#define XMP_SCHEMA_NODE 0x80000000UL
|
||||||
|
|
||||||
|
void
|
||||||
|
metadataparse_xmp_iter_array (XmpPtr xmp, const char *schema, const char *path);
|
||||||
|
|
||||||
|
static void
|
||||||
|
metadataparse_xmp_iter_simple (const char *schema, const char *path,
|
||||||
|
const char *value);
|
||||||
|
|
||||||
|
static void metadataparse_xmp_iter (XmpPtr xmp, XmpIteratorPtr iter);
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
metadataparse_xmp_init (void)
|
metadataparse_xmp_init (void)
|
||||||
{
|
{
|
||||||
|
@ -103,8 +114,8 @@ metadataparse_xmp_tag_list_add (GstTagList * taglist, GstTagMergeMode mode,
|
||||||
{
|
{
|
||||||
const guint8 *buf;
|
const guint8 *buf;
|
||||||
guint32 size;
|
guint32 size;
|
||||||
XmpPtr *xmp = NULL;
|
XmpPtr xmp = NULL;
|
||||||
XmpStringPtr xmp_str = NULL;
|
XmpIteratorPtr xmp_iter = NULL;
|
||||||
|
|
||||||
if (adapter == NULL || (size = gst_adapter_available (adapter)) == 0) {
|
if (adapter == NULL || (size = gst_adapter_available (adapter)) == 0) {
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -119,18 +130,17 @@ metadataparse_xmp_tag_list_add (GstTagList * taglist, GstTagMergeMode mode,
|
||||||
if (!xmp)
|
if (!xmp)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
xmp_str = xmp_string_new ();
|
xmp_iter = xmp_iterator_new (xmp, NULL, NULL, XMP_ITER_JUSTCHILDREN);
|
||||||
if (!xmp_str)
|
|
||||||
|
if (!xmp_iter)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
xmp_serialize (xmp, xmp_str, XMP_SERIAL_ENCODEUTF8, 2);
|
metadataparse_xmp_iter (xmp, xmp_iter);
|
||||||
|
|
||||||
GST_LOG (xmp_string_cstr (xmp_str));
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
||||||
if (xmp_str) {
|
if (xmp_iter) {
|
||||||
xmp_string_free (xmp_str);
|
xmp_iterator_free (xmp_iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xmp) {
|
if (xmp) {
|
||||||
|
@ -141,4 +151,95 @@ done:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
metadataparse_xmp_iter_simple_qual (const char *schema, const char *path,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
GString *string = g_string_new (path);
|
||||||
|
gchar *ch;
|
||||||
|
|
||||||
|
ch = string->str + string->len - 3;
|
||||||
|
while (ch != string->str) {
|
||||||
|
if (*ch == '[') {
|
||||||
|
*ch = '\0';
|
||||||
|
}
|
||||||
|
--ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_LOG (" %s = %s\n", string->str, value);
|
||||||
|
g_string_free (string, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
metadataparse_xmp_iter_simple (const char *schema, const char *path,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
GST_LOG (" %s = %s\n", path, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
metadataparse_xmp_iter_array (XmpPtr xmp, const char *schema, const char *path)
|
||||||
|
{
|
||||||
|
|
||||||
|
XmpIteratorPtr xmp_iter = NULL;
|
||||||
|
|
||||||
|
xmp_iter = xmp_iterator_new (xmp, schema, path, XMP_ITER_JUSTCHILDREN);
|
||||||
|
|
||||||
|
if (xmp_iter) {
|
||||||
|
metadataparse_xmp_iter (xmp, xmp_iter);
|
||||||
|
|
||||||
|
xmp_iterator_free (xmp_iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
metadataparse_xmp_iter (XmpPtr xmp, XmpIteratorPtr iter)
|
||||||
|
{
|
||||||
|
XmpStringPtr xstr_schema = xmp_string_new ();
|
||||||
|
XmpStringPtr xstr_path = xmp_string_new ();
|
||||||
|
XmpStringPtr xstr_prop = xmp_string_new ();
|
||||||
|
uint32_t opt = 0;
|
||||||
|
|
||||||
|
while (xmp_iterator_next (iter, xstr_schema, xstr_path, xstr_prop, &opt)) {
|
||||||
|
const char *schema = xmp_string_cstr (xstr_schema);
|
||||||
|
const char *path = xmp_string_cstr (xstr_path);
|
||||||
|
const char *value = xmp_string_cstr (xstr_prop);
|
||||||
|
|
||||||
|
if (XMP_IS_NODE_SCHEMA (opt)) {
|
||||||
|
GST_LOG ("%s\n", schema);
|
||||||
|
metadataparse_xmp_iter_array (xmp, schema, path);
|
||||||
|
} else if (XMP_IS_PROP_SIMPLE (opt)) {
|
||||||
|
if (strcmp (path, "") != 0) {
|
||||||
|
if (XMP_HAS_PROP_QUALIFIERS (opt)) {
|
||||||
|
metadataparse_xmp_iter_simple_qual (schema, path, value);
|
||||||
|
} else {
|
||||||
|
metadataparse_xmp_iter_simple (schema, path, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (XMP_IS_PROP_ARRAY (opt)) {
|
||||||
|
if (XMP_IS_ARRAY_ALTTEXT (opt)) {
|
||||||
|
metadataparse_xmp_iter_array (xmp, schema, path);
|
||||||
|
xmp_iterator_skip (iter, XMP_ITER_SKIPSUBTREE);
|
||||||
|
} else {
|
||||||
|
metadataparse_xmp_iter_array (xmp, schema, path);
|
||||||
|
xmp_iterator_skip (iter, XMP_ITER_SKIPSUBTREE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xstr_prop) {
|
||||||
|
xmp_string_free (xstr_prop);
|
||||||
|
}
|
||||||
|
if (xstr_path) {
|
||||||
|
xmp_string_free (xstr_path);
|
||||||
|
}
|
||||||
|
if (xstr_schema) {
|
||||||
|
xmp_string_free (xstr_schema);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* else (ifndef HAVE_XMP) */
|
#endif /* else (ifndef HAVE_XMP) */
|
||||||
|
|
Loading…
Reference in a new issue