From 8fda870b29cb10b53fee7fc148d000f53221a6a6 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Wed, 24 Mar 2010 10:18:13 -0300 Subject: [PATCH] tag: xmp: Adds _USER_RATING mapping for xmp Adds a new mapping for _USER_RATING on xmp helper lib and also adds tests for it --- gst-libs/gst/tag/gstxmptag.c | 28 ++++++++++++++++++++++++++++ tests/check/libs/tag.c | 9 +++++++++ 2 files changed, 37 insertions(+) diff --git a/gst-libs/gst/tag/gstxmptag.c b/gst-libs/gst/tag/gstxmptag.c index 7b9c89d..ad48e8d 100644 --- a/gst-libs/gst/tag/gstxmptag.c +++ b/gst-libs/gst/tag/gstxmptag.c @@ -402,6 +402,26 @@ deserialize_exif_altitude (GstTagList * taglist, const gchar * gst_tag, *pending_tags = g_slist_delete_link (*pending_tags, entry); } +static void +deserialize_xmp_rating (GstTagList * taglist, const gchar * gst_tag, + const gchar * xmp_tag, const gchar * str, GSList ** pending_tags) +{ + guint value; + + if (sscanf (str, "%u", &value) != 1) { + GST_WARNING ("Failed to parse xmp:Rating %s", str); + return; + } + + if (value < 0 || value > 100) { + GST_WARNING ("Unsupported Rating tag %u (should be from 0 to 100), " + "ignoring", value); + return; + } + + gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, gst_tag, value, NULL); +} + /* look at this page for addtional schemas * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/XMP.html */ @@ -430,6 +450,10 @@ _init_xmp_tag_map () /* FIXME: we probably want GST_TAG_{,AUDIO_,VIDEO_}MIME_TYPE */ _xmp_tag_add_simple_mapping (GST_TAG_VIDEO_CODEC, "dc:format", NULL, NULL); + /* xap (xmp) schema */ + _xmp_tag_add_simple_mapping (GST_TAG_USER_RATING, "xmp:Rating", NULL, + deserialize_xmp_rating); + /* exif schema */ _xmp_tag_add_simple_mapping (GST_TAG_GEO_LOCATION_LATITUDE, "exif:GPSLatitude", serialize_exif_latitude, deserialize_exif_latitude); @@ -840,6 +864,10 @@ gst_value_serialize_xmp (const GValue * value) switch (G_VALUE_TYPE (value)) { case G_TYPE_STRING: return g_markup_escape_text (g_value_get_string (value), -1); + case G_TYPE_INT: + return g_strdup_printf ("%d", g_value_get_int (value)); + case G_TYPE_UINT: + return g_strdup_printf ("%u", g_value_get_uint (value)); default: break; } diff --git a/tests/check/libs/tag.c b/tests/check/libs/tag.c index 6d290bb..afed1a9 100644 --- a/tests/check/libs/tag.c +++ b/tests/check/libs/tag.c @@ -977,6 +977,15 @@ GST_START_TEST (test_xmp_tags_serialization_deserialization) g_date_free (date); do_xmp_tag_serialization_deserialization (GST_TAG_DATE, &value); g_value_unset (&value); + + g_value_init (&value, G_TYPE_UINT); + g_value_set_uint (&value, 0); + do_xmp_tag_serialization_deserialization (GST_TAG_USER_RATING, &value); + g_value_set_uint (&value, 100); + do_xmp_tag_serialization_deserialization (GST_TAG_USER_RATING, &value); + g_value_set_uint (&value, 22); + do_xmp_tag_serialization_deserialization (GST_TAG_USER_RATING, &value); + g_value_unset (&value); } GST_END_TEST; -- 2.7.4